当前位置:文档之家› C语言程序设计基础(谭浩强)习题

C语言程序设计基础(谭浩强)习题

C语言程序设计基础(谭浩强)习题
C语言程序设计基础(谭浩强)习题

第一章C语言概述

一、选择题

1.C语言规定,必须用作为主函数名。

A)Function B)include C)main D)stdio

2.一个C程序可以包含任意多个不同名的函数,但有且仅有一个,一个C程序总是从开始执行。

A)过程B)主函数C)函数D)include

3.是C程序的基本构成单位。

A)函数B)函数和过程C)超文本过程D)子程序

4.下列说法正确的是。

A)一个函数的函数体必须要有变量定义和执行部分,二者缺一不可

B)一个函数的函数体必须要有执行部分,可以没有变量定义

C)一个函数的函数体可以没有变量定义和执行部分,函数可以是空函数

D)以上都不对

5.下列说法正确的是。

A)main函数必须放在C程序的开头

B)main函数必须放在C程序的最后

C)main函数可以放在C程序中间部分,执行C程序时是从程序开头执行的

D)main函数可以放在C程序中间部分,执行C程序时是从main函数开始的

6.下列说法正确的是。

A)在执行C程序时不是从main函数开始的

B)C程序书写格式严格限制,一行内必须写一个语句

C)C程序书写格式自由,一个语句可以分写在多行上

D)C程序书写格式严格限制,一行内必须写一个语句,并要有行号

7.在C语言中,每个语句和数据定义是用结束。

A)句号B)逗号C)分号D)括号

8.下列字符串是合法的自定义标识符的是。

A)_HJ B)9_student C)int D)LINE 1

9.不是C语言提供的合法关键字。

A)switch B)print C)case D)default

10.C语言提供的合法关键字是。

A)break B)print C)funiton D)end

11.C语言提供的合法关键字是。

A)continue B)procedure C)begin D)append

二、填空题

1.一个C程序至少包含一个,即。

2.一个函数由两部分组成,它们是和。

3.函数体的范围是。

4.函数体一般包括和。

5.C语言是通过来进行输入输出的。

6.在C语言中,凡在一个标识符后面紧跟着一对圆括弧,就表明它是一个。7.主函数名后面的一对圆括号中间可以为空,但一对圆括号不能。

第一章答案

一、选择题

1~5 C B A C D 6~10 C C A B A

11 A

二、填空题

1.主函数main函数

2.函数的说明部分函数体

3.最外层的一对大括弧内的部分

4.变量定义部分执行部分

5.输入和输出函数

6.函数

7.省略

第二章数据类型、运算符与表达式

一、选择题

1.在C 语言中,下列数据类型属于基本类型的是。

A)整型、浮点型、字符型B)共用体类型、整型

C)结构体类型、浮点型D)指针类型、字符型

2.C语言中不能表示的整型常量进制是。

A)十进制B)十六进制C)八进制D)二进制

3.在C语言中,转义字符回车换行符是。

A)\n B)\t C)\r D)\b

4.在ASCII码表中可以看到每个小写字母的ASCII码比相应的大写字母。

A)大32 B)大64 C)小32 D)小64

5.设d为字符变量,下列表达式能够完整正确赋值的是。

A)d=297 B)d=?a?C)d=“a”D)d=?abc?

6.10+?a?+1.5-567.345/?b?的结果是型数据。

A)char B)double C)int D)float

7.语句

int i=3;

k=(i++)+(i++)+(i++);

执行过后k的值为,i的值为。

A)9,6 B)12,5 C)18,6 D)15,5

8.int i=3;

printf(“%d”,-i++);

的输出结果为,输出后i的值为。

A)-3,4 B)-4,4 C)-4,3 D)-3,3

9.已知在ASCII字符集中,数字0的序号为48,下面程序的输出结果为。

#include

void main( )

{

char x,y;

x=?0?; y=?9?;

printf(“%d,%c\n”,x,y);

}

A)因输出格式不合法,输出错误信息B)48,9

C)0,9 D)0,57

10.已知在ASCII集中,字母A的序号为65,下面程序的输出结果为。

