大学MOOC C语言程序设计精髓-孙程光(天津职业技术师范大学)1451090161 最新慕课完整章节测试答案
第8周—— 一堆数据来了,你准备好了吗
文章目录
二分查找算法的基本思想
1、判断题:
二分查找算法就是先将表的中间位置记录的关键字与查找关键字相比较,如果两者相等,则查找成功,否则将表分成前、后两个子表,根据比较结果,决定查找前一子表还是后一子表。
选项:
A: 正确
B: 错误
答案: 【 正确】
数组做函数参数
1、单选题:
下列说法错误的是()。
选项:
A: 简单变量做函数参数时,是将实参的值传给形参,实参和形参在内存中占用不同的存储单元,因此形参值的改变不会影响实参。
B: 数组做函数参数时,是将实参数组的首地址传给形参,形参数组和实参数组在内存中共享相同的存储单元,因此对形参数组元素值的修改也就相当于是对实参数组元素值的修改。
C: 在声明函数的二维数组形参时,可省略数组第二维的长度,但不能省略数组第一维的长度。
D: 在声明函数的一维数组形参时,通常不指定数组的大小,而用另一个形参来指定数组的大小。
答案: 【 在声明函数的二维数组形参时,可省略数组第二维的长度,但不能省略数组第一维的长度。】
数组的定义和初始化
1、单选题:
下列说法错误的是()。
选项:
A: C语言中的二维数组在内存中是按列存储的。
B: 在C语言中,数组的下标都是从0开始的。
C: 在C语言中,不带下标的数组名代表数组的首地址,即第一个元素在内存中的地址。
D: 不能使用变量定义数组的大小,但是在访问数组元素时在下标中可以使用变量或表达式。
答案: 【 C语言中的二维数组在内存中是按列存储的。】
第8周测验
1、单选题:
输入某班学生某门课的成绩(最多不超过40人,具体人数由用户键盘输入),用函数编程统计不及格人数。按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。#include <stdio.h>
#define N 40
intGetFailNum(int score[], int n);
int main()
{
int i, n, fail, score[N];
printf("How many students?");
scanf("%d", &n);
for (i=0; i<n; i++)
{
scanf("%d", _________);
}
fail = _____________;
printf("Fail students = %dn", fail);
return 0;
}
/* 函数功能:统计不及格人数 */
int GetFailNum(int score[], int n)
{
int i, count = 0;
for (i=0; i<n; i++)
{
if (_________) count++;
}
return count;
}
选项:
A: 第11行: &score[i]第13行: GetFailNum(score, n)第23行: score[i] < 60
B: 第11行: score[i]第13行: GetFailNum(score, n)第23行: score[i] <= 60
C: 第11行: score[i]第13行: GetFailNum(n,score)第23行: score[i] < 60
D: 第11行: &score[i]第13行: GetFailNum(score[i], n)第23行: score[i] >= 60
答案: 【 第11行: &score[i]第13行: GetFailNum(score, n)第23行: score[i] < 60】
2、单选题:
输入n×n阶矩阵,用函数编程计算并输出其两条对角线上的各元素之和。按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。#include <stdio.h>
#define N 10
void InputMatrix(int a[N][N], int n);
int AddDiagonal(int a[N][N], int n);
int main()
{
int a[N][N], n, sum;
printf("Input n:");
scanf("%d", &n);
InputMatrix(a, n);
sum = AddDiagonal(a, n);
printf("sum = %dn", sum);
return 0;
}
/* 函数功能: 输入n×n矩阵的元素值,存于数组a中 */
void InputMatrix(___________, int n)
{
int i, j;
printf("Input %d*%d matrix:n", n, n);
for (i=0; i<n; i++)
{
for (j=0; j<n; j++)
{
scanf("%d",___________);
}
}
}
/* 函数功能: 计算n×n矩阵中两条对角线上的元素之和 */
int AddDiagonal(int a[N][N], int n)
{
int i, j, sum = 0;
for (i=0; i<n; i++)
{
for (j=0; j<n; j++)
{
if (________________)
sum = sum + a[i][j];
}
}
return ____________;
}
选项:
A: 第17行: int a[N][N]第25行: &a[i][j]第38行: i==j || i+j==n-1第42行: sum
B: 第17行: int a[N][N]第25行: &a[i][j]第38行: i==j && i+j==n-1第42行: a[i][j]
C: 第17行: int a[N][N]第25行: a[i][j]第38行: i==j || i+j==n-1第42行: a[N][N]
D: 第17行: int a[][]第25行: &a[i][j]第38行: i==j && i+j==n-1第42行: sum
答案: 【 第17行: int a[N][N]第25行: &a[i][j]第38行: i==j || i+j==n-1第42行: sum】
3、单选题:
输入某班学生某门课的成绩(最多不超过40人),当输入为负值时,表示输入结束,用函数编程统计成绩高于平均分的学生人数。按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。#include <stdio.h>
#define N 40
int Average(int score[], int n);
int ReadScore(int score[]);
int GetAboveAver(int score[], int n);
int main()
{
int score[N], m, n;
n = ReadScore(score); /* 输入成绩,返回学生人数 */
printf("Total students are %dn", n);
m = GetAboveAver(score, n); /* 统计成绩在平均分及其上的学生人数 */
if (______________) printf("Students of above average is %dn", m);
return 0;
}
/* 函数功能:若n>0,则计算并返回n个学生成绩的平均分,否则返回-1 */
int Average(int score[], int n)
{
int i, sum = 0;
for (i=0; i<n; i++)
{
sum += score[i];
}
return ______________;
}
/* 函数功能:输入学生某门课成绩,当输入成绩为负值时,结束输入,返回学生人数 */
int ReadScore(int score[])
{
int i = -1;
do{
i++;
printf("Input score:");
scanf("%d", &score[i]);
}while (__________);
return _______;
}
/* 函数功能:若n>0,则统计并返回成绩在平均分及平均分之上的学生人数,否则返回-1 */
int GetAboveAver(int score[], int n)
{
int i, count = 0, aver;
aver = ______________; /* 计算并打印平均分 */
if (aver == -1) return -1;
printf("Average score is %dn", aver);
for (i=0; i<n; i++)
{
if (score[i] >= aver) count++;
}
return __________;
}
选项:
A: 第12行: m != -1第24行: n>0 ? sum/n : -1第35行: score[i] >= 0第36行: i第43行: Average(score, n)第50行: count
B: 第12行: m == -1第24行: n>0 ? sum/n : -1第35行: score[i] >= 0第36行: i第43行: Average(score, n)第50行: i
C: 第12行: m != -1第24行: n>0 ? -1 : sum/n第35行: score[i] >= 0第36行: i第43行: Average(n,score)第50行: count
D: 第12行: m == -1第24行: n<=0 ? sum/n : -1第35行: score[i] >= 0第36行: score第43行: Average(score, n)第50行: aver
答案: 【 第12行: m != -1第24行: n>0 ? sum/n : -1第35行: score[i] >= 0第36行: i第43行: Average(score, n)第50行: count】
4、单选题:
模拟骰子的6000次投掷,编程统计并输出骰子的6个面各自出现的概率。按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。#include _________
#include <time.h>
#include <stdio.h>
int main()
{
int face, roll, frequency[7] = {0};
srand(time (NULL));
for (roll=1; roll<=6000; roll++)
{
face = _____________;
__________________;
}
printf("%4s%17sn", "Face", "Frequency");
for (face=1; face<=6; face++)
{
printf("%4d%17dn", face, frequency[face]);
}
return 0;
}
选项:
A: 第1行: <stdlib.h>第11行: rand()%6 + 1第12行: frequency[face]++
B: 第1行: <math.h>第11行: rand()/6 + 1第12行: frequency[face]++
C: 第1行: <stdlib.h>第11行: rand()%6 + 1第12行: frequency[roll]++
D: 第1行: <math.h>第11行: rand()/6 + 1第12行: frequency[roll]++
答案: 【 第1行: <stdlib.h>第11行: rand()%6 + 1第12行: frequency[face]++】
5、单选题:
以下程序中函数Fun的功能是对b所指数组中的第m至第n个数据取累加和,按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。#include <stdio.h>
Fun(________,int m,int n)
{
int i,s=0;
for( ______;i<n;i++)
s=s+b[i];
return _______;
}
int main()
{
int x,a[]={1,2,3,4,5,6,7,8,9};
x=Fun(a,3,7);
printf("%dn",x);
return 0;
}
选项:
A: 第2行: int b[]第5行: i=m-1第7行: s
B: 第2行: int b[]第5行: i=1第7行: i
C: 第2行: int b第5行: i=0第7行: s
D: 第2行: int b[]第5行: i=n-1第7行: b[i]
答案: 【 第2行: int b[]第5行: i=m-1第7行: s】
6、单选题:
下面代码的功能是将数组a中存放的5个整型数据逆序后在屏幕上输出,具体输出内容如下:5 4 3 2 1按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。 #include <stdio.h>
void Fun(int b[],int i,int j)
{
int t;
if(i<j)
{
_________;
b[i]=b[j];
_________;
Fun(b,i+1,j-1);
}
}
int main( )
{
int i,a[5]={1,2,3,4,5};
_________;
for(i=0;i<5;i++) printf("%dt",a[i]);
printf("n");
return 0;
}
选项:
A: 第7行: t=b[i]第10行: b[j]=t第19行: Fun(a,0,4)
B: 第7行: t=b[i]第10行: b[i]=t第19行: Fun(a,0,5)
C: 第7行: t=b[j]第10行: b[j]=t第19行: Fun(a,1,4)
D: 第7行: t=b[i]第10行: b[i]=t第19行: Fun(a,1,5)
答案: 【 第7行: t=b[i]第10行: b[j]=t第19行: Fun(a,0,4)】
7、单选题:
某人有5张2分的邮票和5张3分的邮票,问使用这些邮票可以组合出多少种不同面值的邮资。(例如:1张2分邮票加1张3分邮票可以组成5分的邮资;3张2分的邮票或2张3分的邮票都可以组成同样的6分邮资。)按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。#include <stdio.h>
int main()
{
int i,j,k,s,n=0;
int a[100]={0};
for(i=0;_________;i++)
for(j=0;________;j++)
{
s=_____________;
for(k=0;a[k]!=0;k++)
if(s==a[k])
_________;
if(a[k]==0 && s>0)
{
_________;
n++;
}
}
printf("n %d kinds:",n);
for(k=0;a[k];k++)
printf("%2d,",a[k]);
return 0;
}
选项:
A: 第7行: i<=5第8行: j<=5第10行: 2*i+3*j第14行: break第18行: a[k]=s
B: 第7行: i<5第8行: j<5第10行: 2*i+3*j第14行: break第18行: s=a[k]
C: 第7行: i<=5第8行: j<=5第10行: 2i+3j第14行: continue第18行: a[k]=s
D: 第7行: i<5第8行: j<5第10行: 2*i+3*j第14行: continue第18行: s=a[k]+1
答案: 【 第7行: i<=5第8行: j<=5第10行: 2*i+3*j第14行: break第18行: a[k]=s】
8、单选题:
以下程序中函数Sort的功能是对a所指数组中的数据进行由大到小的排序,按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。#include <stdio.h>
void Sort(int a[],int n)
{
int i,j,t;
for(i=0;_________;i++)
for(________;j<n;j++)
if(a[i]<a[j])
{
t=a[i];
__________;
a[j]=t;
}
}
int main()
{
int aa[10]={1,2,30,4,5,6,7,8,9,10},i;
__________;
for(i=0;i<10;i++)
printf("%d,",aa[i]);
printf("n");
return 0;
}
选项:
A: 第5行: i<n-1第6行: j=i+1第10行: a[i]=a[j]第18行: Sort(aa,10)
B: 第5行: i<n-1第6行: j=i第10行: a[i]=a[j]第18行: Sort(aa[],10)
C: 第5行: i<n第6行: j=i+1第10行: a[j]=a[i]第18行: Sort(aa,10)
D: 第5行: i<=nj第6行: =i第10行: a[i]=a[j]第18行: Sort(10,aa)
答案: 【 第5行: i<n-1第6行: j=i+1第10行: a[i]=a[j]第18行: Sort(aa,10)】
9、单选题:
以下程序的功能是:按顺序读入10名学生4门课程的成绩,计算出每位学生的平均分并输出。程序运行后结果不正确,调试中发现有一条语句出现在程序中的位置不正确。这条语句是#include <stdio.h>
int main()
{
int n,k;
float score ,sum,ave;
sum=0.0;
for(n=1;n<=10;n++)
{
for(k=1;k<=4;k++)
{
scanf("%f",&score);
sum+=score;
}
ave=sum/4.0;
printf("NO%d:%fn",n,ave);
}
return 0;
}
选项:
A: sum=0.0;
B: sum+=score;
C: ave=sun/4.0;
D: printf("NO%d:%fn",n,ave);
答案: 【 sum=0.0;】
10、单选题:
下面代码的功能是在屏幕上输出以下内容013程序中空白处缺少的代码由下列选项给出,其中有一个不能满足题目要求,请将其找出。#include <stdio.h>
int main()
{
int b[3][3]={0,1,2,0,1,2,0,1,2},i,j,t=0;
for(i=0;i<3;i++)
for(j=i;j<=i;j++)
{
t=t+____________;
printf("%dn",t);
}
return 0;
}
选项:
A: b[j][t]
B: b[i][b[j][j]]
C: b[t][j]
D: b[i][j]
答案: 【 b[j][t]】
11、单选题:
以下程序的输出结果是void swap1(int c[])
{
int t;
t=c[0];
c[0]=c[1];
c[1]=t;
}
void swap2(int c0,int c1)
{
int t;
t=c0;
c0=c1;
c1=t;
}
int main( )
{
int a[2]={3,5},b[2]={3,5};
swap1(a);
swap2(b[0],b[1]);
printf("%d %d %d %dn",a[0],a[1],b[0],b[1]);
return 0;
}
选项:
A: 5 3 3 5
B: 5 3 5 3
C: 3 5 3 5
D: 3 5 5 3
答案: 【 5 3 3 5】
12、单选题:
以下程序中函数Reverse的功能是对数组a中的前一半元素逆序、后一半元素逆序,再将逆序后的前、后两部分数据位置交换。按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。例如:主程序中数组b中的元素为{16,22,13,41,50,62,27,18,9,10},调用函数Reverse后,数组b中元素变为{10 9 18 27 62 50 41 13 22 16}#include <stdio.h>
void Reverse(int a[],int n)
{
int i,t;
for(i=0;________;i++)
{
t=a[i];
__________;
a[n-i]=t;
}
}
int main()
{
int b[10]={16,22,13,41,50,62,27,18,9,10};
int i,s=0;
__________;
for(i=0;i<10;i++)
{
printf("%4d",b[i]);
}
return 0;
}
选项:
A: 第5行: i<=n/2第8行: a[i]=a[n-i]第17行: Reverse(b,9)
B: 第5行: i<=n第8行: a[n-i]=a[i]第17行: Reverse(b,9)
C: 第5行: i<=n/2第8行: a[n]=a[i]第17行: Reverse(9,b)
D: 第5行: i<=n/2第8行: a[i]=a[n]第17行: Reverse(b,9)
答案: 【 第5行: i<=n/2第8行: a[i]=a[n-i]第17行: Reverse(b,9)】
13、单选题:
某矩阵m存储的数据如下:1 4 72 5 83 6 9现将该矩阵最后一行的所有数据输出到屏幕,按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。#include <stdio.h>
int main()
{
int m[][3]={1,4,7,2,5,8,3,6,9};
int i,j,k=____;
for(i=0;_______;i++)
{
printf("%d",_________);
}
return 0;
}
选项:
A: 第5行: 2第7行: i<3第9行: m[k][i]
B: 第5行: 3第7行: i<=3第9行: m[k][i]
C: 第5行: 2第7行: i<2第9行: m[i][k]
D: 第5行: 3第7行: i<3第9行: m[i][k]
答案: 【 第5行: 2第7行: i<3第9行: m[k][i]】
14、单选题:
下列说法正确的是
选项:
A: 在C语言中,数组的下标都是从0开始的。
B: 在C语言中,不带下标的数组名代表数组的首地址,即第一个元素在内存中的地址。
C: 简单变量做函数参数时,是将实参的值传给形参,实参和形参在内存中占用不同的存储单元,因此形参值的改变不会影响实参。
D: 数组做函数参数时,是将实参数组的首地址传给形参,形参数组和实参数组在内存中共享相同的存储单元,因此对形参数组元素值的修改也就相当于是对实参数组元素值的修改。
E: 在声明函数的一维数组形参时,通常不指定数组的大小,而用另一个形参来指定数组的大小。
F: C语言中的二维数组在内存中是按列存储的。
G: 可以按任意的顺序对二维数组元素进行赋值,并且也可以按任意的屏幕输出顺序来输出二维数组元素。
H: 在声明函数的二维数组形参时,可省略数组第二维的长度,但不能省略数组第一维的长度。
I: 定义数组的大小、访问数组元素时在下标中都可以使用变量或表达式。
答案: 【 在C语言中,数组的下标都是从0开始的。;
在C语言中,不带下标的数组名代表数组的首地址,即第一个元素在内存中的地址。;
简单变量做函数参数时,是将实参的值传给形参,实参和形参在内存中占用不同的存储单元,因此形参值的改变不会影响实参。;
数组做函数参数时,是将实参数组的首地址传给形参,形参数组和实参数组在内存中共享相同的存储单元,因此对形参数组元素值的修改也就相当于是对实参数组元素值的修改。;
在声明函数的一维数组形参时,通常不指定数组的大小,而用另一个形参来指定数组的大小。】
15、单选题:
用函数编程计算并输出如图所示的杨辉三角形。按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。

