1、二级 C 语言-46 及答案解析(总分:100.00,做题时间:90 分钟)一、B填空题/B(总题数:1,分数:30.00)1.下列给定的程序中,函数 fun()的功能是:求输入的两个数中较小的数。例如:输入 5 10,结果为 min is 5。注意 部分源程序给出如下。请勿改动主函数 main 和其他函数中的任何内容,仅在函数 fun 的横线上填入所编写的若干表达式或语句。试题源程序#include stdio.h#include conio.hint fun(int x, U U /U /U;int z;z=xyU U /U /Ux:y;return(z);main()int a, b,
2、c;scanf(“%d, %d/n“, U U /U /U);c=fun(a, b);printf(“min is%d:, c);(分数:30.00)填空项 1:_二、B改错题/B(总题数:1,分数:30.00)2.给定程序 MODI1.C 中函数 fun 的功能是:根据整型形参 m 的值,计算如下公式的值: (分数:30.00)填空项 1:_三、B编程题/B(总题数:1,分数:40.00)3.请编写函数 fun(),它的功能是:判断字符串是否是回文?若是,函数返回 1,主函数中输出:YES,否则返回 0,主函数输出 NO。回文是指顺读和倒读都一样的字符串。例如,字符串 LEVEL 是回文,而
3、字符串 12312 就不是回文。注意 部分源程序给出如下。请勿改动主函数 main 和其他函数中的任何内容,仅在函数 fun 的花括号中填入所编写的若干语句。试题源程序#includestdio.h#define N 80int fun(char *str)main()char sN;printf(“Enter a string:“)“ gets(s);printf(“/n/n“); puts(s);if(fun(s)printf(“ YES/n“);elseprintf(“ NO/n“);NONO();NONO()/*请在此函数内打开文件,输入测试数据,调用 fun 函数,输出数据,关闭文件
4、。*/FILE *rf, *wf;int i ; char sN;rf=fopen(“K:/k06/24010001/in.dat“, “r“);wf=fopen(“K:/k06/24010001/out.dat“, “w“);for(i=0; i10; i+)fscanf(rf, “%s“, s);if(fun(S)fprintf(wf, “%s YES/n“, s);elsefprintf(wf, “%s NO/n“, s);fclose(rf);fclose(wf);(分数:40.00)_二级 C 语言-46 答案解析(总分:100.00,做题时间:90 分钟)一、B填空题/B(总题数:
5、1,分数:30.00)1.下列给定的程序中,函数 fun()的功能是:求输入的两个数中较小的数。例如:输入 5 10,结果为 min is 5。注意 部分源程序给出如下。请勿改动主函数 main 和其他函数中的任何内容,仅在函数 fun 的横线上填入所编写的若干表达式或语句。试题源程序#include stdio.h#include conio.hint fun(int x, U U /U /U;int z;z=xyU U /U /Ux:y;return(z);main()int a, b, c;scanf(“%d, %d/n“, U U /U /U);c=fun(a, b);printf(“
6、min is%d:, c);(分数:30.00)填空项 1:_ (正确答案:1 int y 2 ? 3 a,b)解析:解析 填空 1:根据题目的意思,这里应该是子函数的参数声明部分。C 语言规定,在函数的形参中不允许出现 int x,y 之类的语句,必须指定每一个参数的类型,所以不能直接写 y。 填空 2:根据题目的意思,此处是使用三目运算符“?”比较两个数的大小,使用规则是:如果运算符前面的表达式中哪个变量成立,则整个式子就取运算符后面的这个变量。 填空 3:由算法可以看出,此处是输入变量 a 和 b的值,因为使用了 scanf 函数,所以应该使用符号“”,注意两个变量之间的“,”不能省略。
7、二、B改错题/B(总题数:1,分数:30.00)2.给定程序 MODI1.C 中函数 fun 的功能是:根据整型形参 m 的值,计算如下公式的值: (分数:30.00)填空项 1:_ (正确答案:第 1 处:将“for(i=2;im;i+)”改为“for(i=2;i=m;i+)”。 第 2 处:将“y-=1/(i*i);”改为“y-=1.0/(i*i);”。)解析:解析 题目要求计算公式*的值,在程序中公式的值存放在变量 y 中,且 y 的初值为 1,所以,循环是从公式的第二项开始,分母的变化规律是:从 2 开始循环到 m(包括 m 在内),所以循环控制变量 i的值应该从 2 开始循环到 m
8、结束。第 1 处错误是循环条件出错,应该使用“=”。第 2 处错误可能不太容易发现,由于变量 i 是整型,1 也是一个整数,所以本程序中“1/(i*i)”的结果是 0,想要得到实除的结果,最简单的办法就是把“1”改为“1.0”。三、B编程题/B(总题数:1,分数:40.00)3.请编写函数 fun(),它的功能是:判断字符串是否是回文?若是,函数返回 1,主函数中输出:YES,否则返回 0,主函数输出 NO。回文是指顺读和倒读都一样的字符串。例如,字符串 LEVEL 是回文,而字符串 12312 就不是回文。注意 部分源程序给出如下。请勿改动主函数 main 和其他函数中的任何内容,仅在函数
9、fun 的花括号中填入所编写的若干语句。试题源程序#includestdio.h#define N 80int fun(char *str)main()char sN;printf(“Enter a string:“)“ gets(s);printf(“/n/n“); puts(s);if(fun(s)printf(“ YES/n“);elseprintf(“ NO/n“);NONO();NONO()/*请在此函数内打开文件,输入测试数据,调用 fun 函数,输出数据,关闭文件。*/FILE *rf, *wf;int i ; char sN;rf=fopen(“K:/k06/24010001/
10、in.dat“, “r“);wf=fopen(“K:/k06/24010001/out.dat“, “w“);for(i=0; i10; i+)fscanf(rf, “%s“, s);if(fun(S)fprintf(wf, “%s YES/n“, s);elsefprintf(wf, “%s NO/n“, s);fclose(rf);fclose(wf);(分数:40.00)_正确答案:(int fun(char *str) int i, n=0, fg=1; char *p=str; while(*p) n+; P+; for(i=0; in/2; i+) if(stri=strn-1-i); else fg=0; break; return fg; )解析:解析 本题的设计思路是:(1)定义一个 int 型变量 flag 用做返回值,定义一个字符指针代替原串遍历,求字符串的长度;(2)利用循环及 if 条件语句判断字符串首尾对应字符是否相等;(3)如果为回文数,修改 flag 的值;(4)返回 flag。