1、国家二级 C语言机试(操作题)模拟试卷 362及答案解析(总分:6.00,做题时间:90 分钟)一、程序填空题(总题数:1,分数:2.00)1.给定程序中,函数 fun的功能是:求出形参 SS所指字符串数组中最长字符串的长度,将其余字符串右边用字符 “*”补齐,使其与最长的字符串等长。ss 所指字符串数组中共有 M个字符串,且串长 #include #define M 5 #define N 20 void fun (char (*ss) N ) int i,j,n len=0; len=strlen (ss i ) ; if (i=0) n=len; if (lenn) n=len; for
2、i=0;i_三、程序设计题(总题数:1,分数:2.00)3.请编写函数 fun,对长度为 7个字符的字符串,除首、尾字符外,将其余 5个字符按 ASCII码降序排列。例如,原来的字符串为:CEAedca,排序后输出为: CedcEAa。 注意:部分源程序在文件 PROG1C 中。 请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。 #include #include #include void fun (char *s,int num) NONO() /*请在此函数内打开文件,输入测试数据,调用 fun函数,输出数据,关闭文件。 */ char
3、s10; FILE *rf, *wf ; int i = 0 ; rf= fopen(“indat“,“r“); wf fopen (“outdat“,“W“); while(in) n=len; for(i=0;i_正确答案:(正确答案:(1)i f(* p=) (2)* (p1)=toupper(* (p1);)解析:解析:函数的功能是将每个单词的最后一个字母改成大写。 (1)第一个错误标识下的 if语句应该是判断字符串中的字符是否是空格,根据“for(;*p;p+)”语句中 for循环条件中 p的定义应该为字符型指针变量,*p 是取 p所指存取单元的值,所以“if(p=)”应该改为“if
4、p=)”。 (2)题干中要求是将每个单词的最后一个字母改成大写,所以它的位置应该是挨着空格的前一个字符,应该是指针 p指向字符的前一个位置,“*p=toupper(*(pl)”是将改动的值赋给了 p所指的空格,所以应该改为“*(p1)=toupper(*(p1));”且语句未尾应有分号。三、程序设计题(总题数:1,分数:2.00)3.请编写函数 fun,对长度为 7个字符的字符串,除首、尾字符外,将其余 5个字符按 ASCII码降序排列。例如,原来的字符串为:CEAedca,排序后输出为: CedcEAa。 注意:部分源程序在文件 PROG1C 中。 请勿改动主函数 main和其他函数中的
5、任何内容,仅在函数 fun的花括号中填入你编写的若干语句。 #include #include #include void fun (char *s,int num) NONO() /*请在此函数内打开文件,输入测试数据,调用 fun函数,输出数据,关闭文件。 */ char s10; FILE *rf, *wf ; int i = 0 ; rf= fopen(“indat“,“r“); wf fopen (“outdat“,“W“); while(i 10) fgets (s,10,rf); s7 = 0 ; fun (s,7); fprintf (wf, “s/rll“ s); i+ ; ) fclose (rf); fclose (wf); main() char s10; printf(“输入 7个字符的字符串:“); gets (s); fun (s,7); printf (“/ns“,s); NONO(); (分数:2.00)_正确答案:(正确答案:1 char t; 2 int ij; 3 for (i=1; i解析:解析:选择排序法中的降序排序,首先从数组中挑选一个最大的元素,把它和第一个元素交换,接着从剩下 的 num1个元素中再挑出一个最大的元素,把它和第二个 元素交换,不断重复以上过程,直到比较完最后两个元素。