C语言课后例题解析_第1页
C语言课后例题解析_第2页
C语言课后例题解析_第3页
C语言课后例题解析_第4页
C语言课后例题解析_第5页
已阅读5页,还剩65页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

b说明:

1、原先的少部分题目有错,请用红色的部分替换掉;

2、如果红色部分有文字“删除该行”,就直接删除该行;

第一章C语言的基础知识

第一节对C语言的初步认识

习题

1.下列叙述中错误的是B

A)任何一个C程序都必须有且仅有一个main函数,C语言总是

从main函数开始执行。

B)C语言中的变量,可以先使用后定义。

C)所有的C语言语句最后都必须有一个分号

D)C程序书写格式自由,语句可以从任,列开始书写,一行内

可以写多个语句。

第二节熟悉VisualC++

习题

1.C语言源程序名的后缀是B

A).exeB).cC).obj

D).cp

2.下列叙述中错误的是D

A)计算机不能直接执行用C语言编写的源程序

B)C程序经C编译后,生成后缀为.obj的文件是一个二进制文

C)后缀为.obj的文件,经连接程序生成后缀为.exe的文件是一

个二进制文件

D)后缀为.obj和.exe的二进制文件都可以直接运行

3.用C语言编写的代码程序B

A)可立即执行B)是一个源程序

C)经过编译即可执行D)经过编译解释才能执行

第三节标识符

习题

1.按照C语言规定的用户标识符命名规则,不能出现在标识符

中的是B

A)大写字母B)连接符C)数字字符D)下划线

2.以下选项中不合法的标识符是C

A)printB)FORC)&aD)_00

3.以下叙述中错误的是A

A)用户所定义的标识符允许使用关键字

B)用户所定义的标识符应尽量做到“见名知意”

C)用户所定义的标识符必须以字母或下划线开头

D)用户定义的标识符中,大、小写字母代表不同标识

4.可在C程序中用作用户标识符的一组标识符是A

A)andB)DateC)Hi

D)case

_2007y-m-dDr.Tom

Bigl

5.以下不合法的用户标识符是C

A)j2_KEYB)DoubleC)4d

D)_8_

6.以下不能定义为用户标识符的是D

A)MainB)_0C)JntD)sizeof

7.下列选项中,不能用作标识符的是D

A)_1234_B)_1_2C)int_2_D)

2_int_

8.以下4组用户定义标识符中,全部合法的一组是A

A)_mainB)IfC)txtD)int

enclude-maxREALk_2

sinturbo3COM_001

第四节数制转换

习题

1.十进制整数360的八进制为,十六进制为

550168

第五节整数和实数

习题

1.以下选项中正确的整型常量是C

A)10110BB)0386C)OXffaD)

x2a2

2.以下关于long、int和short类型数据占用内存大小的叙述中

正确的是D

A)均占4个字节B)根据数据的大小来决定所占内存的字节数

C)由用户自己定义D)由C语言编译系统决定

3.以下选项中不属于C语言的类型的是D

A)signedshortintB)unsignedlongint

C)unsignedintD)longshort

4.以下选项中合法的实型常数是C

A)5E2.0B)E-3C).2E0D)1.3E

5.以下选项中,不能作为合法常量的是B

A)1.234e04B)1.234e0.4C)1.234e+4

D)1.234e0

6.以下选项中可作为C语言合法常量的是A

A)-80.B)-080C)-8el.OD)-80.0e

7.以下符合C语言语法的实型常量是C

A)1.2E0.5B)3.14.159EC).5E-3D)

E15

8.以下不合法的数值常量是C

A)OilB)leiC)8.0E0.5D)

Oxabcd

9.以下选项中,合法的一组C语言数值常量是B

A)0285e-3-OxfB)12.OXa234.5e0

C).1774c1.5OXa23D)0x8A10,0003.e

10.下列定义变量的语句错误的是D

A)int_int;B)doubleint_;C)longFor;D)float

US$;

第六节算术表达式与赋值表达式

习题

1.表达式3.6—5/2+1.2+5%2的值是D

A)4.3B)4.8C)3.3D)3.8

2.设有定义:floatx=123.4567;,则执行以下语句后输出的结果

是o123.46

printf("%f\n",(int)(x*100+0.5)/100.0);

3.设有定义:floata=2,b=4,h=3;,以下C语言表达式与代数式X

h计算结果不相符的是B

A)(a+b)*h/2B)(l/2)*(a+b)*h

C)(a+b)*h*l/2D)h/2*(a+b)

第七节自加自减运算符、逗号表达式

习题

1.设变量已正确定义为整型,则表达式n=i=2,++i,i++的值为

o3

2.设有定义:intk=O;,以下选项的4个表达式中与其他3个表达

式的值不相同的是A

A)k++B)k+=lC)++k

D)k+1

3.有以下程序B

main()

(

charal='M',a2='m';

printf("%c\n",(al,a2));

)

以下叙述中正确的是

A)程序输出大写字母MB)程序输出小写字母m

