1、二级 C 语言-371 及答案解析(总分:100.00,做题时间:90 分钟)一、程序填空题(总题数:1,分数:30.00)1.给定程序中,函数 fun 的功能是:计算形参 x 所指数组中 N 个数的平均值(规定所有数均为正数),将所指数组中大于平均值的数据移至数组的前部,小于等于平均值的数据移至 x 所指数组的后部,平均值作为函数值返回,在主函数中输出平均值和移动后的数据。 例如,有 10 个正数:46、30、32、40、6、17、45、15、48、26,平均值为 30.500000。 移动后的输出为:46、32、40、45、48、30、6、17、15、26。 请在程序的下画线处填入正确的内
2、容并把下画线删除,使程序得出正确的结果。 注意:不得增行或删行,也不得更改程序的结构! 试题程序: #includestdlib.h #includestdio.h #define N 10 double fun(double * x) int i, j; double s,av,yN; s=0; for(i=0;iN;i+)s=s+xi; /*found*/ av= 1; for(i=j=0;iN;i+) if(xiav) /*found*/ y 2=xi; xi=-1; for(i=0;iN;i+) /*found*/ if(xi!= 3)yj+=xi; for(i=0;iN;i+)xi=
3、yi; return av; main() int i;double xN; for(i=0;iN;i+) xi=rand()%50; printf(“%4.0f“,xi); printf(“/n“); printf(“/nThe average is:%f/n“,fun(x); printf(“/nThe result:/n“,fun(x); for(i=0;iN;i+) printf(“%5.0f“,xi); printf(“/n“); (分数:30.00)二、程序修改题(总题数:1,分数:30.00)2.下列给定程序的功能是:读入一个英文文本行,将其中每个单词的第一个字母改成大写,然后输
4、出此文本行(这里”单词”是指由空格隔开的字符串)。例如,若输入“I am a student to take the examination“,则应输出“I Am A Student To Take The Examination“。 请改正程序中的错误,使程序能得出正确的结果。 注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结构! 试题程序: #includestdlib.h #includestring.h #includeconio.h #includectype.h #includestdio.h #includestring.h /*found*/ void upf
5、st(char p) int k=0; for(; *p;p+) if(k) if(*p=“) k=0; else if(*p!=“) k=1; *p=toupper(*p); void main() char chrstr81; system(“CLS“); printf(“/nPlease enter an English text line:“); gets(chrstr); printf(“/nBofore changing:/n %s“, chrstr); upfst(chrstr); printf(“/nAfter changing:/n%s/n“,chrstr); (分数:30.
6、00)三、程序设计题(总题数:1,分数:40.00)3.下列程序定义了 NN 的二维数组,并在主函数中赋值。请编写函数 fun,函数的功能是:求出数组周边元素的平均值并作为函数值返回给主函数中的 s。例如,若 a 数组中的值为: (分数:40.00)_二级 C 语言-371 答案解析(总分:100.00,做题时间:90 分钟)一、程序填空题(总题数:1,分数:30.00)1.给定程序中,函数 fun 的功能是:计算形参 x 所指数组中 N 个数的平均值(规定所有数均为正数),将所指数组中大于平均值的数据移至数组的前部,小于等于平均值的数据移至 x 所指数组的后部,平均值作为函数值返回,在主函数
7、中输出平均值和移动后的数据。 例如,有 10 个正数:46、30、32、40、6、17、45、15、48、26,平均值为 30.500000。 移动后的输出为:46、32、40、45、48、30、6、17、15、26。 请在程序的下画线处填入正确的内容并把下画线删除,使程序得出正确的结果。 注意:不得增行或删行,也不得更改程序的结构! 试题程序: #includestdlib.h #includestdio.h #define N 10 double fun(double * x) int i, j; double s,av,yN; s=0; for(i=0;iN;i+)s=s+xi; /*f
8、ound*/ av= 1; for(i=j=0;iN;i+) if(xiav) /*found*/ y 2=xi; xi=-1; for(i=0;iN;i+) /*found*/ if(xi!= 3)yj+=xi; for(i=0;iN;i+)xi=yi; return av; main() int i;double xN; for(i=0;iN;i+) xi=rand()%50; printf(“%4.0f“,xi); printf(“/n“); printf(“/nThe average is:%f/n“,fun(x); printf(“/nThe result:/n“,fun(x); f
9、or(i=0;iN;i+) printf(“%5.0f“,xi); printf(“/n“); (分数:30.00)解析:s/N (2)j+ (3)-1 解析 填空 1:由原程序可知,av 代表的是平均值,而平均值的求法是所有数的总和除以数的个数,因而本空应该填写 s/N。 填空 2:y 数组代表暂时存放 x 数组,if(xiav)表达的是当 x 数组中的数大于平均值时,应该把这些大于平均值的数放在 y 数组的前半部分,因而此空应该填 yj+。 填空 3:此空表明当 xi不等于什么时,xi中的数要赋值给 y 数组,由题意可知此空只能填写-1。二、程序修改题(总题数:1,分数:30.00)2.下
10、列给定程序的功能是:读入一个英文文本行,将其中每个单词的第一个字母改成大写,然后输出此文本行(这里”单词”是指由空格隔开的字符串)。例如,若输入“I am a student to take the examination“,则应输出“I Am A Student To Take The Examination“。 请改正程序中的错误,使程序能得出正确的结果。 注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结构! 试题程序: #includestdlib.h #includestring.h #includeconio.h #includectype.h #includest
11、dio.h #includestring.h /*found*/ void upfst(char p) int k=0; for(; *p;p+) if(k) if(*p=“) k=0; else if(*p!=“) k=1; *p=toupper(*p); void main() char chrstr81; system(“CLS“); printf(“/nPlease enter an English text line:“); gets(chrstr); printf(“/nBofore changing:/n %s“, chrstr); upfst(chrstr); printf(“
12、/nAfter changing:/n%s/n“,chrstr); (分数:30.00)解析:void upfst(char*p) 解析 主函数中 fun 函数的调用方式说明函数 fun 的参数应为指针类型。三、程序设计题(总题数:1,分数:40.00)3.下列程序定义了 NN 的二维数组,并在主函数中赋值。请编写函数 fun,函数的功能是:求出数组周边元素的平均值并作为函数值返回给主函数中的 s。例如,若 a 数组中的值为: (分数:40.00)_正确答案:()解析:double fun(int wN) int i,j,k=0; double sum=0.0; for(i=0;iN;i+) for(j=0;jN;j+) if(i=0|i=N-1|j=0|j=N-1)/*只要下标中有一个为 0 或 N-1,则它一定是周边元素*/ sum=sum+wij;/*将周边元素求和*/ k+; return sum/k;/*求周边元素的平均值*/ 解析 本题要求计算二维数组周边元素的平均值,for 循环语句控制循环过程,if 条件语句根据数组元素的下标判断该元素是否为二维数组的周边元素。 本题采用逐一判断的方式,周边元素的规律为下标中有一个是 0 或 N-1,所以只要下标中有一个为 0 或 N-1,那么它一定是周边元素。计算周边元素个数的方式是当给 sum 累加一个值时,k 也加 1。