导航菜单
首页 >  上海市计算机考试二级java  > 上海市计算机二级java程序设计真题

上海市计算机二级java程序设计真题

a1=a1+a[i]; } return a1/a.length; } } 2. import java.awt.*; import java.applet.*; import java.awt.event.*;

public class lx extends Applet implements ActionListener{

private Label l1 ; private Label l2 ; private Label l3 ; private Label l4 ; private TextField t1; private Label l5 ; private Button b1 ; private Button b2 ; int a=0,b=0;

public void init(){

l1 =new Label(" ");

add(l1);

l2 =new Label("+");

add(l2);

l3 =new Label(" ");

add(l3);

l4 =new Label("=");

add(l4);

t1 =new TextField("

");

add(t1);

l5 =new Label("

");

add(l5);

b1 =new Button("出题");

add(b1);

b2 =new Button("批改");

add(b2);

b1.addActionListener(this);

b2.addActionListener(this); }

public void actionPerformed(ActionEvent e){

if (e.getSource()==b1){

a=(int)(Math.random()*99+1);

b=(int)(Math.random()*99+1);

l1.setText(a+"");

l3.setText(b+"");

t1.setText("");

}

else

if (Integer.parseInt(t1.getText().trim())==(a+b))

l5.setText("正确!");

else

l5.setText("错误!");

}

}

《全国计算机等级考试二级教程——C语言程序设计》

课后题及参考答案

第一章 程序设计基本概念

1.1 在TRUBO C环境中用RUN命令运行一个C程序时,所运行的程序的后缀是______。 答案:.exe 1.2 C语言源程序文件的后缀是_____,经过编译后,生成文件的后缀是_____,经过连接后,生成文件的后缀是_____。

答案:.c .obj .exe 1.3 结构化程序由_____、_____、_____三种基本结构组成。 答案:顺序、选择、循环 第二章 C程序设计的初步知识

一、选择题

2.1 以下选项中正确的整型常量是

A)12.

B)-20

C)1,000

D)4 5 6

答案:B 2.2 以下选项中正确的实型常量是

A)0

B)3. 1415

C)0.329×10(2)(10的2次方)

D).871

答案:D 2.3 以下选项中不正确的实型常量是

A)2.607E-1

B)0.8103e 2

C)-77.77

D)456e-2

答案:B 2.4 以下选项中不合法的用户标识符是

A)abc.c

B)file

C)Main

D)PRINTF

答案:A 2.5 以下选项中不合法的用户标识符是

A)_123

B)printf

C)A$

D)Dim

答案:C 2.6 C语言中运算对象必需是整型的运算符是

A)%

B)/

C)!

D)**

答案:A 2.7 可在C程序中用作用户标识符的一组标识符是

A)void

define

WORD

B)as_b3

_123

If

C)For

-abc

case

D)2c

DO

SIG

答案:B 2.8 若变量已正确定义并赋值,符合C语言语法的表达式是

A)a=a+7;

B)a=7+b+c,a++

C)int(12.3%4)

D)a=a+7=c+b

答案:B 2.9 以下叙述中正确的是

A)a是实型变量,C允许进行以下赋值a=10,因此可以这样说:实型变量中允许存放整型值。

B)在赋值表达式中,赋值号右边既可以是变量也可以是任意表达式。

C)执行表达式a=b后,在内存中a和b存储单元中的原有值都将被改变,a的值已由原值改变为b的值,b的值由原值变为0。

D)已有a=3,b=5。当执行了表达式a=b,b=a之后,已使a中的值为5,b中的值为3。

答案:B 2.10 以下叙述中正确的是

A)在C程序中无论是整数还是实数,只要在允许的范围内都能准确无误的表示。

B)C程序由主函数组成。

C)C程序由函数组成。

D)C程序由函数和过程组成。

答案:C 2.11 TURBO C中int类型变量所占字节数是

A)1

B)2

C)3

D)4

答案:B 2.12 不合法的八进制数是

A)0

B)028

C)077

D)01

答案:B 2.13 不合法的十六进制数是

A)oxff

B)0Xabc

C)0x11

D)0x19

答案:A

二、填空题

2.14 若k为int整型变量且赋值11。请写出运算k++后表达式的值A)_____和变量的值B)_____。

答案:

