您的当前位置:首页正文

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

2022-10-06 来源:好走旅游网
第一章 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)\ 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 6-7 D

B A

A

B

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,则表达式!aA)10 B)20 C)1 D)0 8.写出下面程序的执行结果 。 #include void main( ) {int x=6,y=0;

if(y=1) x=5; printf(“%d\”,x); if(y=0) x=3; else x=4; printf(“%d\\\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)a6. (1)ch>=’A’&& ch<=’Z’ (2)ch=ch-32;

7. (1)ac&&b>c (3)a1. #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) 第五章 答案

一、选择题

1-5 C 11-13 B

C C

D C

D

A 6-10

A

B

B

C A

二、填空题

1.结束本次循环执行

2.先判断,后执行循环体;先执行循环体,后判断 3.表达式1;

while(表达式2) { 表达式3;}

4. (1)(x>=0) (2)max=x; (3)x五、编程题

1. 1)

#include void main( ) { int i=1,sum=0; while(i<=100) { sum+=i; i++; } printf(\"sum=%d\\n\ }

#include void main( ) { int i,sum=0; for(i=1;i<=100;i++) sum+=i; printf(\"sum=%d\\n\ } 2)

#include void main( ) {

double i=2,j=1; while(i<=100) { j*=i; i=i+2; } printf(\"j=%e\\n\ }

#include void main( ) { double i,j; for(i=1,j=1;i<=50;i++) j*=2*i; printf(\"j=%e\\n\ } 2. 1)

#include void main( ) { int i=1,j; while(i<=4) {

j=1; while(j<=5) { printf(\"*\"); j++; } printf(\"\\n\"); i++; } }

#include void main( ) { int i,j; for(i=1;i<=4;i++) { for(j=1;j<=5;j++) printf(\"*\");

printf(\"\\n\"); } } 2)

#include void main( ) { int i=1,j; while(i<5) { j=1; while(j<=5-i) { printf(\"*\"); j++; } printf(\"\\n\"); i++; } }

#include void main( ) { int i,j; for(i=4;i>0;i- -) { for(j=1;j<=i;j++) printf(\"*\"); printf(\"\\n\"); } }

第六章 数组

一、选择题

1.在C语言中,引用数组元素时,其数组下标的数据类型允许是 。 A)整型常量 B)整型常量或整型表达式 C)整型表达式 D)任何类型的表达式 2.以下对一维整型数组a的正确说明是 。 A)int a(10); B)int n=10,a[n]; C)int n; scanf(“%d”,&n); int a[n]; D)#define SIZE 10 int a[SIZE]; 3、下列定义数组正确的是 。

A) int a[ ]={1,2,3,4,5}; B) int b[1]={2,5};

C) int a(10); D) int 4e[4]; 4. 设有char str[10],下列语句正确的是 。

A) scanf(“%s”,&str); B) printf(“%c”,str);

C) printf(“%s”,str[0]); D) printf(“%s”,str);

5.假设array是一个有10个元素的整型数组,则下列写法中正确的是 。 A) array[0]=10 B) array=0 C) array[10]=0 D) array[-1]=0

6.若有以下定义:

int a[5]={ 5, 4, 3, 2, 1 } ; char b= ‘a’, c, d, e;

则下面表达式中数值为2的是 。

A)a[3] B)a[d–b] C)a[4] D)a[c-b]

7.下面把字符串str2连接到字符串str1后的是 。 A)strcat(str1,str2) ; B)strcat(str2,str1); C)strcpy(str1,str2) ; D)strcmp(str1,str2);

8.设有两字符串”Beijing”、”China”分别存放在字符数组str1[10],str2[10]中,下面语句中能把”China”连接到”Beijing”之后的为: 。

A)strcpy(str1,str2); B)strcpy(str1,“China”); C)strcat(str1,“China”); D)strcat(“Beijing”,str2); 9.若有二维数组a[m][n],则数组中a[i][j]之前的元素个数为 。 A) j*m+i B)i*n+j

C) i*m+j+1 D)i*n+j+1

10.int a[3][3]={1,2,3,4,5,6,7,8,9},i ; 则下列语句的输出结果是 。

for (i=0;i<=2;i++) printf(“%d ”,a[i][2-i]); A)3 5 7 B)3 6 9 C)1 5 9 D)1 4 7

11.不能正确把字符串program赋给数组的语句是 。

A)char a[ ]={‘p’,‘r’,‘o’,‘g’,‘r’,‘a’,‘m’ ,‘\\0’}; B)char a[10]; strcpy(a, “program”); C)char a[10]; a=“program”; D)char a[10]={ “program”};

12.以下不能对二维数组a进行正确初始化的语句是 。

A)int a[2] [3] = {0}; B)int a[ ][3]={{1,2},{0}}; C)int a[2][3]={{1,2},{3,4},{5,6}}; D)int a[ ][3]={1,2,3,4,5,6}; 13.下面程序的运行结果是 。