C)格式说明符不足,编译出错D)程序运行时产生出错信息

4.有以下程序:B

main()

{inta=O,b=O;

a=10;/*给a赋值

b=20;给b赋值*/

printf("a+b=%d\n",a+b);/*输出计算结果*/

程序运行后的结果是

A)a+b=30B)a+b=10C)30D)程序出

第八节字符

习题

1.以下选项中不属于字符常量的是()oB

A),CB)"C"C)'O'D)'\072'

2.已知字母A的ASCH代码值为65,若变量kk为char型,以

下不能正确判断出kk中的值为大写字母的表达式是()。B

A)kk>='A'&&kk<='Z'B)!(kk>='A'IIkk<='Z')

C)(kk+32)>='a'&&(kk+32)<='z'D)kk>=48&&kk<91

3.已知字符A的ASCH代码值是65,字符变量cl的值是A,c2

的值是D。执行语句printf("%d,%d”,cl,c2-2);后,输出结果是

()oC

A)A,BB)A,68C)65,66D)65,

68

4.以Q5)以下合法的字符型常量是

A)'\x13'B)'\018'C)'65'D)'\n'

5.已知大写字母A的ASCII码是65,小写字母a的ASCII码是

97,以下不能将变量c中大写字母转换为对应小写字母的语句是

()oD

A)c=c-'Z'+'z'B)c=c+32

C)c=c-'A'+'a'D)c='A'+c-'a'

第九节位运算

习题

1.变量a中的数据用二进制表示的形式是01011101,变量b中

的数据用二进制表示的形式是11110000。若要求将a的高4位取

反,低4位不变,所要执行的运算是A

A)aAbB)albC)a&bD)a«4

2.有以下程序

#include<stdio.h>

main()

(

inta=l,b=2,c=3,x;

x=(aAb)&c;printf("%d\n",x);

)

程序的运行结果是D

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

3.有以下程序

main()

unsignedchara=2,b=4,c=5,d;

d=alb;d&=c;printf("%d\n",d);

)

程序运行后的输出结果是B

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

4.若变量已正确定义,则以下语句的输出结果是()0B

s=32;s-=32;printf("%d",s);

A)-1B)0C)1D)32

5.设有以下语句

inta=l,b=2,c;

c=aA(b«2);

执行后,c的值为D

A)6B)7C)8D)9

第二章数据输出与输入

第一节第二节数据输出2节合在一起只有1个课件

习题

1.有以下程序段

charch;

intk;

ch='a';

k=12;

printf("%c,%d,",ch,ch,k);

printf("k=%d\n",k);

已知字符a的ASCII十进制代码为97,则执行上述程序段后输

出结果是D

A)因变量类型与格式描述符的类型不匹配输出无定值

B)输出项与格式描述符个数不符,输出为零值或不定值

C)a,97,12k=12

D)a,97,k=12

2.若变量已正确定义,有以下程序段删除该题

inta=3,b=5,c=7;

if(a>b)a=b;c=a;

if(c!=a)c=b;

printf("%d,%d,%d\n",a,b,c);

其输出结果是B

A)程序段有语法错B)3,5,3C)3,5,5

D)3,5,7

3.有以下程序,其中%11表示按无符号整数输出

main()

unsignedshortx=0xFFFF;/*x的初值为十六进制数*/

printf("%u\n",x);

程序运行后的输出结果是B

A)-1B)65535C)32767

D)OXFFFF

4.以下叙述中不正确的是A

A)调用printf函数时,必须要有输出项

B)使用putchar函数时,必须在之前包含头文件stdio.h

C)在C语言中,整数可以以十进制、八进制或十六进制的形式

输出

D)使用putchar函数可以不要输出项

5.设有以下程序

main()

(

intc=35;printf("%d",c&c);

)

程序运行后的输出结果是C

A)0B)70C)35D)53

6.以下程序运行后的输出结果是o88

main()

intx=0210;printf("%X\n",x);

)

第三节数据输入

习题

1.以下程序运行时若从键盘输入:102030〈回车>。输出结

果是一。A

#include<stdio.h>

main()

(

inti=0,j=0,k=0;

scanf("%d%*d%d",&i,&j,&k);

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

)

A)10,30,0B)10,20,30C)0,0,0

D)程序出错

2.已知字符A的ASCII代码值为65,以下程序运行时若从键盘

输入:B33〈回车>。输出结果是A

#include"stdio.h"

main()

chara,b;

a=getchar();scanf("%d",&b);

a=a-A+0;

b=b*2;

printf("%c%c",a,b);

A)程序段有语法错B)IBC)165D)1b

3.有以下程序

main()

intm=0256,n=256;

printf("%o%o\n",m,n);

程序运行后的输出结果是()o

A)02560400B)0256256C)256400D)

400400

4.有以下程序

main()

inta=666,b=888;

printf("%d\n",a,b);

程序运行后的输出结果是()oB

A)错误信息B)666C)888D)

666,888