11、12 2.15 若x为double型变量,请写出运算x=3.2,++x后表达式的值A)_____和变量的值B)_____。

答案:4.2、4.2 2.16 函数体由符号____开始,用符号____结束。函数体的前面是____部分,其后是____部分。

答案:{、}、定义、执行

2.17 C语言中的标识符可分为____、____、和预定义标识符三类。

答案:关键字、用户标识符

2.18 在C语言程序中,用关键字____定义基本整型量,用关键字____定义单精度实型变量,用关键字___定义双精度实型变量。

答案:int、float、double 2.19 把a

1、a2定义成单精度实型变量,并赋初值1的定义语句是____。

答案:float a1=1.0,a2=1.0;

2.20 C程序中定义的变量,代表内存中的一个____。

答案:存储单元

2.21 表达式3.5+1/2的计算结果是____。

答案:3.5 2.22 对以下数学式,写出三个等价的C语言表达式____、____、____。

a×b

——

c

答案:a*b/c、a/c*b、b/c*a 2.23 表达式s=10应当读做“____”。

答案:将10赋给变量s 2.24 计算机中内存储器的最小存储单位称____,其中能容纳的数是____。

答案:位、0或1 2.25 通常一个字节包含____个二进制位。在一个字节中能存放的最大(十进制)整数是____,它的二进制数的形式是____;最小(十进制)整数是____,它的二进制数的形式是____。

答案:

8、2

55、1111 11

11、-1

28、1000 0000 2.26 当计算机用两个字节存放一个整数时,其中能存放的最大(十进制)整数是____、最小(十进制)整数是____,它的二进制数的形式是____。

答案:65

535、-3276

8、1000 0000 0000 0000 2.27 在C语言中整数可用____进制数、____进制数和____进制数三种数制表示。

答案:

十、

八、十六

三、 上机改错题

2.24 【分析与解答】

 第1行的错误:

(1) include是一个程序行,因此在此行的最后不应当有分号(;)。

(2) include程序行中后面的stdio.h是一个文件名,按规定,文件名应当放在一对双引号(″ ″)内,或放在一对尖括号(< >)内。 第2行的错误:

(1) main()是主函数的起始行,不是语句,因此最后不应当有分号(;)。

(2) 在同一行上的/ * main function * / 显然是注释;C语言规定:注释由/*开头,由*/结束,但在*号和/之间不得插入任何空格,而在此处“/

*”和“/

*”之间存在空格,因此,/ * main function * /的写法式是错误的,而应写成:/* main function */。

第3行的错误:

(1) 在主函数的起始行main()的后面是函数体,函数体由左花括号({)开始。但在函数体的第一行:float的前面缺少了左花括号({)。

(2) 在同一行上的/* /*r is radius*/, /* s is area of circular*/ */ 显然是注释;C语言规定:注释由/*开头,由*/结束,并且开头的/*将去找最近的*/去配对,因此在/* /*r is radius*/中,第一个/*与最后的那个*/配上了对,结果紧跟在后面的那个逗号(,)落在了注释的外面,而构成了一个多余符号,为此,在编译时将报告“语法错”。

第6行的错误:

(1) printf(″%f \[KG-*3]n″,s)应当是一条输出语句,但在最后缺少了一个分号。

(2) printf(″%f \[KG-*3]n″,s);是程序的最后一条语句,程序应当结束;但缺少了程序体结束所需的右花括号(});此右花括号可以放在printf(″%f \[KG-*3]n″,s);的后面,也可以放在printf(″%f \[KG-*3]n″,s);的下一行上。

2.25 【分析与解答】

第1行的错误:在include行中的文件名应该是stdio.h,而不是stdio.a。 第2行的错误:在main的后面缺少一对圆括号。 第4行的错误:在c=40的后面缺少分号。

第6行的错误:在printf(″%f \〖KG-*3〗n″,v)的后面缺少分号。

第三章、顺序结构

一、选择题

3.1 若a、b、c、d都是int类型变量且初值为0,以下选项中不正确的赋值语句是

A) a=b=c=100;

B) d++;

C) c+b;

D) d=(c=22)-(b++);

答案:C 3.2 以下选项中不是C语句的是

A) {int i; i++; printf("%d

", i); }

B) ;

C) a=5,c=10

D) { ; }

