1、国家二级 C语言机试(操作题)模拟试卷 292及答案解析(总分:6.00,做题时间:90 分钟)一、程序填空题(总题数:1,分数:2.00)1.给定程序中,函数 fun的功能是:将形参 s所指字符串中所有 ASCII码值小于 97的字符存入形参 t所指字符数组中,形成一个新串,并统计出符合条件的字符个数作为函数值返回。 例如,形参 s所指的字符串为:Abe1x56*,程序执行后 t所指字符数组中的字符串应为:A156*。 注意:部分源程序在文件BLANK1C 中。 不得增行或删行,也不得更改程序的结构! 试题程序: #includestdioh int fun(char*S,char*t) i
2、nt n=0; while(*s) if(*s97) *found* *(t+n)= 【1】 ;n+; *found* 【2】 ; *(t+n)=0; *found* return 【3】 ; main() char s81,t81;int n ; printf(“nEnter a string:n“); gets(s); n=fun(s,t); printf(“nTher are d letter which ASCII code is less than 97:sn“,n,t); (分数:2.00)_二、程序修改题(总题数:1,分数:2.00)2.下列给定程序中,函数 fun的功能是:根据
3、形参 m的值(2m9),在 m行 m列的二维数组中存放如下所示规律的数据,由 main函数输出。 (分数:2.00)_三、程序设计题(总题数:1,分数:2.00)3.请编写一个函数 fun,它的功能是:将 SS所指字符串中所有下标为奇数位置的字母转换为大写(若该位置上不是字母,则不转换)。例如,若输入“abc4Efg“,则应输出“aBc4EFg“。注意:部分源程序在文件PROGlC 中。请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。试题程序:#includeconioh#includeStdioh#includestringh#includeS
4、tdlibhvoid fun(char*ss)void main() FILE*wf; char tt81,s81=“abc4Efg“; system(“CLS“); printf(“nPlease enter an string within 80 characters:n“); gets(tt); printf(“nnAfter changing,the stringns“,tt); fun(tt); printf(“nbecomesnsn“,tt);* wf=fopen(“outdat“,“W“); fun(s);fprintf(wf,“s“,s); fclose(wf);*(分数:2.
5、00)_国家二级 C语言机试(操作题)模拟试卷 292答案解析(总分:6.00,做题时间:90 分钟)一、程序填空题(总题数:1,分数:2.00)1.给定程序中,函数 fun的功能是:将形参 s所指字符串中所有 ASCII码值小于 97的字符存入形参 t所指字符数组中,形成一个新串,并统计出符合条件的字符个数作为函数值返回。 例如,形参 s所指的字符串为:Abe1x56*,程序执行后 t所指字符数组中的字符串应为:A156*。 注意:部分源程序在文件BLANK1C 中。 不得增行或删行,也不得更改程序的结构! 试题程序: #includestdioh int fun(char*S,char*t
6、) int n=0; while(*s) if(*s97) *found* *(t+n)= 【1】 ;n+; *found* 【2】 ; *(t+n)=0; *found* return 【3】 ; main() char s81,t81;int n ; printf(“nEnter a string:n“); gets(s); n=fun(s,t); printf(“nTher are d letter which ASCII code is less than 97:sn“,n,t); (分数:2.00)_正确答案:(正确答案:(1)*s (2)s+ (3)n)解析:解析:填空 1:判断
7、s所指向的字符串中的字符符合条件时,将当前字符存放到 t指向的字符串中,所以应填*s。 填空 2:判断完一个字符之后,将字符串的指针移到下一个位置,所以应填 s+。 填空3:题目要求函数要返回符合条件的字符个数 n,所以应填 n。二、程序修改题(总题数:1,分数:2.00)2.下列给定程序中,函数 fun的功能是:根据形参 m的值(2m9),在 m行 m列的二维数组中存放如下所示规律的数据,由 main函数输出。 (分数:2.00)_正确答案:(正确答案:(1)void fun(int aM,int m) (2)ajk=(k+1)*(j+1);)解析:解析:(1)在函数体 fun中可知,a 是
8、一个二维整型数组变量,设置实参时,用*a 表示是错误的,所以应改为 void fun(int aM,int m)。 (2)根据输出的结果可知,应改为 ajk=(k+1)*(j+1);。三、程序设计题(总题数:1,分数:2.00)3.请编写一个函数 fun,它的功能是:将 SS所指字符串中所有下标为奇数位置的字母转换为大写(若该位置上不是字母,则不转换)。例如,若输入“abc4Efg“,则应输出“aBc4EFg“。注意:部分源程序在文件PROGlC 中。请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。试题程序:#includeconioh#incl
9、udeStdioh#includestringh#includeStdlibhvoid fun(char*ss)void main() FILE*wf; char tt81,s81=“abc4Efg“; system(“CLS“); printf(“nPlease enter an string within 80 characters:n“); gets(tt); printf(“nnAfter changing,the stringns“,tt); fun(tt); printf(“nbecomesnsn“,tt);* wf=fopen(“outdat“,“W“); fun(s);fprintf(wf,“s“,s); fclose(wf);*(分数:2.00)_正确答案:(正确答案:void fun(char*ss) int i; for(i=0;ssi!=0;i+) *将 ss所指字符串中所有下标为奇数位置的字母转换为大写* if(i2=1ssi=assi=z) ssi=ssi一 32; )解析:解析:该题要求将给定字符串中奇数位置的字母转换为大写,需要先判断奇数位置以及是否是小写字母,如果是再通过其转换方法进行转换。 从 C语言的学习中知道,只要将小写字母减去 32即转成大写字母,将大写字母加上 32即转成小写字母。本程序用 if语句实现转换功能。