#include<stdio.h>
#define N 20
void CaculateYH(int a[][N], int n);
void PrintYH(int a[][N], int n);
int main()
{
int a[N][N] = {0}, n;
printf("Input n(n<20):");
scanf("%d", &n);
CaculateYH(a, n);
PrintYH(a, n);
return 0;
}
/* 函数功能:计算杨辉三角形前n行元素的值 */
void CaculateYH(__________, int n)
{
int i, j;
for (i=0; i<n; i++)
{
a[i][0] = 1;
___________;
}
for (_______; i<n; i++)
{
for (j=1; j<=i-1; j++)
{
a[i][j] = __________________;
}
}
}
/* 函数功能:输出杨辉三角形前n行元素的值 */
void PrintYH(int a[][N], int n)
{
int i, j;
for (i=0; i<n; i++)
{
for (j=0; _________; j++)
{
printf("%4d", a[i][j]);
}
printf("n");
}
}
选项:
A: 第16行: int a[][N]第22行: a[i][i] = 1第24行: i=2第28行: a[i-1][j-1] + a[i-1][j]第38行: j<=i
B: 第16行: int a[][]第22行: a[i][i] = 1第24行: i=1第28行: a[i-1][j-1] + a[i-1][j]第38行: j<=i
C: 第16行: int a[][N]第22行: a[0][i] = 1第24行: i=2第28行: a[i-1][j-1] + a[i-1][j]第38行: j<i
D: 第16行: int a[N][]第22行: a[i][i] = 1第24行: i=2第28行: a[j-1][i-1] + a[j][i-1]第38行: j<=i
答案: 【 第16行: int a[][N]第22行: a[i][i] = 1第24行: i=2第28行: a[i-1][j-1] + a[i-1][j]第38行: j<=i】
16、单选题:
假设有40个学生被邀请来给餐厅的饮食和服务质量打分,分数划分为1~10这10个等级(1表示最低分,10表示最高分),编程统计并按如下格式输出餐饮服务质量调查结果。按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。

