计算机二级c语言

更新时间:2024-01-08 09:30:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

2008年秋浙江省高等学校 计算机等级考试试卷(二级C)

说明:⑴ 考生应将所有试题的答案填写在答卷上。其中试题一到试题六请在答卷上的各小题选项的

对应位置上填“√”。

⑵ 请将你的准考证号的后五位填写在答卷右下角的指定位置内; ⑶ 考试时间为90分钟。

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

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

【程序说明】

输入一批学生成绩,遇负数表示输入结束,要求统计并输出各等级成绩的学生个数。成绩等级分为三级,分别为:A(90~100)、P(68~89)和F(0~59)。

运行示例:

Enter scores:88 71 68 70 59 81 91 0 60 77 83 -10 A:1; P:8; F:2; 【程序】

#include void main() { int mark, a, p, f; a=p=f=0; printf(“Enter scores:”); while ( (1) ){ if (mark>=90) a++; (2) p++; (3) f++; (4) } printf(“A:%d; P:%d; F:%d;\\n”,a,p,f); }

【供选择的答案】

(1) A. mark>=0 B. mark>0

C. mark<=0 D. mark<0 (2) A. else if (mark>=60) B. if (mark>=60)

C. else (mark>=60) D. if (mark<90) (3) A. else(mark<60) B. else C. if(mark>0) D. else if (mark<=60) (4) A. scanf(“%d”,mark) ; B. scanf(“%d”,&mark); C. ; D. mark=getchar();

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

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

共76页 第1页

求1~999之间所有满足各位数字的立方和等于它本身的数。例如:153的各位数字的立方和是:13+53+33=153

运行示例:

153 370 371 407 【程序】

#include void main() { int digit,, j, sum, x; for(j=1; j<1000;j++){ (5) (6) do{ (7) sum=sum+digit*digit*digit; x=x/10; }while (8) ; if(sum==j) printf(“%d ”,sum); } }

【供选择的答案】 (5) A. sum=0; B. sum=1;

C. sum=j; D. ; (6) A. x=1; B. x=j; C. ; D. x=sum; (7) A. digit=x/10; B. ; C. digit=x; D. digit=x; (8) A. x==0; B. j!=0; C. j==0; D. x!=0;

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

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

输入10个整数,将它们从小到大排序后输出。 【运行示例】

Enter 10 integers: 10 98 -9 3 6 9 100 -1 0 2 After sorted: 100 98 10 9 6 3 2 0 -1 -9 【程序】

#include (9) void sort( (10) ) { int i, index, k, t; for(k=0; k

共76页 第2页

for(i=k+1; i<=n; i++){ if(a[i]>a[index]) index=1; (11) ; } }

void swap(int *x, int *y) { int t; t=*x; *x=*y; *y=*t; }

void main() { int I, a[10]; printf(“Enter 10 integers:”); for(i=0; i<10; i++) scanf(“%d”,&a[i]); (12) ; printf(“After sorted:”); for(i=0; i<10; i++) printf(“%d”, a[i]); printf(“\\n”); }

(9) A. void swap(int *x, int *y) B. ; C. void swap(int *x, int *y); D. void swap(int *x, *y) (10) A. int &a, int n B. int *a, int *n C. int *a, int n D. int a, int *n (11) A. swap(*a[index], *a[k]) B. swap(a[index], *a[k]) C. swap(index, k) D. swap(&a[index], &a[k]) (12) A. sort(a) B. sort(a[10]) C. sort(a[], 10) D. sort(a, 10)

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

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

#include void main() { int j, k, s1, s2; s1=s2=0;

for(j=1; j<=5; j++){ s1++; for(k=1; k<=j; k++) s2++; }

共76页 第3页

printf(“%d %d”, s1, s2);

}

程序2

#include void main() { int j , k, s1, s2; s1=0; for(j=1; j<=5; j++){ s1++; for(k=1, s2=0; k<=j; k++) s2++; } printf(“%d %d”,s1, s2); }

程序3

#include void main() { int j , k, s1, s2; s1=0; for(j=1; j<=5; j++){ s1++; for(k=1; k<=j; k++, s2=0) s2++; } printf(“%d %d”,s1, s2); }

程序4

#include void main() { int j , k, s1, s2; s1=0=s2; for(j=1; j<=5; j++,s1=0){ s1++; for(k=1; k<=j; k++) s2++; } printf(“%d %d”,s1, s2); }

(13) 程序1运行时,输出 (13) 。

A. 0 15 B. 5 0 C. 5 5 D. 5 15

(14) 程序2运行时,输出 (14) 。

A. 0 15 B. 5 0

共76页 第4页

C. 5 5 D. 5 15

(15) 程序3运行时,输出 (15) 。

A. 0 15 B. 5 0 C. 5 5 D. 5 15

(16) 程序4运行时,输出 (16) 。

A. 0 15 B. 5 0 C. 5 5 D. 5 15

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

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

#include void main() { int i, m=15, y=-1;

for(i=2; i<=m/2; i++) if(m % i= =0) y=0; else y=1;

printf(“%d”,y); }

程序2

#include void main() { int i, m=15, y=-1;

for(i=2; i<=m/2; i++) if(m % i= =0) {y=0; break;} printf(“%d”,y); }

程序3

#include void main() { int i, m=15, y=-1;

for(i=2; i<=m/2; i++) if(m % i= =0) break; if(i> m/2) y=1; else y=0;

printf(“%d”,y); }

程序4

#include void main() {

共76页 第5页

int i, m=15, y=-1;

for(i=2; i<=m/2; i++) if(m % i= =0) { break; y=0; } printf(“%d”,y); }

(17) 程序1运行时,输出 (17) 。

A. 1 B. 0 C. 15 D. -15 (18) 程序1运行时,输出 (18) 。

A. 1 B. 0 C. 15 D. -15 (19) 程序1运行时,输出 (19) 。

A. 1 B. 0 C. 15 D. -15 (20) 程序1运行时,输出 (20) 。

A. 1 B. 0 C. 15 D. -15

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

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

#include void main() { int k; char ch, a[10], *s[10]={“one”, “two”, “three”, “four”}; k=0; while((ch=getchar())!=?\\n? && k<9) if(ch>?5? && ch

(21) 程序运行时,输入5678,输出 (21) 。

A. two three B. two C. one four three D. four three two one (22) 程序运行时,输入8561#,输出 (22) 。

A. two three B. two C. one four three D. four three two one (23) 程序运行时,输入7902#,输出 (23) 。

A. two three B. two C. one four three D. four three two one (24) 程序运行时,输入7633#,输出 (24) 。

A. two three B. two C. one four three D. four three two one

共76页 第6页

试题7(28分)

(1) 定义函数fact(n) 计算n的阶乘:n!=1*2*……*n,函数返回值类型是double。

(2) 定义函数cal(e) 计算下列算式的值,直到最后一项的绝对值小于e,函数返回值类型是

double。

111 s?1????......2!3!4!

(3) 定义函数main(),输入正整数n,当精度e分别取值为10-1、10-2、10-3/……10-n时,分别计

算并输出下列算式的值,直到最后一项绝对值小于精度e,以此比较不同精度下算出的结果。要求调用cal(e) 计算下列算式的值。

s?1?111???......2!3!4!共76页 第7页

2007年春浙江省高等学校 计算机等级考试试卷(二级C)

说明:⑴ 考生应将所有试题的答案填写在答卷上。其中试题一到试题六请在答卷上的各小题选项的

对应位置上填“√”。

⑵ 请将你的准考证号的后五位填写在答卷右下角的指定位置内; ⑶ 考试时间为90分钟。

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

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

输入一个正整数,按照从高位到低位的顺序输出各位数字。 运行示例:

Enter an integer: 1902 The digits are: 1 9 0 2

【程序】

#include void main( )

