1、二级 C 语言-374 (1)及答案解析(总分:100.00,做题时间:90 分钟)一、程序填空题(总题数:1,分数:30.00)1.请在函数 proc()的横线上填写若干表达式,使从键盘上输入一个整数 n,输出斐波那契数列的前 n 个数。斐波那契数列是一个整数数列,该数列自第 3 项开始,每个数等于前面两个数之和,即0,1,1,2,3,5.8,13,21,34,55, 注意:部分源程序给出如下。 请勿改动 main()函数和其他函数中的任何内容,仅在函数 proc()的横线上填入所编写的若干表达式或语句。 试题程序: #includestdio.h int proc(int n); void
2、 main() int 1,n=0; printf(“please enter n:“); scanf(“%d“, for(i=0:in;i+) printf(“%d“,proc(i); int proc(int n) if( 1) return 0; else if( 2) return 1; else return 3; (分数:30.00)二、程序改错题(总题数:1,分数:30.00)2.下列给定程序中,函数 fun()的功能是按以下递归公式求函数值。 例如,当给 n 输入 3 时,函数值为 60;当给 n 输入 6 时,函数值为 480。 请修改程序中的错误,使它能得到正确结果。 注意
3、:不要改动 main()函数,不得增行或删行,也不得更改程序的结构。 试题程序: #includestdio.h /*found* fun(int n); int j; /*found* if(n=1) j=15; else j=fun(n-1)*2; return(j); void main() int n; printf(“Enter n:“); scanf(“%d“, printf(“The result:%d/n/n“,fun(n); (分数:30.00)三、程序设计题(总题数:1,分数:40.00)3.编写函数 proc(),函数的功能是:根据以下公式计算 s,计算结果作为函数值返回
4、;m 通过形参传入。 s=1+1/(1+2)+1/(1+2+3)+1/(1+2+3+m) 例如,若 n 的值为 11 时,函数的值为 1.833333。 注意:部分源程序给出如下。 请勿改动 main()函数和其他函数中的任何内容,仅在函数 proc()的花括号中填入所编写的若干语句。 试题程序: #includestdlib.h #includeconio.h #includestdio.h #includestring.h float proc(int m) void main() int m; float s; system(“CLS“); printf(“/nPlease enter
5、M:“); scanf(“%d“, s=proc(m); printf(“The result is:%f/n“,s); (分数:40.00)_二级 C 语言-374 (1)答案解析(总分:100.00,做题时间:90 分钟)一、程序填空题(总题数:1,分数:30.00)1.请在函数 proc()的横线上填写若干表达式,使从键盘上输入一个整数 n,输出斐波那契数列的前 n 个数。斐波那契数列是一个整数数列,该数列自第 3 项开始,每个数等于前面两个数之和,即0,1,1,2,3,5.8,13,21,34,55, 注意:部分源程序给出如下。 请勿改动 main()函数和其他函数中的任何内容,仅在函
6、数 proc()的横线上填入所编写的若干表达式或语句。 试题程序: #includestdio.h int proc(int n); void main() int 1,n=0; printf(“please enter n:“); scanf(“%d“, for(i=0:in;i+) printf(“%d“,proc(i); int proc(int n) if( 1) return 0; else if( 2) return 1; else return 3; (分数:30.00)解析:n=0 n=1 proc(n-1)+proc(n-2)解析 由斐波那契数列的定义可知,该数列中有两个特殊
7、项。当n 为 0 时,其值为 0;当 n 为 1 时,其值为 1。因此,第一处填“n=0”;第二处填“n=1”;当 n 为其他值时,为前两项的和,因此,第三处填“proc(n-1)+proc(n-2)”。二、程序改错题(总题数:1,分数:30.00)2.下列给定程序中,函数 fun()的功能是按以下递归公式求函数值。 例如,当给 n 输入 3 时,函数值为 60;当给 n 输入 6 时,函数值为 480。 请修改程序中的错误,使它能得到正确结果。 注意:不要改动 main()函数,不得增行或删行,也不得更改程序的结构。 试题程序: #includestdio.h /*found* fun(in
8、t n); int j; /*found* if(n=1) j=15; else j=fun(n-1)*2; return(j); void main() int n; printf(“Enter n:“); scanf(“%d“, printf(“The result:%d/n/n“,fun(n); (分数:30.00)解析:错误:fun(int n); 正确:fun(int n) 错误:if(n=1) 正确:if(n=1) 解析 根据 C 语言的语法规则,函数定义之后是不加分号的。由整个程序看,函数fun()是函数定义。因此“fun(int n);应改为“fun(int n)”;表达式 n
9、-1 表示的是将 1 赋给变量 n,显然是不对的。这里应该判断变量 n 是否等于 1,因此“if(n=1)”应改为“if(n=1)”。三、程序设计题(总题数:1,分数:40.00)3.编写函数 proc(),函数的功能是:根据以下公式计算 s,计算结果作为函数值返回;m 通过形参传入。 s=1+1/(1+2)+1/(1+2+3)+1/(1+2+3+m) 例如,若 n 的值为 11 时,函数的值为 1.833333。 注意:部分源程序给出如下。 请勿改动 main()函数和其他函数中的任何内容,仅在函数 proc()的花括号中填入所编写的若干语句。 试题程序: #includestdlib.h
10、#includeconio.h #includestdio.h #includestring.h float proc(int m) void main() int m; float s; system(“CLS“); printf(“/nPlease enter M:“); scanf(“%d“, s=proc(m); printf(“The result is:%f/n“,s); (分数:40.00)_正确答案:()解析:float proc(int m) int i,s1=0;/s1 表示的是分母 float s=0.0; for(i=1;i=m;i+) s1=s1+i; s=s+1.0/s1; /s 的作用是放其分数的和 return s; /把最后得到的和 s 返回到主函数中 解析 首先定义两个变量 s1 和 s,分别用来存放计算中所用到的分母和所有分数的和。由公式可知,分母从 1 开始,每次增加 1,直至 i=m。所有分数的和放在变量 s 中,返回到主函数中。