1、国家二级( C语言)机试模拟试卷 170及答案与解析 一、程序填空题( 30分) 1 给定程序中,函数 fun的功能是:对形参 ss所指字符串数组中的 M个字符串按长度由短到长进行排序。 ss所指字符串数组中共有 M个字符串,且串长 #include #define M 5 #define N 20 void fun(char (*ss)N) int i, j, k, nM; char tN; for(i=0; inj) 【 2】 ; if(k!=i) strcpy(t,ssi); strcpy(ssi,ssk); /*found*/ strcpy(ssk,【 3】 ); nk=ni; mai
2、n() char ssMN=“shanghai“,“guangzhou“,“beijing“, “tianjing“,“cchongqing“; int i; printf(“nThe original strings are :n“); for(i=0; i #include *found* include *found* upfst(char p) int k=0; for(; *p; p+) if(k) if(*p=) k=0; else if(*p !=) k=1; *p=toupper(*p); main() char chrstr81; printf(“ nPlease enter
3、 an English text line: “); gets(chrstr); printf(“ ninBefore changing: n s“, chrstr); upfst(chrstr); printf(“inAfter changing: n sn“, chrstr); 三、程序设计题( 40分) 3 编写程序,实现矩阵 (3行 3列 )的转置 (即行列互换 )例如,输入下面的矩阵: 程序输出: 注意:部分源程序在文件 PROGl C中。 请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。 #includevoid fun(int ar
4、ray33)main() int i, 3; void NONO(); int array33=100, 200, 300, 400, 500, 600, 700, 800, 900; for(i=0; i 国家二级( C语言)机试模拟试卷 170答案与解析 一、程序填空题( 30分) 1 【正确答案】 i+1 k=j t 【试题解析】 第一空:由审题分析可知,外循环 i=0时,内循环变量从 i+1到M-1(下标从 0开始),从 M-1个字符串中再挑出一个最短的字符串,故第一空处应为 “i+1”。 第二空: k记录最短字符串的下标,内循环开始前 k赋初值 i,内循环从剩下的 M-i个字符串里面
5、找最短的,比较 k字符串和 j字符串的长度大小,如果 nknj,则把 j赋给 k,即第二空处应为 “k=j”。 第三空: if(k!=i)说明找到了新的更短的字符串,那么把它和第 i个字符串交换,因此第三空处应为 “t”。 二、程序修改题( 30分) 2 【正确答案】 (1)#include (2)upfst(char*p) 【试题解析】 (1)第一标识下 “include“是将头文件 “stdio h“包含进来,包含头文件应使用 “#include“,故第一标识下应改成 “#includc“。 (2)在主函数内,函数调用 “upfst(chrstr); “,而 chrstr是数组名,表示的是数组的首地址,故 upfst函数的参数是指针,第二标识下应改成 “upfst(char*p)“。 三、程序设计 题( 40分) 3 【正确答案】 int i, j, arr33; memcpy(arr, array, 9*sizeof(int); for(i=0; i3; i+) for(j=0; j3; j+) arrayij=arrji; 【试题解析】 进入: fun函数,根据前面的分析: 通过两层循环对矩阵中的元素进行交换。其中,外重循环以行为控制条件,对矩阵的行进行循环。内重循环在列循环中对元素进行交换。