1、国家二级 C 语言程序设计机试(程序修改题)模拟试卷 5 及答案解析(总分:8.00,做题时间:90 分钟)一、程序修改题(总题数:4,分数:8.00)1.下列给定程序中,函数 fun 的功能是:计算整数 n 的阶乘。请改正程序中的错误,使它能得出正确的结果。注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结构!试题程序:#includestdlibh#includestdiohdouble fun(int n) double result:10; while(n1&n170)*found* result*c=一一 n:*found* return;void main() in
2、t n; prinff(“Enter fill integer:”); seanf(“d”,&n); printf(“nd!=1gn”,n,fun(n);(分数:2.00)_2.下列给定程序中,函数 fun 的功能是:根据输入的三个边长(整型值),判断能否构成三角形。若能构成等边三角形,则返回 3;若是等腰三角形,则返回 2;若能构成三角形则返回 1;若不能,则返回 0。 请改正程序中的错误,使它能得出正确的结果。 注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结构! 试题程序:#includestdioh#includemathhint fun(int a,int b,in
3、t c) if(a+bc&b+ca&a+cb) if(a=b&b=c)*found* return 1; else if(a=bb=c a=c) return 2;*found* else return 3; else retum 0;void main() int a,b,c,shape; prinff(“nInput a,b,c:”); seanf(“ddd”,&a,&b,c); prinff(“ha=d,b=d,c=dn”,a,b,c); shape=fun(a,b,c); printf(“nThe shape:dn”,shape);(分数:2.00)_3.下列给定的程序中,函数 fun
4、 的功能是:计算并输出 k 以内最大的 10 个能被 13 或 17 整除的自然数之和。k 的值由主函数传入,若 k 的值为 500,则函数的值为 4622。请改正程序中的错误,使它能得出正确的结果。注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结构!试题程序:#neludestdioh#includeconioh#includestdlibhint fun(int k) int m=0,mc=0,j; while(k=2)&(me10) *found* if(k13=0)(k17=0) m=m+k;mc+; k 一一;*found* return m; void main(
5、)prinff(“dn”,fun(500);(分数:2.00)_4.下列给定程序中,函数 fun 的功能是:首先把 b 所指字符串中的字符按逆序存放,然后将 a 所指字符串中的字符和 b 所指字符串中的字符,按排列的顺序交叉合并到 c 所指数组中,过长的剩余字符接在 c 所指的数组的尾部。例如,当 a 所指字符串中的内容为“abcdefg”,b 所指字符串中的内容为“1234”时,c 所指数组中的内容应为“a4b3c2dlefg”;而当 a 所指字符串中的内容为“1234”,b 所指字符串的内容为“abcdefg”时,c 所指数组中的内容应该为“1g2f3e4dcba”。 请改正程序中的错误,
6、使它能得出正确的结果。 注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结构! 试题程序:#includestdioh#includestringhvoid fun(char*a,char*b,char*c) int i,j;char ch; i=0;j=strlen(b)一 1;*found* while(ij) ch=bi;bi=bj;bj=eh; 1+;一一; while(*a*b) *found* If(*a) *c= *a;c+;a+; if($b) * c=*b;c+;b+; *c=0:main()char sl100,s2100,t200;prinff(“nEnt
7、er sl string:”);scanf(“S”,s1);prinff(“nEnter s2 string:”);scanf(“s”,s2);fun(s1,s2,t);printf(“nThe result is:sn”,t);(分数:2.00)_国家二级 C 语言程序设计机试(程序修改题)模拟试卷 5 答案解析(总分:8.00,做题时间:90 分钟)一、程序修改题(总题数:4,分数:8.00)1.下列给定程序中,函数 fun 的功能是:计算整数 n 的阶乘。请改正程序中的错误,使它能得出正确的结果。注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结构!试题程序:#inclu
8、destdlibh#includestdiohdouble fun(int n) double result:10; while(n1&n170)*found* result*c=一一 n:*found* return;void main() int n; prinff(“Enter fill integer:”); seanf(“d”,&n); printf(“nd!=1gn”,n,fun(n);(分数:2.00)_正确答案:(正确答案:(1)result*=n 一一; (2)retum result;)解析:解析:本题考查:复合赋值运算;通过 return 语句完成函数值的返回。 该题采用
9、循环语句计算 n的阶乘。当 n 大于 1 且小于 170 时,令 result 与 n 相乘,同时 n 自动减 1,循环至 n=2(n=1 时无须相乘)。最后将阶乘的积 result 返回给主函数。2.下列给定程序中,函数 fun 的功能是:根据输入的三个边长(整型值),判断能否构成三角形。若能构成等边三角形,则返回 3;若是等腰三角形,则返回 2;若能构成三角形则返回 1;若不能,则返回 0。 请改正程序中的错误,使它能得出正确的结果。 注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结构! 试题程序:#includestdioh#includemathhint fun(in
10、t a,int b,int c) if(a+bc&b+ca&a+cb) if(a=b&b=c)*found* return 1; else if(a=bb=c a=c) return 2;*found* else return 3; else retum 0;void main() int a,b,c,shape; prinff(“nInput a,b,c:”); seanf(“ddd”,&a,&b,c); prinff(“ha=d,b=d,c=dn”,a,b,c); shape=fun(a,b,c); printf(“nThe shape:dn”,shape);(分数:2.00)_正确答案:
11、(正确答案:(1)return 3; (2)return 1;)解析:解析:(1)变量 a、b、c 分别表示三条边,当三边相等(a=b&b=c)时,返回 3。 (2)在能构成三角形的前提下,如果不能构成等边三角形或等腰三角形,则返回 1。3.下列给定的程序中,函数 fun 的功能是:计算并输出 k 以内最大的 10 个能被 13 或 17 整除的自然数之和。k 的值由主函数传入,若 k 的值为 500,则函数的值为 4622。请改正程序中的错误,使它能得出正确的结果。注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结构!试题程序:#neludestdioh#includecon
12、ioh#includestdlibhint fun(int k) int m=0,mc=0,j; while(k=2)&(me10) *found* if(k13=0)(k17=0) m=m+k;mc+; k 一一;*found* return m; void main()prinff(“dn”,fun(500);(分数:2.00)_正确答案:(正确答案:(1)if(k13=0)(k17=0) (2)return m;)解析:解析:(1)c 语言中,x 能被 y 整除的表示方法是 xy=0,而不是题目中所表示的 xy=0。所以,if(k13=0)(k17=0)修改后的结果应该是答案所示信息。
13、(2)程序中缺少程序完整所需的“”,此类信息在做题时一定要注意,可以在做题前先运行一下程序,这样明显的错误一般都会有错误信息显示出来。比如丢失“”的错误信息是“Compouncl statement missingin flruction fun”。 说明:做题之前先运行一下程序,如果有书写错误,系统会提示,这样可以简化题目。4.下列给定程序中,函数 fun 的功能是:首先把 b 所指字符串中的字符按逆序存放,然后将 a 所指字符串中的字符和 b 所指字符串中的字符,按排列的顺序交叉合并到 c 所指数组中,过长的剩余字符接在 c 所指的数组的尾部。例如,当 a 所指字符串中的内容为“abcde
14、fg”,b 所指字符串中的内容为“1234”时,c 所指数组中的内容应为“a4b3c2dlefg”;而当 a 所指字符串中的内容为“1234”,b 所指字符串的内容为“abcdefg”时,c 所指数组中的内容应该为“1g2f3e4dcba”。 请改正程序中的错误,使它能得出正确的结果。 注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结构! 试题程序:#includestdioh#includestringhvoid fun(char*a,char*b,char*c) int i,j;char ch; i=0;j=strlen(b)一 1;*found* while(ij) c
15、h=bi;bi=bj;bj=eh; 1+;一一; while(*a*b) *found* If(*a) *c= *a;c+;a+; if($b) * c=*b;c+;b+; *c=0:main()char sl100,s2100,t200;prinff(“nEnter sl string:”);scanf(“S”,s1);prinff(“nEnter s2 string:”);scanf(“s”,s2);fun(s1,s2,t);printf(“nThe result is:sn”,t);(分数:2.00)_正确答案:(正确答案:(1)while(i解析:解析:(1)由 i 和 j 定义的初始值可知,此处应该判断 i 是否小于 j,所以应改为 while(i