【真题1】 下列给定程序中,函数fun()的功能是:找出一个大于给定整数m 且紧 随m 的素数,并作为函数值返回。 试题程序: #include < conio.h >#include < stdio.h >int fun( int m) { int i,k; for (i=__1__; ;i++) { for (k=2;k< __2__;k++) if (i%k==0) break; if (k >=i) __3__; } } main() { int n; printf("\nPlease enter n: "); scanf("%d",&n); printf ("%d\n",fun(n)); } 解析: 填空1:根据题目的意思,这里应该是找出m 后面第一个素数,所以循 环的开始条件应该是m 之后的第一个数,即m+1。 填空2:根据题目的意思,此处是验证产生的这个i是不是素数,所以由求素数 的一般思路可以知道,应该验证2 到i之间的所有数字。 填空2:由算法可以看出,如果满足条件,则证明该数是素数,应该把它作为子 函数的返回值。 答案:【1】m+1 【2】i 【3】return(i) 【真题2】 下列给定的程序中,函数fun()的功能是:计算并输出k 以内最大的6 个能被7 或11 整除的自然数之和。K 的值由主函数传入,若k 的值为500,则函数 的值为2925。 请改正程序中的错误,使它能得到正确结果。 注意:不要改动main 函数,不得增行或删行,也不得更改程序的结构。 试题程序: #include< stdio.h >#include < conio.h >int fun(int k) { int m=0,mc=0, j; /**********************found***********************/ while(k >=2)&&(mc< 6) { /**********************found***********************/ if((k%7=0)||(k%11=0)) { /**********************found***********************/ m=k; mc++; } k--; } return m; } main() { clrscr(); printf("%d\n ",fun(500)); } (2011年2月) 解析: (1)错误:while(k >=2)&&(mc< 6) 正确:while((k >=2)&&(mc< 6)) (2)错误:if((k%7=0)||(k%11=0)) 正确:if((k%7==0)||(k%11= =0)) (3)错误:m=k; 正确:m=m+k; 错误1:C语言规定while语句后的表达式两侧必须要有圆括号。 错误2:if语句的判断条件应用关系运算符,而不是赋值运算符。 错误3:根据题意,将满足条件的数求累加和。 【真题3】 函数fun 的功能是:将s 所指字符串中下标为偶数的字符删除,串中剩 余字符形成的新串放在t 所指数组中。 例如,当s 所指字符串中的内容为:"ABCDEFGHIJK", 在t 所指数组中的内容应是:"BDFHJ"。 注意: 部分源程序存在文件prog.c 中。 请勿改动主函数main 和其它函数中的任何内容,仅在函数fun 的花括号中填入你编 写的若干语句。 #include < conio.h >#include < stdio.h >#include < string.h >void fun(char *s, char t[]) {……} main() { char s[100], t[100]; clrscr(); printf("\nPlease enter string S:"); scanf("%s", s); fun(s, t); printf("\nThe result is: %s\n", t); } (2011年2月) 解析: 本题的考核点是数组、循环语句。 解题思路:使用循环语句将数组下标为奇数的元素的值存入另外一个数组中。 void fun(char *s, char t[]) { int i,slenth,n=0; slenth=strlen(s); /*通过strlen 函数求字符串s的长度*/ for(i=1;i< slenth;i+=2) /*循环语句将数组下标为奇数的元素的值存入数组 t中*/ t[n++]=s[i]; t[n]='\0'; } |