char c[5]={‘a’,‘b’,‘\\0’,‘c’,‘\\0’}; printf(“%s”,c); A)‘a’‘b’ B)ab\\0c\\0 C)ab c D)ab 14.判断字符串a和b是否相等,应当使用 。

A)if (a= =b) B)if (a=b) C)if (strcpy(a,b)) D)if(strcmp(a,b))

15.有字符数组a[8]和b[10],则正确的输出语句是 。

A)puts (a,b); B) puts(a),puts(b);

C)putchar(a); putchar(b); D) printf(“%s,%s”,a[8],b[10]); 16.以下能对二维数组a进行正确说明和初始化的语句是: 。

A)int a( )(3)={ ( 1, 0, 1 ), ( 2, 4, 5 ) }; B)int a[2][ ]={ { 3, 2, 1 }, { 5, 6, 7 } }; C)int a[ ][3]={ { 3, 2, 1 }, { 5, 6, 7 } }; D)int a(2)( )={ ( 1, 0, 1 ), ( 2, 4, 5 ) };

17.int a[3][4] = {0};则下面正确的叙述是: 。

A)只有元素a[0][0]可以得到初值0 B)此说明语句不正确

C)数组a中每个元素均可得到初值0

D)数组a每个元素均可得到初值,但值不一定为0

二、填空题

1.数组名命名规则和变量名相同,只能使用 、 、 。 2.对于一维数组的定义“类型说明符 数组名[常量表达式]”,其中常量表达式可以包括 和 ,不能包含 。 3.在C语言中,二维数组中元素排列的顺序是 。

4.对数组a[m][n]来说,使用数组的某个元素时,行下标最大值是 ,列下标最大值是 。

5. 用冒泡法对十个数由小到大排序。 #include void main( )

{ int a[10],i,j,t; printf(\"input 10 numbers: \\n\"); for(i=0; (1) ;i++) scanf(\"%d\ (2) ); printf(\"\\n\"); for(i=0;i<9;i++) for(j=i+1;j<10;j++) if(a[i]>a[j]) { (3) a[i]=a[j]; a[j]=t; } printf(\"the sorted numbers:\\n\"); for(i=0;i<10;i++)

printf(\"%d \ (4) ); } 6.以下程序的运行结果是 。 #include void main( )

{ int i,j,a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12}, b[4][3]; for(i=0;i<3;i++) for(j=0;j<4;j++) b[j][i]=a[i][j]; for(i=0;i<4;i++) { for(j=0;j<3;j++) printf(\"%d \ printf(\"\\n\"); } } 7.以下程序的运行结果是___________。 #include

void main( )

{ char a[5][5],i,j; for(i=0;i<5;i++) for(j=0;j<5;j++) if(i= =j||i+j= =4) a[i][j]='*'; else a[i][j]=' '; for(i=0;i<5;i++) { for(j=0;j<5;j++) printf(\"%c\ printf(\"\\n\"); } }

8.以下程序的运行结果是 。 #include void main( )

{ char i,str[ ]=\"a1b2c3d4e5\"; for(i=0;str[i]!='\\0';i++) if(str[i]>='a'&&str[i]<='z') printf(\"%c \ printf(\"\\n\"); }

9.以下程序运行结果是 。 #include void main( )

{ char a[4][4],i,j; for(i=0;i<4;i++) for(j=0;j<4;j++) { if (ij) a[i][j]='-'; else a[i][j]='*'; } for(i=0;i<4;i++)

{ for(j=0;j<4;j++) printf(\"%c \ printf(\"\\n\"); } }

三、编程题

1.试编程从键盘输入10个整数并保存到数组,输出10个整数中的最大值及其下标、

最小值及其下标。

2.试编程从键盘输入2*3的二维数组,将该数组行列交换输出。

第六章 答案

一、选择题

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

11~15 C C D D B 16~17 C C 二、填空题

1. 字母 数字 下划线

2. 常量 符号常量 变量

3. 按行存放,即在内存中先存放第一行的元素,再存放第二行的元素 4. m-1,n-1

5. (1)i<10或 i<=9 (2)&a[i] (3)t=a[i]; (4)a[i] 6. 1 5 9 2 6 10 3 7 11 4 8 12 7. * * * * * * * * * 8.a b c d e 9. * + + + - * + + - - * + - - - * 三、编程题 1.

#include void main( ) {

int a[10],max,min,i,s,t; for(i=0;i<10;i++)

scanf(\"%d\ max=min=a[0]; s=t=0;

for(i=1;i<10;i++) {

if(max{ max=a[i]; s=i; } if(min>a[i])

{ min=a[i]; t=i; } }

printf(\"最大值是a[%d]=%d,最小值是a[%d]=%d\\n\ } 2.

#include void main( ) {

int a[2][3],i,j; for(i=0;i<2;i++) for(j=0;j<3;j++) scanf(\"%d\ for(j=0;j<3;j++) { for(i=0;i<2;i++) printf(\"%d \ printf(\"\\n\"); } }

第七章 函数

一、选择题

1.C语言中变量作实参向形参的数据传递方式是 A)地址传递; B)单向值传递;

C)双向值传递; D)由用户指定传递方式 2.以下关于C语言程序中函数的说法正确的是 A)函数的定义可以嵌套,但函数的调用不可以嵌套; B)函数的定义不可以嵌套,但函数的调用可以嵌套; C)函数的定义和调用均不可以嵌套; D)函数的定义和调用都可以嵌套。 3.对于C语言以下说法不正确的是

A)实参可以是常量、变量或表达式 B)形参可以是常量、变量或表达式 C)实参可以是任意数据类型 D)形参应与实参的类型相同或赋值兼容 4.若用数组名作为函数调用的实参,传递给形参的是

A)数组的首地址 B)数组第一个元素的值 C)数组中全部元素的值 D)数组元素的个数

