1、二级 C 语言-352 (1)及答案解析(总分:100.00,做题时间:90 分钟)一、程序填空题(总题数:1,分数:30.00)1.请补充函数 proc(),该函数的功能是:把一个整数转换成字符串,并倒序保存在字符数组 str 中。例如,当 n=12345 时,str=“54021“。 注意:部分源程序给出如下。 请勿改动 main()函数和其他函数中的任何内容,仅在函数 proc()的横线上填入所编写的若干表达式或语句。 试题程序: #includestdlib.h #includestdio.h #includeconio.h #define M 100 char strM; void
2、proc(long int n) int i=0; while( 1) stri= 2; n/=10; i+; 3; void main() long int n=12345; system(“CLS“); printf(“*the origial data*/n“); printf(“n=%1d“,n); proc(n); printf(“/n%s“,str); (分数:30.00)二、程序改错题(总题数:1,分数:30.00)2.数列中,第一项为 3,后一项都比前一项的值增 5。下列给定程序中,函数 proc()的功能是:计算前n(4n50)项的累计和。在累加过程中把那些被 4 除后余 2
3、 的当前累加值放入数组中,符合此条件的累加值作为函数值返回主函数。例如,当 n 的值为 20 时,该数列为 3,8,13,18,23,28,93,98。符合此条件的累加值应为 42,126,366,570,1010。 请修改程序中的错误,使它能得出正确的结果。 注意:不要改动 main()函数,不得增行或删行,电不得更改程序的结构。 试题程序: #includestdio.h #define M 20 int proc(int n,int*a) /*found* int i,j,k,sum; sum=0; for(k=3,i=0;iin;i+,k+=5) sum=sum+k; /*found*
4、 if(sum%4=2) aj+=sum; return j; void main() int arrM,d,n,i; printf(“/nEnter n(4=n-50):“); scanf(“%d“, d=proc(n,arr); printf(“/n/nThe result:/n“); for(i=0;id;i+) printf(“%6d“,arri); printf(“/n/n“); (分数:30.00)三、程序设计题(总题数:1,分数:40.00)3.编写函数 proc(),它的功能是求 m 以内(不包括 m)同时能被 5 与 11 整除的所有自然数之和的平方根s,并作为函数值返回。
5、例如,m 为 100 时,函数值应为 s=7.416198。 注意:部分源程序给出如下。 请勿改动 main()函数和其他函数中的任何内容,仅在函数 proc()的花括号中填入所编写的若干语句。 试题程序: #includestdlib.h #includeconio.h #includemath.h #includestdio.h double proc(int n) void main() system(“CLS“); printf(“s=%f/n“,proc(100); (分数:40.00)_二级 C 语言-352 (1)答案解析(总分:100.00,做题时间:90 分钟)一、程序填空题
6、(总题数:1,分数:30.00)1.请补充函数 proc(),该函数的功能是:把一个整数转换成字符串,并倒序保存在字符数组 str 中。例如,当 n=12345 时,str=“54021“。 注意:部分源程序给出如下。 请勿改动 main()函数和其他函数中的任何内容,仅在函数 proc()的横线上填入所编写的若干表达式或语句。 试题程序: #includestdlib.h #includestdio.h #includeconio.h #define M 100 char strM; void proc(long int n) int i=0; while( 1) stri= 2; n/=1
7、0; i+; 3; void main() long int n=12345; system(“CLS“); printf(“*the origial data*/n“); printf(“n=%1d“,n); proc(n); printf(“/n%s“,str); (分数:30.00)解析:n0 n%10+“0“ str=“/0“解析 按照题目中要求将一个整数转化成字符串,需要把整数每一位上的数字变为字符。因此,第一处处填“n0”;依次将整数从低位到高位的数字转化为字符,因此,第二处处填“n%10+“0“”。最后为新的字符串添加结束符,因此,第三处处填“stri=“/0“”。二、程序改错题
8、(总题数:1,分数:30.00)2.数列中,第一项为 3,后一项都比前一项的值增 5。下列给定程序中,函数 proc()的功能是:计算前n(4n50)项的累计和。在累加过程中把那些被 4 除后余 2 的当前累加值放入数组中,符合此条件的累加值作为函数值返回主函数。例如,当 n 的值为 20 时,该数列为 3,8,13,18,23,28,93,98。符合此条件的累加值应为 42,126,366,570,1010。 请修改程序中的错误,使它能得出正确的结果。 注意:不要改动 main()函数,不得增行或删行,电不得更改程序的结构。 试题程序: #includestdio.h #define M 2
9、0 int proc(int n,int*a) /*found* int i,j,k,sum; sum=0; for(k=3,i=0;iin;i+,k+=5) sum=sum+k; /*found* if(sum%4=2) aj+=sum; return j; void main() int arrM,d,n,i; printf(“/nEnter n(4=n-50):“); scanf(“%d“, d=proc(n,arr); printf(“/n/nThe result:/n“); for(i=0;id;i+) printf(“%6d“,arri); printf(“/n/n“); (分数:
10、30.00)解析:错误:int i,j,k,sum; 正确:int i,j=0,k,sum; 错误:if(sum%4=2) 正确:if(sum%4=2) 解析 由函数 proc()可知,变量 j 表示数组 a 的下标,其初始化应该为 0,因此,“int i,j,k,sum;”应改为“int i,j=0,k,sum;”。每求一次和,要判断其被 4 除后的余值是否为 2,因此,“if(sum%4=2)”应改为“if(sum%4=2)”。三、程序设计题(总题数:1,分数:40.00)3.编写函数 proc(),它的功能是求 m 以内(不包括 m)同时能被 5 与 11 整除的所有自然数之和的平方根s
11、,并作为函数值返回。 例如,m 为 100 时,函数值应为 s=7.416198。 注意:部分源程序给出如下。 请勿改动 main()函数和其他函数中的任何内容,仅在函数 proc()的花括号中填入所编写的若干语句。 试题程序: #includestdlib.h #includeconio.h #includemath.h #includestdio.h double proc(int n) void main() system(“CLS“); printf(“s=%f/n“,proc(100); (分数:40.00)_正确答案:()解析:double proc(int n) double s=0.0; int i; for(i=0;in;i+) /从 0n 中找到既能被 5 整除同时又能被 11 整除的数,并将这些数求和 if(i%5=0/对 s 求平方根 return s; 解析 按照题目中要求求 m 以内(不包括 m)同时能被 5 与 11 整除的所有自然数之和的平方根 s,需要判断 m 以内的所有整数是否能同时被 5 与 11 整除,首先求出同时能被 5 与 11 整除的所有自然数之和,然后再求和的平方根,最后返回到主函数当中。