5.设有以下程序

main()

(

intx=102,y=012;

printf("%2d,%d\n",x,y);

)

执行后输出结果是C

A)10,01B)02,12C)102,10

D)02,10

6.执行以下程序时输入1234567<CR>,则输出结果是。

#include<stdio.h>

main()

(

inta=l,b;

scanf("%2d%2d",&a,&b);printf("%d%d\n",a,b);

)

第三章选择结构

第一节关系运算与逻辑运算

习题

1.已知字母A的ASCH代码值为65,若变量kk为char型,以

下不能正确判断出kk中的值为大写字母的表达式是B

A)kk>='A'&&kk<='Z'B)!(kk>='A'II

kk<='Z')

C)(kk+32)>='a'&&(kk+32)<='z'D)

isalpha(kk)&&(kk<91)

2.当变量c的值不为2、4、6时,值也为“真”的表达式是B

A)(c==2)II(c==4)II(c==6)B)

(c>=2&&c<=6)II(c!=3)II(c!=5)

C)(c>=2&&c<=6)&&!(c%2)D)

(c>=2&&c<=6)&&(c%2!=1)

3.以下选项中,当x为大于1的奇数时,值为。的表达式D

A)x%2==lB)x/2C)x%2!=0D)

x%2==0

4.以下关于逻辑运算符两侧运算对象的叙述中正确的是()。

D

A)只能是整数。和1B)只能是整数0

或非。整数

C)可以是结构体类型的数据D)可以是任意合

法的表达式

5.设有定义:intk=l,m=2;floatf=7;,则以下选项中错误的表达

式是C

A)k=k>=kB)-k++C)k%int(f)

D)k>=f>=m

6.设有定义:inta=2,b=3,c=4;,则以下选项中值为。的表达式是

A

A)(!a==l)&&(!b==O)B)(!a==l)ll(!b==O)

C)a&&bD)all(b+b)&&(c-a)

第二节if语句

习题

1.若变量已正确定义,有以下程序段

inta=3,b=5,c=7;

if(a>b)a=b;c=a;

if(c!=a)c=b;

printf("%d,%d,%d\n",a,b,c);

其输出结果是B

A)程序段有语法错B)3,5,3C)3,5,5

D)3,5,7

2.当把以下4个表达式用作if语句的控制表达式时,有一个选

项与其他3个选项含义不同,这个选项是D

A)k%2B)k%2==lC)(k%2)!=0

D)!k%2==l

3.下列条件语句中,功能与其他语句不同的是D

A)if(a)printf("%d\n",x);elseprintf("%d\n",y);

B)if(a==O)printf("%d\n",y);elseprintf("%d\n",x);

C)if(a!=0)printf("%d\n",x);elseprintf("%d\n",y);

D)if(a==O)printf("%d\n",x);elseprintf("%d\n",y);

4.设变量x和y均已正确定义并赋值,以下if语句中,在编译

时将产生错误信息的是C

A)if(x++);B)if(x>y&y!=O);

C)if(x>y)x--D)if(y<0){;}

elsey++:elsex++;

第三节嵌套的if语句

习题

1.在嵌套使用if语句时,C语言规定else总是C

A)和之前与其具有相同缩进位置的if配对B)和之前与其

最近的if配对

C)和之前与其最近的且不带else的if配对D)和之前的第

一个if配对

2.有以下程序

main()

{inta=5,b=4,c=3,d=2;

if(a>b>c)

printf("%d\n",d);

elseif((c-l>=d)==l)

printf("%d\n",d+l);

else

printf("%d\n",d+2)

)

执行后输出结果是D

A)2B)3C)4D)编译时有

错,无结果

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

main()

{inta=5,b=4,c=6,d;

printf("%d\n",d=a>b?(a>c?a:c):(b));

)

A)5B)4C)6D)不确定

第四节条件表达式、switch语句、goto语句

习题

1.以下程序段中与语句k=a>b?(b>c?l:0):0;功能等价的是A

A)if((a>b)&&(b>c))k=l;B)if((a>b)ll(b>c))

k=l;

elsek=0;elsek=0;

C)if(a<=b)k=0;D)if(a>b)k=l;

elseif(b<=c)k=l;elseif(b>c)k=l;

elsek=0;

2.下列叙述中正确的是D

A)beak语句只能用于switch

B)在switch语句中必须使用default

C)break语句必须与switch语句中的case配对使用

D)在switch语句中,不一定使用break语句

3.有以下程序段B

intk=0,a=l,b=2,c=3;

k=a<b?b:a;k=k>c?c:k;

执行该程序段后,k的值是

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

4.有以下程序D

#include<stdio.h>

main()

(

intx=l,y=O,a=O,b=O;

switch(x)

(

case1:

switch(y)

(

case0:a++;break;

case1:b++;break;

case2:a++;b++;break;

case3:a++;b++;

)

printf("a=%d,b=%d\n",a,b);

)

程序的运行结果是

A)a=l,b=OB)a=2,b=2C)a=l,b=l

