1、国家二级( C语言)机试模拟试卷 395及答案与解析 一、程序填空题( 30分) 1 给定程序中,函数 fun的功能是:将形参 s所指字符串中的所有字母字符顺序前移,其他字符顺序后移,处理后新字符串的首地址作为函数值返回。 例如, s所指字符串为: asdl23fgh543df,处理后新字符串为: asdfghdfl23543。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 注意:源程序存放在考生文件夹下的 BLANKl C中。 不得增行或删行,也不得 更改程序的结构 ! #include #include #include char *fun(char *s) in
2、t i, j, k, n; char *p, *t; n=strlen(s)+1; t=(char*)malloc(n*sizeof(char); p=(char*)malloc(n*sizeof(char); j=0; k=0; for(i=0; i=a) int c=0, i=0; while (xi != 0) if (xi 0) sum += xi; c+; i+; /*found*/ sum=c; return sum; main() int x1000; int i=0; printf(“nPlease enter some data (end with 0): “); do sc
3、anf(“%d“, while (xi+ != 0); printf(“%fn“, fun (x); 三、程序设计题( 40分) 3 请编写函数 fun(),对长度为 7个字符的字符串,除首、尾字符外,将其余 5个字符按 ASCII码值升序排列。 例如:原来的字符串为 BdsihAd,则排序后输出为 BAdhisd。 注意:部分源程序给出如下。 请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的花括号中填入所编写的若干语句。 试题程序: #include stdio.h #include ctype.h #include conio.h int fun(char*s, int
4、num) main() char s10; clrscr(); printf(“输入 7个字符的字符串: “); gets(s); fun(s, 7); printf(“n%s“, s); 国家二级( C语言)机试模拟试卷 395答案与解析 一、程序填空题( 30分) 1 【正确答案】 si k 0 【试题解析】 第一空:此处是将字母字符 si存储在 t字符串中, j记录 t字符串的长度,故 第一空处应为 “si”。 第二空: “for(i=0; i=k,因此第二空处应为 “k”。 第三空:在 C语言中,字符串以 “0”结束,故第三处应为 “0”或 “0”。 二、程序修改题( 30分) 2 【
5、正确答案】 double sum=0.0; sum/=c; 【试题解析】 ( 1) fun函数 的返回值是 double型,返回值 sum的定义类型原题定义为 int型,与 fun的定义类型不符,所以将 “int sum=0.0;”改为 “double sum=0.0;”。 ( 2)第二个标识下的 “sum=c;”语句中的 “”符号是非法符号,这里应该是除号。所以,第二个标识下 “sum=c;”应该改为 “sum/=c;”。 三、程序设计题( 40分) 3 【正确答案】 int fun(char*s, int num) char t; int i,j; for(i=1;i num-2; i+) /*下标值从 1开始,用循环依次取得字符串中的字符 */ for(j=i+1;j num-1; j+) /*将字符与其后的每个字符比较 */ if(si sj) /*如果后面字符的 ASCII码值小于该字符的 ASCII码值 */ t=si; /*则交换这两个字符 * si=sj; sj=t; 【试题解析】 本题考查利用循环来 控制数组元素的操作,首尾元素除外,因此,数组的下标值要从 1开始,用循环变量 i来依次取得数组中的元素,用数组中的元素 si和 sj进行比较,如果后一个元素的 ASCII码值小于前一个元素的 ASCII码值,则交换这两个数组元素的值。