{ int digit, number, power, t; printf(\

scanf(\

number = number < 0 ? -number : number; power = 1; (1)

while( (2) ){ power *= 10; t /= 10; };

printf(\ while( (3) ){

digit = number / power; printf(\ (4) power /= 10; } }

【供选择的答案】

(1) A、 t = 1; B、t = number; C、 ; D、number = 1; (2) A、t >= 10

B、power >= 100

C、t != 0 D、number != 0 (3) A、 power == 0 B、digit != 0

C、number != 0 D、power >= 1 (4) A、number /= power; B、number %= 10;

共76页 第8页

C、number %= power; D、number /= 10;

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

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

【程序说明】

连续输入一批学生的成绩,直到输入成绩的数量超过50个或者输入的成绩不是有效成绩(有效成绩为0~100),将输入的有效成绩存入数组mark中,在数组中查找并输出最高分。函数getmax(array,n)在有n个元素的一维数组array中找出并返回最大值。

运行示例:

Enter marks: 90 80 77 65 -1 Max = 90 【程序】

#include #define MAXNUM 50 int getmax( (5) ) { int k, max; (6)

for(k = 1; k < n; k++)

if(max < array[k]) max = array[k]; return max; }

void main( ) { int k, x;

int mark[MAXNUM]; printf(\ k = 0;

scanf(\ while( (7) ){ mark[k++] = x; scanf(\ }

if(k > 0) printf(\ else printf(\}

【供选择的答案】

(5) A、int n; int array[] B、void (6) A、max = 0; B、;

C、max = array[0]; D、max = array[n]; (7) A、k < MAXNUM || x >=0 && x <= 100

B、k < MAXNUM && x >=0 && x <= 100 C、k > MAXNUM && x >=0 || x <= 100 D、k > MAXNUM || x >=0 || x <= 100 (8) A、mark, k B、mark

共76页 第9页

C、int *array D、int array[],int n

C、mark[] D、mark, n

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

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

【程序说明】

输入一个4 行4 列的矩阵,计算并输出该矩阵除 4 条边以外的所有元素之和sum1,再计算和输出该矩阵主对角线以上(含主对角线)的所有元素之和sum2, 主对角线为从矩阵的左上角至右下角的连线。

运行示例: Enter an array: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 sum1 = 34 sum2 = 70 【程序】

#include void main( ) { int j, k, sum; int a[4][4];

printf(\ for(j = 0; j < 4; j++) for(k = 0; k < 4; k++) scanf(\ sum = 0;

for(j = 0; j < 4; j++) for(k = 0; k < 4; k++) if( (9) ) sum += a[j][k]; printf(\ (10)

for(j = 0; j < 4; j++)

for( (11) ; (12) ; k++) sum += a[j][k]; printf(\}

【供选择的答案】

(9) A、j != 3 && k != 3 && j != 0 && k !=0 B、j != 3 && k != 3 || j != 0 && k !=0 C、j != 3 || k != 3 && j != 0 || k !=0 D、j == 3 && k == 3 || j == 0 && k ==0 (10) A、sum1 = 0; B、sum = 0; C、sum2 = 0; D、;

共76页 第10页

(11) A、k = 0 B、k = j C、k = 1 D、k = 3 (12) A、k <= j B、k > 0 C、 k > j D、k < 4

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

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

#include void main( ) { int i, j, k; scanf(\j = k = 0;

if((i/10) > 0) /* 第7行 */ j = i;

if((i != 0) && (j == 0)) k = i; else

k = -1; /* 第12行 */ printf(\}

(13) 程序运行时,输入5,输出 (13) 。 A、j=0, k=5 C、j=0,k=-1

B、j=5,k=5 D、j=5,k=-1

(14) 。

(14) 程序运行时,输入99,输出

A、j=99, k=-1 B、j=0, k=-1

C、j=0, k=99 D、j=99, k=99

(15) 将第12行改为“k = -1;j=i/10;”后,程序运行时,输入99,输出 (15) 。

A、j=99, k=-1 B、j=9, k=99 C、j=99, k=99 D、j=9, k=-1

(16) 将第7行改为“if((i/10) > 0){”,第12行改为“k = -1;}”后,程序运行时,输入5,输出 (16) 。

A、j=0, k=-1 B、j=0,k=0

C、j=5,k=5 D、j=5,k=-1

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

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

#include int k = 1; void Fun(); void main() { int j;

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

共76页 第11页

Fun();

printf(\}

void Fun()

{ int k = 1; /* 第11行 */ printf(\ k++; }

(17)程序的输出是 (17) 。

A、k=1,k=2,k=3 B、k=1,k=2,k=1 C、k=1,k=1,k=2

D、k=1,k=1,k=1

(18)将第11行改为“static int k=1;”后,程序的输出是 (18) 。 A、k=1,k=1,k=1 B、k=1,k=1,k=2 C、k=1,k=2,k=1

D、k=1,k=2,k=3

(19) 将第11行改为“k=1;”后,程序的输出是 (19) 。 A、k=1,k=2,k=1 B、k=1,k=1,k=1 C、k=1,k=1,k=2

D、k=1,k=2,k=3

(20) 将第11行改为“;”后,程序的输出是 (20) 。 A、k=1,k=1,k=2 B、k=1,k=2,k=3 C、k=1,k=1,k=1

D、k=1,k=2,k=1

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

#include struct st{

char c; char s[80]; };

char * f(struct st t); void main( ) { int k;

struct st a[4] =

{{'1',\

for(k = 0; k < 4; k++) printf(\}

char * f(struct st t) { int k = 0;

while(t.s[k]!='\\0'){

if(t.s[k] == t.c) return t.s+k; k++; }

return t.s; }

(21) 程序运行时,第1行输出 (21) 。

A、321 B、21 C、123 D、12

共76页 第12页

(22) 程序运行时,第2行输出 (22) 。

A、21 B、12 C、3 D、1 A、3 B、123 C、1

D、321

(24) 程序运行时,第4行输出 (24) 。

A、123 B、1 C、3 D、321

(23) 程序运行时,第3行输出 (23) 。

试题7 (28分)

某客户为购房办理商业贷款,选择了按月等额本息还款法,在贷款本金(loan)和月利率(rate)一定的情况下,住房贷款的月还款额(money)取决于还款月数(month),计算公式如下。客户打算在5~30年的范围内选择还清贷款的年限,想得到一张“还款年限-月还款额表”以供参考。

rate(1?rate)monthmoney?loan?(1?rate)month?1

(1) 定义函数cal_power(x, n)计算x的n次幂(即x),函数返回值类型是double。 (2) 定义函数cal_money(loan,rate,month)计算月还款额,函数返回值类型是double,要

求调用函数cal_power(x, n)计算x的n次幂。

()n

定义函数main(),输入贷款本金 loan(元)和月利率 rate,输出“还款年限-月还款额表”,还款年限的范围是5~30年,输出时分别精确到年和元。要求调用函数cal_money(loan,rate,month)计算月还款额。

2006年秋浙江省高等学校 计算机等级考试试卷(二级C)

说明:⑴ 考生应将所有试题的答案填写在答卷上。其中试题一到试题六请在答卷上的各小题选项的

对应位置上填“√”。

⑵ 请将你的准考证号的后五位填写在答卷右下角的指定位置内; ⑶ 考试时间为90分钟。

试题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;

共76页 第13页

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

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

other ++;

printf(\}

【供选择的答案】

(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')

B、(ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z') C、ch >= 'a' && ch <= 'Z' D、ch >= 'A' && ch <= 'z' (4) A、if

B、else

D、if else

C、else if

试题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(\ scanf(\

printf(\}

long reverse(long number) { int flag; (6) ;

flag = number < 0 ? -1 : 1; if( (7) ) number = - number;

共76页 第14页

while(number != 0){ res = (8) ; number /= 10; }

return flag*res; }

【供选择的答案】

(5) A、reverse( ) B、in

C、reverse(in) D、reverse (6) A、res = 0 B、long res C、long res = 0 D、res

(7) A、number > 0 B、number < 0 C、number != 0 D、number == 0

(8) A、number B、res*10 + number C、number/10

D、res*10 + number/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(\ for(j = 0; j < 3; j++) for(k = 0; k < 2; k++) scanf(\ for(j = 0; j < 3; j++){ (10)

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

printf(\ } }

共76页 第15页

【供选择的答案】

(9) A、a[j][k] B、a[k][j] C、&a[j][k] D、&a[k][j] (10) A、; B、sum = -1; C、sum = 1; D、sum = 0;

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

B、j

C、0 D、1

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

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

#include void main( ) { int k;

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

continue; /* 第6行 */ printf(\ } }

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

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

(16) 。 C、5 4 D、3

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

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

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

# include void main()

{ char c, s[80]= \ 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;

共76页 第16页

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

s[j] = '\\0'; }

(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) 。

(19) 程序运行时,输入字母p,输出 C、Hay New Year

A、Happy New Year B、Hppy New Yer

D、Happy Nw Yar

(20) 。

(20) 程序运行时,输入字母b,输出 C、Hay New Year

A、Happy New Year B、Hppy New Yer

D、Happy Nw Yar

试题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(\f(&time, n);

printf(\ }

void f(struct st *t, int n) {

t->z = t->z + n; if(t->z >= 60){ }

if(t->y >= 60){

t->x = t->x + t->y/60; t->y = t->y`;

共76页 第17页

t->y = t->y + t->z/60; t->z = t->z`;

}

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,输出 (22) 。

A、12:12:0 B、12:12:10 C、12:12:30 D、12:12:40

(23) 程序运行时,输入22 59 30 30,输出 (23) 。

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

(24) 程序运行时,输入23 59 0 300,输出 (24) 。

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

试题7 (14分)

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

试题8 (14分)

编写程序,输入一个正整数n,计算并输出下

列算式的值。要求定义和调用函数total(n)计算1+1/2+1/3+??+1/n,函数返回值的类型是double。 n1111s???1???...? 23nk?1k

2006年春浙江省高等学校 计算机等级考试试卷(二级C)

说明:⑴ 考生应将所有试题的答案填写在答卷上。其中试题1~试题6,请在答卷上各小题正确选

项的对应位置处填“√”;

⑵ 请将你的准考证号的后五位填写在答卷右下角的指定位置内; ⑶ 考试时间为90分钟;

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

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

求 1 + 2/3 + 3/5 + 4/7 + 5/9 + ? 的前20项之和。 运行示例: sum = 11.239837 【程序】

#include void main( ) {

int i, b = 1; double s; (1) ;

for(i = 1; i <= 20; i++){ s = s + (2) ;

共76页 第18页

(3) }

printf( (4) , s); }

【供选择的答案】 (1) A、s = 0

C、s = -1

(2) A、i/b (3) A、;

C、i/2*i-1

B、s = 1 D、s = 2

B、double(i)/double(b) D、(double)i/(double)b B、b = 2 * i – 1;

C、b = 1.0 * b;

(4) A、\

C、\

D、b = b + 2; B、\ D、\

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

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

输入10个整数,将它们从大到小排序后输出。 运行示例:

Enter 10 integers: 1 4 -9 99 100 87 0 6 5 34 After sorted: 100 99 87 34 6 5 4 1 0 -9 【程序】

#include void main( )

{ int i, j, t, a[10];

printf(\ for(i = 0; i < 10; i++) scanf( (5) ); for(i = 1; i < 10; i++)

for( (6) ; (7) ; j++) if( (8) ){

t = a[j]; a[j] = a[j+1]; a[j+1] = t;

}

printf(\ for(i = 0; i < 10; i++) printf(\ printf(\}

【供选择的答案】

(5) A、\、\

C、\ D、\

(6) A、j = 0 B、j = 1

共76页 第19页

C、j = i D、j = i - 1 (7) A、j > i

B、j < 9 - i D、j > i - 1 D、a[i] < a[j]

C、j < 10 - i

(8) A、a[i-1] < a[i] B、a[j+1] < a[j+2] C、a[j] < a[j+1]

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

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

【程序说明】

输入一个字符串和一个正整数m,将该字符串中的前m个字符复制到另一个字符串中,再输出后一个字符串。

运行示例1:

Enter a string: 103+895=? Enter an integer: 6 The new string is 103+89 运行示例2:

Enter a string: 103+895=? Enter an integer: 60

The new string is 103+895=? 运行示例3:

Enter a string: 103+895=? Enter an integer: 0 The new string is 【程序】

#include #include < (9) > void main( )

{ char s[80], t[80], i, m;

printf(\ gets(s);

printf(\

scanf(\

for(i = 0; (10) ; i++)

(11) ;

(12)

printf(\puts(t); }

【供选择的答案】 (9) A、ctype.h C、stdio.h (10) A、i < m

B、math.h D、string.h B、s[i]!= '\\0' B、t[i] = s[i]

D、s[i]!= '\\0' || i < m

C、s[i]!= '\\0' && i < m (11) A、*s++ = *t++

共76页 第20页

C、*t++ = *s++

D、s[i] = t[i] B、;

D、*++t = '\\0';

(12) A、t[i] = '\\0'; C、*++s = '\\0';

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

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

#include void main( )

{ int s, x1, y1, z1, x2, y2, z2;

printf(\

scanf(\s = f(x2, y2, z2) - f(x1, y1, z1); printf(\}

f(int x, int y, int z) { int k, n;

int tab[2][13] = {

{0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}, {0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31} };

n = (x % 4 == 0 && x % 100 != 0 || x % 400 == 0); for(k = 1; k < y; k++) z = z + tab[n][k]; return z; }

(13) 程序运行时,输入1 0 0 0 0 0,输出 (13) 。 A、29 A、29 A、29 A、29

B、28 B、28 B、28 B、28

C、0 C、0 C、0 C、0

D、-1 D、-1 D、-1 D、-1

(14) 程序运行时,输入0 0 1 0 0 0,输出 (14) 。

(15) 程序运行时,输入2000 2 1 2000 3 1,输出 (15) 。 (16) 程序运行时,输入1981 2 1 1981 3 1,输出 (16) 。

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

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

# include void main ( )

{ int a = -1, b = 1;

void f1(int x, int y), f2(int *x, int *y); void f3(int *x, int *y), f4(int x, int y); f1(a, b);

共76页 第21页

printf(\ a = -1, b = 1; f2(&a, &b);

printf(\ a = -1, b = 1; f3(&a, &b);

printf(\ a = -1, b = 1; f4(a, b);

printf(\}

void f1(int x, int y) { int t;

t = x; x = y; y = t; }

void f2(int *x, int *y) { int t;

t = *x; *x = *y; *y = t; }

void f3(int *x, int *y) { int *t;

t = x; x = y; y = t; }

void f4(int x, int y)

{ int *t = malloc(sizeof(t)); *t = x; x = y; y = *t; }

(17) 程序运行时,第1行输出 (17) 。 A、(1, -1) B、(-1, 1) A、(1, -1) B、(-1, 1) A、(1, -1) B、(-1, 1) A、(1, -1) B、(-1, 1)

C、(-1, -1) C、(-1, -1) C、(-1, -1) C、(-1, -1)

D、(1,1) D、(1,1) D、(1,1) D、(1,1)

(18) 程序运行时,第2行输出 (18) 。 (19) 程序运行时,第3行输出 (19) 。 (20) 程序运行时,第4行输出 (20) 。

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

#include struct card{ char *face; char *suit; };

void filldeck(struct card *wdeck, char *wface[],char *wsuit[]) { int i;

for (i = 0; i < 4; i++){

共76页 第22页

wdeck[i].face = wface[i%2]; wdeck[i].suit = wsuit[i/2]; } }

void deal(struct card *wdeck) { int i;

for (i = 0; i < 4; i++)

printf(\}

void main()

{ struct card deck[4]; char *face[]={\

char *suit[]={\

filldeck(deck,face,suit); deal(deck); }

(21) 程序运行时,第1行输出 (21) 。

A、(K of Heart) B、(Q of Heart) C、(K of Club) D、(Q of Club)

(22) 程序运行时,第2行输出 (22) 。

A、(K of Heart) B、(Q of Heart) C、(K of Club) D、(Q of Club)

(23) 程序运行时,第3行输出 (23) 。

A、(K of Heart) B、(Q of Heart) C、(K of Club) D、(Q of Club)

(24) 程序运行时,第3行输出 (24) 。

A、(K of Heart) B、(Q of Heart) C、(K of Club) D、(Q of Club)

试题7 (14分)

编写程序,输入一批学生的成绩,遇0或负数则输入结束,要求统计并输出优秀(大于85)、通过(60~84)和不及格(小于60)的学生人数。 运行示例:

Enter scores: 88 71 68 70 59 81 91 42 66 77 83 0 >=85:2 60-84:7 <60 2

试题8 (14分)

编写程序,输入一个正整数n,求下列算式的值。要求定义和调用函数fact(k)计算k的阶乘,函数返回值的类型是double。 s?

?k!k?1n1共76页 第23页

运行示例: Enter n: 5 sum = 1.71667

2005年秋浙江省高等学校 计算机等级考试试卷(二级C)

说明:⑴ 考生应将试题一至试题四的答案涂在答题卡上,将试题五的答案填写在答卷上,否则作无

效处理;

⑵ 请将你的准考证号的后四位填写在答卷右下角的指定位置内; ⑶ 考试时间为120分钟。

试题一、判断题(每题1分,共10分)

说明:在以下提供的若干个陈述中,逐一判断其正确与否,选A表示正确,选B表示错误。 (1)不同类型的变量在内存中占用存储空间的大小都是一样的。 (2)程序调试就是找出并改正C源程序中的语法错误。 (3)表示数学式3

(7)表达式 (1.23 << 2)符合C语言语法。

(8)与float型数据相比,double型数据的精度高,取值范围大。 (9)在C语言中,表达式(010+2)的值是10。

(10)do-while语句先执行循环体,后判断循环条件,所以循环体至少会执行一次。

试题二、单选题(每题2分,共20分)

(11) 若x是double型变量,n是int型变量,执行 (11) ,并输入3 1.25后,x=1.25, n=3。

A、scanf(\

B、scanf(\D、scanf(\

C、scanf(\ 是 (12) 。

A、(x%3 != 0) || (y%3 != 0)

B、(x%3 != 0) && (y%3 != 0) D、(x%3 == 0) && (y%3 == 0) B、x != 0

C、(x%3 == 0) || (y%3 == 0) A、x == 0 C、x == 1

int count = 0, x, y, z; for(x = 1; x <= 2; x++) for(y = 1; y <= 3; y++) for(z = 1; z <= 4; z++) count++; printf(\

共76页 第24页

(12) 若变量已经被正确定义,为表示“变量x和y都能被3整除”,应使用的C表达式

(13) while( (13) ) 等价于while(x)。

D、x != 1

(14) 下列程序段的输出结果是 (14) 。

A、10 C、24 A、p=&(x+1); C、p=&x+1;

B、9

D、0

B、p=&x;

(15) 若变量已经被正确定义,则语句 (15) 是不正确的。

D、p=&x,p++;

(16) 设变量定义如下,则表达式 (16) 是正确的。

struct student { int num; char name[20]; float score; } stud[10];

A、stud[2]=stud[1]+3 C、stud[1]=stud[1]-stud[2]

int f(int n) {

if(n>2) return f(n-1)+n; else return n; }

A、9

B、10 C、2

D、4

(18) 不正确的赋值或赋初值的方式是 (18) 。 A、char *p=\

B、char s[10]= \D、char s[5]={'h', 'e', 'l', 'l', 'o'};

C、char s[10]; s=\

B、stud[1]==stud[2]

D、stud[1]=stud[2]

(17) 对于以下递归函数f,调用函数f(4),其返回值是 (17) 。

(19) 若定义FILE *fp; 则文件指针fp 指向 (19) 。

A、文件在磁盘上的读写位置 B、文件在缓冲区上的读写位置 C、整个磁盘文件

struct{ int len; char *str; }*p;

A、*p++->str C、*p->(str++)

B、(*p->str)++

D、*(p->str)++

D、文件类型结构体

(20) 设变量定义如下,则表达式 *p->str++ 等价于 (20) 。

试题三、程序填空题(每空2分,共20分)

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

求 2/1 + 3/2 + 5/3 + 8/5 + ? 的前10项之和。(该序列从第2项起,每一项的分子是前一项分子与分母的和,分母是前一项的分子) 【程序】

#include void main()

共76页 第25页

{

int i, a = 1, b = 1, t; (21) ; for(i = 1; i <= 10; i++){ t = a; b = t; }

printf(\}

(21) A、int y = 0 (22) A、a = b

B、int y D、double y B、b = a + b D、b = a B、y + a/b D、1.0*a/b

C、double y = 0

C、a = a + b (23) A、y + 1.0*a/b

C、a/b 程序2 【程序说明】

读入一批正整数(以零或负数为结束标志),输出其中的素数。函数prime(m)用于判断m是否为素数。素数就是只能被1和自身整除的正整数,1不是素数,2是素数。 【程序】

#include \#include \void main( ) { int x;

int prime(int m); scanf(\ while( (24) ){ if(prime(x)) printf(\ scanf(\ } }

int prime(int m) { int k, n, res; if(m == 1) return 0; res = 1; n = (int)sqrt(m); for(k = 2; k <= n; k++) if(m%k == 0){ (25) ; break; }

共76页 第26页

(22) ;

y = (23) ;

return (26) ; } (24) A、x < 0 (25) A、res = 1 (26) A、1 程序3

【程序说明】

输入1000个整数,用选择法将它们从小到大排序后输出。 【程序】

#include void sort(int a[ ], int n); void main( )

{ int i, a[1000];

for(i = 0; i < 1000; i++) scanf(\ (27) ; for(i = 0; i < 1000; i++) printf(\ printf(\}

void sort( (28) ) { int i, index, k, t;

for(k = 0; k < n-1; k++){ index = (29) ; for(i = k + 1; i < n; i++)

if( (30) ) index = i; t = a[index]; a[index] = a[k]; a[k] = t; } }

(27) A、sort(a[ ], 1000) B、sort(a, 1000) C、sort(a) (28) A、int a, int n B、int a[] (29) A、k

B、0

(30) A、a[i] ≤a[index] B、a[i] ≥ a[index]

C、n

B、x >= 0 B、res = 0

C、x <= 0 C、0

D、x > 0

C、res = -1

D、res = 2

B、res D、-1

D、sort(a[1000])

D、int *a, int n D、i

C、int *a, int *n

C、a[i] a[index]

试题四、程序阅读题(每空2分,共20分)

说明:阅读下列程序并回答问题,在每小题提供的若干可选答案中,挑选一个正确答案。 程序1

#include \void main( )

{ int j, k, n = 3, temp, sum = 0; int a[6][6];

for(k = 0; k < n; k++) for(j = 0; j < n; j++) a[k][j] = k * n + j;

共76页 第27页

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

sum = sum + a[k][k];

printf(\ for(k = 0; k < n; k++) sum = sum + a[k][n-k-1]; printf(\ }

(31) 程序运行时,第1行输出 (31) 。 A、15 B、12 C、3 D、0 (32) 程序运行时,第2行输出 (32) 。

A、30

B、24

C、 15

程序2

#include void main( ) { char ch;

while((ch = getchar()) != '\\n'){

if ( ch>='A' && ch<='Z' ) ch = 'a' + 'Z' - ch; putchar(ch); } }

(33) 程序运行时,输入ABC,输出 (33) 。 A、abc B、zyx C、ZYX (34) 程序运行时,输入xyz,输出 (34) 。 A、XYZ B、ABC

C、cba

(35) 程序运行时,输入a+Z,输出 (35) 。

A、a+a

B、z+z

C、Z+a 程序3

#include int f(int number, int digit) { int count = 0; while(number != 0){

if(number == digit) count++; number = number / 10; }

return count; }

void main( ){

printf(\ printf(\ }

(36) 程序运行时,第1行输出 (36) 。

共76页 第28页

D、12

D、ABC D、xyz

D、a+A

A、count=0 A、count=3 程序4

B、count=1 B、count=9

C、count=3 D、count=5

(37) 程序运行时,第2行输出 (37) 。

C、count=1 D、count=5

#include void main( ) { int choice, i; float price;

for( i = 1; i <= 5; i++) { scanf(\ if(choice == -1) break; switch (choice) { case 1: price=2.5; break; case 2: price=1.5; break; case 3: price=4.5; break; case 4: price=3.5; break; default: price=0.0; break; }

printf(\ }

printf(\}

(38) 程序运行时,输入3 7 -1,第1行输出 (38) 。 A、0.0 A、0.0 A、-1.0

B、3.0 C、4.5 D、Thanks B、3.0 C、7.0 D、Thanks

D、Thanks

(39) 程序运行时,输入3 7 -1,第2行输出 (39) 。 (40) 程序运行时,输入3 7 -1,第3行输出 (40) 。

B、0.0 C、7.0

试题五、程序设计题(每题10分,共30分)

1、输入一个职工的月薪salary,计算并输出应交的个人所得税tax = rate * (salary-850)。其中rate的计算方式如下:

当 salary ≤850 时,rate = 0;

当 850 < salary ≤ 1350 时,rate = 5%; 当 1350 < salary≤ 2850 时,rate = 10%; 当 2850 < salary ≤ 5850 时,rate = 15%; 当 5850 < salary 时,rate = 20%。

2、输出一张平方根表(如下表所示),x的取值范围是[5, 1000],请调用库函数sqrt()计算平方根。

x 5 6 … 999

sqrt(x) 2.24 2.45 … 31.61

共76页 第29页

1000

31.62

3、输入一个字符串(少于80个字符),再输入一个字符,统计并输出该字符在字符串中出现的次数。

2005年春浙江省高等学校 计算机等级考试试卷(二级C)

说明:⑴考生应将试题一至试题三的答案涂写在答题卡上,将试题四、试题五的答案填写在答卷上,

否则作无效处理;

⑵请将你的准考证号的后四位填写在答卷右下角的指定位置内; ⑶考试时间为120分钟。

试题一、判断题(每题1分,共10分)

说明:在以下提供的若干个陈述中,逐一判断其正确与否,选A表示正确,选B表示错误。 (1) 在C 语言中,常量和变量都有数据类型。

(2) C 语言的运算符只有单目运算符和双目运算符两种。 (3) 若变量已正确定义,表达式 x + y = z符合C语言语法。 (4) C编译器可以找出C源程序中所有的语法错误和逻辑错误。 (5) 表达式3 * 5 / 2 和表达式3 / 2 * 5等价。

(6) 表达式m = n++ 的求解顺序是先计算m = n,再计算n = n + 1。 (7) 变量名fahr和Fahr代表两个不同的变量。

(8) 若表达式sizeof(unsigned)的值为2,则unsigned 类型数据能表示的最大整数为216-1。 (9) break语句只能用于循环结构中。

(10) while语句先判断循环条件,所以循环体有可能一次也不执行。

试题二、单选题(每题2分,共20分)

(11) 执行scanf(\,输入 (11) 后,money=1000,year=3,rate=0.025。

A、1000 3 0.025 C、1000, 3, 0.025

B、1000 0.025 3 D、1000, 0.025, 3

(12) 判断变量ch 是英文字母的表达式为 (12) 。

A、( 'a' <= ch <= 'z') || ( 'A' <= ch <= 'Z')

B、(ch >= 'a' && ch <= 'z') && ( ch >= 'A' && ch <= 'Z') C、(ch >= 'a' && ch <= 'z') || ( ch >= 'A' && ch <= 'Z') D、( 'A' <= ch <= 'z') && ( 'A' <= ch <= 'z') (13) while( (13) ) 等价于while(!x)。

A、x == 1 B、x == 0 C、x != 0 D、x != 1

(14) 以下程序段输出字符串str,其中循环条件str[i] != '\\0' 还可以写成 (14) 。 char str[80];

for(i = 0; str[i] != '\\0'; i++) putchar(str[i]);

A、str[i] != NULL B、i < 80

共76页 第30页

C、!(str[i] = '\\0') D、i <= 80

(15) 设变量定义为:int n, *p; char ch, *q, *g;,则语句 (15) 是不正确的。 A、p = &n; g = q = &ch; B、p = &n; q = &ch; C、p = &n; g = &ch; D、p = &n; q = &ch; g = p; (16) 设变量定义如下,则对其中的结构分量num正确的引用是 (16) 。 struct student { int num;

char name[20]; float score; } stud[10];

A、stud[1].num = 10; B、student.stud.num = 10; C、struct.stud.num = 10; D、struct student.num = 10; (17) 对于以下递归函数f,调用函数f(2, '1', '2', '3')的输出结果是 (17) 。 void f(int n, char a, char b, char c) { if (n == 1)

printf(\ else{

f(n-1, a, c, b);

printf(\ f(n-1, c, b, a); } }

A、1->2#1->3#3->2# B、3->2#1->2#1->3# C、'1'->'3'#'3'->'2'#'1'->'2'# D、1->3#1->2#3->2# (18) 下列程序段的输出结果是 (18) 。 int t, a[3] = {10, 5, 1}; int *p;

for(p = a; p < a+3; p++) t = t + *p; printf(\A、15 B、16 C、10 D、不确定 (19) 设变量定义为:int *p[3], a[3];, (19) 是正确的赋值。 A、p = &a[0] B、*p = **a C、p[0] = a D、**p = a

(20) 对于以下的变量定义,语句 (20) 在语法和语义上都是正确的。 struct node { float x, y;

char s[10];

} point = {1, 2, \

A、*p = point; B、p = &point; C、point = p; D、p->x = point.y;

试题三、程序填空题(每空2分,共20分)

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

共76页 第31页

程序1、

【程序说明】

根据下式计算s的值,要求精确到最后一项的绝对值小于10–6。

s?1?1?1?1??

357【程序】

#include #include void main( )

{ int flag = 1, t = 1; (21) ;

while( (22) ){ item = flag * 1.0 / t; s = s + item; (23) ; t = t + 2; }

printf ( \}

(21) A、double item = 2, s = 0;

C、double item = 1, s = 1; (22) A、item < 1E-6 C、fabs (item) < 1E-6 (23) A、flag = -1 C、flag = -flag;

2、程序2 【程序说明】

B、double item = 0, s = 0; D、double item = 3, s = 1; B、item >= 1E-6

D、fabs (item) >= 1E-6 B、s = -s D、t = -t

验证哥德巴赫猜想:任何一个大于6的偶数均可表示为两个素数之和。例如6=3+3,8=3+5,?,18=7+11。将6~100之间的每个偶数都表示成两个素数之和。函数prime(m)用于判断m是否为素数。素数就是只能被1和自身整除的正整数,1不是素数,2是素数。 【程序】

#include \#include \void main( ) { int i, k;

int prime(int m);

for (i = 6; i <= 100; i = i+2 ) for(k = 3; k <= 50; k++) if( (24) ){

printf(\ break; } }

共76页 第32页

int prime(int m) { int k,n;

if(m == 1) return 0; n = (int)sqrt(m);

for(k = 2; k <= n; k++) (25) ; (26) ; }

(24) A、prime(i) C、prime(k) && prime(i-k) (25) A、if(m%k != 0) return 0 C、if(m%k == 0) return 1 (26) A、return 0; C、else return 0; 程序3、

【程序说明】

B、prime(i) && prime(k) D、prime(k)

B、if(m%k == 0) return 0 D、if(m%k != 0) return 1 B、return 1;

D、else return 1;

输入一个字符串(少于80个字符),滤去所有的非八进制字符后,组成一个新字符串(八进制形式),然后将其转换为十进制整数后输出。函数stoi(str) 将八进制形式的字符串str转换为十进制整数,例如,stoi(\的值为10(八进制12对应十进制10)。 【程序】

#include void main( ) { int i, k; char s[10];

int stoi(char *str); gets(s);

for(i = k = 0; s[i] != '\\0'; i++) if(s[i] <= '7' && s[i] >= '0') (27) ; (28) ; printf(\ (29) ); }

int stoi(char *str) { int i, n = 0;

for(i = 0; str[i] != '\\0'; i++) (30) ; return n; }

(27) A、s[i] = s[k]; i++ C、s[k] = s[i], k++ (28) A、s[i] != '\\0' C、s[i] = '\\0' (29) A、stoi(s)

B、s[k] = s[i]

D、s[i] = s[k] B、s[k] != '\\0' D、s[k] = '\\0' B、s

共76页 第33页

C、stoi(s[i]) (30) A、n = n * 8 + (str[i] - '0') C、n = n * 8 + str[i]

D、n

B、n = n * 10 + (str[i] - '0') D、n = n + str[i]

试题四、程序阅读题(每题5分, 共20分)

说明:阅读下列程序,将运行时的输出结果写在答卷纸的相应题号下。 1、 程序1

#include void main( )

{ int x = 10023;

do{ printf(\ x = x / 10; }while (x != 0); } 2、 程序2

#include void main( )

{ int i, x = 1, y = 1;

for (i = 1; i <= 5; i++){ x = x + y; y++;

printf(\ } }

3、 程序3

# include void main ( )

{ int x = 1, y = 1;

void f(int m,int n, int *px,int *py); f(2004, 70, &x, &y); printf (\ f(2005, 98, &x, &y); printf (\}

void f(int m,int n, int *px,int *py) { int k, flag;

int tab [2][13]= {

{0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }, {0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }, };

flag = m%4==0 && m% 100!= 0 || m@0==0; for ( k=1; n>tab[flag][k]; k++)

共76页 第34页

n = n - tab [flag][k]; *px = k; *py = n; }

4、 程序4

/* 假设读写文件的操作能正常完成 */ #include #include void main()

{ char ch, *s = \ int x; FILE *in;

if ((in = fopen(\ while(*s != '\\0') fputc(*s++,in); fclose(in);

if((in=fopen(\ while((ch=fgetc(in)) !=EOF){ switch (ch) {

case 'A': x = 95; break; case 'B': x = 85; break; case 'C': x = 75; break; case 'D': x = 60; break; default: x = 0; break; } printf(\ }

fclose(in); }

试题五、程序设计题(每题10分,共30分)

1. 输入x,计算并输出下列分段函数 f(x) 的值。可以调用数学库函数:平方根函数sqrt(),绝对

值函数fabs()和幂函数pow()。

?|x|??x?1f(x)??3?(x?2)?2x?5?x?00?x?22?x?4x?4

2. 输出一张摄氏-华氏温度转换表,摄氏温度的取值区间是[ -100℃, 150℃ ],温度间隔5℃。要

求定义和调用函数ctof(c),将摄氏温度C转换为华氏温度F,计算公式:F = 32 + C * 9 / 5。 3. 输入一个正整数 n (1≤n≤6),再输入一个n 行 n 列的矩阵,找出该矩阵中绝对值最大的元素

以及它的行下标和列下标。

共76页 第35页

4.

2004年秋浙江省高等学校 计算机等级考试试卷(二级C)

说明:⑴ 考生应将试题一至试题三的答案涂在答题卡上,将试题四、试题五的答案填写在答卷上,

否则作无效处理;

⑵ 请将你的准考证号的后四位填写在答卷右下角的指定位置内; ⑶ 考试时间为120分钟。

试题二、语言基础题(本题共30分)

(一)判断题(每题1分,共10分)

说明:在以下提供的若干陈述中,逐一判断其正确与否,选A表示正确,选B表示错误。 (21) C 语言程序的三种基本结构是顺序、选择和嵌套。 (22) 在C 语言程序中,在函数内部定义的变量称为全局变量。 (23) 运算符“=”和“&=”的优先级相同。 (24) '%f' 是不正确的字符常量。 (25) 运算符“+”不能作为单目运算符。

(26) 如果运算符“*”和“/”都是右结合的,则表达式10 * 6 / 5 的值是10。 (27) s(s-a)(s-b)(s-c) 是合法的C语言表达式。 (28) 表达式 !!6的值是6。 (29) 表达式 ~(~2<<1)的值是5。

(30) 对于变量定义:int a[10], *p=a+8; 数组a的最后一个元素是p[1]。

(二)单选题(每题2分,共20分)

(31) 执行语句 printf(\ (26) \, \A\); 将得到出错信息。

A、%u

B、%s

C、%e

D、%d

(32) 设c是一个字符变量,求解表达式 (27) 后,c的值不是1就是0。

A、c=getchar()!='\\n' B、(c=getchar())!='\\n' C、c = '1' D、c = EOF (33) 下列定义中, (28) 定义的变量可以存放 -123.4。 A、long a; B、unsigned b; C、int d; D、float c;

(34) 对于变量定义:char *pp[100], pp是一个 (29) 。 A、函数 B、数组元素 C、指针变量 D、数组 (35) 下列程序段的输出结果是 (30) 。 char *st[ ]={\SUN\, \MOON\, \STAR\, \X\};

printf(\(%s, %c)\, *(st+1)+1, *(*(st+2)+2)+2); A、(MOON,M) B、(OON,C) C、(OON,Q)

D、(OON, A)

(36) 对于以下的变量定义,表达式 (31) 是不正确的。 struct node { float x, y;

char s[10];

} point, *p=&point;

共76页 第36页

A、p->x=2.0 C、point.x=2.0 B、(*p).y=3.0 D、p->s=\a\

(37) 下列程序段的输出结果是 (32) 。

int a = 10, b=0; if ( a > 15 ) b = 1;

else if ( a < 2 ) b = 2; else

b = 3;

printf(\%d\, b); A、3 B、2 C、1

D、0

(38) 只有当输入的数据满足1<=month<=12时,循环语句 (33) 才能正常退出。

A、do{

scanf(\%d\, &month);

} while (month >= 1 || month <= 12); B、do{

scanf(\%d\, &month);

} while (month >= 1 && month <= 12); C、do{

scanf(\%d\, &month);

} while (month < 1 || month > 12); D、do{

scanf(\%d\, &month);

} while (month <= 1 || month >= 12); (39) 调用函数f(27)的输出结果是 (34) 。

void f(int n) { if(n<5)

printf(\%d\, n); else{

printf(\%d\, n%5); f(n/5); } }

A、102 B、2 01 C、21 (40) 下列程序段的输出结果是 (35) 。 int k=3, j=4; int *p=&k, *q=&j; (*p)--; j=k; (*q)--;

printf(\(%d, %d)\, k, j); A、(2,1) B、(1,2) C、(4,3)

共76页 第37页

D、20

D、(3,3)

试题三、程序填空题(每空2分,共20分)

说明:阅读下列程序说明和相应程序(段),在每小题提供的若干可选答案中,挑选一个正确答案。 程序1、

【程序说明】

输入一批以 -1结束的整数,求偶数和。

【程序】

#include void main() { int x, sum; sum=0;

scanf(\%d\, &x); (36) {

if( (37) ) sum=sum+x; (38) ; }

printf(\sum=%d \, sum);

}

(36) A、while(x == -1) B、while(x != -1)

C、if(x == -1) D、if(x != -1) (37) A、x==2 B、x%2==2 C、x%2==0 D、x/2==0

(38) A、scanf(\ B、scanf(\ C、sum=0 D、x=sum

2、程序2

【程序说明】

a是一个3×3的矩阵,输入a的元素,如果a是下三角矩阵, 输出“YES”, 否则, 输出“NO”。(下三角矩阵,即主对角线以上的元素都为0, 主对角线为从矩阵的左上角至右下角的连线) 【程序】

#include void main( )

{ int flag, i, k; int a[3][3];

for (i=0;i<3;i++) for (k=0;k<3;k++)

scanf(\%d\,&a[i][k]); (39) ;

for (i=0;i<3&&flag;i++)

for (k=i+1; k<3&&flag;k++)

if( (40) ) (41) ; if(flag) printf(\YES\\n\); else printf(\NO\\n\); }

共76页 第38页

(39) A、flag=0 B、flag==0 (40) A、a[k][i]!=0 B、a[i][k]==0 (41) A、flag=0 B、flag==0 程序3、

C、flag==1

C、a[i][k]!=0 C、flag==1 D、flag=1 D、a[k][i]==0 D、flag=1

【程序说明】

输入一个字符串,将其中的大写字母转换为小写字母后输出。

【程序】

#include void main( ) { char str[80]; int k; gets(str);

for(k=0; str[k]!= '\\0'; k++)

if ( (42) ) (43) ; puts(str); }

(42) A、'A'<=str[k]<='Z' B、str[k]> 'A'&&str[k]< 'Z' C、str[k]>= 'A'&&str[k]<= 'Z' D、str[k]>= 'A'||str[k]<= 'Z' (43) A、str[k] = str[k] – 32 B、str[k] = str[k] - 'a' + 'A' C、tolower(str[k]) D、str[k] = str[k] - 'A' + 'a' 程序4、

【程序说明】

请仔细阅读函数f1,然后在函数f2中填入正确的内容,使函数f1和函数f2有相同的功能。 【程序】

int f1(char s[ ]) int f2(char *s) { int k=0; { char *ss; (44) ; while(s[k]!= '\\0') while(*s!='\\0')

k++; s++; return k; return (45) ; } } (44) A、s=ss B、ss=s C、ss=NULL D、s=NULL (45) A、ss-s B、s-ss-1 C、s-ss D、s-ss+1

试题四、程序阅读题(每题5分, 共15分)

说明:阅读下列程序,将运行时的输出结果写在答卷纸的相应题号下。 5、 程序1

# include void main( ) { int j, k; float f,s;

共76页 第39页

s=0; f=1;

for(k=1; k<=3; k++){ for(j=1; j

printf(\%.0f#\,s); } }

6、 程序2

#include void main( )

{ long fun(long number); printf(\%ld\\n\, fun(-974)); }

long fun(long number) { int flag; long res = 0;

flag = number<0 ? -1 : 1;

if(number<0) number = - number; while(number!=0){

res = res*10 + number;

number /= 10;

printf(\%d#\, res); }

return flag*res; }

7、 程序3

#include #include void main() { FILE *in;

char *string1 = \IF YOU FAIL TO PLAN\; char *string2 = \YOU PLAN TO FAIL\;

if ((in = fopen(\file1.txt\,\w\)) != NULL)

while(*string2 != '\\0')

fputc(*string2++,in);

fclose(in);

if((in=fopen(\file1.txt\,\r\)) != NULL) while(fgetc(in)!= EOF) putchar(*string1++); fclose(in); }

共76页 第40页

试题五、程序设计题(每题10分,共20分)

1、输入10个整数,找出其中绝对值最小的数,将它和最后一个数交换,然后输出这10个数。 2、输入一个正实数x和一个正整数n,求下列算式的值。要求定义和调用2个函数:fact(n)计算n的阶乘;mypow(x, n)计算x的n次幂(即x),2个函数的返回值类型都是double。

nx2x3x4n?1xx????...?(?1)

2!3!4!n!n

2003年秋浙江省高等学校 计算机等级考试试卷(二级C)

说明:⑴ 考生应将试题一至试题三的答案涂在答题卡上,将第四、五题的答案填写在答卷

上,否则作无效处理;

⑵ 请将你的准考证号的后四位填写在答卷右下角的指定位置内; ⑶ 考试时间为120分钟。

试题二、语言基础题(本题共34分)

(一)判断题(每题1分,共10分)

说明:在以下提供的若干陈述中,逐一判断其正确与否,选A表示正确,选B表示错误。 (16) C语言源程序文件通过了编译、连接之后,生成一个后缀为.EXE的文件。 (17) 在C程序中,函数既可以嵌套定义,也可以嵌套调用。 (18) 在 C 程序中,APH 和 aph 代表不同的变量。 (19) 表达式0195是一个八进制整数。 (20) 表达式 3.14%2 不符合C语言语法。

(21) 设变量定义为 char cc[ ]=\12\\n345\ ,则表达式 sizeof(cc) 的值是7。 (22) 执行 printf (\%d\,'M'-'A'+'a' -'m'); ,输出0。 (23) 表达式 !x 等价于x != 1。

(24) 表达式 (z=0, (x=2)||(z=1),z) 的值是1。 (25) 执行 printf(\%x\,\12345\+1);,输出12346。

(二)单选题(每题2分,共24分) (26) 运算符 (26) 的优先级最高。

A、[ ] B、+= C、? : D、++ (27) 若a是整型变量,表达式 ~(a ^ ~a ) 等价于 (27) 。 A、~a B、1 C、0 D、2 (28) 下列程序段的输出结果是 (28) 。 #define MA(x, y) ((x)*(y)) printf(\

A、30 B、23 C、15 D、1

(29) 设有整型变量a, b,c,其中a,b的值分别为10与20,计算表达式“c=(a%2==0)?a:b”

后,c的值为 (29) 。

A、0 B、5 C、10 D、20

共76页 第41页

(30) 下列程序的输出结果是 (30) 。 #include void main( )

{ int y;

double d=3.4, x; x=(y=d/2.0)/2;

printf(\ }

A、(0.00, 1) B、(0.85, 1.7) C、(0.50, 1) D、以上都不对 (31) 程序段 (31) 的功能是将变量u、s中的最大值赋给变量t。 A、if (u>s) t=u; t=s; B、t=u; if (t>s) t=s; C、if (u>s) t=s; else t=u; D、t=s; if (u>t) t=u; (32) 对于以下递归函数f,调用 f(3) 的返回值是 (32) 。 int f(int n)

{ if(n) return f(n-1) + n; else return n; }

A、10 B、6 C、3 D、0 (33) 下列程序段的输出结果是 (33) 。 int k=1; switch(k) {

case 1: putchar('P'); case 2:

case 3: putchar('Q'); break; case 4: putchar('R'); default: putchar('S'); }

A、P B、PQ C、PQR D、PQRS (34) 下列程序的输出结果是 (34) 。

void main() { int k;

for(k=1; k<5; k++) {

if(k%2) printf(\ printf(\ } }

A、#*#* B、*#*# A、&a[2]-2 A、p='\\0'

B、5

C、##

D、以上都不对

(35) 设变量定义为 int a[3]={1, 4, 7}, *p=&a[2]-2;,则*p的值是 (35) 。

C、2 D、1

C、p=NULL D、p=EOF

(36) 若变量已正确定义, (36) 不能使指针p成为空指针。

B、p=0

(37) 下列程序的输出结果是 (37) 。 #include int x;

共76页 第42页

int p(int *y) { ++*y; return x-1; }

void main() { int y; y=p(&x);

printf(\ }

A、(-1, 0) B、(1, -1) C、(1, 0) D、出错

试题三、程序填空题(每空2分,共16分)

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

【程序说明】

输出1~1000之间所有满足各位数字的立方和等于它本身的数。 【程序】

#include void main( )

{ int digit, k, m, s;

for (k=1; k<=1000; k++){ (38) while(m!=0){

digit=m; s=s+digit*digit*digit; (39) ; }

if( (40) ) printf(\%d \, s); } }

(38) A、s=0; B、m=k; s=0; C、m=k; D、k=m; s=0; (39) A、m=m/10 B、m=m C、m=m D、m=k/10 (40) A、m!=s B、m==s C、k!=s D、k==s

2、程序2 【程序说明】

输入10个整数,将它们存入数组a中,再输入一个数x,然后在数组中查找x,如果找到,输出相应的下标(如有多个元素与x相等,只要输出下标值最小的那个元素的下标),否则,输出“Not Found”。

【程序】

#include void main( )

{ int k, sub, x; int a[10];

共76页 第43页

for(k=0; k<10; k++) scanf(\%d\, &a[k]); printf(\Input x\\n\); scanf(\%d\, &x); sub=-1; for(k=0; k<10; k++) if(a[k]==x) (41)

if( (42) ) printf(\Index is %d\\n\, sub); else printf(\Not Found\\n\); }

(41) A、sub=k; B、break; C、{ sub=k; break;} (42) A、sub!=-1 B、sub!=0 C、sub==-1 程序3、 【程序说明】

D、sub=k; break;

D、sub==0

当前目录下存放着文本文件from.txt,将其中除数字以外的内容显示在屏幕上。 【程序】

#include #include void main()

{ FILE *fr; int ch; if( (43 ) ) {

printf(\ Can not open file--> form.txt \ ); exit(0); }

while(!feof(fr)){

(44) ; if( (45) ) putchar(ch); }

fclose(fr);

}

(43) A、(fr=fopen(\

B、(fr=fopen(\

C、fr=fopen(\

D、fr=fopen(\

(44) A、ch=getchar(fr) C、ch=fgetc(fr)

B、ch=fgetc() D、ch=getchar() B、ch<'0'&&ch>'9' D、ch<'0'||ch>'9'

(45) A、ch>='0'||ch<='9' C、ch>='0'&&ch<='9'

试题四、程序阅读题(每题5分, 共15分)

说明:阅读下列程序,将运行时的输出结果写在答卷纸的相应题号下。

8、 程序1

共76页 第44页

#include void main() { int i, k,m;

int a[8]={15,60,75,73,92,87,64,79}, s[10]; for(k=0; k<10; k++) s[k]=0; for(i=0; i<8; i++){ k=a[i]/10; s[k]++; }

m=s[0]; k=1; while (k<10){

if(s[k]!=0) printf(\%d#\, s[k]); if (s[k]>m) m=s[k]; k++; }

printf(\%d\, m); } 2、程序2

#include void main() { int j, k;

int a[3]={3, 4, 5}; for(j=0; j<3; j++){

for(k=0; k<3; k++) printf(\%d \,a[(j+k)%3]);

printf(\#\); } } 3、程序3

#include void main( ) { int i=0, n;

char s[10]= \298h01\; n=0;

for(i=0; s[i]!= '\\0'; i++)

if(s[i]<= '9'&&s[i]>= '0') n=n*10+(s[i]- '0'); else break; printf(\%d\\n\, n); }

试题五、程序设计题(每题10分,共20分)

1、输入10个整数,求它们的平均值,并输出大于平均值的数据的个数。

2、 输入两个正整数m和n(m

共76页 第45页

答案

2008年秋计算机等级考试(二级C)答案

试题1~6 A,A,B,B A,B,C,D C,C,D,D D,C,B,A A,B,C,D D,C,B,A 试题7: 1、#include 3、 void main() double fact(int n) {int n,i; { double ep=1; int k; scanf(“%d”,&n); double result = 1; for(i=1; i<=n; i++) for(k=1; k<=n; k++) { result *=k; ep=ep/10; return result; printf(“%f\\n”,cal(ep)); } } } 2、double cal(double e) { int i=1; double s=1; do{ i++; s=s+1/fact(i); }while(1/fact(i)>=e); return s; } 共76页 第46页

2007年春计算机等级考试(二级C)参考答案

试题1~6 B,A,C,C D,C,B,A A,B,B,D A,A,D,B D,C,C,B C, A,A,D 试题7: 3、double cal_power; 1、 Cal_power(double x, int n) double cal_money; { void main() Double k=1; {int i,j; Int i; Double loan,rate,money; If(n!=0) Printf(“input loan,rate\\n”); { Scanf(“%lf%lf”,&loan,&rate); for(i=1;i

2006年秋计算机等级考试(二级C)参考答案

试题1~6:D,A,B,C C,C,B,B C,D,A,B B,C,A,D B,D,C,A D,D,A,A 试题7: 试题8: #include #include void main() double total(int n) {float a[100],sum=0.0,aver; { int i; int i,total=0; double sum=1.0; for (i=2;i<=n;i++) printf(“请输入100个学生的英语成绩:\\n”); sum=sum+1.0/i; for (i=0;i<100;i++) return (sum); scanf(“%f”,&a[i]); for (i=0;i<100;i++) } { sum=sum+a[i]; void main() {double s; if ( a[i]<60) total++; int m; } printf(“请输入一个正整数:”); aver=sum/100; printf(“平均值为:%f,不及格的学生总共 scanf(“%d”,&m)); s=total(m); 有:%d\\n”,aver,total); printf(“s=%f\\n”,s); } } 共76页 第47页

2006年春计算机等级考试(二级C)参考答案

试题1~6 :ADDCD ACCDC BACDA BBABB ABCD 试题7 试题8 #include #include void main( ) void main( ) { int mark, a, p, f; { int i, n; c = p = f = 0; double x, sum; double fact(int n); printf(\ scanf(\ scanf (\ while (mark >= 0){ sum = 0; if(mark >= 85) a++; for(i=1; i<=n; i++) else if (mark >= 60) p++; sum = sum + 1/fact(i); printf(\ else f++; scanf (\} } double fact(int n) printf(\{ int i; double res = 1; printf(\ for(i=1; i<=n; i++) printf(\ res = res*i; } return res; }

2005年秋计算机等级考试(二级C)参考答案

试题1 : BBBBA BBAAA

试题2~4 :ADBCA DACBD CCADB BBDAC BBBDA CCCAD 试题五、程序设计题(每题10分,共30分) 1、 2、

#include void main( ) { double rate, salary, tax; scanf(\ if (salary <= 850) rate = 0; else if(salary <= 1350) rate=0.05; else if(salary <= 2850) rate=0.10; else if(salary <= 5850) rate=0.15; else rate = 0.20; tax = rate * (salary-850); printf(\ } 3

#include void main() { char str[80], ch; int count=0, i=0; gets(str); ch = getchar(); for(i=0; str[i]!='\\0'; i++) if(str[i] == ch) count++; printf(\} #include #include void main() { int x; printf(\ for(x=5;x<=1000;x++) printf(\} 共76页 第48页

2005年春计算机等级考试(二级C)参考答案

试题一:A,B,B,B,B,A,A,A,B,A 试题二:B,C,B,A,D,A, D,D,C,B 试题三:1、A,D,C 2、C,B,B 3、C,D,A,A 试题四:

1、3#2#0#0#1# 2、2#4#7#11#16# 3、3#10#4#8#

4、95#75#0#60#85# 试题五:

1、 2 #include #include #include float ctof(int c) { void main() return (32+c*9.0/5); {float x,y } printf(“请输入x:”); scanf(“%f”,&x); void main() if (x<0) y=fabs(x); {float F;; int i; else if (x>=0&&x<2) y=sqrt(x+1); printf(“摄氏温度与华氏温度对应表:\\n”); else if (x>=2&&x<4 ) y=pow((x+2),3); else if (x>=4) y=2*x+5; printf(“摄氏温度\\t华氏温度\\n”); printf(“y=%f\\n”,f); for (i=-100;i<=150;i+=5) } printf(“%d\\t%f\\n”,i,ctof(i)); } 3、 #include void main() {int a[10],n,i,j,x,y,max; :”); printf(“请输入一个正整数n(1≤n≤6)scanf(“%d”,&n); printf(“请输入一个n行n列的矩阵:\\n”); for (i=0;imax) {max=a[i][j];x=i;y=j;} printf(“绝对值最大的元素为:%d,下标分别为:%d,%d\\n”,max,x,y); }

2004年秋计算机等级考试 (二级C) 参考答案

试题1~2:ABAAA 试题3:1、BCA

ABBAB

CCDDB

DACBA

2、DCA

3、CD

4、BA

共76页 第49页

试题四、程序阅读题(每题5分,共15分) 1 2 3

1#3# 21# 错1项扣2分 4#47#479#-479 错1项扣2分 IF YOU FAIL TO PL 错1项扣2分

试题五、编程题(每题10分,共20分)

1、 #include #include main( ) { int i, sub, t; int a[10]; for(i=0; i<10; i++) scanf(\ sub=0; for(i=1; i<10; i++) if(abs(a[sub])>abs(a[i])) sub=i; t=a[sub]; a[sub]=a[9]; a[9]=t; for(i=0; i<10; i++) printf(\ } 2、

试题1~2:ABAAB 试题3:1、BAD 试题4、

1、1#2#3#1#1#3

2、3 4 5 #4 5 3 #5 3 4 # 3、298

共76页 第50页

#include main( ) { int flag, i, n; double x, sum; double fact(int n); double mypow(double x, int n); scanf(\ sum = 0; flag = 1; for(i=1; i<=n; i++){ sum = sum + flag*mypow(x,i)/fact(i); flag = -flag; } printf(\} double fact(int n) { int i; double res=1; for(i=1; i<=n; i++) res=res*i; return res; } double mypow(double x, int n) { int i; double res=1; for(i=1; i<=n; i++) res=res*x; return res; } 2003年秋计算机等级考试 (二级C) 参考答案 BABB B

ACBCA 3、BCD

DBBAD

AC

2、DA

本文来源:https://www.bwwdw.com/article/52ux.html

Top