D)a=2,b=l

5.以下叙述中正确的是C

A)break语句只能用于switch语句题中

B)continue语句的作用是:使程序的执行流程跳出包含它的所

有循环

C)break语句只能用在循环体内和switch语句体内

D)在循环体内使用break语句和continue语句的作用相同

6.有以下程序

main()

(

intk=5,n=0;

do

switch(k)

{case1:case3:n+=l;break;

default:n=O;k—;

case2:case4:n+=2;k—;break;

)

printf("%d”,n);

}while(k>0&&n<5);

)

程序运行后的输出结果是

A)235B)0235C)02356

D)2345

第四章循环结构

第一节while语句

习题

1.有以下程序

main()

{inty=10;

while(y—);printf("y=%d\n",y);

)

程序执行后的输出结果是B

A)y=0B)y=-lC)y=lD)while构

成无限循环

2.有以下程序

main()

(

intk=5;

while(-k)printf("%d",k-=3);

printf("\n");

)

执行后的输出结果是A

A)1B)2C)4D)死循环

第二节do-while语句

习题

1.若变量已正确定义,有以下程序段

i=0;

do

printf("%d,",i);

while(i++);

printf("%d\n",i)

其输出结果是B

A)0,0B)0,1C)1,1

D)程序进入无限循环

2.有以下程序段D

intn,t=l,s=O;

scanf("%d",&n);

do{s=s+t;t=t-2;}while(t!=n);

为使此程序段不陷入死循环,从键盘输入的数据应该是

A)任意正奇数B)任意负偶数C)任意正偶数

D)任意负奇数

3.以下程序的功能是:将输入的正整数按逆序输出。例如,若

输入135,则输出531,请填空。n/=10

#include<stdio.h>

main()

(

intn,s;

printf("Enteranumber:");scanf("%d",&n);

printf("Output:");

do

(

s=n%10;printf("%d",s);

_____,

}while(n!=0);

printf("\n");

第三节for语句

习题

1.有以下程序

#include<stdio.h>

main()

(

intx=8;

for(;x>0;x—)

(

if(x%3)

(

printf("%d,",x-);

continue;

)

printf("%d,",-x);

)

)

程序的运行结果是D

A)7,4,2B)8,7,5,2C)9,7,6,4D)8,

5,4,2

2.以下不构成无限循环的语句或者语句组是A

A)n=0;B)n=0;

do{++n;}while(n<=0);while(l){n++;}

C)n=10;D)for(n=0,i=l;;i++)n+=i;

while(n);{n-;}

第四节循环结构的嵌套

习题

1.有以下程序

main()

(

inti,n=O;

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

(

do

(

if(i%3)continue;

n++;

}while(!i);

n++;

)

printf("n=%d\n",n);

程序执行后的输出结果是D

A)n=5B)n=2C)n=3D)

n=4

2.有以下程序

main()

(

inti,j,x=O;

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

(

x++;

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

(

if(j%2)continue;

x++;

)

X++;

)

printf("x=%d\n",x);

)

程序执行后的输出结果是B

A)x=4B)x=8C)x=6

D)x=12

3.下面程序的功能是输出以下形式的金字塔图案

*

***

main()

(

inti,j;

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

(

for(j=l;j<=4-i;j++)printf("");

for(j=l;j<=;j++)printf("*");

printf("\n");

)

)

在下划线处应填入的是B

A)iB)2*i-lC)2*i+l

D)i+2

第五节循环结构的分析方法

习题

1.以下程序段中的变量已正确定义

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

for(k=l;k<3;k++);printf("*");

程序段的输出结果是()D

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

第五章函数

第一节函数的定义、库函数

习题

1.在C语言中,函数返回值的类型最终取决于A

A)函数定义时在函数首部所说明的函数类型

B)return语句中表达式值的类型

C)调用函数时主函数所传递的实参类型

D)函数定义时形参的类型

2.有以下函数

intfun(char*s)

(

char*t=s;

while(*t++);

return(t-s);

)

该函数的功能是B

A)比较两个字符的大小B)计算s所指字符串

占用内存字节的个数

C)计算s所指字符串的长度D)将•s所指字符串复制

到字符串t中

3.程序中对fun函数有如下说明C

void*fun();

此说明的含义是

A)fun函数无返回值

B)fun函数的返回值可以是任意的数据类型

C)fun函数的返回值是无值型的指针类型

D)指针fun指向一个函数,该函数无返回值

第二节函数的调用与函数说明

习题

1.有以下程序

#include<stdio.h>

intf(intx)

(

inty;

if(x==0llx==l)return(3);

y=x*x-f(x-2);

returny;

main()

intz;

z=f(3);

printf("%d\n",z);

)

程序的运行结果是C

A)0B)9C)6D)8

2.以下叙述中错误的是C

A)改变函数形参的值,不会改变对应实参的值

B)函数可以返回地址值

C)可以在函数内部定义函数

D)调用sin函数需要包含头文件math.h

