1、国家二级 C语言机试(操作题)模拟试卷 416及答案解析(总分:6.00,做题时间:90 分钟)一、程序填空题(总题数:1,分数:2.00)1.给定程序中,函数 fun的功能是: 计算形参 x所指数组中 N个数的平均值(规定所有数均为正数),将所指数组中大于平均值的数据移至数组的前部,小于等于平均值的数据移至 x所指数组的后部,平均值作为函数值返回,在主函数中输出平均值和移动后的数据。 例如,有 10个正数:46、30、32、40、6、17、45、15、48、26,平均值为 30500000。 移动后的输出为:46、32、40、45、48、30、6、17、15、26。 请在程序的下画线处填入正
2、确的内容并把下画线删除,使程序得出正确的结果。 注意:部分源程序在文件 BLANK1C 中。 不得增行或删行,也不得更改程序的结构!试题程序: #include stdlib h #include stdioh #define N 10 double fun (double * x) int i, j; double s, av, yN; s =0; for(i=0;i 【1】; for(i=j=0;iav) /*found*/ y【2】 =xil ; for (i=0; i N;i+) /*found*/ if(xi!=【3】)yj+=xi; for(i=0;i N;i+)xi=yi; re
3、turn av; main () int i; double xN; for(i=0;i N;i+) xi=rand()50; printf ( “/n“) ; printf(“4of“,xi); printf (“/nThe average is: f/n“, fun(x); printf “/nThe result:/n“,fun (x) ; for(i=0;i N;i+) printf (“ 5 Of “,xi ) ; printf ( “/n“) ; (分数:2.00)_二、程序修改题(总题数:1,分数:2.00)2.下列给定程序的功能是:读入一个英文文本行,将其中每个单词的第一个字母
4、改成大写,然后输出此文本行(这里“单词“是指由空格隔开的字符串)。例如,若输入“I ama student to takethe examination“,则应输出“I Am A Student To TakeThe Examination“。 请改正程序中的错误,使程序能得出正确的结果。 注意:部分源程序在文件 MODI1C 中,不要改动 maln函数,不得增行或删行,也不得更改程序的结构! 试题程序:#include stdlibh #include stringh #include conioh #include ctypeh #include stdioh #include strin
5、gh /*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 chrstr 81 ; system (“CLS“) ; printf ( “ / nPleaSe enter an English text line: “) ; gets (chrstr) ; printf ( “ /nBofore changing: /n s “, chrstr) ; upfst (clhrstr) ; printf
6、 ( “ /nAfter changing: /ns /n“, chrstr) ;(分数:2.00)_三、程序设计题(总题数:1,分数:2.00)3.下列程序定义了 NN的二维数组,并在主函数中赋值。请编写函数 fun,函数的功能是:求出数组周边元素的平均值并作为函数值返回给主函数中的 s。例如,若 a数组中的值为: 0 1 2 7 9 1 9 7 4 5 2 3 8 3 1 4 5 6 8 2 5 9 1 4 1 则返回主程序后 s的值应为 3 375。 注意:部分源程序在文件PROG1C 中。 请勿改动主函数 rruun和其他函数中的任何内容,仅在函数 fun的花括号中填入所编写的若干语句
7、。 试题程序:#include stdioh #include conio h #include stdlib h #define N 5double fun (int w N)void main () FILE *wf; int aNN = 0,1,2 f 7,9,1,9, 7 , 4 , 5,2 , 3 , 8 , 3 , 1 , 4 , 5 , 6 , 8 , 2 , 5,9, 1,4,1; int i, j; double s; system ( “CLS“) ; printf (“ * The array * /n “) ; printf “/n “) ; s = fun (a) ;
8、 printf (“ * THE RESULT * /n “) ; printf(“The sum is : oo lf/n “,s);/*/ wf = fopen (“outdat“, “w“) ; fprintf (wf, “ lf“,s) ; fclose (wf) ;/*/(分数:2.00)_国家二级 C语言机试(操作题)模拟试卷 416答案解析(总分:6.00,做题时间:90 分钟)一、程序填空题(总题数:1,分数:2.00)1.给定程序中,函数 fun的功能是: 计算形参 x所指数组中 N个数的平均值(规定所有数均为正数),将所指数组中大于平均值的数据移至数组的前部,小于等于平均值
9、的数据移至 x所指数组的后部,平均值作为函数值返回,在主函数中输出平均值和移动后的数据。 例如,有 10个正数:46、30、32、40、6、17、45、15、48、26,平均值为 30500000。 移动后的输出为:46、32、40、45、48、30、6、17、15、26。 请在程序的下画线处填入正确的内容并把下画线删除,使程序得出正确的结果。 注意:部分源程序在文件 BLANK1C 中。 不得增行或删行,也不得更改程序的结构!试题程序: #include stdlib h #include stdioh #define N 10 double fun (double * x) int i,
10、j; double s, av, yN; s =0; for(i=0;i 【1】; for(i=j=0;iav) /*found*/ y【2】 =xil ; for (i=0; i N;i+) /*found*/ if(xi!=【3】)yj+=xi; for(i=0;i N;i+)xi=yi; return av; main () int i; double xN; for(i=0;i N;i+) xi=rand()50; printf ( “/n“) ; printf(“4of“,xi); printf (“/nThe average is: f/n“, fun(x); printf “/n
11、The result:/n“,fun (x) ; for(i=0;i N;i+) printf (“ 5 Of “,xi ) ; printf ( “/n“) ; (分数:2.00)_正确答案:(正确答案:(1)s/N (2)j+ (3)一 1)解析:解析:填空 1:由原程序可知,av 代表的是平均值,而平均值的求法是所有数的总和除以数的个数,因而本空应该填写 s/N。 填空 2:y数组代表暂时存放 x数组,if(xi av)表达的是当 x数组中的数大于平均值时,应该把这些大于平均值的数放在 y数组的前半部分,因而此空应该填 yj+。 填空 3:此空表明当 xi不等于什么时,xi中的数要赋值给
12、 y数组,由题意可知此空只能填写一 1。二、程序修改题(总题数:1,分数:2.00)2.下列给定程序的功能是:读入一个英文文本行,将其中每个单词的第一个字母改成大写,然后输出此文本行(这里“单词“是指由空格隔开的字符串)。例如,若输入“I ama student to takethe examination“,则应输出“I Am A Student To TakeThe Examination“。 请改正程序中的错误,使程序能得出正确的结果。 注意:部分源程序在文件 MODI1C 中,不要改动 maln函数,不得增行或删行,也不得更改程序的结构! 试题程序:#include stdlibh #
13、include stringh #include conioh #include ctypeh #include stdioh #include stringh /*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 chrstr 81 ; system (“CLS“) ; printf ( “ / nPleaSe enter an English text line: “) ; gets (chrs
14、tr) ; printf ( “ /nBofore changing: /n s “, chrstr) ; upfst (clhrstr) ; printf ( “ /nAfter changing: /ns /n“, chrstr) ;(分数:2.00)_正确答案:(正确答案:void upfst( char *p)解析:解析:主函数中 fun函数的调用方式说明函数 fun的参数应为指针类型。三、程序设计题(总题数:1,分数:2.00)3.下列程序定义了 NN的二维数组,并在主函数中赋值。请编写函数 fun,函数的功能是:求出数组周边元素的平均值并作为函数值返回给主函数中的 s。例如,若 a
15、数组中的值为: 0 1 2 7 9 1 9 7 4 5 2 3 8 3 1 4 5 6 8 2 5 9 1 4 1 则返回主程序后 s的值应为 3 375。 注意:部分源程序在文件PROG1C 中。 请勿改动主函数 rruun和其他函数中的任何内容,仅在函数 fun的花括号中填入所编写的若干语句。 试题程序:#include stdioh #include conio h #include stdlib h #define N 5double fun (int w N)void main () FILE *wf; int aNN = 0,1,2 f 7,9,1,9, 7 , 4 , 5,2 ,
16、 3 , 8 , 3 , 1 , 4 , 5 , 6 , 8 , 2 , 5,9, 1,4,1; int i, j; double s; system ( “CLS“) ; printf (“ * The array * /n “) ; printf “/n “) ; s = fun (a) ; printf (“ * THE RESULT * /n “) ; printf(“The sum is : oo lf/n “,s);/*/ wf = fopen (“outdat“, “w“) ; fprintf (wf, “ lf“,s) ; fclose (wf) ;/*/(分数:2.00)_正
17、确答案:(正确答案:double fun (int w N) int i,j,k =0; double sum =00; for(i=0;i N;i+) for(j=0;j N;j+) if(i=0|i=N 一 1|j=0 | j =N 一 1) 1*只要下标中有一个为0 或 N 一 1,则它一定是周边元素*/ sum=sum+wi一 i;/* 将周边元素求和*/ k+; return sum/k;/*求周边元素的平均值*/ )解析:解析:本题要求计算二维数组周边元素的平均值,for 循环语句控制循环过程,if 条件语句根据数组元素的下标判断该元素是否为二维数组的周边元素。 本题采用逐一判断的方式,周边元素的规律为下标中有一个是 0或 N一 1,所以只要下标中有一个为 0或 N 一 1,那么它一定是周边元素。计算周边元素个数的方式是当给 sum累加一个值时,k 也加 1。