1、国家二级 C语言机试(操作题)模拟试卷 140及答案与解析 一、程序填空题 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+) if(k
2、) *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(“ n nBefore changing: n s“, chrstr); fun(chrstr); printf(“ nAfter changing: n s“
3、, chrstr); 三、程序设计题 3 请编写函数 fun,对长度为 7个字符的字符串,除首、尾字符外,将其余 5个字符按 ASCII码降序排列。 例如,原来的字符串为 CEAedca,排序后输出为 CedcEAa。 注意:部分源程序在文件 PROG1 C中。 请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。 #include #include #include void fun(char *S, int num) NONO() *请在此函数内打开文件,输入测试数据,调用 fun函数,输出数据,关闭文件。 * char s10; FILE *r
4、f *wf; int i=0; rf=fopen(“in dat“, “r“); wf=fopen(“out dat“, “w“); while(i10) fgets(s, 10, rf); s7=0; fun(s, 7); fprintf(wf, “ s n“, s); i+; fcl0Se(rf); fclose(wf); main() char s10; printf(“输入 7个字符的字符串: “); gets(s); fun(s, 7); printf(“ n s“, s); NONO(); 国家二级 C语言机试(操作题)模拟试卷 140答案与解析 一、程序填空题 1 【正确答案】
5、(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(i=0; jlen-n; j+)”目的是在字符串的后面填 len-n个 “*”,第二空处应为 “n+j”。 第三空:字符串以 “ 0”结束,因此需在字符串后加结束符,故
6、第三空应为“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)题干中要求是将每个单词的最后一个字母改成大写,所以它的位置应该是挨着空格 的前一个字符,应该是指针 p指向字符的前一个位置, “*p=toupper(*(p-1
7、)”是将改动的值赋给了 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; 【试题解析】 选择排序法中的降序排序,首先从数组中挑选一个最大的元素,把它和第一个元素交换,接着从剩下的 num-1个元素中再挑出一个最大的元素,把它和第二个元素交换,不断重复以上过程,直到比较完最后两个元素。