3.若程序中定义了以下函数

doublemyadd(doublea,doubleb)

(

return(a+b);

)

并将其放在调用语句之后,则在调用之前应进行函数声明,以下

选项中错误的是A

A)doublemyadd(doublea,b);B)double

myadd(double,double);

C)doublemyadd(doubleb,doublea);D)double

myadd(doublex,doubley);

第三节函数的数据传递

习题

1.有以下程序

voidf(intv,intw)

(

intt;

t=v;v=w;w=t;

)

main()

(

intx=l,y=3,z=2;

if(x>y)

f(x,y);

elseif(y>z)

f(y,z);

else

f(x,z);

printf("%d,%d,%d\n",x,y,z);

执行后输出结果是c

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

2,3,1

2.以下程序的输出结果是_________o13

#include<stdio.h>

voidfun(intx)

(

if(x/2>0)

fun(x/2);

printf("%d",x);

)

main()

(

fun(3);

printf("\n");

)

第六章指针

第一节变量的地址和指针

习题

1.以下叙述中错误的是C

A)改变函数形参的值,不会改变对应实参的值

B)函数可以返回地址值

C)可以给指针变量赋一个整数作为地址值

D)当在程序的开头包含文件stdio.h时,可以给指针变量赋NULL

2.以下定义语句中正确的是D

A)inta=b=0;B)char

'A'=65+l,b='b';

C)floata=l,*b=&a,*c=&b;D)double

a=0.0,b=l.l;

3.设已有定义:floatx;则以下对指针变量p进行定义且赋初值

的语句中正确的是D

A)float*p=1024;B)

int*p=(floatx);

C)floatp=&x;D)float

*P=&x;

第二节指针变量赋值及运算

习题

1.设有定义:intn=0,*p=&n,**q=&p;,则以下选项中,正确的

赋值语句是D

A)p=l;B)*q=2;C)q=p;

D)*p=5;

2.有以下程序

main()

inta=l,b=3,c=5;

int*pl=&a,*p2=&b,*p=&c;

*p=*pl*(*p2);

printf("%d\n",c);

)

执行后的输出结果是C

A)1B)2C)3

D)4

3.设有定义:intn1=0,n2,*p=&n2,*q=&n1;,以下赋值语句中与

n2=nl;语句等价的是A

A)*p=*q;B)p=q;C)*p=&nl;

D)p=*q;

4.有以下程序

#include<stdio.h>

main()

(

intn,*p=NULL;

*p=&n;

printf("Inputn:");scanf("%d",&p);

printf("outputn:");printf("%d\n",p);

)

该程序试图通过指针p为变量n读入数据并输出,但程序有多处

错误,以下语句正确的是A

A)intn,*p=NULL;B)*p=&n;

C)scanf("%d",&p)D)printf("%d\n",p);

第三节函数之间地址值的传递

习题

1.以下程序的功能是:利用指针指向3个整型变量,并通过指

针运算找出3个数中的最大值,输出到屏幕上,请填空:*pmax=x;

(或者max=x)

main()

(

intx,y,z,max,*px,*py,*pz,*pmax;

scanf("%d%d%d",&x,&y,&z);

px=&x;

py=&y;

pz=&z;

pmax=&max;

if(*pmax<*py)

*pmax=*py;

if(*pmax<*pz)

*pmax=*pz;

printf("max=%d\n",max);

)

2.voidf(inty,int*x)

{y=y+*x;*x=*x+y;}

main()

{intx=2,y=4;

f(y,&x);

printf("%d%d\n",x,y);

)

执行后输出的结果是。84

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

#include<stdio.h>

voidswap(int*a,int*b)

(

int*t;

t=a;a=b;b=t;

main()

inti=3,j=5,*p=&i,*q=&j;

swap(p,q);

printf("%d%d\n",*p,*q);

第七章数组

第一节一维数组

习题

1.有以下程序段

intj;floaty;charname[50];

scanf("%2d%f%s",&j,&y,name);

当执行上述程序段,从键盘上输入555667777abe后,y的值为

B

A)55566.0B)566.0C)7777.0

D)566777.0

2.有以下程序

main()

(

charch[]="uvwxyz",*pc;

pc=ch;printf("%c\n",*(pc+5));

程序运行后的输出结果是A

A)zB)0C)元素ch[5]地址D)字

符y的地址

3.有以下程序

#include<stdio.h>

main()

(

ints[12]={1,2,3,4,4,3,2,1,1,1,2,3},c[5]={0},i;

for(i=0;i<12;i++)c[s[i]]++;

for(i=l;i<5;i++)printf("%d",c[i]);

printf("\n");

)

程序的运行结果是C

A)1234B)2344C)4332

D)1123

第二节二维数组

习题

1.以下错误的定义语句是C

A)intX[][3]={{0},{1},{1,2,3));

B)intx[4][3]={{1,2,3},{1,2,3},{1,2,3},{1,2,3});

C)intX[4][]={{123},{1,2,3},{1,2,3},{1,2,3});

