1、国家二级 C+机试(操作题)模拟试卷 184及答案与解析 一、基本操作题 1 程序通过定义学生结构体变量,存储学生的学号、姓名和三门课的成绩。函数fun的功能是:将形参 a中的数据进行修改,把修改后的数据作为函数值返回主函数进行输出。 例如,若传给形参 a的数据中学号、姓名和三门课的成绩依次是: 10001、“ZhangSan”、 95、 80、 88,修改后的数据应为: 10002、 “LiSi”、 96、 81、 89。 请在程序的中括号处填入正确的内容并将中括号删除,使程序得出正确的结果。 注意 :部分源程序给出如下。 不得增行或删行,也不得更改程序的结构 ! 试题程序: #includ
2、e #include struct student f long sno; char name10; float score3; ; *found* 【 1】 fun(struct student a) int i; a sno=10002; *found* strcpy(【 2】, ”Lisi”); *found* for(i=o; i #include #include #include #include #include *found* void upfst(char P) int k=0; for(; *p; p+) if(k) if(*p=) k=0; ) else if(*p!=)
3、 k=1; *p=toupper(*p); void main() char chrstr81; System(“CLS“); printf (“ nPlease enter an English text line: “); gets(chrstr); printf(“ nBofore changing: n s“, chrstr); upfst(chrstr); printf(“ nAfter changing: n s n“, chrstr); 三、综合应用题 3 请编写函数 fun,其功能是:移动字符串中的内容,移动的规则是把第 1 m个字符,平移到字符串的最后,把第 m+1到最后的字
4、符移到字符串的前部。 例如,字符串中原有的内容为 ”ABCDEFGHIJK”, m的值为 3,移动后,字符串中的内容应该是 ”DEFGHIJKABC”。 注意:部分源程序在文件 PROGl C中。 请勿改动 main函数和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。 试题程序: #include #include #define N 80 void fun(char*w, int m) void main() FILE*wf; char aN=“ABCDEFGHIJK“, b N=“ABCDEFGHIJK“; int m; printf(“The origina st
5、ring: 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+机试(操作题)模拟试卷 184答案与解 析 一、基本操作题 1 【正确答案】 (1)struct student (2)a Name (
6、3)a scorei 【试题解析】 填空 1:函数定义时,类型标识符指明了本函数的类型,函数的类型实际上是函数返回值的类型。本题中,用结构类型定义函数类型。 填空 2和填空 3:此处考查结构体变量成员的表示方法, a name和 a scorei分别表示学生的姓名和成绩。 二、简单应用题 2 【正确答案】 void upfst(char*p) 【试题解析】 主函数中 fun函数的调 用方式说明函数 fun的参数应为指针类型。 三、综合应用题 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个字符放到最后一个字符中。