1、二级 C 语言机试 14 及答案解析(总分:100.00,做题时间:90 分钟)一、B填空题/B(总题数:1,分数:30.00)1.请补充函数 fun(),该函数的功能是:判断某一个年份是否为闰年。 例如,1900 年不是闰年,2004 是闰年。 注意:部分源程序给出如下。 请勿改动主函数 main 和其他函数中的任何内容,仅在函数 fun()的横线上填入所编写的若干表达式或语句。 试题程序: #includestdio.h #includeconio.h int fun(int n) int flag=0; if (n%4=0) if (U 【1】 /U) flag=1; if (U 【2】
2、 /U) flag=1; returnU 【3】 /U; main() int year; clrscr(); printf(“Input the year:“); scanf(“%d“, if (fun(year) printf(“%d is a leap year. /n“, year); else printf(“%d is not a leap year./n“, year); (分数:30.00)填空项 1:_二、B改错题/B(总题数:1,分数:30.00)2.下列给定程序中,函数 fun()的功能是:在字符串 str 中找出 ASCII 码值最大的字符,将其放在第一个位置上,并将该
3、字符前的原字符向后顺序移动。例如,调用 fun()函数之前给字符串输入 ABCDeFGH,调用后字符串中的内容为 eABCDFGH。 请改正程序中的错误,使它能得出正确的结果。 注意:不要改动 main函数,不得增行或删行,也不得更改程序的结构。 试题程序: #includestdio.h /*found*/ fun(char *p) char max, *q;int i=0; max=pi; while (pi!=0) if (maxpi) /*found*/ p = q +i;max=pi; i+; /*found*/ while (qp) *q=*(q-1); q-; p0=max; m
4、ain() char str80; printf(“Enter a string: “); gets(str); printf(“/nThe original string: “); puts(str); fun(str); printf(“/nThe string after moving: “); puts(str); printf(“/n/n“); (分数:30.00)填空项 1:_三、B编程题/B(总题数:1,分数:40.00)3.请编写一个函数 void fun(int m, int k, int xx),该函数的功能是:将大于整数 m 且紧靠 m 的 k个素数存入所指的数组中。 例
5、如,若输入 17,5,则应输出 19,23,29,3l,37。 注意:部分源程序给出如下。 请勿改动主函数 main 和其他函数中的任何内容,仅在函数 fun 的花括号中填入所编写的若干语句。 试题程序: #include conio.h #include stdio.h void fun(int m, int k, int xx) main() int m,n, zz1000; clrscr(); printf(“/nPlease enter two integers: “); scanf(“%d%d“, fun(m,n,zz); for(m=O;mn;m+) printf(“%d “,zz
6、m); printf(“/n “); (分数:40.00)_二级 C 语言机试 14 答案解析(总分:100.00,做题时间:90 分钟)一、B填空题/B(总题数:1,分数:30.00)1.请补充函数 fun(),该函数的功能是:判断某一个年份是否为闰年。 例如,1900 年不是闰年,2004 是闰年。 注意:部分源程序给出如下。 请勿改动主函数 main 和其他函数中的任何内容,仅在函数 fun()的横线上填入所编写的若干表达式或语句。 试题程序: #includestdio.h #includeconio.h int fun(int n) int flag=0; if (n%4=0) if
7、 (U 【1】 /U) flag=1; if (U 【2】 /U) flag=1; returnU 【3】 /U; main() int year; clrscr(); printf(“Input the year:“); scanf(“%d“, if (fun(year) printf(“%d is a leap year. /n“, year); else printf(“%d is not a leap year./n“, year); (分数:30.00)填空项 1:_ (正确答案:1 n%100!=0 或 n%100 2 n%400=0 3 flag)解析:解析 填空 1:判断闰年的
8、方法是,年份能被 4 整除但不能被 100 整除,或者年份能被 400 整除的是闰年。此空应填, n 不能被 100 整除,即对 100 取余非零。填空 2:年份能被 400 整除的也是闰年,所以此空应填,n 能被 400 整除,即对 400 取余为零。填空 3:flag 标记年份 n 是否为闰年,当 flag 为1 时是闰年,相反,当 flag 为 0 时不是闰年。二、B改错题/B(总题数:1,分数:30.00)2.下列给定程序中,函数 fun()的功能是:在字符串 str 中找出 ASCII 码值最大的字符,将其放在第一个位置上,并将该字符前的原字符向后顺序移动。例如,调用 fun()函数
9、之前给字符串输入 ABCDeFGH,调用后字符串中的内容为 eABCDFGH。 请改正程序中的错误,使它能得出正确的结果。 注意:不要改动 main函数,不得增行或删行,也不得更改程序的结构。 试题程序: #includestdio.h /*found*/ fun(char *p) char max, *q;int i=0; max=pi; while (pi!=0) if (maxpi) /*found*/ p = q +i;max=pi; i+; /*found*/ while (qp) *q=*(q-1); q-; p0=max; main() char str80; printf(“E
10、nter a string: “); gets(str); printf(“/nThe original string: “); puts(str); fun(str); printf(“/nThe string after moving: “); puts(str); printf(“/n/n“); (分数:30.00)填空项 1:_ (正确答案:错误:fun(char*p) 正确:void fun(char*p))解析:(2) 错误:p=q+i; 正确:q=p+i; (3) 错误:while(qp) 正确:while(qp) 解析 本题解答需要 3 个步骤: (1) 找到字符串中 ASCI
11、I 码值最大的字符,并保存。 (2) 将该字符复制,并将该字符前面的字符串顺次后移。 (3) 将 ASCII 码值最大的字符赋给字符串的第 1 个字符。找到 ASCII 码值最大的字符可以通过定义一个字符 max,该字符初始时等于字符串的第 1 个字符,若字符串的下一个字符大于max,则将下一个字符赋给 max,如此循环到字符尾,即可得到 ASCII 码值最大的字符,同时令指针 q 指向最大字符。之后对最大字符前面的子串顺次后移,可采用 while 语句实现。 此题需要熟练掌握和灵活应用 C 语言的字符与整型变量的关系以及字符串操作。三、B编程题/B(总题数:1,分数:40.00)3.请编写一
12、个函数 void fun(int m, int k, int xx),该函数的功能是:将大于整数 m 且紧靠 m 的 k个素数存入所指的数组中。 例如,若输入 17,5,则应输出 19,23,29,3l,37。 注意:部分源程序给出如下。 请勿改动主函数 main 和其他函数中的任何内容,仅在函数 fun 的花括号中填入所编写的若干语句。 试题程序: #include conio.h #include stdio.h void fun(int m, int k, int xx) main() int m,n, zz1000; clrscr(); printf(“/nPlease enter t
13、wo integers: “); scanf(“%d%d“, fun(m,n,zz); for(m=O;mn;m+) printf(“%d “,zzm); printf(“/n “); (分数:40.00)_正确答案:()解析:void fun(int m, int k, int xx) int i,j,n; for (i=m+1,n=0;nk;i+) /*找大于 m 的素数,循环 k 次,即找出紧靠 m 的 k 个素数*/ for(j=2;ji;j+) /*判断一个数是否为素数,如果不是,跳出此循环,判断下一个数*/ if(i%j=O) break; if(j=i) /*如果是素数,放入数组 xx 中*/ xxn+=i; 解析 本题只要掌握了判断素数的算法即不难完成了,其实程序缺少部分也正是这部分。