答案:C 3.3 以下合法的C语言赋值语句是

A) A=B=58

B) k=int(a+b);

C) a=58,b=58

D) --i;

答案:D 3.4 以下程序的输出结果是

A) 0

B) 1

C) 3

D)不确定的值

main()

{

int x=10,y=3;

printf("%d

", y=x/y);

}

答案:C 3.5 若变量已正确说明为int类型,要给a、b、c输入数据,以下不正确的输入语句是

A) read(a,b,c);

B) scanf("%d%d%d",a,b,c);

C) scanf("%D%D%D",&a,&b,&c);

D) scanf("%d%d%d",&a,&b,&c);

答案:D 3.6 若变量已正确说明为float类型,要通过以下赋值语句给a赋予

10、b赋予

22、c赋予33,以下不正确的输入形式是

A) 102233

B) 10.0,22.0,33.0

C) 10.022.0 33.0

D) 10 2233

scanf("%f %f %f", &a, &b, &c);

答案:B 3.7 若变量以正确定义,要将a和b中的数进行交换,下面不正确的语句组是

A) a=a+b,b=a-b,a=a-b;

B) t=a,a=b,b=t;

C) a=t; t=b; b=a;

D) t=b; b=a; a=t;

答案:C 3.8 若变量已正确定义,以下程序段的输出结果是

A) 输出格式说明与输出项不匹配,输出无定值

B) 5.17000

C) 5.168000

D) 5.169000

x=5.16894;

printf("%f

",(int)(x*1000+0.5)/(float)1000);

答案:D 3.9 若有以下程序段,c3中的值是

A) 0

B) 1/2

C) 0.5

D) 1

int c1=1,c2=2,c3;

c3=c1/c2;

答案:A 3.10 若有以下程序段,其输出结果是

A) 0,0,-10

B) 0,0,5

C) -10,3,-10

D) 3,3,-10

int a=0,b=0,c=0;

c=(a-=a-5),(a=b,b+3);

printf("%d,%d,%d

",a,b,c);

答案:B 3.11 当运行以下程序时,在键盘上从第一列开始输入9876543210(此处代表Enter),则程序的输出结果是

A) a=98,b=765,c=4321

B) a=10,b=432,c=8765

C) a=98,b=765.000000,c=4321.000000

D) a=98,b=765,c=4321.0

main() {

int a; float b,c;

scanf("%2d%3f%4f",&a,&b,&c);

printf("

a=%d,b=%f,c=%f

",a,b,c); }

答案:C 3.12 以下程序的输出结果是

A) a=%2,b=%5

B) a=2,b=5

C) a=%%d,b=%%d

D) a=%d,b=%d

main() { int a=2,b=5;

printf("a=%%d,b=%%d

",a,b); }

答案:D 3.13 若int类型占两个字节,则以下程序段的输出是

A) -1,-1

B) -1,32767

C) -1,32768

D) -1,65535

int a=-1;

printf("%d,%u

",a,a);

答案:D 3.14 以下程序段的输出是

A) *496 *

B) * 496*

C) *000496* D)输出格式符不合法

int x=496;

printf("*%-06d*

",x);

答案:A 3.15 以下程序段的输出是

A) |3.1415|

B) | 3.0|

C) |

3|

D) |

3.|

float a=3.1415;

printf("|%6.0f|

",a);

答案:C 3.16 以下程序段的输出是

A) |2345.67800|

B) |12345.6780|

C) |12345.67800|

D) |12345.678|

printf("|%10.5f|

",12345.678);

答案:C 3.17 以下程序段的输出是

A) *0000057.66*

B) *

57.66*

C) *0000057.67*

D) *

57.67*

float a=57.666;

printf("*%010.2f*

",a);

答案:C 3.18 若从终端输入以下数据,要给变量C赋以283.19,则正确的输入语句是

A) scanf("%f",c);

B) scanf("%8.4f",&c);

C) scanf("%6.2f",&c);

D) scanf("%8",&c);

283.1900表示Enter键

答案:由于印刷错误,本题没有正确答案。改正意见:

把选项A改为:scanf("%f",&c);或者把选项D改为:scanf("%8f",&c);则可分别选择A或者D为正确答案。

3.19 若变量已正确说明,要求用以下语句给a赋予3.

