1、全国计算机等级考试二级 C 语言操作题 16+2016 年及答案解析(总分:30.00,做题时间:90 分钟)1.给定程序中,函数 fun 的功能是:求出形参 ss 所指字符串数组中最长字符串的长度,将其余字符串右边用字符*补齐,使其与最长的字符串等长。ss 所指字符串数组中共有 M 个字符串,且串长。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 注意:源程序存放在考生文件夹下的BLANK1.C 中。不得增行或删行,也不得更改程序的结构! 给定源程序: #include #include #define M 5 #define N 20 void fun(char
2、(*ss)N) int i, j, n, len=0; for(i=0; i len=strlen(ssi); if(i=0) n=len; if(lenn)n=len; for(i=0; i /*found*/ n=strlen(_1_); for(j=0; j /*found*/ ssi _2_=*; /*found*/ ssin+j+ _3_=/0; main() char ssMN=“shanghai“,“guangzhou“,“beijing“,“tianjing“,“cchongqing“; int i; printf(“The original strings are :/n“)
3、; for(i=0; i printf(“/n“); fun(ss); printf(“The result is :/n“); for(i=0; i (分数:10.00)_2.给定程序 MODI1.C 中 fun 函数的功能是:将 p 所指字符串中每个单词的最后一个字母改成大写。(这里的“单词”是指由空格隔开的字符串)。 例如, 若输入 “I am a student to take the examination.“, 则应输出 “I aM A studenT tO takE thE examination.“。 请修改程序中的错误之处, 使它能得出正确的结果。 注意: 不要改动 main
4、 函数, 不得删行, 也不得更改程序的结构! 给定源程序: #include #include void fun( char *p ) int k = 0; for( ; *p; p+ ) if( k ) /*found*/ if( p = ) k = 0; /*found*/ * (p-1) = toupper( *( p - 1 ) ) else k = 1; main() char chrstr64; int d ; printf( “/nPlease enter an English sentence within 63 letters: “); gets(chrstr); d=str
5、len(chrstr) ; chrstrd = ; chrstrd+1 = 0 ; printf(“/n/nBefore changing:/n %s“, chrstr); fun(chrstr); printf(“/nAfter changing:/n %s“, chrstr); (分数:10.00)_3.请编写函数 fun, 对长度为 7 个字符的字符串, 除首、尾字符外,将其余 5 个字符按 ASCII 码降序排列。例如,原来的字符串为 CEAedca,排序后输出为 CedcEAa 。 注意: 部分源程序在文件 PROG1.C 中。 请勿改动主函数 main 和其它函数中的任何内容, 仅
6、在函数 fun 的花括号中填入你编写的若干语句。 给定源程序: #include #include #include int fun(char *s,int num) main() char s10; printf(“输入 7 个字符的字符串:“); gets(s); fun(s,7); printf(“/n%s“,s); NONO(); (分数:10.00)_全国计算机等级考试二级 C 语言操作题 16+2016 年答案解析(总分:30.00,做题时间:90 分钟)1.给定程序中,函数 fun 的功能是:求出形参 ss 所指字符串数组中最长字符串的长度,将其余字符串右边用字符*补齐,使其与最
7、长的字符串等长。ss 所指字符串数组中共有 M 个字符串,且串长。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 注意:源程序存放在考生文件夹下的BLANK1.C 中。不得增行或删行,也不得更改程序的结构! 给定源程序: #include #include #define M 5 #define N 20 void fun(char (*ss)N) int i, j, n, len=0; for(i=0; i len=strlen(ssi); if(i=0) n=len; if(lenn)n=len; for(i=0; i /*found*/ n=strlen(_1_
8、); for(j=0; j /*found*/ ssi _2_=*; /*found*/ ssin+j+ _3_=/0; main() char ssMN=“shanghai“,“guangzhou“,“beijing“,“tianjing“,“cchongqing“; int i; printf(“The original strings are :/n“); for(i=0; i printf(“/n“); fun(ss); printf(“The result is :/n“); for(i=0; i (分数:10.00)_正确答案:()解析:解题思路: 第一处:利用 for 循环语句取
9、当前字符串的长度,所以应填:ssi。 第二处:在字符串的右边填字符*,其开始位置是 n+j,其中 n 是该字符串本身的长度,j 是循环控制变量,所以应填:n+j。 第三处:字符串处理结束应置字符串结束符,其位置是 n+j+1,所以应填:1。2.给定程序 MODI1.C 中 fun 函数的功能是:将 p 所指字符串中每个单词的最后一个字母改成大写。(这里的“单词”是指由空格隔开的字符串)。 例如, 若输入 “I am a student to take the examination.“, 则应输出 “I aM A studenT tO takE thE examination.“。 请修改程序
10、中的错误之处, 使它能得出正确的结果。 注意: 不要改动 main 函数, 不得删行, 也不得更改程序的结构! 给定源程序: #include #include void fun( char *p ) int k = 0; for( ; *p; p+ ) if( k ) /*found*/ if( p = ) k = 0; /*found*/ * (p-1) = toupper( *( p - 1 ) ) else k = 1; main() char chrstr64; int d ; printf( “/nPlease enter an English sentence within 63
11、 letters: “); gets(chrstr); d=strlen(chrstr) ; chrstrd = ; chrstrd+1 = 0 ; printf(“/n/nBefore changing:/n %s“, chrstr); fun(chrstr); printf(“/nAfter changing:/n %s“, chrstr); (分数:10.00)_正确答案:()解析:解题思路: 第一处:关键字 int 错写成 INT。 第二处:该行括号没有配对,所以只要加上一个右括号即可。3.请编写函数 fun, 对长度为 7 个字符的字符串, 除首、尾字符外,将其余 5 个字符按 AS
12、CII 码降序排列。例如,原来的字符串为 CEAedca,排序后输出为 CedcEAa 。 注意: 部分源程序在文件 PROG1.C 中。 请勿改动主函数 main 和其它函数中的任何内容, 仅在函数 fun 的花括号中填入你编写的若干语句。 给定源程序: #include #include #include int fun(char *s,int num) main() char s10; printf(“输入 7 个字符的字符串:“); gets(s); fun(s,7); printf(“/n%s“,s); NONO(); (分数:10.00)_正确答案:(int fun(char *s,int num) char ch ; int i, j ; for(i = 1 ; i 6 ; i+) for(j = i + 1 ; j 6 ; j+) if(*(s + i) *(s + j) ch = *(s + j) ; *(s + j) = *(s +i) ; *(s + i) = ch ; )解析:解题思路: 本题是考察考生如何对字符串中的字符按降序进行排序。给出的程序是使用双重 for循环以及冒泡法进行排序的,结果仍存放在原先的字符串上。