#include <stdio.h>
#define M 40
#define N 11
int main()
{
int i, j, grade, feedback[M], count[N] = {0};
printf("Input the feedbacks of 40 students:n");
for (i=0; i<M; i++)
{
scanf("%d", &feedback[i]);
}
for (i=0; i<M; i++)
{
_____________;
}
printf("FeedbacktCounttHistogramn");
for (_________; grade<=N-1; grade++)
{
printf("%8dt%5dt", grade, count[grade]);
for (j=0; ___________; j++)
{
printf("%c",'*');
}
printf("n");
}
return 0;
}
选项:
A: 第16行: count[feedback[i]]++第21行: grade=1第24行: j<count[grade]
B: 第16行: feedback[i]++第21行: grade=1第24行: j<N-1
C: 第16行: count[i]++第21行: grade=0第24行: j<N-1
D: 第16行: count[feedback[i]]++第21行: grade=0第24行: j<grade
答案: 【 第16行: count[feedback[i]]++第21行: grade=1第24行: j<count[grade]】
线性查找与二分查找
1、判断题:
线性查找算法不要求数据表是已排好序的,而二分查找算法要求数据表是已排好序的。
选项:
A: 正确
B: 错误
答案: 【 正确】
练兵区——单选题——不计入总分
1、单选题:
假设有40个学生被邀请来给餐厅的饮食和服务质量打分,分数划分为1~10这10个等级(1表示最低分,10表示最高分),编程统计并按如下格式输出餐饮服务质量调查结果。按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。