12、给b赋予9.0,则正确的输入形式是(□代表空格)

A) 3.12□□9.0

B) a=□□3.12b=□□□9

C) a=3.12,b=9

D) a=3.12□□,b=9□□□□

scanf("a=%f,b=%f",&a,&b); 表示Enter键

答案:C 3.20 以下程序的输出结果是

A) 9 8

B) 8 9

C) 6 6

D) 以上三个都不对

#include "math.h" main() { double a=-3.0, b=2;

printf("%3.0f %3.0f

",pow(b,fabs(a)),pow(fabs(a),b)); }

答案:B

二、填空题

3.21 若有以下定义,请写出以下程序段中输出语句执行后的输出结果。 (1)____(2)____(3)____

int i=-200,j=2500;

printf("(1) %d %d",i,j);

printf("(2) i=%d, j=%d

",i,j);

printf("(3) i=%d j=%d

",i,j);

答案:

-200 2500

i=-200, j=2500

i=-200 j=2500 3.22 变量i、j、k已定义为int类型并有初值0,用以下语句进行输入时

scanf("%d",&i); scanf("%d",&j); scanf("%d",&k); 当执行第一个输入语句,从键盘输入:

12.3表示Enter键

则变量i、j、k的值分别是____、____、____。

答案:

12、0、0 3.23 复合语句在语法上被认为是____。空语句的形式是____。

答案:一条语句、 ; 3.24 C语句的最后用____结束。

答案:;

3.25 以下程序段,要求通过scanf语句给变量赋值,然后输出变量的值。写出运行时给k输入100,给a输入25.81,给x输入1.89234时的三种可能的输入形式____、_____、____。

int k; float a; double x;

scanf("%d%f%lf",&k,&a,&x);

printf("k=%d,a=%f,x=%f

",k,a,x);

答案:

(1) 100 25.81 1.89234

(2) 100 25.811.89234

(3) 10025.811.892343.26 以下程序段的输出结果是____。

int x=0177;

printf("x=%3d,x=%6d,x=$%6o,x=%6x,x=%6u

",x,x,x,x,x);

答案:x=127,x= 127,x= 177,x=

7f,x= 127 3.27 以下程序段的输出结果是____。

int x=0177;

printf("x=%-3d,x=%-6d,x=$%-06d,x=$%06d,x=%%06d

",x,x,x,x,x);

答案:

27、x=127,x=127

,x=$127

,x=$000127,x=%06d 3.28 以下程序段的输出结果是____。

double a=513.789215;

printf("a=%8.6f,a=%8.2f,a=%14.8f,a=%14.8lf

",a,a,a,a); 答案:a=513.789215,a= 513.79,a= 513.78921500,a= 513.78921500

三、 编程题和改错题

3.16 【分析与解答】

(1) 主函数名main后应有一对圆括号。 (2) 变量定义语句中,v的前面缺逗号。

(3) 第三行的printf语句用以提示输入,但是原样输出的字符串没有用双引号括起来;另外,从输入的形式看,输入的数据紧跟在提示之后,因此,printf格式串中最后不应该有换行符——\n。

(4) 因为输入项a、b、c从定义和计算结果来看都是double类型,因此,第四行scanf语句格式串中的格式说明不应当用%d而应当用%lf;且每一个变量之前应该加地址运算符&。

(5) 第七行的printf语句中应当把%d都改成%lf或%f;按输出要求在格式串中应添加相应的原样输出的字符;因为下一个printf的输出从新的一行开始,因此在本输出语句的格式串的最后应当加换行符——\n。

(6) 第八行的printf语句中应当把格式串整理合并放在输出项的前面,输出项放在后面,%d都改成%lf或%f;中间的\n删去。

(7) 请读者自己写出修改后的程序,并上机调试。

3.17【分析与解答】

(1) 分析:可用算术式560÷60把分钟换算成小时和分钟,商数就是小时数,余数就是分钟数。

(2) 确定变量的名字和定义变量的类型:在程序中把小时数放在变量h中,把分钟数放在变量m中。这两个变量的类型可以是整型(本题中采用整型),也可以是实型。

(3) 确定所用算法:求〖SX()560〖〗60〖SX〗〗的商数,在C语言中可以用整除的算法,语句是h=560/60;。求余数可用求余运算符 %:560%60,其值放入变量m中的语句是:m=560%60;。(4) 设计输出格式。若输出的形式定为:小时:分钟,则按此形式设计输出语句。 (5) 把以上内容放在主函数的一对花括号中。 (6) 编写程序如下:

main() {

int h, m;

h=560/60;

m=560%60;

printf(″The result: %3d : %3d\n″, h,m);

 } 

运行结果是:

The result:

9 : 20

3.18 【分析与解答】

(1) 确定变量的名字和定义变量的类型。若用a存放1500,用b存放350;用q存放商数,用r存放余数,所有变量应定义成int类型。

(2) 设计输入语句从终端输入1500和350;在输入语句之前,应当设计一个输出语句,用以提示输入。 (3) 可用整除求商数,结果放在变量q中。可用求余运算符%求两数之余数,结果放在变量r中。 (4) 设计输出语句。输出a、b、q、r。

(5) 把以上内容放在主函数的一对花括号中。

本题的程序与3.30相似,请读者参考上题并根据本题的解释自己编程,并上机调试。

3.19 【分析与解答】

(1) 定义4个双精度变量a、b、c和ave,变量a、b、c分别存放读入的3个双精度数,ave存放它们的平均值。

(2) 设计输入语句,以及在此之前用于提示输入的(printf)语句。 (3) 设计求平均值的算法,把所求得的平均值放入变量ave中。

(4) 设计把变量ave中的数,从小数点后第二位数进行四舍五入的算法。现举例说明:若ave中的数为123.4644,为了保留此值小数点后一位,可用表达式:(int)(123.4644*10)/10.0;依次推算,为了保留此值小数点后二位,可用表达式:(int)(123.4644*100)/100.0;其他依此类推。

(5) 若要求对小数点后第二位数进行四舍五入,则可对原数加0.05后再进行以上运算。如要求保留123.4644小数点后一位且对第二位数进行四舍五入,可用表达式:(int)((123.467+0.05)*10)/10.0。注意:分母一定要用实数10.0而不能用整数10,否则就变成整除了;若要求保留123.4644小数点后两位且对第三位数进行四舍五入,可用表达式:(int)((123.467+0.005)*100)/100.0;其他依此类推。 (6) 设计输出语句。输出a、b、c和ave。 (7) 把以上内容放在主函数的一对花括号中。 (8) 编写程序如下: main()

{

double a,b,c,ave; printf(″Enter a ,b ,c : ″);

scanf(″%lf%lf%lf″, &a, &b, &c ); ave=(a+b+c)/3; printf(″ave=%f\n″, ave);

/*用以比较四舍五入前后的数据*/ ave=(int)((ave+0.05)*10)/10.0;

printf(″a=%f, b=%f, c=%f, ave=%f\n″, a,b,c,ave);

 } 

3.20 【分析与解答】

(1) 关于对变量中的数进行交换的算法请参考3.7题中的解释和《教程》中有关的例题。

(2) 定义4个整型变量a、b、c和t,变量a、b、c分别存放读入的3个整数,t用作临时存储单元。 (3) 设计输入语句,以及在此之前用于提示输入的(printf)语句。 (4) 输出a、b、c中的值,以便于比较。 (5) 交换的步骤如下: ① 把c中的值赋给t。 ② 把b中的值赋给c。 ③ 把a中的值赋给b。 ④ 把t中的值赋给a。

经过以上步骤,已按要求进行了交换。 (6) 输出a、b、c中的值。 (7) 编写程序如下: main()

{

int a, b, c, t;

printf(″Enter a, b, c :\n″); scanf(″%d%d%d″,&a,&b,&c);

printf(″(1) a=%d,b=%d,c=%d\n″,a,b ,c); t=c; c=b; b=a; a=t;

printf(″(2) a=%d,b=%d,c=%d\n″,a,b,c);

 } 

第四章、选择结构

一、 选择题

4.1 下列运算符中优先级最高的运算符是

A) !

B) %

C) -=

D) &&

答案:A 4.2 下列运算符中优先级最低的运算符是

A) ||

B) !=

C) =y)&&(y>=z)

