当前位置:首页 > 2009年春答案
2009年春浙江省高校计算机等级考试试卷(二级C)
试题1(每小题3分,共12分)
阅读下列程序说明和程序,在每小题提供的若干可选答案中,挑选一个正确答案。 【程序说明】输入一个正整数n,计算下列算式的前n项之和。 s?1?1?1?1??
357运行示例: Enter n: 2 Sum = 0.67
【程序】
#include
{ int denominator, flag, i, n; double item, sum;
printf(\ scanf (\ denominator = 1; (1) ; sum = 0;
for (i = 1; (2) ; i++){ (3) ;
sum = sum + item; (4) ;
denominator = denominator + 2; }
printf (\}
【供选择的答案】
(1) A. flag = 0 B. flag = -1 C. flag = n D. flag = 1 (2) A. i >= n B. i < n C. 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 = -1 B. flag = 0
C. flag = -flag D. flag = flag
试题2(每小题3分,共12分)
阅读下列程序说明和程序,在每小题提供的若干可选答案中,挑选一个正确答案。 【程序说明】验证哥德巴赫猜想:任何一个大于6的偶数均可表示为两个素数之和。
例如6=3+3,8=3+5,…,18=7+11。将6~20之间的偶数表示成两个素数之和,打印时一行打印5组。要求定义和调用函数prime(m)判断m是否为素数,当m为素数时返回1,否则返回0。素数就是只能被1和自身整除的正整数,1不是素数,2是素数。
运行示例:
6=3+3 8=3+5 10=3+7 12=5+7 14=3+11 16=3+13 18=5+13 20=3+17
【程序】
#include
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) ){
printf(\ count++;
if( (7) ) printf(\ (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 || prime(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 != 0 5个就换行。
(8) A. break; C. continue;
退出内层循环。
B. else break; D. ;
试题3(每小题3分,共12分)
阅读下列程序说明和程序,在每小题提供的若干可选答案中,挑选一个正确答案。 【程序说明】
输入一行字符,统计并输出其中数字字符、英文字母和其它字符的个数。 要求定义并调用函数count(s, digit, letter, other)分类统计字符串s中数字字符、英文字母和其它字符的个数,函数形参s的类型是字符指针,形参digit, letter, other的类型是整型指针,函数类型是void。
运行示例:
Enter characters: f(x,y)=5x+2y-6 Digit=3 letter=5 other=6
【程序】
#include
void count (char * s, int * digit, int * letter, int * other) { (9)
while( (10) ){
if(*s >='0' && *s <='9')
(*digit) ++; /*等于digit++*/
else if((*s >= 'a' && *s <= 'z')||(*s >= 'A' && *s <= 'Z')) (*letter) ++; /*等于letter++*/ else
(*other) ++; /*等于other++*/ s++; }} main( )
{ int i = 0, digit, letter, other; char ch, str[80];
printf(\ ch = getchar();
while( (11) ){ str[i] = ch; i++;
ch = getchar(); }
str[i] = '\\0'; (12) ;
printf(\letter=%d other=%d\\n\digit, letter, other);
}
本题的思想很简单,只不过使用了指针而已。
(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. 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
{ int flag = 0, i;
int a[7] = {8, 9, 7, 9, 8, 9, 7}; for(i = 0; i < 7; i++) if(a[i] == 7){ flag = i; break; }
printf( \ flag = -1;
for(i = 6; i >= 0; i--) if(a[i] == 8){
break; /*注意1,跳出循环,下一句没有执行,所以flag还是-1*/ flag = i; }
printf( \ flag = 0;
for(i = 0; i < 7; i++) if(a[i] == 9){
printf( \ }
printf( \ flag = 0;
共分享92篇相关文档