1、国家二级(C 语言)机试-试卷 18-1 及答案解析(总分:12.00,做题时间:90 分钟)一、程序填空题(总题数:2,分数:4.00)1.程序填空题()(分数:2.00)_2.程序通过定义学生结构体变量,存储了学生的学号、姓名和 3 门课的成绩。函数 fun 的功能是将形参 a所指结构体变量 8 中的数据进行修改,并把 a 中地址作为函数值返回主函数,在主函数中输出修改后的数据。 例如:a 所指变量 s 中的学号、姓名、和三门课的成绩依次是:10001、”ZhangSan”、95、80、88,修改后输出 t 中的数据应为:10002、”LiSi”、96、81、89。 请在程序的下划线处填入
2、正确的内容并把下划线删除,使程序得出正确的结果。 注意:源程序存放在考生文件夹下的 BLANKlC 中。不得增行或删行,也不得更改程序的结构 l #include #include struct student long sno; char name10; float score3; ; /*found*/ 【1】fun(struct student *a) int i; a-sno = 10002; strcpy(a-name, “LiSi“); /*found*/ for (i=0; isno, t-name); for (i=0; iscorei); printf(“/n“); (分数:
3、2.00)_二、程序修改题(总题数:2,分数:4.00)3.程序修改题()(分数:2.00)_4.下列给定程序中,函数 proc()的功能是:首先把 b 所指字符串中的字符按逆序存放,然后将 str1 所指字符串中的字符和 str2 所指字符串中的字符,按排列的顺序交叉合并到 str 所指数组中,过长的剩余字符接在 str 所指数组的尾部。例如,当 str1 所指字符串中的内容为 ABCDEFG,str2 所指字符串中的内容为 1234 时,str 所指数组中的内容应该为 A483C2DIEFG;而当 str1 所指字符串中的内容为 1234,str2 所指字符串中的内容为 ABCEDFG 时
4、,str 所指数组中的内容应该为 1G2F3E4DCBA。 请修改程序中的错误,使它能得出正确的结果。 注意:不要改动 main()函数,不得增行或删行,也不得更改程序的结构。 试题程序: #include #include #include #include void proc(char*str1,char*str2,char * str) int i,j;char ch; i=0;j=strlen(str2)1; /*found* while(ij) ch=str2i;str2i=str2j;str2j=ch; i+;j; while(*str1|*str2) if(*str1)*str=
5、*str1;str+;str1+;) if(*str2)*str=*str2;str+;str2+;) /*found* *str=0; void main() char s1100,s2100,t200; system(“CLS“); printf(“nEnter s1 string:“); scaIif(“s“,s1); printf(“nEnter s2 string:“); scanf(“s“,s2); proc(s1,s2,t); printf(“nThe resuh is:sn“,t); (分数:2.00)_三、程序设计题(总题数:2,分数:4.00)5.程序设计题()(分数:2.
6、00)_6.程序定义了 NN 的二维数组,并在主函数中自动赋值。请编写函数 fun(rot aN,int n),函数的功能是:使数组左下三角元素中的值乘以 n。 例如:若 n 的值为 3,a 数组中的值为 则返回主程序后 a 数组中的值应为 (分数:2.00)_国家二级(C 语言)机试-试卷 18-1 答案解析(总分:12.00,做题时间:90 分钟)一、程序填空题(总题数:2,分数:4.00)1.程序填空题()(分数:2.00)_解析:2.程序通过定义学生结构体变量,存储了学生的学号、姓名和 3 门课的成绩。函数 fun 的功能是将形参 a所指结构体变量 8 中的数据进行修改,并把 a 中地
7、址作为函数值返回主函数,在主函数中输出修改后的数据。 例如:a 所指变量 s 中的学号、姓名、和三门课的成绩依次是:10001、”ZhangSan”、95、80、88,修改后输出 t 中的数据应为:10002、”LiSi”、96、81、89。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 注意:源程序存放在考生文件夹下的 BLANKlC 中。不得增行或删行,也不得更改程序的结构 l #include #include struct student long sno; char name10; float score3; ; /*found*/ 【1】fun(struc
8、t student *a) int i; a-sno = 10002; strcpy(a-name, “LiSi“); /*found*/ for (i=0; isno, t-name); for (i=0; iscorei); printf(“/n“); (分数:2.00)_正确答案:(正确答案:struct student* a-scorei a)解析:解析:第一空:主函数内 fun 函数的调用形式是“t=fun(”,t 是 student 结构体指针,故fun 函数的返回值是 student 结构体指针,因此第一空为“struct student *”。 第二空:“for (i=0; i
9、scorei”。 第三空:此处补充返回值,由第一空的分析可知,返回值是指针,a 是指针变量,所以返回值为 a,即第三空为“a”。二、程序修改题(总题数:2,分数:4.00)3.程序修改题()(分数:2.00)_解析:4.下列给定程序中,函数 proc()的功能是:首先把 b 所指字符串中的字符按逆序存放,然后将 str1 所指字符串中的字符和 str2 所指字符串中的字符,按排列的顺序交叉合并到 str 所指数组中,过长的剩余字符接在 str 所指数组的尾部。例如,当 str1 所指字符串中的内容为 ABCDEFG,str2 所指字符串中的内容为 1234 时,str 所指数组中的内容应该为
10、A483C2DIEFG;而当 str1 所指字符串中的内容为 1234,str2 所指字符串中的内容为 ABCEDFG 时,str 所指数组中的内容应该为 1G2F3E4DCBA。 请修改程序中的错误,使它能得出正确的结果。 注意:不要改动 main()函数,不得增行或删行,也不得更改程序的结构。 试题程序: #include #include #include #include void proc(char*str1,char*str2,char * str) int i,j;char ch; i=0;j=strlen(str2)1; /*found* while(ij) ch=str2i;
11、str2i=str2j;str2j=ch; i+;j; while(*str1|*str2) if(*str1)*str=*str1;str+;str1+;) if(*str2)*str=*str2;str+;str2+;) /*found* *str=0; void main() char s1100,s2100,t200; system(“CLS“); printf(“nEnter s1 string:“); scaIif(“s“,s1); printf(“nEnter s2 string:“); scanf(“s“,s2); proc(s1,s2,t); printf(“nThe res
12、uh is:sn“,t); (分数:2.00)_正确答案:(正确答案:(1)错误:while(ij) 正确:while(i解析:解析:由函数 proc()可知,变量 i 和 j 分别存放的是字符串 str 前面和后面第 i 个字符的位置,当 ij)”应改为“while(i三、程序设计题(总题数:2,分数:4.00)5.程序设计题()(分数:2.00)_解析:6.程序定义了 NN 的二维数组,并在主函数中自动赋值。请编写函数 fun(rot aN,int n),函数的功能是:使数组左下三角元素中的值乘以 n。 例如:若 n 的值为 3,a 数组中的值为 则返回主程序后 a 数组中的值应为 (分数:2.00)_正确答案:(正确答案: int i,j; for(i=0; i=j”,包括对角线。 (2)依次访问二维数组,把符合条件的元素的值乘以 n。