#include <stdio.h>选项:
#define M 40
#define N 11
int main()
{
int i, j, grade, feedback[M], count[N] = {0};
printf("Input the feedbacks of 40 students:n");
for (i=0; i<M; i++)
{
scanf("%d", &feedback[i]);
}
for (i=0; i<M; i++)
{
_____________;
}
printf("FeedbacktCounttHistogramn");
for (_________; grade<=N-1; grade++)
{
printf("%8dt%5dt", grade, count[grade]);
for (j=0; ___________; j++)
{
printf("%c",'*');
}
printf("n");
}
return 0;
}
A: 第16行: count[feedback[i]]++第21行: grade=1第24行: j<count[grade]
B: 第16行: feedback[i]++第21行: grade=1第24行: j<N-1
C: 第16行: count[i]++第21行: grade=0第24行: j<N-1
D: 第16行: count[feedback[i]]++第21行: grade=0第24行: j<grade
答案: 【 第16行: count[feedback[i]]++第21行: grade=1第24行: j<count[grade]】
2、单选题:
输入某班学生某门课的成绩(最多不超过40人,具体人数由用户键盘输入),用函数编程统计不及格人数。按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。#include <stdio.h>
#define N 40
intGetFailNum(int score[], int n);
int main()
{
int i, n, fail, score[N];
printf("How many students?");
scanf("%d", &n);
for (i=0; i<n; i++)
{
scanf("%d", _________);
}
fail = _____________;
printf("Fail students = %dn", fail);
return 0;
}
/* 函数功能:统计不及格人数 */
int GetFailNum(int score[], int n)
{
int i, count = 0;
for (i=0; i<n; i++)
{
if (_________) count++;
}
return count;
}
选项:
A: 第11行: &score[i]第13行: GetFailNum(score, n)第23行: score[i] < 60
B: 第11行: score[i]第13行: GetFailNum(score, n)第23行: score[i] <= 60
C: 第11行: score[i]第13行: GetFailNum(n,score)第23行: score[i] < 60
D: 第11行: &score[i]第13行: GetFailNum(score[i], n)第23行: score[i] >= 60
答案: 【 第11行: &score[i]第13行: GetFailNum(score, n)第23行: score[i] < 60】
3、单选题:
模拟骰子的6000次投掷,编程统计并输出骰子的6个面各自出现的概率。按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。#include _________
#include <time.h>
#include <stdio.h>
int main()
{
int face, roll, frequency[7] = {0};
srand(time (NULL));
for (roll=1; roll<=6000; roll++)
{
face = _____________;
__________________;
}
printf("%4s%17sn", "Face", "Frequency");
for (face=1; face<=6; face++)
{
printf("%4d%17dn", face, frequency[face]);
}
return 0;
}
选项:
A: 第1行: <stdlib.h>第11行: rand()%6 + 1第12行: frequency[face]++
B: 第1行: <math.h>第11行: rand()/6 + 1第12行: frequency[face]++
C: 第1行: <stdlib.h>第11行: rand()%6 + 1第12行: frequency[roll]++
D: 第1行: <math.h>第11行: rand()/6 + 1第12行: frequency[roll]++
答案: 【 第1行: <stdlib.h>第11行: rand()%6 + 1第12行: frequency[face]++】
4、单选题:
以下程序中函数Fun的功能是对b所指数组中的第m至第n个数据取累加和,按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。#include <stdio.h>
Fun(________,int m,int n)
{
int i,s=0;
for( ______;i<=n;i++)
s=s+b[i];
return _______;
}
int main()
{
int x,a[]={1,2,3,4,5,6,7,8,9};
x=Fun(a,3,7);
printf("%dn",x);
return 0;
}
选项:
A: 第2行: int b[]第5行: i=m第7行: s
B: 第2行: int b[]第5行: i=1第7行: i
C: 第2行: int b第5行: i=0第7行: s
D: 第2行: int b[]第5行: i=n-1第7行: b[i]
答案: 【 第2行: int b[]第5行: i=m第7行: s】
5、单选题:
以下程序中函数Sort的功能是对a所指数组中的数据进行由大到小的排序,按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。#include <stdio.h>
void Sort(int a[],int n)
{
int i,j,t;
for(i=0;_________;i++)
for(________;j<n;j++)
if(a[i]<a[j])
{
t=a[i];
__________;
a[j]=t;
}
}
int main()
{
int aa[10]={1,2,30,4,5,6,7,8,9,10},i;
__________;
for(i=0;i<10;i++)
printf("%d,",aa[i]);
printf("n");
return 0;
选项:
A: 第5行: i<n-1第6行: j=i+1第10行: a[i]=a[j]第18行: Sort(aa,10)
B: 第5行: i<n-1第6行: j=i第10行: a[i]=a[j]第18行: Sort(aa[],10)
C: 第5行: i<n第6行: j=i+1第10行: a[j]=a[i]第18行: Sort(aa,10)
D: 第5行: i<=nj第6行: =i第10行: a[i]=a[j]第18行: Sort(10,aa)
答案: 【 第5行: i<n-1第6行: j=i+1第10行: a[i]=a[j]第18行: Sort(aa,10)】
6、单选题:
以下程序的功能是:按顺序读入10名学生4门课程的成绩,计算出每位学生的平均分并输出。程序运行后结果不正确,调试中发现有一条语句出现在程序中的位置不正确。这条语句是#include <stdio.h>
int main()
{
int n,k;
float score ,sum,ave;
sum=0.0;
for(n=1;n<=10;n++)
{
for(k=1;k<=4;k++)
{
scanf("%f",&score);
sum+=score;
}
ave=sum/4.0;
printf("NO%d:%fn",n,ave);
}
return 0;
选项:
A: sum=0.0;
B: sum+=score;
C: ave=sun/4.0;
D: printf("NO%d:%fn",n,ave);
答案: 【 sum=0.0;】
7、单选题:
以下程序中函数Reverse的功能是对数组a中的前一半元素逆序、后一半元素逆序,再将逆序后的前、后两部分数据位置交换。按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。例如:主程序中数组b中的元素为{16,22,13,41,50,62,27,18,9,10},调用函数Reverse后,数组b中元素变为{10 9 18 27 62 50 41 13 22 16}#include <stdio.h>
void Reverse(int a[],int n)
{
int i,t;
for(i=0;________;i++)
{
t=a[i];
__________;
a[n-i]=t;
}
}
int main()
{
int b[10]={16,22,13,41,50,62,27,18,9,10};
int i,s=0;
__________;
for(i=0;i<10;i++)
{
printf("%4d",b[i]);
}
return 0;
}
选项:
A: 第5行: i<=n/2第8行: a[i]=a[n-i]第17行: Reverse(b,9)
B: 第5行: i<=n第8行: a[n-i]=a[i]第17行: Reverse(b,9)
C: 第5行: i<=n/2第8行: a[n]=a[i]第17行: Reverse(9,b)
D: 第5行: i<=n/2第8行: a[i]=a[n]第17行: Reverse(b,9)
答案: 【 第5行: i<=n/2第8行: a[i]=a[n-i]第17行: Reverse(b,9)】
8、单选题:
输入n×n阶矩阵,用函数编程计算并输出其两条对角线上的各元素之和。按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。#include <stdio.h>
#define N 10
void InputMatrix(int a[N][N], int n);
int AddDiagonal(int a[N][N], int n);
int main()
{
int a[N][N], n, sum;
printf("Input n:");
scanf("%d", &n);
InputMatrix(a, n);
sum = AddDiagonal(a, n);
printf("sum = %dn", sum);
return 0;
}
/* 函数功能: 输入n×n矩阵的元素值,存于数组a中 */
void InputMatrix(___________, int n)
{
int i, j;
printf("Input %d*%d matrix:n", n, n);
for (i=0; i<n; i++)
{
for (j=0; j<n; j++)
{
scanf("%d",___________);
}
}
}
/* 函数功能: 计算n×n矩阵中两条对角线上的元素之和 */
int AddDiagonal(int a[N][N], int n)
{
int i, j, sum = 0;
for (i=0; i<n; i++)
{
for (j=0; j<n; j++)
{
if (________________)
sum = sum + a[i][j];
}
}
return ____________;
}
选项:
A: 第17行: int a[N][N]第25行: &a[i][j]第38行: i==j || i+j==n-1第42行: sum
B: 第17行: int a[N][N]第25行: &a[i][j]第38行: i==j && i+j==n-1第42行: a[i][j]
C: 第17行: int a[N][N]第25行: a[i][j]第38行: i==j || i+j==n-1第42行: a[N][N]
D: 第17行: int a[][]第25行: &a[i][j]第38行: i==j && i+j==n-1第42行: sum
答案: 【 第17行: int a[N][N]第25行: &a[i][j]第38行: i==j || i+j==n-1第42行: sum】
9、单选题:
下面代码的功能是将数组a中存放的5个整型数据逆序后在屏幕上输出,具体输出内容如下:5 4 3 2 1按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。#include <stdio.h>
void Fun(int b[],int i,int j)
{
int t;
if(i<j)
{
_________;
b[i]=b[j];
_________;
Fun(b,i+1,j-1);
}
}
int main( )
{
int i,a[5]={1,2,3,4,5};
_________;
for(i=0;i<5;i++) printf("%dt",a[i]);
printf("n");
return 0;
}
选项:
A: 第7行: t=b[i]第10行: b[j]=t第19行: Fun(a,0,4)
B: 第7行: t=b[i]第10行: b[i]=t第19行: Fun(a,0,5)
C: 第7行: t=b[j]第10行: b[j]=t第19行: Fun(a,1,4)
D: 第7行: t=b[i]第10行: b[i]=t第19行: Fun(a,1,5)
答案: 【 第7行: t=b[i]第10行: b[j]=t第19行: Fun(a,0,4)】
10、单选题:
某人有5张2分的邮票和5张3分的邮票,问使用这些邮票可以组合出多少种不同面值的邮资。(例如:1张2分邮票加1张3分邮票可以组成5分的邮资;3张2分的邮票或2张3分的邮票都可以组成同样的6分邮资。)按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。#include <stdio.h>
int main()
{
int i,j,k,s,n=0;
int a[100]={0};
for(i=0;_________;i++)
for(j=0;________;j++)
{
s=_____________;
for(for(k=0;a[k]!=0;k++))
if(s==a[k])
_________;
if(a[k]==0&&s>0)
{
_________;
n++;
}
}
printf("n %d kinds:",n);
for(k=0;a[k];k++)
printf("%2d,",a[k]);
return 0;
选项:
A: 第7行: i<=5第8行: j<=5第10行: 2*i+3*j第14行: break第18行: a[k]=s
B: 第7行: i<5第8行: j<5第10行: 2*i+3*j第14行: break第18行: s=a[k]
C: 第7行: i<=5第8行: j<=5第10行: 2i+3j第14行: continue第18行: a[k]=s
D: 第7行: i<5第8行: j<5第10行: 2*i+3*j第14行: continue第18行: s=a[k]+1
答案: 【 第7行: i<=5第8行: j<=5第10行: 2*i+3*j第14行: break第18行: a[k]=s】
11、单选题:
某矩阵m存储的数据如下:1 4 72 5 83 6 9现将该矩阵最后一行的所有数据输出到屏幕,按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。#include <stdio.h>
int main()
{
int m[][3]={1,4,7,2,5,8,3,6,9};
int i,j,k=____;
for(i=0;_______;i++)
{
printf("%d",_________);
}
return 0;
}
选项:
A: 第5行: 2第7行: i<3第9行: m[k][i]
B: 第5行: 3第7行: i<=3第9行: m[k][i]
C: 第5行: 2第7行: i<2第9行: m[i][k]
D: 第5行: 3第7行: i<3第9行: m[i][k]
答案: 【 第5行: 2第7行: i<3第9行: m[k][i]】
12、单选题:
下列说法正确的是
选项:
A: 在C语言中,数组的下标都是从0开始的。
B: 在C语言中,不带下标的数组名代表数组的首地址,即第一个元素在内存中的地址。
C: 简单变量做函数参数时,是将实参的值传给形参,实参和形参在内存中占用不同的存储单元,因此形参值的改变不会影响实参。
D: 数组做函数参数时,是将实参数组的首地址传给形参,形参数组和实参数组在内存中共享相同的存储单元,因此对形参数组元素值的修改也就相当于是对实参数组元素值的修改。
E: 在声明函数的一维数组形参时,通常不指定数组的大小,而用另一个形参来指定数组的大小。
F: C语言中的二维数组在内存中是按列存储的。
G: 对于一个二维数组,可以按任意的顺序对其进行赋值,输出二维数组元素也可以按任意的顺序来输出。
H: 在声明函数的二维数组形参时,可省略数组第二维的长度,但不能省略数组第一维的长度。
I: 定义数组的大小、访问数组元素时在下标中都可以使用变量或表达式。
答案: 【 在C语言中,数组的下标都是从0开始的。;
在C语言中,不带下标的数组名代表数组的首地址,即第一个元素在内存中的地址。;
简单变量做函数参数时,是将实参的值传给形参,实参和形参在内存中占用不同的存储单元,因此形参值的改变不会影响实参。;
数组做函数参数时,是将实参数组的首地址传给形参,形参数组和实参数组在内存中共享相同的存储单元,因此对形参数组元素值的修改也就相当于是对实参数组元素值的修改。;
在声明函数的一维数组形参时,通常不指定数组的大小,而用另一个形参来指定数组的大小。】
13、单选题:
用函数编程计算并输出如图所示的杨辉三角形。按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。

#include<stdio.h>
#define N 20
void CaculateYH(int a[][N], int n);
void PrintYH(int a[][N], int n);
int main()
{
int a[N][N] = {0}, n;
printf("Input n(n<20):");
scanf("%d", &n);
CaculateYH(a, n);
PrintYH(a, n);
return 0;
}
/* 函数功能:计算杨辉三角形前n行元素的值 */
void CaculateYH(__________, int n)
{
int i, j;
for (i=0; i<n; i++)
{
a[i][0] = 1;
___________;
}
for (_______; i<n; i++)
{
for (j=1; j<=i-1; j++)
{
a[i][j] = __________________;
}
}
}
/* 函数功能:输出杨辉三角形前n行元素的值 */
void PrintYH(int a[][N], int n)
{
int i, j;
for (i=0; i<n; i++)
{
for (j=0; _________; j++)
{
printf("%4d", a[i][j]);
}
printf("n");
}
}选项:
A: 第16行: int a[][N]第22行: a[i][i] = 1第24行: i=2第28行: a[i-1][j-1] + a[i-1][j]第38行: j<=i
B: 第16行: int a[][]第22行: a[i][i] = 1第24行: i=1第28行: a[i-1][j-1] + a[i-1][j]第38行: j<=i
C: 第16行: int a[][N]第22行: a[0][i] = 1第24行: i=2第28行: a[i-1][j-1] + a[i-1][j]第38行: j<i
D: 第16行: int a[N][]第22行: a[i][i] = 1第24行: i=2第28行: a[j-1][i-1] + a[j][i-1]第38行: j<=i
答案: 【 第16行: int a[][N]第22行: a[i][i] = 1第24行: i=2第28行: a[i-1][j-1] + a[i-1][j]第38行: j<=i】
14、单选题:
输入某班学生某门课的成绩(最多不超过40人),当输入为负值时,表示输入结束,用函数编程统计成绩高于平均分的学生人数。按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。#include <stdio.h>
#define N 40
int Average(int score[], int n);
int ReadScore(int score[]);
int GetAboveAver(int score[], int n);
int main()
{
int score[N], m, n;
n = ReadScore(score); /* 输入成绩,返回学生人数 */
printf("Total students are %dn", n);
m = GetAboveAver(score, n); /* 统计成绩在平均分及其上的学生人数 */
if (______________) printf("Students of above average is %dn", m);
return 0;
}
/* 函数功能:若n>0,则计算并返回n个学生成绩的平均分,否则返回-1 */
int Average(int score[], int n)
{
int i, sum = 0;
for (i=0; i<n; i++)
{
sum += score[i];
}
return ______________;
}
/* 函数功能:输入学生某门课成绩,当输入成绩为负值时,结束输入,返回学生人数 */
int ReadScore(int score[])
{
int i = -1;
do{
i++;
printf("Input score:");
scanf("%d", &score[i]);
}while (__________);
return _______;
}
/* 函数功能:若n>0,则统计并返回成绩在平均分及平均分之上的学生人数,否则返回-1 */
int GetAboveAver(int score[], int n)
{
int i, count = 0, aver;
aver = ______________; /* 计算并打印平均分 */
if (aver == -1) return -1;
printf("Average score is %dn", aver);
for (i=0; i<n; i++)
{
if (score[i] >= aver) count++;
}
return __________;
}
选项:
A: 第12行: m != -1第24行: n>0 ? sum/n : -1第35行: score[i] >= 0第36行: i第43行: Average(score, n)第50行: count
B: 第12行: m == -1第24行: n>0 ? sum/n : -1第35行: score[i] >= 0第36行: i第43行: Average(score, n)第50行: i
C: 第12行: m != -1第24行: n>0 ? -1 : sum/n第35行: score[i] >= 0第36行: i第43行: Average(n,score)第50行: count
D: 第12行: m == -1第24行: n<=0 ? sum/n : -1第35行: score[i] >= 0第36行: score第43行: Average(score, n)第50行: aver
答案: 【 第12行: m != -1第24行: n>0 ? sum/n : -1第35行: score[i] >= 0第36行: i第43行: Average(score, n)第50行: count】
15、单选题:
下面代码的功能是在屏幕上输出以下内容013程序中空白处缺少的代码由下列选项给出,其中有一个不能满足题目要求,请将其找出。#include <stdio.h>
int main()
{
int b[3][3]={0,1,2,0,1,2,0,1,2},i,j,t=0;
for(i=0;i<3;i++)
for(j=i;j<=i;j++)
{
t=t+____________;
printf("%dn",t);
}
return 0;
}
选项:
A: b[j][t]
B: b[i][b[j][j]]
C: b[t][j]
D: b[i][j]
答案: 【 b[j][t]】
16、单选题:
以下程序的输出结果是void swap1(int c[])
{
int t;
t=c[0];
c[0]=c[1];
c[1]=t;
}
void swap2(int c0,int c1)
{
int t;
t=c0;
c0=c1;
c1=t;
}
int main( )
{
int a[2]={3,5},b[2]={3,5};
swap1(a);
swap2(b[0],b[1]);
printf("%d %d %d %dn",a[0],a[1],b[0],b[1]);
return 0;
}
选项:
A: 5 3 3 5
B: 5 3 5 3
C: 3 5 3 5
D: 3 5 5 3
答案: 【 5 3 3 5】
计算最大值
1、判断题:
在计算一组数据的最大值之前,通常假设这组数据中的第一个数为最大,即用这组数据中的第一个数为存放最大值的变量初始化。
选项:
A: 正确
B: 错误
答案: 【 正确】
第9周——指针C语言世界中所向披靡的“金箍棒”
函数指针的定义和初始化
1、判断题:
int (*f)(int, int);这条语句定义的是一个函数指针f,它可以指向一个有两个整型形参和整型返回值的函数。假设int Fun(int a, int b);那么必须用f=Fun();对f进行初始化,让其指向函数Fun()。
选项:
A: 正确
B: 错误
答案: 【 错误】
指针变量做函数参数与普通变量做函数参数的区别
1、判断题:
普通变量做函数参数,是将实参值的一个副本传给形参,而指针变量做函数参数是将变量的地址值传给形参,因此你想要修改哪个变量的值,将这个变量的地址传给指针形参就好了。
选项:
A: 正确
B: 错误
答案: 【 正确】
指针的概念
1、单选题:
下列说法错误的是()。
选项:
A: 指针变量占用的内存单元字节数就是它所指向的变量所占用的内存单元字节数。
B: 指针变量指向的数据的类型,称为指针的基类型。指针变量只能指向同一基类型的变量。
C: 指针变量使用之前必须初始化,如果你不知道该用什么值对其进行初始化的话,那么就先用NULL对其进行初始化。使用未初始化的结果将是无法预知的。
D: 通过间接寻址运算符引用指针变量指向的变量的值,称为指针的解引用。
答案: 【 指针变量占用的内存单元字节数就是它所指向的变量所占用的内存单元字节数。】
第9周测验
1、单选题:
下面程序的功能是输入某年某月某日,计算并输出它是这一年的第几天。程序的运行结果如下:Please enter year, month, day:2014,12,29↙yearDay = 363按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。#include <stdio.h>
int DayofYear(int year, int month, int day);
int dayTab[2][13] = {{0,31,28,31,30,31,30,31,31,30,31,30,31},{0,31,29,31,30,31,30,31,31,30,31,30,31}};
int main()
{
int year, month, day, yearDay;
printf("Please enter year, month, day:");
scanf("%d,%d,%d", &year, &month, &day);
yearDay = DayofYear(year, month, day);
printf("yearDay = %dn", yearDay);
return 0;
}
/* 函数功能:对给定的某年某月某日,计算并返回它是这一年的第几天 */
int DayofYear(int year, int month, int day)
{
int i, leap;
leap = ________________________; /* 若year为闰年,即leap值为1,则用第1行元素dayTab[1][i]计算;
否则leap值为0,用第0行dayTab[0][i]计算 */
for (i=1; _______; i++)
{
day = ________________;
}
return day; /* 返回计算出的day的值 */
}
选项:
A: 第18行: ((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0)第20: i<month第22行: day + dayTab[leap][i]
B: 第18行: ((year % 4 == 0) || (year % 100 != 0)) || (year % 400 == 0)第20: i<month第22行: day + dayTab[i][leap]
C: 第18行: ((year % 4 == 0) && (year % 100 != 0)) && (year % 400 == 0)第20: i<12第22行: day + dayTab[leap][i]
D: 第18行: ((year % 4 != 0) && (year % 100 != 0)) || (year % 400 != 0)第20: i<=month第22行: day + dayTab[i][leap]
答案: 【 第18行: ((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0)第20: i<month第22行: day + dayTab[leap][i]】
2、单选题:
下面程序的功能是从键盘输入10个整数,用函数编程实现计算其最大值和最小值,并互换它们所在数组中的位置。程序运行结果如下:Input n(n<=10):10↙Input 10 Numbers:1 4 3 0 –2 6 7 2 9 -1 ↙Exchange results: 1 4 3 0 9 6 7 2 -2 -1按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。#include <stdio.h>
void ReadData(int a[], int n);
void PrintData(int a[], int n);
void MaxMinExchang(int a[], int n);
void Swap(int *x, int *y);
int main()
{
int a[10], n;
printf("Input n(n<=10):");
scanf("%d", &n);
printf("Input %d numbers:", n);
ReadData(a, n);
MaxMinExchang(a, n);
printf("Exchange results:");
PrintData(a, n);
return 0;
}
/* 函数功能:输入数组a的n个元素值 */
void ReadData(int a[], int n)
{
int i;
for (i=0; i<n; i++)
{
scanf("%d", &a[i]);
}
}
/* 函数功能:输出数组a的n个元素值 */
void PrintData(int a[], int n)
{
int i;
for (i=0; i<n; i++)
{
printf("%5d", a[i]);
}
printf("n");
}
/* 函数功能:将数组a中的最大数与最小数位置互换 */
void MaxMinExchang(________, int n)
{
int maxValue = a[0], minValue = a[0], maxPos = 0, minPos = 0;
int i;
for (i=1; i<n; i++)
{
if (a[i] > maxValue)
{
maxValue = _______;
maxPos = ____;
}
if (a[i] < minValue)
{
minValue = a[i];
minPos = i;
}
}
Swap(________________);
}
/* 函数功能:两整数值互换 */
void Swap(int *x, int *y)
{
int ________;
temp = *x;
_________;
*y = temp;
}
选项:
A: 第41行: int a[]第49行: a[i]第50行: i第58行: &a[maxPos], &a[minPos]第64行: temp第66行: *x = *y
B: 第41行: int a第49行: a[i]第50行: i第58行: a[maxPos], a[minPos]第64行: temp第66行: *x = *y
C: 第41行: int a[]第49行: a[0]第50行: 0第58行: &a[maxPos], &a[minPos]第64行: *temp第66行: x = y
D: 第41行: int a[]第49行: a[n-1]第50行: n-1第58行: *a[maxPos], *a[minPos]第64行: &temp第66行: x = y
答案: 【 第41行: int a[]第49行: a[i]第50行: i第58行: &a[maxPos], &a[minPos]第64行: temp第66行: *x = *y】
3、单选题:
下面程序中子函数MonthDay()的功能是将某年的第几天转换为某月某日。程序的运行结果如下:Please enter year, yearDay:2014,100↙month = 4, day = 10按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。#include <stdio.h>
void MonthDay(int year, int yearDay, int *pMonth, int *pDay);
int dayTab[2][13] = {{0,31,28,31,30,31,30,31,31,30,31,30,31},{0,31,29,31,30,31,30,31,31,30,31,30,31}};
int main()
{
int year, month, day, yearDay;
printf("Please enter year, yearDay:");
scanf("%d,%d", &year, &yearDay);
_________________;
printf("month = %d, day = %dn", month, day);
return 0;
}
/* 函数功能:对给定的某一年的第几天,计算它是这一年的第几月第几日 */
void MonthDay(int year, int yearDay, int *pMonth, int *pDay)
{
int i, leap;
leap = _________________________;
for (i=1; yearDay>dayTab[leap][i]; i++)
{
yearDay = ______________________;
}
______________; /* 将计算出的月份值赋值给pMonth所指向的变量 */
*pDay = yearDay; /* 将计算出的日号赋值给pDay所指向的变量 */
}
选项:
A: 第10行: MonthDay(year, yearDay, &month, &day)第19行: ((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0)第23行: yearDay - dayTab[leap][i]第25行: *pMonth = i
B: 第10行: MonthDay(year, yearDay, month, day)第19行: ((year % 4 == 0) || (year % 100 != 0)) || (year % 400 == 0)第23行: yearDay - dayTab[leap][i]第25行: pMonth = i
C: 第10行: MonthDay(&year, &yearDay, &month, &day)第19行: ((year % 4 == 0) || (year % 100 != 0)) && (year % 400 != 0)第23行: yearDay + dayTab[i][leap]第25行: *pMonth = i
D: 第10行: MonthDay(&year, &yearDay, month, day)第19行: ((year % 4 == 0) && (year % 100 == 0)) || (year % 400 == 0)第23行: yearDay - dayTab[i][leap]第25行: pMonth = i
答案: 【 第10行: MonthDay(year, yearDay, &month, &day)第19行: ((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0)第23行: yearDay - dayTab[leap][i]第25行: *pMonth = i】
4、单选题:
子函数Fun的功能是比较形参变量x和y所指的内存单元中的数据大小,将两者中的最小值返回。以下程序执行后输出结果是7,8,7。按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。#include <stdio.h>
int Fun(int *x,int *y)
{
if(___________) /*如果形参变量x所指的内存单元中的数据小于y所指的内存单元中的数据,则返回该最小值*/
return *x;
else
return *y;
}
int main()
{
int a=7,b=8,_______,r;
p=&a;
q=&b;
r=____________; /*调用子函数Fun,返回变量a和b中的最小值,将其存放到变量r中。*/
printf("%d,%d,%dn",*p,*q,r);
return 0;
}
选项:
A: 第4行: *x<*y第12行: *p,*q第15行: Fun(p,q)
B: 第4行: x<y第12行: *p,*q第15行: Fun(*p,*q)
C: 第4行: *x<*y第12行: p,q第15行: Fun(&p,&q)
D: 第4行: x<y第12行: *p,*q第15行: Fun(a,b)
答案: 【 第4行: *x<*y第12行: *p,*q第15行: Fun(p,q)】
5、单选题:
下列函数的功能为________。void Exchange(int *p1, int *p2){ int p; p = *p1; *p1 = *p2; *p2 = p;}
选项:
A: 交换*p1和*p2的值
B: 正确,但无法改变*p1和*p2的值
C: 交换*p1和*p2的地址
D: 可能造成系统故障
答案: 【 交换*p1和*p2的值】
6、单选题:
声明语句int (*p)();的含义是________。
选项:
A: p是一个指向函数的指针,该函数的返回值是一个整型
B: p是一个指向一维数组的指针变量
C: p是指针变量,指向一个整型数据
D: 以上都不对
答案: 【 p是一个指向函数的指针,该函数的返回值是一个整型】
7、单选题:
声明语句int *f();中f的含义是________。
选项:
A: 一个返回值为指针类型的函数名
B: 一个用于指向函数的指针变量
C: 一个用于指向一维数组的行指针
D: 一个用于指向整型数据的指针变量
答案: 【 一个返回值为指针类型的函数名】
8、单选题:
下面程序的功能是用函数编程实现两个数组中对应元素值的交换。按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。程序的运行结果示例:Input array size(n<=10):5↙Input array a:1 2 3 4 5↙Input array b:6 7 8 9 10↙Output array a: 6 7 8 9 10Output array b: 1 2 3 4 5#include <stdio.h>
#define N 10
void ReadData(int a[], int n);
void PrintData(int a[], int n);
void Swap(int *x, int *y);
int main()
{
int a[N], b[N], i, n;
printf("Input array size(n<=10):");
scanf("%d", &n);
printf("Input array a:");
ReadData(a, n);
printf("Input array b:");
ReadData(b, n);
for (i=0; i<n; i++)
{
Swap(____________);
}
printf("Output array a:");
PrintData(a, n);
printf("Output array b:");
PrintData(b, n);
return 0;
}
/* 函数功能:输入数组a的n个元素值 */
void ReadData(int a[], int n)
{
int i;
for (i=0; i<n; i++)
{
scanf("%d", &a[i]);
}
}
/* 函数功能:输出数组a的n个元素值 */
void PrintData(int a[], int n)
{
int i;
for (i=0; i<n; i++)
{
printf("%5d", a[i]);
}
printf("n");
}
/* 函数功能:两整数值互换 */
void Swap(int *x, int *y)
{
int temp;
____________;
____________;
____________;
}
选项:
A: 第17行:&a[i], &b[i]第52行:temp = *x第53行:*x = *y第54行:*y = temp
B: 第17行:a[i], b[i]第52行:temp = *x第53行:*x = *y第54行:*y = temp
C: 第17行:&a[i], &b[i]第52行:*temp = *x第53行:*x = *y第54行:*y = *temp
D: 第17行:a[i], b[i]第52行:temp = x第53行:x = y第54行:y = temp
答案: 【 第17行:&a[i], &b[i]第52行:temp = *x第53行:*x = *y第54行:*y = temp】
9、单选题:
给出下面程序的运行结果。#include <stdio.h>
int main(void)
{
static int x[] = {1,2,3};
int s = 1, i, *p = x;
for (i=0; i<3; i++)
{
s*= *(p + i);
}
printf("%dn", s);
return 0;
}
选项:
A: 6
B: 3
C: 4
D: 5
答案: 【 6】
10、单选题:
从键盘任意输入10个整数,计算并输出最大值和最小值及其它们在数组中的下标位置。按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。程序运行结果示例1:Input 10 numbers:1 2 3 4 5 6 7 8 9 10↙max=10,pos=9min=1,pos=0程序运行结果示例2:Input 10 numbers:2 4 5 6 8 10 1 3 5 7 9↙max=10,pos=5min=1,pos=6#include <stdio.h>
int FindMax(int a[], int n, int *pMaxPos);
int FindMin(int a[], int n, int *pMinPos);
int main()
{
int a[10], maxValue, maxPos, minValue, minPos, i;
printf("Input 10 numbers:");
for (i=0; i<10; i++)
{
scanf("%d", &a[i]); // 输入10个数
}
maxValue = FindMax(a, 10, _________); // 找最大值及其所在下标位置
minValue = FindMin(a, 10, _________); // 找最小值及其所在下标位置
printf("max=%d,pos=%dn", maxValue, maxPos);
printf("min=%d,pos=%dn", minValue, minPos);
return 0;
}
//函数功能:求有n个元素的整型数组a中的最大值及其所在下标位置,函数返回最大值
int FindMax(int a[], int n, int *pMaxPos)
{
int i, max;
max = a[0]; //假设a[0]为最大值
__________; //假设最大值在数组中的下标位置为0
for (i=1; i<n; i++)
{
if (a[i] > max)
{
max = a[i];
__________; //pMaxPos指向最大值数组元素的下标位置
}
}
return max ;
}
//函数功能:求有n个元素的整型数组a中的最小值及其所在下标位置,函数返回最小值
int FindMin(int a[], int n, int *pMinPos)
{
int i, min;
min = a[0]; //假设a[0]为最小
__________; //假设最小值在数组中的下标位置为0
for (i=1; i<10; i++)
{
if (a[i] < min)
{
min = a[i];
__________; //pMinPos指向最小值数组元素的下标位置
}
}
return min ;
}
选项:
A: 第13行:&maxPos第14行:&minPos第25行:*pMaxPos = 0第32行:*pMaxPos = i第43行:*pMinPos = 0第50行:*pMinPos = i
B: 第13行:maxPos第14行:minPos第25行:pMaxPos = 0第32行:*pMaxPos = i第43行:pMinPos = 0第50行:*pMinPos = i
C: 第13行:maxPos第14行:minPos第25行:pMaxPos = 0第32行:pMaxPos = i第43行:pMinPos = 0第50行:pMinPos = i
D: 第13行:&maxPos第14行:&minPos第25行:pMaxPos = 0第32行:pMaxPos = i第43行:*pMinPos = 0第50行:*pMinPos = i
答案: 【 第13行:&maxPos第14行:&minPos第25行:*pMaxPos = 0第32行:*pMaxPos = i第43行:*pMinPos = 0第50行:*pMinPos = i】
11、单选题:
采用梯形法编程实现在积分区间[a,b]内计算下面两个函数的定积分。
![]()