5.如果在一个函数中的复合语句中定义了一个变量,则该变量 A)只在该复合语句中有效 B)在该函数中有效 C)在本程序范围内有效 D)为非法变量 6.以下程序的运行结果是

#include void main( ) { int a=2, i;

for(i=0;i<3;i++) printf(“%4d”,f(a)); } f(int a)

{ int b=0,c=3;

b++; c++; return(a+b+c); } A)7 10 13 B)7 7 7 C)7 9 11 D)7 8 9 7.C语言规定函数返回值类型是由

A) return语句中的表达式类型决定 B)调用该函数时的主调函数类型决定 C)调用该函数时系统临时决定 D)定义该函数时所指定的函数类型决定 8.在C语言中

A)实参与其对应的形参各占用独立的存储单元 B)实参与其对应的形参共占用一个存储单元

C)只有当实参和与其对应的形参同名时才共占用存储单元 D)形参是虚拟的,不占用存储单元 9.有如下函数调用语句

func(rec1,rec2+rec3,(rec4,rec5));

该函数调用语句中,含有的实参个数是 。

A) 3 B) 4 C) 5 D) 有语法错 10. int runc(int a,int b)

{ return(a+b);} void main( )

{ int x=2,y=5,z=8,r; r=func(func(x,y),z); printf(“%\\d\\n”,r); }

该程序的输出的结果是

A) 12 B) 13 C) 14 D) 15 11. void f(int x,int y)

{ int t;

if(x{ int a=4,b=3,c=5; f(a,b); f(a,c); f(b,c);

printf(“%d,%d,%d\\n”,a,b,c); } 执行后输出的结果是

A) 3,4,5 B) 5,3,4 C) 5,4,3 D) 4,3,5 12.以下C语言中,对函数描述不正确的是

A) 当用数组名作形参时,形参数组改变可使实参数组随之改变 B) 允许函数递归调用 C) 函数形参的作用范围只是局限于所定义的函数内

D) 函数说明必须在主调函数之前

13.以下所列的各函数首部中正确的是

A) void play(var :Integer,var b:Integer) B) void play(int a,b)

C) void play(int a,int b) D) Sub play(a as integer,b as integer) 14.下面程序的输出结果是

int m=13;

int fun(int x, int y) { int m=3;

return( x*y-m); } void main( ) { int a=7,b=5;

printf(“%d\\n”, fun(a,b)/m); } A)1 B)2 C)7 D)10 二、填空题

1.以下程序可计算10名学生某课成绩的平均分。

float average( float array[10] ) { int i; float aver, sum=array[0]; for ( i=1; (1) ;i++) sum+= (2) ; aver=sum/10; return(aver); } void main( )

{ float score[10], aver ; int i ; printf(“\\ninput 10 scores:”);

for(i=0; i<10;i++) scanf(“%f”,&score[i] ); aver = (3) ;

printf(“\\naverage score is %5.2f\\n”, aver); } 2.以下程序的运行结果是 。

int a=5; int b=7; void main( ) { int a=4, b=5,c; c=plus (a,b);

printf(“A+B=%d\\n”,c) ; } int plus(int x, int y)

{ int z; z=x+y; return (z); }

第七章 答案

一、选择题

1-5 B 11-14 D

B D

B C

A B

A

6-10

B

D

A

A

D

二、填空题

1.(1)i<10 (2)array[i] (3)average(score) 2.A+B=9

第八章 指针

一、选择题

1.变量的指针,其含义是指该变量的 。 A)值 B)地址 C)名 D)一个标志

2.若有定义:int a[5];则a数组中首元素的地址可以表示为 。 A)&a B)a+1 C)a D)&a[1] 二、填空题

1.数组在内存中占用一段连续的存储空间,它的首地址由 表示。 2.在C程序中,指针变量能够赋 值或 值。

第八章 答案

一、选择题

1~5 B C 二、填空题

1.数组名

2. 地址 NULL(或ˊ\\0ˊ,或0,或空值)

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