1、国家二级 C语言机试(操作题)模拟试卷 451及答案解析(总分:6.00,做题时间:90 分钟)一、程序填空题(总题数:1,分数:2.00)1.给定程序中,函数 fun的功能是: 将形参给定的字符串、整数、浮点数写到文本文件中,再用字符方式从此文本文件中逐个读入并显示在终端屏幕上。 请在程序的下画线处填入正确的内容并把下画线删除,使程序得出正确的结果。 注意:部分源程序给出如下。 不得增行或删行,也不得更改程序的结构! 试题程序: #include stdioh void fun(char *s,int a,double f) /*found*/ 【1】 fp; char ch; fp=fop
2、en(“fileltxt“,“w“); fprintf(fp,“sdf/n“,s,a,f); fclose(fp); fp=fopen (“fileltxt“,“r“); printf (“/nThe result:/n/n“); ch=fgetc(fp); /*found*/ while(!feof( 【2】 ) /*found*/ putchar( 【3】 );ch=fgetc(fp); putchar(/n); fclose(fp); main() char a10=“Hello!“; int b=12345; double C=9876; fun(a,b,c); (分数:2.00)_二
3、、程序修改题(总题数:1,分数:2.00)2.下列给定程序中,函数 fun的功能是:依次取出字符串中所有的数字字符,形成新的字符串,并取代原字符串。请改正程序中的错误,使它能得出正确的结果。注意:不要改动 main函数,不得增行或删行,也不得更改程序的结构!试题程序:#include stdlibh #include stdioh #include conioh void fun(char *s) int i,j; for(i=0,j=0;si!=/0;i+) if(si =0&si =9)/*found*/ sj=si;/*found*/ sj=“/0“;void main() char i
4、tem80; system(“CLS“); printf(“/nEnter a string:“); gets(item); printf f“/n/nThe stringis:s/n“,item); fun(item); printf(“|n l nThe string ofchanging is:s/n“,item);(分数:2.00)_三、程序设计题(总题数:1,分数:2.00)3.请编写函数 fun,其功能是:将 M行 N列的二维数组中的字符数据,按列的顺序依次放到一个字符串中。例如,若二维数组中的数据为 W W W W S S S S H H H H 则字符串中的内容应是:wSHwS
5、HWSHWSH。 注意:部分源程序给出如下。 请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。 试题程序:#include stdioh #define M 3#define N 4void fun(char(*s)N,char*b)void main() char a100,wMN=W,W,W,W,S,S,S,S,H,H,H,H); int i,j; printf(“The matrix:/n“); for(i=0;i M;i+) for(j=0;j N;j+) printf(“3c“,wij); printf(“/n“); fun(w,a);
6、 printf(“The A string:/n“); puts(a); printf(“/n/n“);(分数:2.00)_国家二级 C语言机试(操作题)模拟试卷 451答案解析(总分:6.00,做题时间:90 分钟)一、程序填空题(总题数:1,分数:2.00)1.给定程序中,函数 fun的功能是: 将形参给定的字符串、整数、浮点数写到文本文件中,再用字符方式从此文本文件中逐个读入并显示在终端屏幕上。 请在程序的下画线处填入正确的内容并把下画线删除,使程序得出正确的结果。 注意:部分源程序给出如下。 不得增行或删行,也不得更改程序的结构! 试题程序: #include stdioh void
7、fun(char *s,int a,double f) /*found*/ 【1】 fp; char ch; fp=fopen(“fileltxt“,“w“); fprintf(fp,“sdf/n“,s,a,f); fclose(fp); fp=fopen (“fileltxt“,“r“); printf (“/nThe result:/n/n“); ch=fgetc(fp); /*found*/ while(!feof( 【2】 ) /*found*/ putchar( 【3】 );ch=fgetc(fp); putchar(/n); fclose(fp); main() char a10=
8、“Hello!“; int b=12345; double C=9876; fun(a,b,c); (分数:2.00)_正确答案:(正确答案:(1)FILE* (2)fp (3)ch)解析:解析:填空 1:由语句 fopen(“filel txt“,“r“)可知,fp 应该是文件类型指针,因此本空应该填写 FILE*。 填空 2:feof 函数只能对文件类型数据进行操作,因此本空应填写 fp。 填空 3:putchar()代表输入一个字符,从 ch=fgetc( fp)可以看出本题应该填写 ch。二、程序修改题(总题数:1,分数:2.00)2.下列给定程序中,函数 fun的功能是:依次取出字符
9、串中所有的数字字符,形成新的字符串,并取代原字符串。请改正程序中的错误,使它能得出正确的结果。注意:不要改动 main函数,不得增行或删行,也不得更改程序的结构!试题程序:#include stdlibh #include stdioh #include conioh void fun(char *s) int i,j; for(i=0,j=0;si!=/0;i+) if(si =0&si =9)/*found*/ sj=si;/*found*/ sj=“/0“;void main() char item80; system(“CLS“); printf(“/nEnter a string:“
10、); gets(item); printf f“/n/nThe stringis:s/n“,item); fun(item); printf(“|n l nThe string ofchanging is:s/n“,item);(分数:2.00)_正确答案:(正确答案:(1)sj+=si; (2)sj=/0;)解析:解析:题目要求依次取出字符串中所有的数字字符,因此将元素 si存入 sj后要使 j加 1,为下次存储做准备。sj=“/0“;是一个语法错误。三、程序设计题(总题数:1,分数:2.00)3.请编写函数 fun,其功能是:将 M行 N列的二维数组中的字符数据,按列的顺序依次放到一个字符
11、串中。例如,若二维数组中的数据为 W W W W S S S S H H H H 则字符串中的内容应是:wSHwSHWSHWSH。 注意:部分源程序给出如下。 请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。 试题程序:#include stdioh #define M 3#define N 4void fun(char(*s)N,char*b)void main() char a100,wMN=W,W,W,W,S,S,S,S,H,H,H,H); int i,j; printf(“The matrix:/n“); for(i=0;i M;i+)
12、for(j=0;j N;j+) printf(“3c“,wij); printf(“/n“); fun(w,a); printf(“The A string:/n“); puts(a); printf(“/n/n“);(分数:2.00)_正确答案:(正确答案:void fun(char (*s)N,char *b) int i,j,k =0; for(i=0;i N;i+)/* 按列的顺序依次放到一个字符串中*/ for(j=0;j M;j+) bk+=sji; bk=/0; )解析:解析:看到程序后,很容易便能想到用循环嵌套的方法,本题中按列的顺序依次放到一个字符串中,所以列标变化慢,行标变化快。 注意:第 1个循环条件为 iN(即列);第 2个循环条件为 jM(即行),因为在循环的嵌套中越在内层,循环变化就越快。