您好,欢迎来到华佗小知识。
搜索
您的当前位置:首页模拟答案

模拟答案

来源:华佗小知识
2006年秋浙江省高等学校

计算机等级考试试卷(二级C)

试题1(每小题3分,共12分)

阅读下列程序说明和程序,在每小题提供的若干可选答案中,挑选一个正确答案。 【程序说明】

输入一行字符,统计并输出其中英文字母、数字和其他字符的个数。 运行示例:

Enter characters: f(x,y)=3x+5y-10 letter=5, digit=4, other=6

【程序】 #include <> void main( )

{ int digit, i, letter, other; (1) ch;

digit = letter = other = 0; printf(\"Enter characters: \"); while( (2) != '\\n') if( (3) ) letter ++;

(4) (ch >= '0' && ch <= '9') digit ++; else

other ++;

printf(\"letter=%d, digit=%d, other=%d\\n\ 【供选择的答案】

(1) A、* B、float C、double D、char (2) A、(ch = getchar())

B、ch = getchar()

C、getchar(ch) D、putchar(ch)

当输入的字符不是回车符时执行循环,这是典型语句,背过! (3) A、(ch >= 'a' && ch <= 'z') && (ch >= 'A' && ch <= 'Z') ch <= 'z') || (ch >= 'A' && ch <= 'Z')

C、ch >= 'a' && ch <= 'Z' D、ch >= 'A' && ch <= 'z'

判断是否为字母(大写或小写),这是典型语句! (4) A、if B、else

C、else if

注意配对,所以A错误。

D、if else

B、(ch >= 'a' &&

试题2(每小题3分,共12分)

阅读下列程序说明和程序,在每小题提供的若干可选答案中,挑选一个正确答案。 【程序说明】

输入一个整数,将它逆序输出。要求定义并调用函数reverse(long number),它的功能是返回number的逆序数。例如reverse(12345)的返回值是54321。

运行示例:

Enter an integer: -123 After reversed: -321 【程序】 #include <> void main( ) { long in;

long reverse(long number); printf(\"Enter an integer:\"); scanf(\"%ld\/*6*/

printf(\"After reversed:%ld\\n\ long reverse(long number) { int flag; (6) ;

flag = number < 0 ? -1 : 1; if( (7) ) number = - number; while(number != 0){ res = (8) ; number /= 10; } return flag*res;} 【供选择的答案】

(5) A、reverse( ) B、in

C、reverse(in) D、reverse

从/*6*/那里我们知道实际参数是in,所以这里应该选C。 (6) A、res = 0 B、long res C、long res = 0 D、res

因为这里res的取值达到了54321,超过一般整数的范围,所以要用long型,因此考虑在B和C中选。结合(8)res要有初值,所以选C。 (7) A、number > 0 B、number < 0 C、number != 0 D、number == 0

语句if( (7) ) number = - number;的作用相当于取绝对值函数abs,所以选B。 (8) A、number%10 B、res*10 + number%10 C、number/10 D、res*10 + number/10

由下一句number /= 10;可以推断这里是求余,先排除CD。仔细思考选B。

以下两句:

res = res*10 + number%10; number /= 10;

先求个位数,然后除以10,就得到十位数。也就是说,除以10后,原来的十位数就变成了个位数。

试题3(每小题3分,共12分)

阅读下列程序说明和程序,在每小题提供的若干可选答案中,挑选一个正确答案。 【程序说明】

输入一个3 行2 列的矩阵,分别输出各行元素之和. 运行示例: Enter an array: 6 3 1 -8 3 12

sum of row 0 is 9 sum of row 1 is -7 sum of row 2 is 15 【程序】 #include <> void main( )

{ int j, k, sum = 0; int a[3][2];

printf(\"Enter an array:\\n\"); for(j = 0; j < 3; j++) for(k = 0; k < 2; k++)

scanf(\"%d\ for(j = 0; j < 3; j++){ (10)

for(k = 0; k < 2; k++)

sum = (11) ;

printf(\"sum of row %d is %d\\n\ 【供选择的答案】

(9) A、a[j][k] B、a[k][j] C、&a[j][k] D、&a[k][j]

双层循环,输入数组,根据Scanf的语法,首先排除AB;根据行列关系(先按照行,后按照列),可以推断这里是C。

(10) A、; B、sum = -1; C、sum = 1; D、sum = 0; 每次初值为0,否则会各行累加。

(11) A、sum + a[j][k] B、sum + a[j][j] C、sum + a[k][k] D、0

BC只会累加对角线上的元素,所以错误。D显然不对。因此选A。 (12) A、k B、j C、0 D、1 注意,J表示行,K表示列。

试题4(每小题3分,共12分)

阅读下列程序并回答问题,在每小题提供的若干可选答案中,挑选一个正确答案。 【程序】 #include <> void main( )

{ int k;

for(k = 5; k > 0; k--){ if(k==3)

continue; /* 第6行 */

printf(\"%d \

B、5 4 2 1 B、5 4 2 1 B、5 4 2 1 B、5 4 2 1

C、5 4 D、3 C、5 4 D、3

(15) 。

C、5 4 D、3 C、5 4 D、3

(13) 程序的输出是 (13) 。 A、5 4 3 2 1 A、5 4 3 2 1 A、5 4 3 2 1

A、5 4 3 2 1 本题注意以下两点: 1.break跳出本层循环

2.Contiune结束本次循环,立即执行下一次条件判断。 然后细心即可。

(14) 将第6行中的continue改为break后,程序的输出是 (14) 。 (15) 将第6行中的continue删除(保留分号)后,程序的输出是 (16) 将第6行全部删除后,程序的输出是 (16) 。

试题5(每小题3分,共12分)

阅读下列程序并回答问题,在每小题提供的若干可选答案中,挑选一个正确答案。 【程序】 # include <> void main()

{ char c, s[80]= \"Happy New Year\"; int i;

void f(char *s, char c); c = getchar(); f(s, c); puts(s); }

void f(char *s, char c) { int k = 0, j = 0; while(s[k] != '\\0'){

if(s[k] != c){ s[j] = s[k]; j++; s[j] = '\\0'; }

}

k++; }

(17) 程序运行时,输入字母a,输出 (17) 。 A、Happy New Year B、Hppy New Yer

C、Hay New Year

D、Happy Nw Yar

(18) 程序运行时,输入字母e,输出 (18) 。 A、Happy New Year B、Hppy New Yer

C、Hay New Year

D、Happy Nw Yar

(19) 程序运行时,输入字母p,输出 (19) 。 A、Happy New Year B、Hppy New Yer

C、Hay New Year D、Happy Nw Yar

(20) 程序运行时,输入字母b,输出 (20) 。 A、Happy New Year B、Hppy New Yer

C、Hay New Year

D、Happy Nw Yar

仔细研究以下语句: if(s[k] != c){

s[j] = s[k]; j++;}

发现其作用是删除数组S中等于字符变量C的元素,或者也可以这样说,把不等于字符变量C的元素都保留。

因此17删除a, 因此18删除e, 因此19删除p, 因此20删除b。

试题6(每小题3分,共12分)

#include <> struct st{

int x, y, z; }; void f(struct st *t, int n); void main( ) { int k, n; struct st time;

scanf(\"%d%d%d%d\ f(&time, n);

printf(\"%d:%d:%d\\n\} void f(struct st *t, int n)

{ t->z = t->z + n; /*等价于z=z+n;*/ if(t->z >= 60){

t->y = t->y + t->z/60; /*等价于y=y+z/60;*/ t->z = t->z%60; } /*等价于z=z%60;*/ t->x = t->x + t->y/60; /*等价于x=x+y/60;*/ t->y = t->y%60; /*等价于y=y%60;*/ }

if(t->x >= 24) t-> x = t->x % 24; }

(21)程序运行时,输入12 12 50 10,输出 (21) 。

A、12:12:0 B、12:12:50 C、12:12:60 D、12:13:0

(22) 程序运行时,输入12 12 30 10,输出 (23) 程序运行时,输入22 59 30 30,输出 (24) 程序运行时,输入23 59 0 300,输出

(22) 。 (23) 。

(24) 。

A、12:12:0 B、12:12:10 C、12:12:30 D、12:12:40 A、23:0:0 B、22:59:60 C、22:59:30 D、22:0:0

if(t->y >= 60){

A、0:4:0 B、23:59:300 C、23:59:00 D、23:0:0

这里主要运用了结构体的知识,当把程序变换为没有结构体的一般形式后(见下面),就非常容易理解了。

程序等价于以下片段:

sacnf(“%d:%d:%d”,&x,&y,&z); f(x,y,z,n);

printf(“%d:%d:%d”,x,y,z); void f(x,y,z,n); z=z+n; if(z>=0) {y=y+z/60; z=z%60; }

if(y>=60) {

x=x+y/60; y=y%60; }

if(x>=24) x=x%24; }

试题7 (14分)

编写程序,输入100个学生的英语成绩,统计并输出该门课程的平均分以及不及格学生的人数。 #include <> main()

{ int nopass=0;n=1;fs; float pjf=; while(n<=100) {

scanf(“input%d”,fs); pjf=pjf+fs;

if(fs<60) nopass++; n++; }

pjf=pjf/100;

printf(“pjf%d”,pjf);

printf(“nopass%d”,nopass); }

程序有多种写法,这只是一种。也可以使用数组。

试题8 (14分)

编写程序,输入一个正整数n,计算并输出下列算式的值。要求定义和调用函数total(n)计算1+1/2+1/3+……+1/n,函数返回值的类型是double。 #include <>

double tatal(int k); {double t=;

for(m=1;m<=k;m++) t=t+m; return t; }

main() {

double s=; int n,i;

scanf(“input %d”,&n); for (i=1,i<=n, n++) s=s+tatal(i); printf(“s=%f”,s); }

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- huatuo0.cn 版权所有 湘ICP备2023017654号-2

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务