1、国家二级 C语言机试(操作题)模拟试卷 24及答案与解析 一、程序填空题 1 给定程序中,函数 fun的功能是将参数给定的字符串、整数、浮点数写到文本文件中,再用字符串方式从此文本文件中逐个读入,并调用库函数 atoi和 atof将字符串转换成相应的整数、浮点数,然后将其显示在屏幕上。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 注意:源程序存放在考生文件夹下的 BLANKl C中。 不得增行或删行,也不得更改程序的结构 ! #inolude #inClude Void fun(char *s, int a, double f) /*found*/ _1_ fp;
2、char str100, str1100, str2100; int a1; double f1; fp=fopen(“filel txt”, “w”); fprintf(fp, “ s d f n”, 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 f n”, str, a1, f1); me
3、in() char a10=“Hello!”;int b=12345; doub2e c=98 76; fun(a, b, C); 二、程序修改题 2 给定程序 MODI1 C中函数 fun的功能是:从低位开始取出长整型变量 S中奇数位上的数,依次构成一个新数放在 t中。高位仍在高位,低位仍在低位。 例如,当 S中的数为: 7654321时, t中的数为: 7531。 请改正程序中的错误,使它能得出正确的结果。 注意:不要改动 main函数,不得增行或删行,也不得更改程序的结构 ! #inolude0) s=s 100; *t= s 10 * s1 + *t; /*found*/ s1=s1*
4、100; main() long s, t; printf(“ nPZease enter s: ”); scanf(“ 1d”, s); fun(s, void NONO(); printf(“Enter a string: ”); gets(S); printf(“ n n”); puts(s); if(fun(S)printf(“YES n”); else printf(“NO n”); NONO(); void NONO() *请在此函数内打开文件,输入测试数据,调用 fun函数,输出数据,关闭文件。 * FILE*rf, *wf; int i; char SN; rf=fopen(“
5、in dat”, “r”); wf=fopen(“out dat”, “W”); for(i=0; i10; i+) fscanf(rf, “ S“, s); if(fun(S)fprintf(wf, “ S YES n”, s); e2Se fprintf(wf, “ S NO n”, s); fclose(rf); fclose(wf); 国家二级 C语言机试(操作题)模拟试卷 24答案与解析 一、程序填空题 1 【正确答案】 (1)FILE* (2)fclose(fp) (3)fp 【试题解析】 本题中函数 fun的功能是将参数给定的字符串、整数、浮点数写到文本文件中,再用字符串方式从此
6、文本文件中逐个读入,并调用库函数 atoi和atof将字符串转换成相应的整数、浮点数,然后将其显示在屏幕上。 解题思路 第一空: “fp=fopen(“filel txt“, “w”); ”可知 fp是文件型指针,故第一空处 fp的定义应为 “FILE*”。 第二空:第二处的后面一句是 “fp=fopen(“filel txt”, “r”): ”再次打开filel tXt,因此在第二次打开 filel txt之前必须将文件关闭,故第二处是关闭文件,即 “fclose(fp)”。 第三空: fscanf的调用形式是: fscanf(fp,格式字符串,输入列表 ),因此第三空处应为 “fp”,从文
7、件中读出字符串、整数、浮点数。 二、程序修改题 2 【正确答案】 (1)void fun (long s, long *t) (2)sl=sl *10; 【试题解析】 本题中函数的功能是依次取出奇数位上的数。该题的解题思路主要是找出数字中的奇数位上的数。 解题思路 (1)根据 “*t=s 10”判断, t应该是个指针变量,所以 “void fun(long s, long t)”语句中的 t只需改为 “void fun(longs, long*t)”。 (2)分析函数内的循环过程可知 sl的用途是每次将 *t扩大,记录每次得到的奇数位的数字的 权值, s1的权值每次增加 1位,因此第二个标识下
8、应该是“s1=s1*10; ”。 三、程序设计题 3 【正确答案】 int i, n=0, flag=1; 初始设置标识位 flag=1 char *p=str; 设置工作指针 while (*p) 取字符串大小 n+; p+; for(i=0; in/2; i+) 循环判断字符串 s是否为回文 if(stri=strn1i); 设置比较位 j为 n一 1一 i else 若不 符合条件,标识位设为 0,跳出循环 flag=0; break: return flag; 【试题解析】 该程序功能是判断字符串是否为回文。其中,回文是指顺读和倒读都一样的字符串。解题过程首先利用 while循环取得字
9、符串的长度 n,然后循环判断正序第 i个字符和其对应的逆序字符 n一 1-i个是否相等,也就是判断是否是回文。 解题思路 进入 fun函数,根据前面的分析: 主要思路是: (1)首先用整型变量 i表示所判断的字符串中前面对应元素 的下标。 i初值为 0, n是字符串的长度,通过循环来求得 n。 (2)然后,把下标为 i的字符与下标为 “n-1-i”的字符比较,如果相同, i加 1,继续进行一对一的字符比较。不断重复此过程,直到 in 2为止。在此过程中,如果下标为 i的字符与下标为 “n-1-i”的字符不相同,则可以断定字符串不是吲文,立即退出函数。 (3)如果正常结束循环,就说明字符串符合回文条件。