#include

void main( )

{

char c1=? Y?,c2=? B?;

printf(“%c,%d\n”,++c1, c2--);

}

A)Y,66 B)Z,65 C)Z,66 D)Y,65

11.C语言中,运算对象必须是整型数的运算符是。

A) * B)/ C)%和/ D) %

12.下列常数中,合法的C语言常量是。

A)?\n?B)e-310 C) abc D)?1234?

13.下面程序的输出结果是。

#include

void main( )

{

int x=2,y=0,z;

x*=3+2; printf(“%d”,x);

x*=y=z=4; printf(“%d”,x);

}

A)8 40 B)10 40 C)10,4 D)8,4

14.若已定义x和y为double类型,则表达式x=1,y=x+3/2的值为。

A)1 B)2 C)2.0 D)2.5

15.表达式(int)2.1416的值为。

A)2 B)2.1 C)0 D)3

16.C语言规定标识符由等字符组成.

A)字母数字下划线B)中划线字母数字

C)字母数字逗号D)字母下划线中划线17.若有如下定义:int a=2,b=3; float x=3.5,y=2.5; 则表达式:

(float)(a+b)/2+(int)x%(int)y的值是。

A)2.500000 B)3.500000 C)4.500000 D)5.000000

18. 已知字母A的ASCII码为十进制65,下面程序段的运行结果为:。

char ch1,ch2;

ch1= …A?+2; ch2= …D?-3;

printf(“%d, %c\n”, ch1,ch2);

A)67, 65 B)C,A C)C, D D) 67, A

19. 设x、y均为float型变量,则以下不合法的赋值语句是。

A) + + x; B)y = ( x%2 ) / 10;

C)x * = y + 8; D)x = y = 0;

20. 设有以下定义,则能使值为3的表达式是:。

int k=7, x=12;

A)x%=(k%=5) B)x%=(k-k%5)

C)x%=k D)(x%=k)-(k%=5)

二、填空题

1.在C语言中,程序运行期间,其值不能被改变的量叫。

2.在C语言中,要求对所有变量,遵循先定义后的原则。

3.可以用来表示C的整常数的进制是、、。

4.浮点型变量分为和,即float和double型。

5.C的字符常量是用括起来的一个字符,字符串常量用括起来的一组字符。

6.在一个变量定义语句中可以同时定义多个变量,变量之间用隔开。

7.下面的程序运行结果为。

#include

void main( )

{

char c1,c2;

c1='a';c2='b';

c1=c1-32;c2=c2-32;

printf(“%c %c”,c1,c2);

}

8.表达式10+'a'+1.5-0.5*'b'的结果。

9.在C语言中,可以利用,将一个表达式的值转换成指定的类型。10.#include

void main( )

{

int i,j,m,n;

i=8;j=10;

m=++i;n=j++;

printf(“%d,%d,%d,%d”,i,j,m,n);

}

运行后i,j,m,n的值是。

第二章答案

一、选择题

1~5 A D A A B

6~10 B A A B C

11-15 D A B C A

16~20 A B C B A

二、填空题

1.常量

2.使用

3.八进制十进制十六进制

4. 单精度双精度

5. 单引号双引号

6. 逗号

7. A B

8. 59.5

9. 强制类型转换

10. 9,11,9,10

第三章顺序结构程序设计

一、选择题

1. 下列说法正确的是。

A)输入项可以是一个浮点型常量,如scanf(“%f”,4.8);

B)只有格式控制,没有输入项也能进行正确输入,如scanf(“a=%d,b=%d”);

C)当输入一个浮点型数据时,格式控制部分应规定小数点后的位数,如

scanf(“%5.3f”,&f);

D)当输入数据时,必须指明变量的地址,如scanf(“%f”,&f);

2. 根据题目中已给出的数据的输入和输出形式,程序中输入/输出语句的正确是。

#include

void main( )

{

int a;float x;

printf(“input a,x:”);

输入语句

输出语句

}

输入形式input a,x:3 2.1

输出形式a+x=5.10

A)scanf(“%d,%f”,&a,&x); B)scanf(“%d %f”,&a,&x);

