1、国家二级 C语言机试(操作题)模拟试卷 522及答案与解析 一、程序填空题 1 给定程序中,函数 fun的功能是:求出形参 ss所指字符串数组中最长字符串的长度,将其余字符串右边用字符 “*”补齐,使其与最长的字符串等长。 ss所指字符串数组中共有 M个字符串,且串长 #include #define M 5 #define N 20 void fun (char (*ss)N) int i, j, n, len=0; for(i=0; in)n=len; for(i=0; i #include #include void fun(char *p) int k = 0; for(; *p; p
2、+) if (k) /* found*/ if(p = ) k = 0; /* found*/ * (p) = toupper(*(p - 1) else k = 1; main () char chrstr64; int d ; printf(“nPlease enter an English sentence within 63 letters: “); gets(chrstr); d=strlen(chrstr); chrstrd = ; chrstrd+1 = 0 ; printf(“nnBefore changing:n %s“, chrstr); fun (chrstr) ; pr
3、intf(“nAfter changing:n %s“, chrstr); 三、程序设计题 3 请编写函数 fun,对长度为 7个字符的字符串,除首、尾字符外,将其余 5个字符按 ASCH码降序排列。 例如,原来的字符串为: CEAedca,排序后输出为: CedcEAa。 注意:部分源程序在文件 PROG1 C中。 请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。 #include #include #include void fun(char *s,int num) NONO() /*请在此函数内打开文件,输入测试数据, 调用 fun函数,输
4、出数据,关闭文件。 */ char s10 ; FILE *rf, *wf ; int i = 0 ; rf = fopen(“in.dat“,“r“) ; wf = fopen(“out.dat“,“w“); while(i 10) fgets(s,10,rf); s7 =0 ; fun(s,7) ; fprintf(wf, “%sn“, s); i+ ; fclose(rf); fclose(wf); main () char s 10; printf (“输入 7个字符的字符串 : “) ; gets (s); fun(s,7); printf(“n%s“,s); NONO(); 国家二
5、级 C语言机试(操作题)模拟试卷 522答案与解析 一、程序填空题 1 【正确答案】 (1)ssi (2)n+j (3)1 【试题解析】 函数 fun的功能是求出形参 ss所指字符串数组中最长 字符串的长度。 第一空:第一个循环求最长字符串的长度 “len”,在第二个循环内在其他字符串的后面补 “*”,使其达到长度 “len。 ”在 “for(j: 0; jlen-n; j+)”语句中, “jlen-n”是在字符串的后面填 “len-n”个 “*”,故 n是字符串 “ssi”的长度,因此,第一空应为 “ssi”。 第二空:循环 “for(j=0; jlen-n; j+)”目的是在字符串的后面填
6、 len-n个 “*”,第二空处应为 “n+j”。 第三空:字符串以 “ 0”结束,因此,需在字符串后加结 束符,故第三空应为“1”。 二、程序修改题 2 【正确答案】 (1)if(*p=) (2)*(p一 1)=toupper(*(p一 1); 【试题解析】 函数的功能是将每个单词的最后一个字母改成大写。 (1)第一个错误标识下的 if语句应该是判断字符串中的字符是否是空格,根据“for(; *p; p+)”语句中 for循环条件中 p的定义应该为字符型指针变量, *p是取p所指存取单元的值,所以 “if(p=)”应该改为 “if(*p=)”。 (2)题干中要求是将每个单词的最 后一个字母改
7、成大写,所以它的位置应该是挨着空格的前一个字符,应该是指针 p指向字符的前一个位置, “*p=toupper(*(p一1)”是将改动的值赋给了 p所指的空格,所以应该改为 “*(p-1)=toupper(*(p-1); ”且语句未尾应有分号。 三、程序设计题 3 【正确答案】 char t; int i, j; for(i=1; inum一 2; i+) 对 n个元素进行循环选择 for(j=i+1; jnum一 1; j+) if(sisj) 将 stri设为最大值,和剩 下的 j num一 1进行比较 t=si; si=sj; sj=t; 【试题解析】 选择排序法中的降序排序,首先从数组中挑选一个最大的元素的ascill码,把它和第一个元素交换,接着从剩下的 num-1个元素中再挑出一个最大的元素的 ascill码,把它和第二个元素交换,不断重复以上过程,直到比较完最后两个元素。