【真题1】 给定程序的功能是将十进制正整数m转换成k 进制(2≤k≤9)数的数 字输出。 例如,若输入8 和2,则应输出1000(即十进制数8 转换成二进制表示是 1000)。 #include < stdio.h >void fun( int m, int k ) { int aa[20], i; for( i = 0; m; i++ ) { /**********found**********/ aa[i] = ___1___; /**********found**********/ m /= ___2___; } for( ; i; i-- ) /**********found**********/ printf( "%d", ___3___[ i-1 ] ); } main() { int b, n; printf( "\nPlease enter a number and a base:\n" ); scanf( "%d %d", &n, &b ); fun( n, b ); } (2011年2月) 解析: 本题的考核点是数制的转换。 将十进制正整数转换为k 进制(2≤k≤9)数的方法: 将已知的十进制正整数反复除k,余数为k-1,相应位为k-1;余数为0,相应 位为0。从低位向高位逐次进行,一直到用k 去除后,商为0 时为止,最后一 次除法所得的余数为Xn,则XnXn-1Xn-2…X1X0。 题中第一个空填"m%k":此语句是将十进制的整型数据m 转换为k 进制数据 时,将余数保存在数组aa中。 题中第二个空填"k":此语句是将十进制的整型数据m 转换为k进制数据时, 每除一次k 后,把商重新赋值给正整数m,以便重复取余。 题中第三个空填"aa":在for 循环之后,i即为转换成的k进制数的位数,所以 根据题意要求,此语句应该是:"printf("%d", aa[i - 1]);"。 答案:【1】m%k 【2】k 【3】aa 【真题2】 给定程序modi.c 中,函数fun 的功能是:求出a 所指数组中最大数和 次最大数(规定最大数和次最大数不在a[0]和a[1]中,依次和a[0]、a[1]中的数 对调。 例如数组中原有的数为:7、10、12、0、3、6、9、11、5、8, 输出的结果为:12、11、7、0、3、6、9、10、5、8。 请改正程序中的错误,使它能得出正确结果。 注意:不要改动main 函数, #include < conio.h >#include < stdio.h >#define N 20 int fun(int *a,int n) { int i,m,t,k; for (i=0;i< 2;i++) { /************found************/ m=0; for (k=i;k< n;k++) /************found************/ if(a[k] >a[m]) k=m; t=a[i];a[i]=a[m];a[m]=t; } } main() { int x,b[N]={11,5,12,0,3,6,9,7,10,8},n=10,i; clrscr(); for (i=0;i< n;i++) printf("%d ",b[i]); printf("\n"); fun(b,n); for(i=0;i< n;i++) printf("%d ",b[i]); printf("\n"); } (2011年2月) 解析: 本题的考核点是循环语句和常用算法。 本题要求将最大数和a[0]中的数对调,把次最大数和a[1]中的数对调。题目给 程序fun 函数定义了变量t作为中间元素,因此对调过程应如下:t = a;a =b;b = t;然而fun 函数中两次对调均没有形成三角型赋值,是错误的。应该把" t= a[0]; a[m1]=a[0]; a[m1] = t;"语句 和"t= a[1]; a[m2]=a[1]; a[m2] = t;"语句改为"t = a[0]; a[0] = a[m1]; a[m1] = t; "和"t= a[1]; a[1]=a[m2]; a[m2] = t;"语句或相同作用的语句。 【真题3】 编写函数int fun(int lim, int aa[MAX]),该函数的功能是求出小于或 等于lim 的所有素数并放在aa 数组中,该函数返回所求出的素数的个数。 注意:部分源程序给出如下。 请勿改动主函数main 和其他函数中的任何内容,仅在函数fun 的花括号中填入所编 写的若干语句。 试题程序: #include< conio.h >#include< stdio.h >#define MAX 100 int fun(int lim, int aa[MAX]) { ……} main() { int limit,i,sum; int aa[MAX]; clrscr(); printf("输入一个整数"); scanf("%d",&limit); sum=fun(limit,aa); for(i=0;i< sum;i++) { if(i%10==0&&i!=0) /*每行输出10 个数*/ printf("\n "); printf("%5d ",aa[i]); } } 解析: int fun(int lim, int aa[MAX]) { int i,j,k=0; for(i=2;i< =lim;i++) /*求出小于或等于lim的全部素数*/ { for(j=2;j< i;j++) if(i%j==0) break; if(j >=i) aa[k++]=i; /*将求出的素数放入数组aa中*/ } return k; /*返回所求出的素数的个数*/ } 在做这道题时,我们只需掌握素数的基本算法就可以了,一般判断素数的方法 如下: 现判定i变量中存放的值是否为素数: main( ) {int i,j; printf(“请输入一个整数:\n”); scanf(“%d”,&i); for(j=2;j< i;j++) if(i%j==0) break; if(j==i) printf(“%d为素数!”,i); else printf(“%d不为素数”,i); } |