1、全国计算机二级 C语言上机试题 10+2015年及答案解析(总分:30.00,做题时间:90 分钟)1.给定程序中,函数 fun的功能是:判定形参 a所指的 NN(规定 N为奇数)的矩阵是否是“幻方“,若是,函数返回值为 1; 不是,函数返回值为 0。“幻方“的判定条件是:矩阵每行、每列、主对角线及反对角线上元素之和都相等。 例如,以下 33的矩阵就是一个“幻方“: 4 9 2 3 5 7 8 1 6 请在程序的下划线处填入正确的内容并把下划线删除, 使程序得出正确的结果。 注意:源程序存放在考生文件夹下的BLANK1.C中。 不得增行或删行,也不得更改程序的结构! 给定源程序: #inclu
2、de #define N 3 int fun(int (*a)N) int i,j,m1,m2,row,colum; m1=m2=0; for(i=0; i j=N-i-1; m1+=aii; m2+=aij; if(m1!=m2) return 0; for(i=0; i /*found*/ row=colum= _1_; for(j=0; j row+=aij; colum+=aji; /*found*/ if( (row!=colum) _2_ (row!=m1) ) return 0; /*found*/ return _3_; main() int xNN,i,j; printf(“
3、Enter number for array:/n“); for(i=0; i for(j=0; j printf(“Array:/n“); for(i=0; i for(j=0; jprintf(“/n“); if(fun(x) printf(“The Array is a magic square./n“); else printf(“The Array isnt a magic square./n“); (分数:10.00)_2.给定程序 MODI1.C中 fun函数的功能是: 根据整型形参 m,计算如下公式的值。 1 1 1 t = 1 - - - - - - - 2 3 m 例如,若
4、主函数中输入 5,则应输出 -0.283333。 请改正函数 fun中的错误或在横线处填上适当的内容并把横线删除, 使它能计算出正确的结果。 注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结构! 给定源程序: #include double fun( int m ) double t = 1.0; int i; for( i = 2; i = m; i+ ) /*found*/ _; /*found*/ _; main() int m ; printf( “/nPlease enter 1 integer numbers:/n“ ); scanf( “%d“, printf(
5、 “/n/nThe result is %lf/n“, fun( m ) ); (分数:10.00)_3.请编写一个函数,函数的功能是删除字符串中的所有空格。 例如, 主函数中输入“asd af aa z67“, 则输出为 “asdafaaz67“。 注意:部分源程序在文件 PROG1.C中。 请勿改动主函数 main和其它函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。 给定源程序: #include #include int fun(char *str) main() char str81; int n; printf(“Input a string:“) ; gets(
6、str); puts(str); fun(str); printf(“* str: %s/n“,str); NONO(); (分数:10.00)_全国计算机二级 C语言上机试题 10+2015年答案解析(总分:30.00,做题时间:90 分钟)1.给定程序中,函数 fun的功能是:判定形参 a所指的 NN(规定 N为奇数)的矩阵是否是“幻方“,若是,函数返回值为 1; 不是,函数返回值为 0。“幻方“的判定条件是:矩阵每行、每列、主对角线及反对角线上元素之和都相等。 例如,以下 33的矩阵就是一个“幻方“: 4 9 2 3 5 7 8 1 6 请在程序的下划线处填入正确的内容并把下划线删除,
7、使程序得出正确的结果。 注意:源程序存放在考生文件夹下的BLANK1.C中。 不得增行或删行,也不得更改程序的结构! 给定源程序: #include #define N 3 int fun(int (*a)N) int i,j,m1,m2,row,colum; m1=m2=0; for(i=0; i j=N-i-1; m1+=aii; m2+=aij; if(m1!=m2) return 0; for(i=0; i /*found*/ row=colum= _1_; for(j=0; j row+=aij; colum+=aji; /*found*/ if( (row!=colum) _2_
8、(row!=m1) ) return 0; /*found*/ return _3_; main() int xNN,i,j; printf(“Enter number for array:/n“); for(i=0; i for(j=0; j printf(“Array:/n“); for(i=0; i for(j=0; jprintf(“/n“); if(fun(x) printf(“The Array is a magic square./n“); else printf(“The Array isnt a magic square./n“); (分数:10.00)_正确答案:(第一处:
9、行列变量 row和 colum的值初始化为 0。 第二处:两个条件只要有一个不满足就返回 0,所以应填:|。 第三处:如果矩阵是“幻方”,则返回 1。)解析:2.给定程序 MODI1.C中 fun函数的功能是: 根据整型形参 m,计算如下公式的值。 1 1 1 t = 1 - - - - - - - 2 3 m 例如,若主函数中输入 5,则应输出 -0.283333。 请改正函数 fun中的错误或在横线处填上适当的内容并把横线删除, 使它能计算出正确的结果。 注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结构! 给定源程序: #include double fun( int
10、m ) double t = 1.0; int i; for( i = 2; i = m; i+ ) /*found*/ _; /*found*/ _; main() int m ; printf( “/nPlease enter 1 integer numbers:/n“ ); scanf( “%d“, printf( “/n/nThe result is %lf/n“, fun( m ) ); (分数:10.00)_正确答案:(第一处:在除法运算中,如果除数和被除数都是整数,所么所除结果也是整数,因此应改为t-=1.0/i。 第二处:应是返回公式的值,函数中公式的值是存放在临时变量 t中,
11、所以应填 return t;。)解析:3.请编写一个函数,函数的功能是删除字符串中的所有空格。 例如, 主函数中输入“asd af aa z67“, 则输出为 “asdafaaz67“。 注意:部分源程序在文件 PROG1.C中。 请勿改动主函数 main和其它函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。 给定源程序: #include #include int fun(char *str) main() char str81; int n; printf(“Input a string:“) ; gets(str); puts(str); fun(str); print
12、f(“* str: %s/n“,str); NONO(); (分数:10.00)_正确答案:(int fun(char *str) char *p = str ; int i = 0 ; while(*p) if(*p != ) stri+ = *p ; p+ ; stri = 0 ; )解析:解题思路: 本题是考察考生怎样利用字符串指针来删除字符串的空格字符。在函数开始处把指针p先指向字符串 str以及位置变量 i置 0,然后采用 while循环和字符串指针 p来处理的,每循环一次来判断指针 p所指的字符是否为空格,如果不是空格,则把该字符写到 str字符串中,位置由 i来控制,如果是空格,则不处理,继续取下一字符,直至字符串结束为止,最后再把字符串结束符写到位置为 i的str上,再通过形参 str返回。