【真题1】 给定程序中,函数fun()的功能是:使数组中的元素的值增加10 倍。 试题程序: #include< stdio.h >#include< conio.h >int m[10]; __1__ fun(void) { int j; printf("In subfunc after calling\n"); for(j=0; 2__;j++) { m[j]= 3__; printf("%3d", m[j]); } } main() {int i; printf("In main before calling\n"); for(i=0;i< 10;i++) { m[i]=i; printf("%3d",m[i]); } fun(); printf("\nIn main after calling\n"); for(i=0;i< 10;i++) printf("%3d",m[i]); getch(); } (2011年2月) 解析: 填空1:通过对C语言的学习我们知道这里要填一个函数类型,可以看 到这个函数没有返回语句,所以应该是void型的,要注意的是void虽然是空 类型,但必须写,因为不写时默认是整型。 填空2:这里问的是结束判断语句,函数的作用是将数组中每一个数乘以10, 可见这里应填j< 10。 填空3:这个函数很简单,循环的作用就是依次处理每一个数据,这里要完成函 数对数组的操作。 答案:【1】void 【2】j< 10 【3】m[j]*10 【真题2】 给定程序modi.c 的功能是:读入一个整数k(2≤k≤10000),打印它的 所有质因子(即所有为素数的因子)。例如,若输入整数:2310,则应输出:2、 3、5、7、11。 请改正程序中的语法错误,使程序能得出正确的结果。 注意:不要改动main 函数, #include "conio.h" #include "stdio.h" /************found************/ Isprime(int n); { int i,m; m=1; for(i=2;i< n;i++) /************found************/ if !(n%i) { m=0;break;} return(m); } main() {int j,k; clrscr(); printf("\nPlease enter an integer number between 2 and 10000:");scanf("%d",&k); printf("\n\nThe prime factor(s) of %d is (are):",k); for(j=2;j< =k;j++) if ((!(k%j))&&(Isprime(j))) printf("\n %4d",j); printf("\n"); } (2011年2月) 解析: 本题的考核点是C语言的一些基本用法以及 if 语句的使用。 本题中Isprime(int n);是函数的定义,定义语句不应用分号结束。所以, "Isprime(int n);"应改为"Isprime(int n) "。 根据 if 语句的语法规则,if 后的表达式必须由括号括起来。由题意看出,n 整 除 i 时,也就是说 "n%i==0"时,循环才继续进行。因此,"if !(n%i) "应改 为"if (!(n%i)) "或相同作用的语句。 【真题3】 程序定义了N×N 的二维数组,并在主函数中自动赋值。请编写函数 fun(int a[][N]),函数的功能是:使数组中第一行元素中的值与倒数第一行元素中 的值对调、第二行元素中的值与倒数第二行元素中的值对调、……、其他依次类推。 例如:a数组中的值为 |0 11 12 7 9| |1 9 7 4 5| |20 13 18 3 1| a= |14 5 6 8 2| |15 9 17 4 1| |15 9 17 4 1| |14 5 6 8 2| 则返回主程序后a 数组中的值应为|20 13 18 3 1| |1 9 7 4 5| |0 11 12 7 9| 注意:部分源程序存在文件prog.c 中。 请勿改动主函数main 和其他函数中的任何内容,仅在函数fun 的花括号中填入你编 写的若干语句。 #include "stdio.h" #include "conio.h" #include "stdlib.h" #define N 5 int fun ( int a[][N] ) {……} main ( ) { int a[N][N], i, j; clrscr(); printf("***** The array *****\n"); for ( i =0; i< N; i++ ) { for ( j =0; j< N; j++ ) { a[i][j] = rand()%30; printf( "%4d", a[i][j] ); } printf("\n"); } fun ( a ); printf ("***** THE RESULT *****\n"); for ( i =0; i< N; i++ ) { for ( j =0; j< N; j++ ) printf( "%4d", a[i][j] ); printf("\n"); } } (2011年2月) 解析: 本题的考核点是C语言中循环嵌套语句的使用。 提示思路:对于本题,我们给出的参考函数采取的算法是:使用嵌套循环,外 循环是行循环,内循环是列循环。将第一行各元素的值与倒数第一行各元素的 值对调,第二行元素中的值与倒数第二行元素中的值对调,……,因为一次互换 两个元素,所以 for 循环语句执行N/2 次(N 是数组行的长度)就可以把全部 元素值互换一遍。 int fun ( int a[][N] ) { int i, j,k; for (i=0;i< N/2;i++) for (j=0;j< N;j++) { /*将a[i][j]与a[N-i-1][j]中的元素进行对换*/ k=a[ i ][ j ]; a[ i ][ j ]=a[ N-i-1 ][ j ]; a[ N-i-1][ j ]=k; }/*按先行后列的顺序,对数组a中的元素以中间行为对称线进行倒置*/ } |