1、春答案2009年春浙江省高校计算机等级考试试卷(二级C)试题1(每小题3分,共12分)阅读下列程序说明和程序,在每小题提供的若干可选答案中,挑选一个正确答案。【程序说明】输入一个正整数n,计算下列算式的前n项之和。 运行示例:Enter n: 2Sum = 0.67 【程序】#include main( ) int denominator, flag, i, n; double item, sum; printf(Enter n: ); scanf (%d, &n); denominator = 1; (1) ; sum = 0; for (i = 1; (2) ; i+) (3) ; sum
2、 = sum + item; (4) ; denominator = denominator + 2; printf (Sum = %.2fn, sum); 【供选择的答案】(1) A. flag = 0 B. flag = -1 C. flag = n D. flag = 1(2) A. i = n B. i n D. i = n(3) A. item = flag / denominator B. item = 1 / denominator C. item = flag * 1.0 / denominator D. item = 1.0 / denominator(4) A. flag
3、= -1 B. flag = 0C. flag = -flag D. flag = flag试题2(每小题3分,共12分)阅读下列程序说明和程序,在每小题提供的若干可选答案中,挑选一个正确答案。【程序说明】验证哥德巴赫猜想:任何一个大于6的偶数均可表示为两个素数之和。例如6=3+3,8=3+5,18=7+11。将620之间的偶数表示成两个素数之和,打印时一行打印5组。要求定义和调用函数prime(m)判断m是否为素数,当m为素数时返回1,否则返回0。素数就是只能被1和自身整除的正整数,1不是素数,2是素数。运行示例:6=3+3 8=3+5 10=3+7 12=5+7 14=3+1116=3+1
4、3 18=5+13 20=3+17【程序】#include #include int prime(int m) int i, n; if(m = 1) return 0;/*注意:返回0表示不是素数*/ n = sqrt(m); for( i = 2; i = n; i+) if(m % i = 0) return 0; (5) main() int count, i, number; count = 0; for(number = 6; number = 20; number = number + 2) for(i = 3; i = number/2; i = i + 2) if( (6)
5、) printf(%d=%d+%d , number, i, number - i); count+; if( (7) ) printf(n); (8) 在本题中,函数prime(i)用来判断是不是素数。返回0,不是素数,返回1,是素数。【供选择的答案】(5) A. ; B. return 1; C. return 0; D. else return 1;(6) A. prime(i) != 0 | prime(number - i) != 0 B. prime(i) != 0 & prime(number - i) != 0/*表示两个都是素数*/ C. prime(i) = 0 | pri
6、me(number - i) = 0 D. prime(i) = 0 & prime(number - i) = 0(7) A. count % 5 = 0 B. count % 5 != 0 C. (count+1) % 5 = 0 D. (count+1) % 5 != 05个就换行。(8) A. break; B. else break; C. continue; D. ;退出内层循环。试题3(每小题3分,共12分)阅读下列程序说明和程序,在每小题提供的若干可选答案中,挑选一个正确答案。【程序说明】输入一行字符,统计并输出其中数字字符、英文字母和其它字符的个数。 要求定义并调用函数cou
7、nt(s, digit, letter, other)分类统计字符串s中数字字符、英文字母和其它字符的个数,函数形参s的类型是字符指针,形参digit, letter, other的类型是整型指针,函数类型是void。运行示例:Enter characters: f(x,y)=5x+2y-6Digit=3 letter=5 other=6【程序】#include void count (char * s, int * digit, int * letter, int * other) (9) while( (10) ) if(*s =0 & *s = a & *s = A & *s = Z)
8、(*letter) +; /*等于letter+*/ else (*other) +; /*等于other+*/ s+; main( ) int i = 0, digit, letter, other; char ch, str80; printf(Enter characters: ); ch = getchar(); while( (11) ) stri = ch; i+; ch = getchar(); stri = 0; (12) ; printf(Digit=%d letter=%d other=%dn, digit, letter, other);本题的思想很简单,只不过使用了指针
9、而已。(9) A. int digit = 0, letter = 0, other = 0;B. int *digit =0, *letter = 0, *other = 0; C. digit = letter = other = 0;D. *digit = *letter = *other = 0;内容赋值为0.不是指针赋值为0.(10) A. *s+ != 0 B. *s+ != n C. *s != 0 D. *s != n只能在A和C中选择。但因为A在结束循环后还要移动指针S,此时已经指向了0,再移动指针会出错,所以选择C。(11) A. ch != 0 B. ch != n C.
10、 ch = 0 D. ch = n(12) A. count(str, &digit, &letter, &other) B. count(&str, &digit, &letter, &other)C. count(*str, digit, letter, other)D. count(*str, *digit, *letter, *other)传地址,注意str就是字符串的首地址。由此判断其他几个选项都是错误的。试题4(每小题3分,共12分)阅读下列程序并回答问题,在每小题提供的若干可选答案中,挑选一个正确答案。【程序】程序1#include main() int flag = 0, i;
11、 int a7 = 8, 9, 7, 9, 8, 9, 7; for(i = 0; i = 0; i-) if(ai = 8) break; /*注意1,跳出循环,下一句没有执行,所以flag还是-1*/ flag = i; printf( %dn, flag); flag = 0; for(i = 0; i 7; i+) if(ai = 9) printf( %d , i); printf( n); flag = 0; for(i = 0; i 7; i+) if(ai = 7) flag = i; printf( %dn, flag); (13) 程序运行时,第1行输出 (13) 。 A.
12、 2 B. 0 C. 3 D. 6 因为第2个元素等于7,所以flag=i=2 (14) 程序运行时,第2行输出 (14) 。 A. 4 B. -1 C. 0 D. 5 看注意1 (15) 程序运行时,第3行输出 (15) 。 A. 2 4 6 B. 4 C. 1 3 5 D. 6 a1=9,a3=9.a5=9,所以答案是C。 (16) 程序运行时,第4行输出 (16) 。 A. 2 4 6 B. 2 C. 1 3 5 D. 6 最后一个7是第7个元素,即a6=7,此时i=6,所以:flag=i=6.试题5(每小题3分,共12分)阅读下列程序并回答问题,在每小题提供的若干可选答案中,挑选一个正
13、确答案。【程序】int f1(int n) if(n = 1) return 1; else return f1(n-1) + n;int f2(int n) switch(n) case 1: case 2: return 1; default: return f2(n-1) + f2(n-2); void f3(int n) printf(%d, n%10); if(n/10 !=0) f3(n/10);void f4(int n) if(n/10 != 0) f4(n/10); printf(%d, n%10); #include main() printf(%dn, f1(4); pr
14、intf(%dn, f2(4); f3(123); printf(n); f4(123); printf(n);(17) 程序运行时,第1行输出 (17) 。 A. 10 B. 24 C. 6 D. 1 f1(4)=4+f1(3)=4+(3+f1(2)= 4+(3+(2+f1(1)=4+3+2+1=10(18) 程序运行时,第2行输出 (18) 。 A. 1 B. 3 C. 2 D. 4f2(4)=f2(2)+f2(3)=1+(f2(1)+f2(2)=1+1+1=3(19) 程序运行时,第3行输出 (19) 。 A. 123 B. 3 C. 321 D. 1第1次输出3,(123%10=3)第
15、2次输出2,(12%10=2)第3次输出2,(1%10=1)(20) 程序运行时,第4行输出 (20) 。 A. 1 B. 123 C. 3 D. 321试题6(每小题3分,共12分)阅读下列程序并回答问题,在每小题提供的若干可选答案中,挑选一个正确答案。【程序】#include struct num int a, b;void f(struct num s, int n) int index, j, k; struct num temp; for(k = 0; k n-1; k+) index = k; for(j = k + 1; j n; j+) if(sj.b sindex.b) in
16、dex = j; temp = sindex; sindex = sk; sk = temp; main() int count, i, k, m, n, no; struct num s100, *p; scanf(%d%d%d, &n, &m, &k); for(i = 0; i n; i+) si.a = i + 1; si.b = 0; p = s; count = no = 0; while(no b = 0) count+; if(count = m) no+; p-b = no; count = 0; p+; if(p = s + n) p = s; f(s, n); print
17、f(%d: %dn, sk-1.b, sk-1.a);(21) 程序运行时,输入5 4 3,输出 (21) 。A. 3: 5 B. 2: 3C. 1: 2 D. 4: 1 (22) 程序运行时,输入5 3 4,输出 (22) 。A. 3: 5 B. 1: 2C. 4: 3 D. 4: 2 (23) 程序运行时,输入7 5 2,输出 (23) 。A. 1: 5 B. 6: 1C. 2: 3 D. 2: 4 (24) 程序运行时,输入4 2 4#,输出 (24) 。A. 3: 3 B. 4: 2C. 2: 4 D. 4: 1 一、通过分析以下一段程序,for(i = 0; i n; i+) si.
18、a = i + 1; si.b = 0; 我们知道:结构体s的最初情况是:S0.a=1,s0.b=0S1.a=2,s1.b=0S2.a=3,s2.b=0S3.a=4,s4.b=0S4.a=5,s0.b=0二、通过分析以下一段程序,void f(struct num s, int n) int index, j, k; struct num temp; for(k = 0; k n-1; k+) index = k; for(j = k + 1; j n; j+) if(sj.b sindex.b) index = j; temp = sindex; sindex = sk; sk = temp
19、; 我们知道,函数f是按照sj.b的大小排序,小的在前、大的在后。注意,排序时sj.a也相应改变。三、分析以下程序: count = no = 0; /*赋初值,为0*/ while(no b = 0) count+; /*2*/ if(count = m) /*3*/ no+; /*4*/ p-b = no; /*5*/ count = 0; /*6*/ p+; /*7,指针向后移动一次*/ if(p = s + n) /*8这两句的意思是,如果指到头,再返回起点*/ p = s; 当循环进行了4次时,语句3的条件得到满足,所以语句4得到执行,no=1此时,指针指向s3.b,所以s3.b=1
20、;注意,此后语句7继续执行,但语句8的条件不满足,所以继续,但因为语句6已经执行,所以count=0然后,语句2再执行一次,语句8条件满足,又指向s0.这样,当下次语句3的条件满足时,no=2,而指针指向s2,所以,s2.b=2依次类推,我们得到结构体s的最后结果:S0.a=1,s0.b=5S1.a=2,s1.b=4S2.a=3,s2.b=2S3.a=4,s4.b=1S4.a=5,s5.b=3特别应该注意的是,这里m的次数是4,而n=5,所以不匹配。四,调用函数f对以上结构体排序后,结果如下:S0.a=4,s0.b=1(注意是原来的s4.b,所以S0.a=4)S1.a=3,s1.b=2S2.a
21、=5,s2.b=3S3.a=2,s4.b=4S4.a=1,s0.b=5五Sk-1.b=s3-1.b=s2.b=3Sk-1.a=s3-1.a=s2.a=5所以,(21)题的答案是A.其余各题类似。试题7 (28分)(1) 定义函数fact(n)计算n的阶乘: n! = 1 * 2 * * n,函数形参n的类型是int,函数类型是double。(2) 定义函数cal(x, e) 计算下列算式的值,直到最后一项的值小于e,函数形参x和e的类型都是double,函数类型是double。要求调用自定义函数fact(n)计算n的阶乘,调用库函数pow(x, n)计算x的n次幂。(3) 定义函数main()
22、,输入两个浮点数x和e,计算并输出下列算式的值,直到最后一项的值小于精度e。要求调用自定义函数cal(x,e)计算下列算式的值。#include double fact(int n)int k;double result=1;for (k=1;k=n;k+)result*=k;return result;double pow(double x, int n)int k;double result=1;for (k=1;k=e;k+) t=pow(x,k)/fact(k); s=s+t;return s;void main() int t=1; double s=0.0; double x,e; scanf(%lf,%lf,&x,&e); printf(s=%lfn,cal(x,e);
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1