1、国家二级( C语言)机试模拟试卷 295及答案与解析 一、程序填空题( 30分) 1 给定程序中,函数 fun的功能是将参数给定的字符串、整数、浮点数写到文本文件中,再用字符串方式从此文本文件中逐个读入,并调用库函数 atoi和 atof将字符串转换成相应的整数、浮点数,然后将其显示在屏幕上。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 注意:源程序存放在考生文件夹下的 BLANKl C中。 不得增行或删行,也不得更改程序的结构 ! #include #include void fun(char*s, int a, double f) *found* 【 1】 fp
2、; char str100, strli00, str2100; int a1; double f1; fp=fopen(“filel txt“, “w“); fprintf(fp, “ s d fn“, s, a, f); *found* 【 2】; fp=fopen(“filel txt“, “r“); *found* fscanf(【 3】 , “ s s s“, str, str1, str2); fclose(fp); a1=atoi(str1); f1=atof(str2); printf (“ nThe result: n n s d fn“, str, a1, f1); mai
3、n() char a10=“Hello!“; int b=12345; double c=98 76; fun(a, b, c); 二、程序修改题( 30分) 2 给定程序 MODll C中函数 fun的功能是:首先将大写字母转换为对应小写字母;若小写字母为 a u,则将其转换为其后的第 5个字母;若小写字母为 v z,使其值减 21。转换后的小写字母作为函数值返回。例如,若形参是字母 A,则转换为小写字母 f:若形参是字母 w,则转换为小写字母 b。 请改正函数 fun中指定部位的错误,使它能得出正确的结果。 注意:不要改动 main函数,不得增行或删行,也不得更改程序的结构 ! #incl
4、ude #include char fun(char c) if(c=A &c=a &c=v c #define N 80 void fun(int*w, int p, int n) main() int aN=1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15; int i, p, n=15; void NONO(); printf(”The original data: n”); for(i=0; in; i+)printf(” 3d”, ai); printf(” n nEnter p: ”); scanf(” d”, &p); fun(a
5、, p, n); printf(” nThe data after moving: n”); for(i=0; in, i+)printf(” 3d”, ai); printf(” n n”); NONO(); void NONO() *请在此函数内打开文件,输入测试数据, 调用 fun函数,输出数据,关闭文件。 * FILE*rf, *wf; int aIN, i, j, p, n; rf=fopen(”in dat”, ”r”); wf=fopen(”out dat”, ”w”); for(i=0 ; i5; i+) fscanf(rf, ” d d”, &n, &p); for(j=0;
6、 j13; J+)fscanf(rf, ” d”, &aj); fun(a, p, n); for(j=0; jn; j+)fprintf (wf, ” 3d”, aj); fprintf(wf, ” n”); fclose(rf); fclose(wf); 国家二级( C语言)机试模拟试卷 295答案与解析 一、程序填空题( 30分) 1 【正确答案】 (1)FILE* (2)fclose(fp) (3)fp 【试题解析】 第一空: “fp=fopen(“filel txt“, “w“); “可知 fp是文件型指针,故第一空处 fp的定义应为 “FILE*“。 第二空:第二处的后面一句是 “
7、邱 =fopen(“filel txt“, “r“); “再次打开filel txt,因此在第二次打开 filel txt之前必须将文件关闭,故第二处是关闭文件,即 “fclose(fp)“。 第三空: fscanf的调用形式是: fscanf(fp,格式字符串,输入列 表 ),因此第三空处应为 “fp“,从文件当中读出字符串、整数、浮点数。 二、程序修改题( 30分) 2 【正确答案】 (1)c=c+32; (2)c=c+5; 【试题解析】 (1)第一个标识下 “C=C+32; “中变量 C没有定义,编译时会提示出错。根据题意,这行语句的作用是将大写字母转换为小写字母, C语句中大写字母转换
8、为对应的小写字母是对原有 ASC 码加 32,小写转换为大写是减 32,所以应将 “C=C+32; “改为 “C=C+32; “。 (2)第二个标识下是将小写字母转换为其后的第五个字母 ,字母在 a u之间只加上 5就可以了,原题中减 5则是将字母转换到该字母之前的第五个字母,所以第二个标识下 “C=C-5: “改为 “C=C+5; “。 三、程序设计题( 40分) 3 【正确答案】 int i, j=0, bN; for(i=p+1; in; i+)bj+=wi; int i, j=0, bN; for(i=p+1; in; i+)bj+=wi; 【试题解析】 (1)本题中首先将数组内容拷贝到一个临时一维数组 b。 (2)然后,从指定下标的下个数 组元素开始向前移动。 (3)最后,接着拷贝临时数组 b中的第一个下标开始到指定的下标的元素为止。