1、国家二级 C语言机试(操作题)模拟试卷 259及答案解析(总分:6.00,做题时间:90 分钟)一、程序填空题(总题数:1,分数:2.00)1.下列给定程序中,函数 fun的功能是:计算如下公式 直到 (分数:2.00)_二、程序修改题(总题数:1,分数:2.00)2.下列给定程序中,函数 tim的功能是:先将字符串 s中的字符按正序存放到字符串 t中,然后把 s中的字符按逆序连接到字符串 t的后面。例如,当 s中的字符串为“ABCDE”时,则 t中的字符串应为“ABCDEEDCBA”。请改正程序中的错误,使它能得出正确的结果。注意:不要改动 main函数,不得增行或删行,也不得更改程序的结构
2、!试题程序:#includestdlibh#includeconioh#includestdioh#includestringhvoid fun(char*s,char*t) int i,s1; s1=strlen(s);*found* for(i=0;i=s1;i+) ti=Si; for(i=0;is1;i+) ts1+i=Si;*found* ts1=0; void main() char s100,t100; system(“CLS“); printf(”nPlease enter string s:“); scanf(“S“,S); fun(S,t); printf “The res
3、ult is:sn“,t);(分数:2.00)_三、程序设计题(总题数:1,分数:2.00)3.请编写一个函数 int fun(int*s,int t,int*k),用来求出数组的最大元素在数组中的下标并存放在k所指向的存储单元中。例如,输入如下整数:876 675 896 101 301 401 980 431 451 777 则输出结果为 6,980。注意:部分源程序在文件 PROG1C 中。请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。试题程序:#includeconioh#includestdioh#includestdlibhint
4、fun(int *s,int t,int*k)void main() FILE*wf; int a10=876,675,896,101,301,401,980,431,451,777),k; system(“CLS“); fun(a,10,&k); printf(“d,dn“,k,ak); * wf=fopen(“outdat“,“W“); fprintf(wf,“d,d“,k,ak); fclose(wf); *(分数:2.00)_国家二级 C语言机试(操作题)模拟试卷 259答案解析(总分:6.00,做题时间:90 分钟)一、程序填空题(总题数:1,分数:2.00)1.下列给定程序中,函数
5、 fun的功能是:计算如下公式 直到 (分数:2.00)_正确答案:(正确答案:(1)30 或(double)3 (2) (3)(t+1)解析:解析:本题考查:基本算术运算的类型转换。其转换规则如下: 如果双目运算符两边运算数的类型一致,则所得结果的类型与运算数的类型一致。 如果双目运算符两边运算数的类型不一致,系统将自动进行类型转换,使运算符两边运算数的类型达到一致后,再进行运算。其类型转换规律见下表。 二、程序修改题(总题数:1,分数:2.00)2.下列给定程序中,函数 tim的功能是:先将字符串 s中的字符按正序存放到字符串 t中,然后把 s中的字符按逆序连接到字符串 t的后面。例如,当
6、 s中的字符串为“ABCDE”时,则 t中的字符串应为“ABCDEEDCBA”。请改正程序中的错误,使它能得出正确的结果。注意:不要改动 main函数,不得增行或删行,也不得更改程序的结构!试题程序:#includestdlibh#includeconioh#includestdioh#includestringhvoid fun(char*s,char*t) int i,s1; s1=strlen(s);*found* for(i=0;i=s1;i+) ti=Si; for(i=0;is1;i+) ts1+i=Si;*found* ts1=0; void main() char s100,t
7、100; system(“CLS“); printf(”nPlease enter string s:“); scanf(“S“,S); fun(S,t); printf “The result is:sn“,t);(分数:2.00)_正确答案:(正确答案:(1)for(i=0;isl;i+) (2)t2*sl=0;)解析:解析:(1)字符串长度为 sl,但数组下标从 0sl1,因此 不包括 sl。 (2)正序和逆序字符串都加入了 t串中,此时 t 串中最后一个元素的下标为 2*sl一 1,所以在 2* sl下标处加入字符串结束标识0。三、程序设计题(总题数:1,分数:2.00)3.请编写一个
8、函数 int fun(int*s,int t,int*k),用来求出数组的最大元素在数组中的下标并存放在k所指向的存储单元中。例如,输入如下整数:876 675 896 101 301 401 980 431 451 777 则输出结果为 6,980。注意:部分源程序在文件 PROG1C 中。请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。试题程序:#includeconioh#includestdioh#includestdlibhint fun(int *s,int t,int*k)void main() FILE*wf; int a10=8
9、76,675,896,101,301,401,980,431,451,777),k; system(“CLS“); fun(a,10,&k); printf(“d,dn“,k,ak); * wf=fopen(“outdat“,“W“); fprintf(wf,“d,d“,k,ak); fclose(wf); *(分数:2.00)_正确答案:(正确答案:int fun(int*s,int t,int*k) int i; *k=0;*k 所指的数是数组的下标值* for(i=0;it;i+) if(s*ksi) *k=i; *找到数组的最大元素,把该元素的下标赋给 k所指的数* return s*k;*返回数组的最大元素*| )解析:解析:本题中直接使用指针变量 k,使用时要注意对 k进行指针运算。程序一开始让 k指向数组中的第一个元素,即*k=0。