1、二级 C 语言-303 (1)及答案解析(总分:100.00,做题时间:90 分钟)一、程序填空题(总题数:1,分数:30.00)1.请补充 main()函数,该函数的功能是:先以只写方式打开文件 file.dat,再把字符串 s 中的字符保存到这个磁盘文件中。请勿改动 main()函数与其他函数中的任何内容,仅在的横线上填写所需的若干表达式或语句。 注意:部分源程序给出如下。 试题程序: #includestdlib.h #includestdio.h #define N 100 void main() FILE*f; int i=0; char ch; chair sN=“Welcome!
2、“; if(f=fopen|(“ 1“, “w“)=NULL) printf(“cartnot open file.dat/n“); exit(0); while(si) ch=si; 2; putchar(ch); i+; 3; (分数:30.00)二、程序改错题(总题数:1,分数:40.00)2.下列给定程序中,fun()函数的功能是:求 3 个数的最小公倍数,例如,给变量 a、b、c、分别输入15、11、2,则输出结果应当是 330。 请修改函数中的错误,得出正确的结果。 注意:不要改动 main()函数,不能增行或减行,也不能更改程序的结构。 试题程序: #includestdio.h
3、 int fun(int x, int y, int z) int i, temp, n, m; /*found* i=1; temp=m=n=1; /*found* while(temp!=0 temp=i%x; m=i%y; n=i%z; return i; void main() int a, b, c, i; printf(“Input a b c: “); scanf(“%d%d%d“, printf(“a=%d, b=%d, c=%d/n“, a, b, c); i=fun(a, b, c); printf(“The minimal common multiple is: %d/n
4、“, i); (分数:40.00)_三、程序设计题(总题数:1,分数:30.00)3.编写 fun()函数,它的功能是:利用以下所示的简单迭代方法求方程 cos(y)-y=0 的一个实根。 yn+1=cos(yn) 迭代步骤如下: (1)取 y1 初值为 0.0; (2)y0=y1,把 y1 的值赋给 y0; (3)y1=cos(y0),求出一个新的 y1; (4)若 y0-y1 的绝对值小于 0.000001,则执行步骤(5),否则执行步骤(2); (5)所求 y1 就是方程 cos(y)-y=0 的一个实根,作为函数值返回。 程序将输出结果 Result=0.739085。 请勿改动 ma
5、in()函数与其他函数中的任何内容,仅在函数 fun()的花括号中填入所编写的若干语句。 部分源程序给出如下。 试题程序: #includeconio.h #includemath.h #includestdio.h float fun() void main() FILE *out; float cos=fun(); printf(“Result=%f/n“, cos); out=fopen(“outfile.dat“, “w“); fprintf(out, “%f“, cos); fclose(out); (分数:30.00)_二级 C 语言-303 (1)答案解析(总分:100.00,做
6、题时间:90 分钟)一、程序填空题(总题数:1,分数:30.00)1.请补充 main()函数,该函数的功能是:先以只写方式打开文件 file.dat,再把字符串 s 中的字符保存到这个磁盘文件中。请勿改动 main()函数与其他函数中的任何内容,仅在的横线上填写所需的若干表达式或语句。 注意:部分源程序给出如下。 试题程序: #includestdlib.h #includestdio.h #define N 100 void main() FILE*f; int i=0; char ch; chair sN=“Welcome!“; if(f=fopen|(“ 1“, “w“)=NULL)
7、printf(“cartnot open file.dat/n“); exit(0); while(si) ch=si; 2; putchar(ch); i+; 3; (分数:30.00)解析:file.dat fputc(ch, f) fclose(f) 解析 第一空:根据 C 语言对于文件打开操作的语法 fopen的用法可知语句中缺少文件名,根据程序中文件操作指针为空的提示语句:“printf(“cannot open file.dat/n“);”可知文件名为:“file.dat”。 第二空:这里应该是向文件里面写入字符,根据前面字符的定义“ch=si”和获得的文件指针 f,第二空应填“f
8、putc(ch, f)”,其中 fputc 函数是输出一个字符。 第三空:C 语言中对于文件执行操作后,要对文件指针执行关闭操作,关闭文件的 fclose 函数的调用形式为 fclose(文件指针),所以第三空应填“fclose(f)”。二、程序改错题(总题数:1,分数:40.00)2.下列给定程序中,fun()函数的功能是:求 3 个数的最小公倍数,例如,给变量 a、b、c、分别输入15、11、2,则输出结果应当是 330。 请修改函数中的错误,得出正确的结果。 注意:不要改动 main()函数,不能增行或减行,也不能更改程序的结构。 试题程序: #includestdio.h int fu
9、n(int x, int y, int z) int i, temp, n, m; /*found* i=1; temp=m=n=1; /*found* while(temp!=0 temp=i%x; m=i%y; n=i%z; return i; void main() int a, b, c, i; printf(“Input a b c: “); scanf(“%d%d%d“, printf(“a=%d, b=%d, c=%d/n“, a, b, c); i=fun(a, b, c); printf(“The minimal common multiple is: %d/n“, i);
10、(分数:40.00)_正确答案:()解析:(1)错误:i=1; 正确:i=0; (2)错误:while(temp!=0”进行了加 1 操作,i 应该从 1 开始进行循环,所以 i 的初始值应该是 0,这样第一个错误标识下的“i=1;”就改为“i=0;”。 第二个标识下 while 循环逻辑关系应该是或的关系,因为最小公倍数成立的条件是同时除尽,所以只要不是同时除尽,循环就继续,这样“while(temp!=0 float cos=fun(); printf(“Result=%f/n“, cos); out=fopen(“outfile.dat“, “w“); fprintf(out, “%f“, cos); fclose(out); (分数:30.00)_正确答案:()解析:float y1=0.0, y0; do /进行迭代 y0=y1; y1=cos(y0); while(fabs(y0-y1)=1e-6); /判断迭代循环条件 return y1; 解析 进入 fun()函数,根据题中给出的求解步骤,首先 y1 初值为 0.0;若 y0-y1 的绝对值大干 0.000001 就循环进行迭代,即“y0=y1;y1=cos(y0);”,直到满足题目中的要求,返回 y1,即实根。本题考查了 do-while 用法。
copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1