printf(“\na+x=%4.2f”,a+x); printf(“\na+x=%4.2f”,a+x);

C)scanf(“%d %f”,&a,&x); D)scanf(“%d %3.1f”,&a,&x);

printf(“\na+x=%6.1f”,a+x); printf(“\na+x=%4.2f”,a+x);

3. 以下程序的输出结果是。

#include

void main( )

{

int i=010,j=10,k=0x10;

printf(“%d,%d,%d\n”,i,j,k);

}

A)8,10,16 B)8,10,10 C)10,10,10 D)10,10,16

4. 以下程序的输出结果是。

#include

void main( )

{

char c1='6',c2='0';

printf(“%c,%c,%d,%d\n”,c1,c2,c1-c2,c1+c2);

}

A) 因输出格式不合法,输出出错信息B) 6,0,6,102

C) 6,0,7,6 D) 6,0,5,7

5. 设有如下定义

int x=10,y=3,z;

则语句

printf(“%d\n”,z=(x%y,x/y));

的输出结果是。

A)3 B)0 C)4 D)1

6. 设有如下定义

int x=10,y=5,z;

则语句

printf(“%d\n”,z=(x+=y,x/y));

的输出结果是。

A)1 B)0 C)4 D)3

7. 根据定义和数据的输入方式,输入语句的正确形式为:。

已有定义:float a1, a2;

输入 4.523

3.52

A)scanf(“%f %f “, &a1,&a2); B)scanf(“%f ,%f “, a1, a2);

C)scanf(“%4.3f ,%3.2f “, &a1,&a2); D)scanf(“%4.3f %3.2f “, a1,a2);

二、填空题

1. putchar函数的作用是,getchar函数的作用是。

2. printf函数的”格式控制”包括两部分,分别是和。

3. 不同类型的输出内容有不同的格式字符,其中是用来按十进制整数形式输出一

个整型数,是用来按小数形式输出一个浮点数,是用来输出一个字符。

4. 符号”&”是运算符,&a是指。

5. 复合语句是由一对括起来的若干语句组成。

6. 分析下面程序:

#include

void main( )

{

int x=2,y,z;

x*=3+2; printf(“%d “,x);

x*=y=z=4; printf(“%d “,x);

x=y=z; printf(“%d “,x);

x=(y=z); printf(“%d “,x);

}

程序的输出结果为。

7. 编制程序对实数a与b进行加,减,乘,除计算,要求显示如下结果。

jia=70

jian=30

cheng=1000

chu=2

程序:

#include

void main( )

{

(1)

a=50;b=20;

printf(“jia=%d\n”, (2) );

printf(“jian=%d\n”(3) );

printf(“cheng=%d\n”, (4) );

printf(“chu=%d\n”, (5) );

}

将缺少的部分填在空白处。

8. 以下程序的输出结果为:____________。

#include

void main( )

{

char c1,c2;

c1=…a?;

c2=…b?;

printf(“%c\n%c”,c1-32,c2);

}

三、编程题

1. 请编写一个程序,能显示出以下两行文字。

I am a student.

I love China.

2. 请编写一个程序,从键盘上输入a=2,b=

3.4,c=?D?,向屏幕输出对应的a,b,c的值。

第三章答案

一、选择题

1-5 D B A B A

6-7 D A

二、填空题

1. 向终端输出一个字符从终端输入一个字符

2. 格式说明普通字符

3. %d %f %c

4. 取地址a在内存中的地址

5. 大括号

6. 10 40 4 4

7. (1)intbbb a,b;(2)a+b (3)a-b (4)a*b (5)a/b

8. A

b

三、编程题

1. #include

void main( )

{

printf(“I am a student.\n”);

printf(“I love China.\n”);

}

2. #include

void main( )

{

int a;

float b;

char c;

scanf(“%d%f%c”,&a,&b,&c);

printf(“a=%d,b=%f,c=%c\n”,a,b,c);

}

第四章选择结构程序设计

一、选择题

1.以下关于运算符优先级的描述中,正确的是。

A)!(逻辑非)>算术运算>关系运算>&&(逻辑与)>||(逻辑或)>赋值运算