D)intx[][3]={l,2,3,4);

2.若有定义:inta[2][3];,以下选项中对a数组元素正确引用的

是D

A)a[2][!l]B)a[2][3]C)a[0][3]D)

a[l>2][!l]

3.若有定义语句:inta[3][6];,按在内存中的存放顺序,a数组

的第10个元素是B

A)a[0][4]B)a[l][3]C)a[0][3]

D)a[l][4]

第三节数组应用举例

习题

1.有以下程序

main()

{inti,t[][3]={9,8,7,6,5,4,3,2,l};

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

printf("%d",t[2-i][i]);

)

程序执行后的输出结果是B

A)753B)357C)369

D)751

2.有以下程序

main()

inta[4][4]={{l,4,3,2,),{8,6,5,7,},{3,7,2,5,),{4,8,6,l,}},i,k,t;

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

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

if(a[i][i]<a[k][k])

{t=a[i][i];

a[i][i]=a[k][k];

a[k][k]=t;

)

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

printf("%d,",a[O][i]);

)

程序运行后的输出结果是B

A)6,2,1,1,B)6,4,3,2,C)1,1,2,6,

D)2,3,4,6,

3.有以下程序

main()

(

inta[4][4]={{lA3,2,),{8,6,5,7,},{3,7,2,5,},{4,8,6,l,}},i,j,k,t;

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

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

for(k=j+l;k<4;k++)

if(a[j][i]>a[k][i])

{t=a[j][i];a[j][i]=a[k][i];a[k][i]=t;}/*按列排序*/

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

printf("%d,",a[i皿);

)

程序运行后的输出结果是A

A)1,2,5,7,B)8,7,3,1,C)4,7,5,2,

D)1,6,2,1,

第八章字符串

第一节字符串与字符串数组

习题

1.以下关于字符串的叙述正确的是D

A)C语言中有字符串类型的常量和变量

B)两个字符串中的字符个数相同时才能进行字符串大小的比较

C)可以用关系运算符对字符串的大小进行比较

D)空串一定比空格打头的字符串小

2.以下正确的字符串常量是D

A)"\\\"B)'abc'C)OlympicGames

D)""

3.设有如下程序段A

chars[20]="Bejing",*p;

P=S;

则执行P=S;语句后,以下叙述正确的是

A)可以用*p表示s[0]

B)s数组中元素的个数和p所指字符串长度相等

C)s和p都是指针变量

D)数组s中的内容和指针变量p中的内容相等

4.以下能正确定义字符串的语句是D

A)charstr[]={'\064'};B)charstr="\x43";

C)charstr=";D)charstr[]="\O";

第二节字符串的输入输出

习题

1.当用户要求输入的字符串中含有空格时,应使用的输入函数

是B

A)scanf()B)getchar()C)gets()

D)getc()

2.有以下程序

#include<stdio.h>

voidfun(char*a,char*b)

(

while(*a=='*')a++;

while(*b=*a){b++;a++;}

main()

char*s="****a*b*****,t[80];

fun(s,t);puts(t);

)

程序的运行结果是C

A)*****a*bB)a*bC)a*b****

D)ab

第三节对字符串的操作

习题

1.若有定义:char*x="abcdefghV;,以下选项中正确运用了strcpy

函数的是D

A)chary[10];strcpy(y,x[4]);

B)chary[10];strcpy(++y,&x[l]);

C)chary[10],*s;strcpy(s=y+5,x);

D)chary[10],*s;strcpy(s=y+l,x+l);

2.有以下程序

#include<stdio.h>

main()

charp[20]={'a','b','c','d'},q[]="abc",r[]="abcde"

strcat(p,r);

strcpy(p+strlen(q),q);

printf("%d\n",strlen(p));

)

程序运行后的输出结果是

A)9B)6C)11

D)7

3.有以下程序

#include<stdio.h>

voidf(charp[][10],intn)/*字符串从小到大排序*/

(

chart[10];inti,j;

for(i=0;i<9;i++)改成for(i=0;i<n-l;i++)

for(j=i+l;j<10;j++)改成for(j=i+l;j<n;j++)

if(strcmp(p[i],p[j])>0)

strcpy(t,p[i]);

strcpy(p[i],p[j]);

strcpy(p[i],t);改成strcpy(p[j],t);

main()

charp[5][10]={"abc","aabdfg","abbd","dcdbe","cd"};

f(P,5);

printf("%d\n",strlen(p[O]));

)

程序运行后的输出结果是D改成C

A)2B)4C)6

D)3

第九章文件

第一节文件的基础知识

习题

1.以下叙述中正确的是D

A)C语言中文件是流式文件,因此只能顺序存取数据

B)打开一个已存在的文件进行了写操作后,原有文件中的全部

数据必定被覆盖

C)在个程序中当对文件进行了写操作后,必须先关闭该文件

然后再打开,才能读到第1个数据

D)当对文件的读(写)操作完成之后,应关闭文件,否则可能导致数

