1、全国计算机等级考试二级 C 语言操作题 21+2016 年及答案解析(总分:30.00,做题时间:90 分钟)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、 使程序得出正确的结果。 注意:源程序存放在考生文件夹下的 BLANK1.C中。不得增行或删行,也不得更改程序的结构! 给定源程序: #include #include #define N 10 double fun(double *x) int i, j; double s, av, yN; s=0; for(i=0; i /*found*/ av=_1_; for(i=j=0; i if( xiav ) /*found*/ y_2_=xi; xi=-1; for(i=0; i /*found*/ if( xi!= _3_) yj+=xi; for(i=0; i return av; mai
3、n() int i; double xN; for(i=0; i4.0f “,xi); printf(“/n“); printf(“/nThe average is: %f/n“,fun(x); printf(“/nThe result :/n“,fun(x); for(i=0; i5.0f “,xi); printf(“/n“); (分数:10.00)_2.给定程序 MODI1.C 的功能是:读入一个英文文本行,将其中每个单词的第一个字母改成大写,然后输出此文本行(这里的“单词”是指由空格隔开的字符串)。 例如,若输入:I am a student to take the examinati
4、on.,则应输出:I Am A Student To Take The Examination.。 请改正程序中的错误,使程序能得出正确的结果。 注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结构! 给定源程序: #include #include /*found*/ include /*found*/ upfst ( char p ) int k=0; for ( ; *p; p+ ) if ( k ) if ( *p = ) k = 0; else if ( *p != ) k = 1; *p = toupper( *p ); main( ) char chrstr81;
5、 printf( “/nPlease enter an English text line: “ ); gets( chrstr ); printf( “/n/nBefore changing:/n %s“, chrstr ); upfst( chrstr ); printf( “/nAfter changing:/n %s/n“, chrstr ); (分数:10.00)_3.程序定义了 NN 的二维数组,并在主函数中赋值。请编写函数 fun,函数的功能是:求出数组周边元素的平均值并作为函数值返给主函数中的 s。 例如:a 数组中的值为 |0 1 2 7 9| |1 9 7 4 5| a =
6、 |2 3 8 3 1| |4 5 6 8 2| |5 9 1 4 1| 则返回主程序后 s 的值应为: 3.375。 注意: 部分源程序存在文件PROG1.C 文件中。 请勿改动主函数 main 和其它函数中的任何内容,仅在函数 fun 的花括号中填入你编写的若干语句。 给定源程序: #include #include #define N 5 double fun ( int wN ) main ( ) int aNN=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; int i, j; double s ; printf(“* The a
7、rray */n“); for ( i =0; i for ( j =0; j printf( “M“, aij ); printf(“/n“); s = fun ( a ); printf (“* THE RESULT */n“); printf( “The sum is : %lf/n“,s ); NONO( ); (分数:10.00)_全国计算机等级考试二级 C 语言操作题 21+2016 年答案解析(总分:30.00,做题时间:90 分钟)1.给定程序中,函数 fun 的功能是:计算形参 x 所指数组中 N 个数的平均值(规定所有数均为正数),将所指数组中大于平均值的数据移至数组的前部
8、,小于等于平均值的数据移至 x 所指数组的后部,平均值作为函数值返回,在主函数中输出平均值和移动后的数据。 例如,有 10 个正数:46 30 32 40 6 17 45 15 48 26,平均值为:30.500000 移动后的输出为:46 32 40 45 48 30 6 17 15 26 请在程序的下划线处填入正确的内容并把下划线删除, 使程序得出正确的结果。 注意:源程序存放在考生文件夹下的 BLANK1.C中。不得增行或删行,也不得更改程序的结构! 给定源程序: #include #include #define N 10 double fun(double *x) int i, j;
9、 double s, av, yN; s=0; for(i=0; i /*found*/ av=_1_; for(i=j=0; i if( xiav ) /*found*/ y_2_=xi; xi=-1; for(i=0; i /*found*/ if( xi!= _3_) yj+=xi; for(i=0; i return av; main() int i; double xN; for(i=0; i4.0f “,xi); printf(“/n“); printf(“/nThe average is: %f/n“,fun(x); printf(“/nThe result :/n“,fun(x
10、); for(i=0; i5.0f “,xi); printf(“/n“); (分数:10.00)_正确答案:()解析:解题思路: 第一处:计算 N 个数的平均值,所以应填:s/N。 第二处:利用 for 循环语句,把数组 x 中大于平均值的数,依次存放到数组 y 中,同时把数组 x 上的该数置为-1,其中位置由变量 j 来控制,所以应填:j+。 第三处:再利用循环把不是-1 的数,依次仍存放到数组 y 中,所以应填:-1。2.给定程序 MODI1.C 的功能是:读入一个英文文本行,将其中每个单词的第一个字母改成大写,然后输出此文本行(这里的“单词”是指由空格隔开的字符串)。 例如,若输入:I
11、 am a student to take the examination.,则应输出:I Am A Student To Take The Examination.。 请改正程序中的错误,使程序能得出正确的结果。 注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结构! 给定源程序: #include #include /*found*/ include /*found*/ upfst ( char p ) int k=0; for ( ; *p; p+ ) if ( k ) if ( *p = ) k = 0; else if ( *p != ) k = 1; *p = to
12、upper( *p ); main( ) char chrstr81; printf( “/nPlease enter an English text line: “ ); gets( chrstr ); printf( “/n/nBefore changing:/n %s“, chrstr ); upfst( chrstr ); printf( “/nAfter changing:/n %s/n“, chrstr ); (分数:10.00)_正确答案:()解析:解题思路: 第一处:包含头文件的标识错误,在 include 前漏写了#。 第二处:由于传入的参数是字符串,所以应为 upfst(c
13、har *p)。3.程序定义了 NN 的二维数组,并在主函数中赋值。请编写函数 fun,函数的功能是:求出数组周边元素的平均值并作为函数值返给主函数中的 s。 例如:a 数组中的值为 |0 1 2 7 9| |1 9 7 4 5| a = |2 3 8 3 1| |4 5 6 8 2| |5 9 1 4 1| 则返回主程序后 s 的值应为: 3.375。 注意: 部分源程序存在文件PROG1.C 文件中。 请勿改动主函数 main 和其它函数中的任何内容,仅在函数 fun 的花括号中填入你编写的若干语句。 给定源程序: #include #include #define N 5 double
14、fun ( int wN ) main ( ) int aNN=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; int i, j; double s ; printf(“* The array */n“); for ( i =0; i for ( j =0; j printf( “M“, aij ); printf(“/n“); s = fun ( a ); printf (“* THE RESULT */n“); printf( “The sum is : %lf/n“,s ); NONO( ); (分数:10.00)_正确答案:(double fun ( int wN ) int i, j, n=0; double sum=0; for ( i =0; i sum+=w0i+wN-1i; n+=2; for ( i =1; i sum +=wi0+wiN-1; n+=2; return sum/n; )解析:解题思路: 本题是统计二维数组周边元素值的平均值,但要注意的是不要重复计算四个角上的元素值。