B)&&(逻辑与)>算术运算>关系运算>赋值运算

C)关系运算>算术运算>&&(逻辑与)>||(逻辑或)>赋值运算

D)赋值运算>算术运算>关系运算>&&(逻辑与)>||(逻辑或)

2.逻辑运算符的运算对象的数据类型。

A)只能是0或1 B)只能是.true或.false.

C)只能是真或假D)任何类型的数据

3.能正确表示x的取值范围在[0,100]和(-10,-5)的表达式是。

A) (x>=-10)&&(x<=-5)||(x>0)&&(x<100)

B)(x>-10)&&(x<-5)||(x>=0)&&(x<=100)

C)(x>=-10)&&(x<=-5)&&(x>=0)&&(x<=100)

D)(x>-10)&&(x<-5)&&(x>=0)&&(x<=100)

4.以下程序的运行结果是。

#include

void main( )

{

int c,x,y;

x=1; y=1; c=0;

c=x++||y++;

printf(“\n%d%d%d\n”,x,y,c);

}

A)110 B)211 C)011 D)001

5.判断字符型变量ch为大写字母的表达式是。

A)?A?<=ch<=?Z?B)(ch>=A) &&(ch<=Z)

C)(ch>=?A?)&&(ch<=?Z?) D) A<=ch<=Z

6.以下if语句书写正确的是。

A)if(x=0;) B)if(x>0)

printf(“%f”,x); {x=x+1; printf(“%f”,x);}

else printf(“%f”,-x); else printf(“%f”,-x);

C)if(x>0);D)if(x>0)

{x=x+1; printf(“%f”,x);} {x=x+1; printf(“%f”,x);

else printf(“%f”,-x); else printf(“%f”,-x); } 7.若已知a=10,b=20,则表达式!a

A)10 B)20 C)1 D)0

8.写出下面程序的执行结果。

#include

void main( )

{int x=6,y=0;

if(y=1) x=5;

printf(“%d\t”,x);

if(y=0) x=3;

else x=4;

printf(“%d\t\n”,x);}

A)6 3 B)5 4 C)5 3 D)6 5

9.下列程序段运行后x的值是。

a=b=c=0; x=35;

if(!a) x=-1;

else if(b);

if(c) x=3;

else x=4;

A)-1 B)4 C)35 D)3

10.若有以下函数关系

y=2x x<0时

y=x+1 x=0时

y=x x>0时

下面程序段能正确表示以上关系的是。

A)y=2*x; B)y=2*x;

if(x!=0) if(x<=0)

if(x>0) y=x; if(x= =0) y=x+1;

else y=x+1; else y=x;

C)if(x>=0) D)y=x+1;

if(x>0) y=x; if(x<=0)

else y=x+1; if(x<0) y=2*x;

else y=2*x; else y=x;

11.若有变量定义float x; int y; 则正确的switch语句是。

A)switch(x) B)switch(x)

{ case 1 : printf(“*\n”); { case 1~2 : printf(“*\n”);

case 2 : printf(“* *\n”); } case 3~4 : printf(“* *\n”); }

C)switch(y) D)switch(y)

{ case 1*y : printf(“*\n”); { case 1 : printf(“*\n”);

case 2*y : printf(“* *\n”); } case 2 : printf(“* *\n”); } 12.当a = 1, b = 3 , c = 5, d = 4 时, 执行完下面程序段后x 的值为。

if ( a < b )

if ( c < d ) x = 1 ;

else

if ( a < c )

if ( b < d ) x =2 ;

else x = 3 ;

else x = 6 ;

else x = 7 ;

A)1 B)2 C)3 D)6

13. 设有如下定义:char ch=?z?,则执行下面语句后变量ch:。

ch=(…A?<=ch&&ch<=…Z?)?(ch+32):ch

A)A B)a C)Z D)z

14.已知int x=30,y=50,z=80;以下语句执行后变量x、y、z的值分别为:。

if (x>y||xz)

z=x; x=y; y=z;

A)x=50, y=80, z=80 B)x=50, y=30, z=30