B) (x>=y)AND(y>=z)

C) (x>=y>=z)

D) (x>=y)&(y>=z)

答案:A 4.4 设a、b和c都是int型变量,且a=3,b=4,c=5;则以下的表达式中,值为0的表达式是

A) a&&b

B) a0) y=1; else y=0; 答案:A 4.9 运行以下程序后,输出

A) ****

B) &&&&

C) ####&&&&

D) 有语法错误不能通过编译

main() { int k=-3;

if(k、=、4

答案:A)a==b||a4||x

main() { int a=100;

if(a>100) printf("%d

",a>100);

else

printf("%d

",a0)

B) !0

答案:A) xc)

b=a; a=c; c=b;

答案:

3、

2、2 4.20 若变量已正确定义,以下语句段的输出结果是____。

x=0; y=2; z=3;

switch(x)

{ case 0: switch(y==2)

{ case 1: printf("*"); break;

case 2: printf("%"); break;

}

case 1: switch(z)

{ case

1: printf("$");

case

2: printf("*"); break;

default : printf("#");

}

} 答案:*#

三、 编程题

4.21 【分析与解答】

相关内容请参考《教程》4.2节和4.4节。 (1) 改写如下: switch(a/10)

{ default : m=5; break;

case 0 : case 1 : case 2 : m=1; break; case 3 : m=2; break; case 4 : m=3; break; case 5 : m=4; break;  }; 

(2) 本题中对a的判断条件有一定的规律可寻;关键是,在switch语句后的表达式中利用了a/10,从而简化了case标号。

4.22 【分析与解答】

编写本题的程序,首先要解决如何计算学生当前的年龄(设存放实足年龄的变量是age)。 (1) 如果当前的月份大于生日的月份,则学生的实足年龄age=y1-y0。

(2) 如果当前的月份等于生日的月份,就要看日数,当前的日数大于或等于生日的日数,则学生的实足年龄age=y1-y0。

(3) 如果不满足以上的条件,就可断定当前的日期没有超过生日日期,就是说学生的年龄应当是age=y1-y0-1。 以上3条,用C语言可以描述如下:

if((m1>m0)[JB>1|][JB>1|](m1==m0&&d1>=d0)) age=y1-y0;

else age=y1-y0-1;

读者可以参考以上语句写出程序,也可以根据分析写出与此形式不同的语句和程序。 4.23【分析与解答】

(1) 若输入的整数a是奇数,输出 dd number,是偶数输出:even number。

(2) 若一个a是偶数,它就能被2除尽,即a%2==0,输出even number;若是奇数, 它就不能被2除尽,即a%2!〖KG-*2〗=0,输出odd number。

读者可以参考以上给出的算法,写出相应的C语句,并编写出完整的程序。 4.24 【分析与解答】

本题的主要算法是从3个数中找出最大的那个数。假定始终把最大的数放在变量max中。 (1) 假定a中的数最大,把a赋给max。

(2) 用b去和max比较,若b大于max,则把b赋给max;若不大于max,则什么也不做。 (3) 用c去和max比较,若c大于max,则把c赋给max;若不大于max,则什么也不做。 (4) 经过以上操作,max中已放入了a、b、c三个数中的最大数,输出max即可。 读者可以参考以上给出的算法,写出相应的C语句,并编写出完整的程序。 4.25 【分析与解答】

(1) 本题已给出了非常明确的条件,只要写出正确的条件判断语句就可基本完成程序的编写。

(2) 由给出的函数可知,只有x的值在规定的范围内时,才求出y的值,因此程序应当对输入的x进行判断,若超过范围就不求y的值。

(3) 现以使用if[CD#*2]else语句为例写出程序供参考。

main() {

int x,y; printf(″Enter x : ″); scanf(″%d″, &x); if(x>-5&&x7)

{ n--;

printf("%d

", n);

}

答案:B 5.4 以下程序段的输出结果是

A) 1

B) 3 0

C) 1 -2

int x=3;

do

{ printf("%3d",x-=2); }

while(!(--x));

答案:C 5.5 以下程序段的输出结果是

A) 15

B) 14

C) 不确定

main()

{ int i,sum;

for(i=1; i0; y--)

if(y%3==0)

{ printf("%d", --y); continue;

}

答案:B 5.7 若x是int型变量,以下程序段的输出结果是

A) **3

##4

**5

B) ##3

**4

##5

C) ##3

**4##5

D) **3##4

**5

for(x=3; x

相关推荐: