1、国家二级 C语言机试(操作题)模拟试卷 297及答案与解析 一、程序填空题 1 给定程序中,函数 fun的功能是:将形参 std所指结构体数组中年龄最大者的数据作为函数值返回,并在 main函数中输出。 请在程序的下画线处填入正确的内容并把下画线删除,使程序得出正确的结果。 注意:部分源程序给出如下。 不得增行或删行,也不得更改程序的结构 ! 试题程序: #include stdio h typeclef struct char name10; int age; STD; STD fun(STD std, int n) STD max; int: i ; *found* max=【 1】 ;
2、for(i=1; i n; i+) *found* if(max age 【 2】 ) max=stdi; return max; main() STD std5=“aaa“, 17, “bbb“, 16, “ccc“, 18, “ddd“, 17, “eee“, 15; STD max; max=fun(std, 5); printf(“ nThe result: n“); *found* printf(“ nName: s, Age: d n“, 【 3】 , max age); 二、程序修改题 2 下列给定程序中,函数 fun的功能是:将 n个无序整数从小到大排序。 请改正程序中的错误,
3、使它能得出正确的结果。 注意:不要改动 main函数,不得增行或删行,也不得更改程序的结构 ! 试题程序: #include conio h #include stdio h #include stdlib h fun(int n, int*a) int i, j, p, t; for(j=0, j n 1; j+) p=j; *found* for(i=j+1; i n 1; i+) if(ap ai) *found* t=i ; if(p!=j) t=aj; aj=ap; ap=t; putarr(int n, int*z) int i; for(i=1; i =n; i+, z+) pr
4、intf(“ 4 d“, *z); if(!(i 10)printf(“ n“); printf(“ n”); void main() int aa20=9, 3, 0, 4, 1, 2, 5, 6, 8, 1 0, 7), n=11; system(“CLS“); printf(“ nBefore sortirig d numbers: n“, n); putarr(n, aa); fun(n, aa); printf(“ nAfter sorting d numbers: n“, n); putarr(n, aa); 三、程序设计题 3 请编写函数 fun,其功能是:移动字符串中的内容,移
5、动的规则是把第 1 m个字符,平移到字符串的最后,把第 m+1到最后的字符移到字符串的前部。 例如,字符串中原有的内容为 “ABCDEFGHIJK“, m的值为 3,移动后,字符串中的内容应该是 ”DEFGHIJKABC”。 注意:部分源程序在文件 PROG1 C中。 请勿改动 main函数和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。 试题程序: #include stdio h #include string h #define N 8 0 void fun(char*w, int m) void main() FILE*wf; char aN=“ABCDEFGH
6、IJK“, bN=“ABCDEFGHIJK“; int m; printf(“The origina string: n“); puts(a); printf(“ n nEnter m: “); scanf(“ d“, m); fun(a, m); printf(“ nThe string after moving: n“); puts(a); printf(“ n n“); *found* wf=fopen(“out dat“, “w“); fun(b, 3); fprintf(wf, “ s“, b); fclose(wf); *found* 国家二级 C语言机试(操作题)模拟试卷 297
7、答案与解析 一、程序填空题 1 【正确答案】 (1)std0 (2)stdi age (3)max name 【试题解析】 填空 1:变量一用于存储数组中年龄组大的元素。首先将数组的第一个元素赋给 nmx,然后依次向后比较,得到年龄最大的元素,因而在给 max赋初值时,应为: max=std0。 填空 2: if条件判断语句表达的是 max age应该和结构体数组中的每个年龄进行比较,从而得到最大者的年龄。 填空 3:从 printf的表达式可看出,要输出的值应为年龄最大者的 name。 二、程序修改题 2 【正确答案】 (1)for(i=j+1; i n; i+) (2)p=i; 【试题解析
8、】 该程序是对 n个无序数实现从小到大的排序,先找出整数序列的最小项,置于指针第 1个元素的位置;再找出次小项,置于第 2个元素的位置;之后顺次处理后续元素。 (1)数组的长度为 n,所以最后一个 元素的下标值为 n一 1, i的取值范围应该包括此下标值。 (2)p是中间变量,存放值较小的元素下标。 三、程序设计题 3 【正确答案】 void fun(char*w, Int m) int i, j; char t; for(i=1 ; i =m; i+) *进行 m次的循环左移 * t=w0; for(j=1; wj! = 0; j+) *从第 2个字符开始以后的每个字符都依次前移一个字符 * wj一 1=wj; wj一 1=t; *将第 1个字符放到最后一个字符中 * 【试题解析】 本题应采用 “循环左移 ”的算法,多层循环用于控制移动的字符的个数,即需进行多少次循环,内嵌循环的作用是将从第 2个字符以后的每个字符依次前移一个位置,最后将第 1个字符放到最后一个字符中。