C)x=30, y=50, z=80 D)x=80, y=30, z=50

15.switch(表达式c)括号内表达式c的类型:。

A)可以是任意类型B)只能为整型

C)可以是整型或字符型D)可以为整型或浮点型

二、填空题

1.在C语言中,对于if语句,else子句与if子句的配对规则是。

2.以下两条if语句可合并成一条if语句。

if(a<=b) x=1;

else y=2;

if(a>b) printf(“* * * *”);

else printf(“# # # #”);

3.设有程序片段如下:

switch(class)

{case 'A':printf(“GREAT!\n”);

case 'B':printf(“GOOD!\n”);

case 'C':printf(“OK!\n”);

case 'D':printf(“NO!\n”);

default:printf(“ERROR!\n”);}

若class的值为'C',则输出结果是。

4.x是0~100之间的整数,根据以下if语句写出等价的switch语句。

if(x<60) m=1;

else if(x<70) m=2;

else if(x<80) m=3;

else if(x<90) m=4;

else m=5;

switch( (1) )

{ (2) m=5;break;

case 6:m=2;break;

case 7:m=3;break;

case 8:m=4;break;

(3) m=1;}

5. 输入3个实数a, b, c要求按从大到小顺序输出三个数。

#include

void main( )

{ float a,b,c,t;

scanf(“%f,%f,%f”,&a,&b,&c);

if (a

{t=a; (1) b=t;}

if( (2) )

{t=a; a=c; c=t;}

if(b

{ (3) b=c; c=t;}

printf(“%f,%f,%f”,a,b,c);}

6.输入一个字符,如果是大写字母,则把其变成小写字母;如果是小写字母,则变成大写字母;其它字符不变。请在括号内填入缺少的内容。

#include

void main( )

{ char ch;

scanf(“%c”,&ch);

if ( (1) )

ch=ch+32;

else

if(ch>=?a?&&ch<=…z?)

( (2) )

printf(“%c\n”,ch); }

7.用C语言描述

1)a小于b或小于c ,

2)a和b都大于c

3)a或b中有一个小于c

4)a是奇数

三、编程题

1.编程实现;输入长方形的两个边长a,b和一个整数k。k=1时,输出长方形的周长l; k=2时,输出长方形的面积s;当k=3时,输出长方形的周长l和面积s。

2.试编程输入x,输出对应的y。

x2(x<0)

y = -2x+10 (0≤x<10)

x-5 (x≥10)

3.分别用if和switch编程,输入0-100分成绩,输出相应的成绩档次。设:90分以

上为…A?;80~89分为…B?;70~79分为…C?;60~69分为…D?;60分以下为…E?。

第四章答案

一、选择题

A D

B B

C B C B B C

D B D A C

二、填空题

1.else与它前面最近的一个未匹配的if配对

2.if(a<=b) {x=1; printf(“ # # # #”); }

else { y=2; printf(“ * * * *”); }

3. OK!

NO!

ERROR!

4. (1)x/10 (2)case 10: case 9: (3)default:

5. (1)a=b; (2)a

6. (1)ch>=?A?&& ch<=?Z?(2)ch=ch-32;

7. (1)ac&&b>c (3)a

三、编程题

1. #include

void main( )

{

int k;

float a,b,l,s;

printf(“请输入长方形的边长a、b \n”);

scanf(“%f%f”,&a,&b);

printf(“请输入整数k\n”);

scanf(“%d”, &k);

switch(k)

{

case 1: l=2*a+2*b;printf(“周长=%f\n”,l);break;

case 2: s=a*b; printf(“面积=%f\n”,s);break;

case 3: l=2*a+2*b; s=a*b;printf(“周长=%f 面积=%f\n”,l,s);break;

}

}

2. #include

void main( )

{

float x,y;

scanf(“%f”,&x);

if(x<0)

y=x*x;

else

if(x<10)

y=-2*x+10;

else

y=x-5;

printf(“y=%f\n”,y);

}

3.

#include

void main( )

{

float score;

scanf(“%f”,&score);

if(score>=90)

printf(“A\n”);

else if(score>=80)

printf(“B\n”);

else if(score>=70)

printf(“C\n”);

else if(score>=60)

printf(“D\n”);

else

printf(“E\n”);

}

#include

void main( )

{

float score;

scanf(“%f”,&score);

switch((int)score/10)

{

case 10:

case 9:printf(“A\n”);break;

case 8:printf(“B\n”);break;

case 7:printf(“C\n”);break;

case 6:printf(“D\n”);break;

default:printf(“E\n”);

}

}

第五章循环结构程序设计

一、选择题

1.for语句圆括号中的表达式可以部分或全部省略,但两个不可省略。

A)”B)( C);D),

2.程序段如下

int k=0;

while(k=0) k=k-1;

则以下说法中正确的是。

A)while循环执行20次B)循环是无限循环

C)循环体语句一次也不执行D)循环体语句执行一次

3.以下循环是。

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

A)无限循环B)循环次数不定C)执行4次D)执行5次

4.在下列程序段中,while循环的循环次数是。

int i=0;

while(i<10)

{ if(i<1) continue;

if(i= =5) break;

i++; }

A)1 B)10 C)6 D)无限循环

5.程序段int k=0; while(k++<=2) printf(“%d\n”,k); 执行结果是。

A)1 B)2 C)0 D)无结果

2 3 1

3 4 2

6.以下程序段的输出结果。

int x=3;

do{ printf(“%d”,x - =2);

}while(- -x);

A)1 B)30 3 C)1 -2 D) 无限循环

7.下列循环的输出结果是。

int n=10;

while(n>7)

{ n- -;

printf(“%d\n”,n);}

A)10 B)9 C)987 D)9

9 8 8

8 7 7

6

8.以下程序段的输出结果是。

int i;

for(i=1;i<=5;i++)

{ if(i%2) printf(“#”);

else continue;

printf(“*”); }

A)*#*#*# B)#*#*#* C)*#*# D)#*#*

9.在循环语句中,用于提前结束循环,接着执行循环下面的语句的关键词是。

A)swich B)continue C)break D)if

10.以下程序段中循环执行次数是。

for(int i=5;i;i- -)

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

A)20 B)24 C)25 D)30

11.for(表达式1;表达式2;表达式3),其中表示循环条件的是。

A)表达式1 B)表达式2 C)表达式3 D)语句

12.以下能正确计算1*2*3*…*10的程序段是。

A)do {i=1;s=1; s=s*i; i++; } while(i<=10);

B)do {i=1;s=0; s=s*i; i++; } while(i<=10);

C)i=1;s=1; do {s=s*i; i++; } while(i<=10);

D)i=1;s=0; do {s=s*i; i++; } while(i<=10);

13.x= -1; do { x=x * x;} while(!x); 此程序段。

A)是死循环B)循环执行二次

C)循环执行一次D)有语法错误

二、填空题

1.continue语句的作用是,即跳过循环体中下面尚未执行的语句,接着进行下一次是否执行循环的判定。

2.while语句的执行顺序是,do_while语句的执行顺序是。

3.把for(表达式1;表达式2;表达式3);改写为等价的while语句为。

4.补足程序段:输入若干个成绩,输出最高成绩和最低成绩,输入负数时结束输入。

float x,max,min;

scanf(“%f”,&x);

max=x; min=x;

while (1)

{

if(x>max) (2)

if( (3) ) min=x;

scanf(“%f”,&x);

}

printf(“max=%f min=%f\n”,max,min);

5.下面程序段的输出结果是。

int n=0;

while(n++<=1);

printf(“%d,”,n);

printf(“%d\n”,n);

6.下面程序段的输出结果是。

int s,i;

for(s=0,i=1;i<3;i++,s+=i);

printf(“%d\n”,s);

7.下面程序段的输出结果是。

int i=10,j=0;

do

{j=j+i;

i- -;}while(i>2);

printf(“%d\n”,j);

五、编程题

1.分别用while、for编写程序,计算下列值并输出结果。1)1+2+3.........+100 2)2*4*6.........*100

2.分别用while、for双重循环的方式编程绘制如下图形:

1

2

相关主题
文本预览
相关文档 最新文档