据丢失

2.以下叙述中错误的是C

A)C语言中对二进制文件的访问速度比文本文件快

B)C语言中,随机文件以二进制代码形式存储数据

C)语句FILEfp;定义了一个名为fp的文件指针

D)C语言中的文本文件以ASCII码形式存储数据

第二节文件的操作

习题

1.以下叙述中错误的是B

A)gets函数用于从终端读入字符串

B)getchar函数用于从磁盘文件读入字符

C)fputs函数用于把字符串输出到文件

D)fwrite函数用于以二进制形式输出数据到文件

2.读取二进制文件的函数调用形式为:fread(buffer,size,count,fp);,

其中buffer代表的是C

A),个文件指针,指向待读取的文件

B)一个整型变量,代表待读取的数据的字节数

C)一个内存块的首地址,代表读入数据存放的地址

D)一个内存块的字节数

3.设fp为指向某二进制文件的指针,且已读到此文件末尾,则

函数feof(fp)的返回值为B

A)EOFB)非0值C)0

D)NULL

第三节文件例题

习题

1.有以下程序(提示:程序中fseek(fp,-2L*sizeof(int),SEEK_END);

语句的作用是使位置指针从文件尾向前移2*sizeof(int)字节)

#include<stdio.h>

main()

(

FILE*fp;inti,a[4]={l,2,3,4),b;

fp=fopen("data.dat","wb");

for(i=0;i<4;i++)fwrite(&a[i],sizeof(int),1,fp);

fclose(fp);

fp=fopen("data.dat","rb");

fseek(fp,-2L*sizeof(int),SEEK_END);

fread(&b,sizeof(int),1,fp);/*从文件中读取sizeof(int)字节的数据到

变量b中*/

fclose(fp);

printf("%d\n",b);

)

执行后输出结果是D

A)2B)1C)4

D)3

2.有以下程序

#include<stdio.h>

main()

(

FILE*fp;intk,n,a[6]={l,2,3,4,5,6};

fp=fopen("d2.dat","w");

fprintf(fp,"%d%d%d\n",a[0],a[l],a[2]);fprintf(fp,

"%d%d%d\n",a[3],a[4],a[5]);

fclose(fp);

fp=fopen("d2.dat","r");

fscanf(fp,"%d%d",&k,&n);printf("%d%d\n",k,n);

fclose(fp);

)

程序运行后的输出结果是D

A)12B)14C)1234

D)123456

3.有以下程序

#include<stido.h>

main()

(

FILE*fp;inta[10]={l,2,3,0,0},i;

fp=fopen("d2.dat","wb");

fwrite(a,sizeof(int),5,fp);

fwrite(a,sizeof(int),5,fp);

fclose(fp);

fp=fopen("d2.dat","rb");

fread(a,sizeof(int),10,fp);

fclose(fp);

for(i=0;i<10;i++)printf("%d,",a[i]);

)

程序的运行结果是D

A)l,2,3,0,0,0,0,0,0,0,B)

1,2,3,1,23,0,0,0,0,

C)123,0,0,0,0,123,0,0,0,0,D)

1,2,3,0,0,1,23,0,0,

第十章对C语言的深入讨论

第一节用户定义类型、编译预处理

习题

1.以下关于typedef的叙述错误的是A

A)用typedef可以增加新类型

B)typedef只是将已存在的类型用一个新的名字来代表

C)用typedef可以为各种类型说明一个新名,但不能用来为变量

说明一个新名

D)用typedef为类型说明一个新名,通常可以增加程序的可读性

2.以下叙述中错误的是D

A)在程序中凡是以“祥”开始的语句行都是预处理命令行

B)预处理命令行的最后不能以分号表示结束

C)#defineMAX是合法的宏定义命令行

D)C程序对预处理命令行的处理是在程序执行的过程中进行的

3.若程序中有宏定义行:#defineN100,则以下叙述中正确

的是B

A)宏定义行中定义了标识符N的值为整数100

B)在编译程序对C源程序进行预处理时用100替换标识符N

C)对C源程序进行编译时用100替换标识符N

D)在运行时用100替换标识符N

第二节标识符的作用域和存储分类

习题

1.在C语言中,只有在使用时才占用内存单元的变量,其存储

类型是A

A)auto和registerB)extern和register

C)auto和staticD)static和register

2.有以下程序:

fun(intx,inty)

staticintm=0,i=2;

i+=m+l;m=i+x+y;returnm;

main()

(

intj=l,m=l,k;

k=fun(j,m);printf("%d,",k);

k=fun(j,m);printf("%d\n",k);

)

执行后的输出结果是B

A)5,5B)5,11C)11,11D)11,5

3.有以下程序

inta=4;

intf(intn)

(

intt=0;

staticinta=5;

if(n%2){inta=6;t+=a++;}

else{inta=7;t+=a++;}

returnt+a++;

main()

ints=a,i=O;

for(;i<2;i++)s+=f(i);

printf("%d\n",s);

)

