1、二级 C 语言机试-71 及答案解析(总分:100.00,做题时间:90 分钟)一、填空题(总题数:1,分数:30.00)1.请补充函数 fun(),该函数的功能是:判断某一个年份是否为闰年。例如,1900 年不是闰年,2004 是闰年。注意:部分源程序给出如下。请勿改动主函数 main 和其他函数中的任何内容,仅在函数 fun()的横线上填入所编写的若干表达式或语句。试题程序:#includestdio.h#includeconio.hint fun(int n)int flag=0;if (n%4=0)if ( 【1】 )flag=1;if ( 【2】 )flag=1;return 【3】
2、 ;main()int year;clrscr();printf(“Input the year:“);scanf(“%d“, if (fun(year)printf(“%d is a leap year. /n“, year);elseprintf(“%d is not a leap year./n“,year);(分数:30.00)填空项 1:_二、改错题(总题数:1,分数:30.00)2.下列给定程序中,函数 fun()的功能是:在字符串 str 中找出 ASCII 码值最大的字符,将其放在第一个位置上,并将该字符前的原字符向后顺序移动。例如,调用 fun()函数之前给字符串输入 ABC
3、DeFGH,调用后字符串中的内容为 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(“Enter a string: “); gets(str);pri
4、ntf(“/nThe original string: “);puts(str);fun(str);printf(“/nThe string after moving: “);puts(str); printf(“/n/n“);(分数:30.00)填空项 1:_三、编程题(总题数:1,分数:40.00)3.printf(“/n “);(分数:40.00)_二级 C 语言机试-71 答案解析(总分:100.00,做题时间:90 分钟)一、填空题(总题数:1,分数:30.00)1.请补充函数 fun(),该函数的功能是:判断某一个年份是否为闰年。例如,1900 年不是闰年,2004 是闰年。注意:
5、部分源程序给出如下。请勿改动主函数 main 和其他函数中的任何内容,仅在函数 fun()的横线上填入所编写的若干表达式或语句。试题程序:#includestdio.h#includeconio.hint fun(int n)int flag=0;if (n%4=0)if ( 【1】 )flag=1;if ( 【2】 )flag=1;return 【3】 ;main()int year;clrscr();printf(“Input the year:“);scanf(“%d“, if (fun(year)printf(“%d is a leap year. /n“, year);elsepri
6、ntf(“%d is not a leap year./n“,year);(分数:30.00)填空项 1:_ (正确答案:1 n%100!=0 或 n%100 2 n%400=0 3 flag)解析:解析 填空 1:判断闰年的方法是,年份能被 4 整除但不能被 100 整除,或者年份能被 400 整除的是闰年。此空应填, n 不能被 100 整除,即对 100 取余非零。填空 2:年份能被 400 整除的也是闰年,所以此空应填,n 能被 400 整除,即对 400 取余为零。填空 3:flag 标记年份 n 是否为闰年,当 flag 为1 时是闰年,相反,当 flag 为 0 时不是闰年。二、
7、改错题(总题数:1,分数:30.00)2.下列给定程序中,函数 fun()的功能是:在字符串 str 中找出 ASCII 码值最大的字符,将其放在第一个位置上,并将该字符前的原字符向后顺序移动。例如,调用 fun()函数之前给字符串输入 ABCDeFGH,调用后字符串中的内容为 eABCDFGH。请改正程序中的错误,使它能得出正确的结果。注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结构。试题程序:#includestdio.h/*found*/fun(char *p)char max, *q;int i=0;max=pi;while (pi!=0)if (maxpi)/*f
8、ound*/p = q +i;max=pi;i+;/*found*/while (qp)*q=*(q-1);q-;p0=max;main()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:_ (正确答案:错误:fun(char*p) 正确:void fun(char*p)(2) 错误
9、:p=q+i; 正确:q=p+i;(3) 错误:while(qp) 正确:while(qp))解析:解析 本题解答需要 3 个步骤:(1) 找到字符串中 ASCII 码值最大的字符,并保存。(2) 将该字符复制,并将该字符前面的字符串顺次后移。(3) 将 ASCII 码值最大的字符赋给字符串的第 1 个字符。找到 ASCII 码值最大的字符可以通过定义一个字符 max,该字符初始时等于字符串的第 1 个字符,若字符串的下一个字符大于 max,则将下一个字符赋给max,如此循环到字符尾,即可得到 ASCII 码值最大的字符,同时令指针 q 指向最大字符。之后对最大字符前面的子串顺次后移,可采用
10、while 语句实现。此题需要熟练掌握和灵活应用 C 语言的字符与整型变量的关系以及字符串操作。三、编程题(总题数:1,分数:40.00)3.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;)解析:解析 本题只要掌握了判断素数的算法即不难完成了,其实程序缺少部分也正是这部分。
copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1