【真题1】 给定程序的功能是删除w 数组中下标为k 的元素中的值。程序中,调用 了getindex、arrout 和arrdel三个函数,getindex 用以输入所删元素的下标,函 数中对输入的下标进行检查,若越界,则要求重新输入,直到正确为止。arrout 用 以输出数组中的数据,arrdel进行所要求的删除操作。 请在程序的下划线处填入正 确的内容并把下划线删除,使程序得出正确结果。 #include < stdio.h > #define NUM 10 arrout ( int *w, int m ) { int k; /************found************/ for (k = 0; k < ___1___; k++) printf ("%d ", w[k]); printf ("\n"); } arrdel ( int *w, int n, int k ) { int i; for ( i = k; i < n-1; i++ ) w[i] = w[i+1]; n--; /************found************/ return ___2___; } getindex( int n ) { int i; /************found************/ ___3___ { printf("\nEnter the index [ 0< = i< %d ]: ", n ); scanf ("%d",&i ); } while( i < 0 || i > n-1 ); return i; } main( ) { int n, d, a[NUM]={21,22,23,24,25,26,27,28,29,30}; n = NUM; printf ("Output primary data :\n"); arrout ( a, n ); d = getindex( n ); n = arrdel ( a, n, d ); printf ("Output the data after delete :\n"); arrout( a, n ); } (2011年2月) 解析: 本题的考核点是数组和循环语句是使用。 题中第一个空填"m":"k< m"用于控制循环的结束。 题中第二个空填"n":"return n "用于将n 返回给调用它的函数。 题中第三个空填"do":循环有两种,当型和直到型。While为当型循环, do…while是直到型循环。 答案:【1】m 【2】n 【3】do 【真题2】 给定程序modi.c 中,函数fun 的功能是:根据整型形参n,计算如下公 式的值。 A1=1,A2=1/(1+A1),A3=1/(1+A2),……An=1/(1+An-1) 例如:若 n=10,则应输出: 0.617977。 请改正程序中的错误,使它能得出正确结果。 注 意:不要改动main 函数, #include < conio.h > #include < stdio.h > /************found************/ int fun(int n) { float A=1;int i; /************found************/ for (i=2;i< n;i++) A=1.0/(1+A); return A; } main() { int n; clrscr(); printf("\nPlease enter n:"); scanf("%d",&n); printf("A%d=%f\n",n,fun(n)); } (2011年2月) 解析: 本题着重考察考生对C 语言中函数的定义、引用和参数传递的掌握情 况。 本题中的第一个错误:由主函数中可知,函数fun返回的应为float或double 型的值,所以程序中的语句"int fun(int n)"应改为"float fun(int n)"或 "double fun(int n)"; 本题中的第二个错误:由题意可知,程序要求出An的值,循环的终止值应为 n,所以程序中的语句"for (i=2;i< n;i++)"应改为"for (i=2;i< =n;i++)"或 相同作用的语句。 【真题3】 请编写函数fun(),它的功能是:求出1 到1000 之内能被5 或13 整 除、但不能同时被5 和13 整除的所有整数并将它们放在a 所指的数组中,通过n返 回这些数的个数。 注意:部分源程序给出如下。 请勿改动主函数main 和其他函数 中的任何内容,仅在函数fun 的花括号中填入所编写的若干语句。 试题程序: #include < conio.h > #include < stdio.h > void fun(int *a,int *n) {……} main() { int aa[1000], n, k; clrscr(); fun(aa,&n); for(k=0;k< n;k++) if((k+1)%10==0) {printf("%5d ",aa[k]); printf("\n "); /*一行写10 个数*/ } else printf("%5d ",aa[k]); } (2011年2月) 解析: void fun(int *a,int *n) { int i,j=0; for(i=1;i< =1000;i++) /*求1 到1000 之内能被5 或13 整除、 但不能同时被5 和13 整除的所有整数,并放入数组a 中*/ if((i%5==0||i%13==0)&&i%65!=0) a[j++]=i; *n=j; /*传回满足条件的数的个数*/ } 注意本题题目是找出能被5 或13 整除但不能同时被5 和13 整除的所有整数。 能同时被5 和13 整除的整数一定能被65整除,且不能被65 整除的数不一定 就是能被5 或13 整除的数。所以可得出程序中的if()。按运算优先级可知 (i%5==0||i%13==0),注意,两边必须要有小括号。 |