程序运行后的输出结果是B

A)24B)28C)32D)36

第三节动态存储分配

习题

1.已有定义:double*p;,请写出完整的语句,利用malloc函数

使P指向一个双精度型的动态存储单元

op=(double*)malloc(sizeof(double))

2.以下程序中给指针p分配3个double型动态内存单元,请填

空。3*sizeof(double)

#include<stdlib.h>

main()

(

double*p;

p=(double*)calloc();

p[0]=1.5;

p[l]=2.5;

P⑵=3.5;

printfC4%f%f%f\n,,,p[0],p[l],p[2]);

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

#include<stdlib.h>

main()

(

char*sl,*s2,m;

s1=s2=(char*)malloc(sizeof(char));

*sl=15;

*s2=20;

m=*sl+*s2;

printf(u%d\n,,,m);

)

第四节main函数的参数与函数指针

习题

1.设有定义语句int(*f)(int);,则以下叙述正确的是B

A)f是基类型为int的指针变量。

B)f是指向函数的指针变量,该函数具有一个int类型的形参。

C)f是指向int类型一维数组的指针变量。

D)f是函数名,该函数的返回值是基类型为int类型的地址。

2.有以下程序:

intadd(inta,intb){return(a+b);}

main()

(

intk,(*f)(),a=5,b=10;

f=add;

)

则以下函数调用语句错误的是C

A)k=(*f)(a,b);B)k=add(a,b);

C)k=*f(a,b);D)k=f(a,b);

3.有以下程序

floatfl(floatn)

{returnn*n;}

floatf2(floatn)

{return2*n;}

main()

{

float(*pl)(float),(*p2)(float),(*t)(float),yl,y2;

pl=fl;

p2=f2;

yl=p2(pl(2.0));

t=pl;pl=p2;p2=t;

y2=p2(pl(2.0));

printf(z,%3.Of,%3.Of\n”,yl,y2);

)

程序运行后的输出结果是A

A)8,16B)8,8C)16,16

D)4,8

第五节函数的递归调用与对C语言的补充说明

习题

1.有以下程序:

fun(intx)

(

intp;

if(x==0llx==l)return(3);

p=x-fun(x-2);

returnp;

)

main()

(

printf("%d\n",fun(7));

执行后的输出结果是C

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

2.有以下程序

intfun(intn)

(

if(n==l)

return1;

else

return(n+fun(n-l));

)

main()

(

intx;

scanf("%d",&x);x=fun(x);printf("%d\n",x);

)

程序执行时,给变量x输入10,程序的输出结果是A

A)55B)54C)65

D)45

3.有以下程序

#include<stdio.h>

voidfun(intn,int*p)

intfl,f2;

if(n==llln==2)

*p=l;

else

(

fun(n-l,&fl);

fun(n-2,&f2);

*p=fl+f2;

)

)

main()

(

ints;

fun(3,&s);

printf("%d\n",s);

)

程序的运行结果是A

A)2B)3C)4

D)5

4.以下叙述中正确的是()。B

A)C语言程序将从源程序中第一个函数开始执行。

B)可以在程序中由用户指定任意一个函数作为主函数,程序将

从此开始执行。

OC语言规定必须用main作为主函数名,程序将从此开始执行,

在此结束。

D)main可作为用户标识符,用以命名任意一个函数作为主函数。

第十一章结构体与共用体

第节结构体

习题

1.有以下程序段

typedefstructnode{intdata;structnode*next;}*NODE;

NODEp;

以下叙述正确的是C

A)p是指向structnode结构变量的指针的指针。

B)NODEp;语句出错。

C)p是指向structnode结构变量的指针。

D)p是structnode结构变量。

2.以下结构体类型说明和变量定义中正确的是A

A)typedefstructB)structREC

{intn;charc;}REC;{intn;charc;};

RECtl,t2;RECtl,t2;

C)typedefstructREC;D)struct

{intn=0;charc-A';}tl,t2;{intn;charc;}RECtl,t2;

3.有以下程序

#include<stdio.h>

structtt

{intx;structtt*y;}*p;

structtta[4]={20,a+1,15,a+2,30,a+3,17,a};

main()

(

inti;

P=a;

for(i=l;i<=2;i++)

(

printf("%d,",p->x);

p=p->y;

)

)

程序的运行结果是D

A)20,30,B)30,17,C)15,30,

D)20,15,

4.有以程序

#include<stdio.h>

#include<string.h>

typedefstruct{charname[9];charsex;floatscore[2];}STU;

voidf(STUa)

STUb={"Zhao";m',85.0,90.0};inti;

strcpy(a.name,b.name);

a.sex=b.sex;

for(i=0;i<2;i++)a.score[i]=b.score[i];

)

main()

(

STUc={"Qian",'p',95.0,92.0};

f(c);

printf("%s,%c,%2.0f,%2.0f\n",,c.sex,c.score[0],c.score[l]);

)

程序的运行结果是A

A)Qian

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论