C语言习题集

更新时间:2023-11-13 20:36:01 阅读量: 教育文库 文档下载

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

C语言程序设计》

练习册

专 业:____________ 班 级:____________ 学 号:____________ 学生姓名:________ _ 任课教师:______ ___

计算机学院基础教研室编制

- 1 -

1 C语言概述

一、单项选择题

1、一个C程序的执行是从( )。

A.本程序的main函数开始,到main函数结束

B.本程序文件的第一个函数开始,到本程序文件的最后一个函数结束 C.本程序的main函数开始,到本程序文件的最后一个函数结束 D.本程序文件的第一个函数开始,到本程序main函数结束 2、在 C 语言中,每个语句必须以( )结束。 A. 回车符 B. 冒号 C.逗号 D.分号

3、C 语言规定:在一个源程序中,main函数的位置( )。 A.必须在最开始 B.必须在系统调用的库函数的后面 C.可以任意 D.必须在最后 4、一个C 语言程序是由( )。

A. 一个主程序和若干子程序组成 B.函数组成 C.若干过程组成 D.若干子程序组成 5、下列说法中错误的是( )。

A.主函数可以分为两个部分:主函数说明部分和主函数体 B.主函数可以调用任何非主函数的其他函数 C.任何非主函数可以调用其他任何非主函数 D.程序可以从任何非主函数开始执行

6、用 C 语言编写的源文件经过编译,若没有产生编译错误,则系统将( )。

A. 生成可执行目标文件 B.生成目标文件 C.输出运行结果 D.自动保存源文件

二、填空题

1、C 语言只有 个关键字和 种控制语句。

2、每个源程序有且只有一个 函数,系统总是从该函数开始执行C语言程序。

3、C 语言程序的注释可以出现在程序中的任何地方,它总是以 符号作为开始标记,以 符号作为结束标记。

4、C 语言中,输入操作是由库函数 完成的,输出操作是由库函数 完成的。 5、系统默认的C 语言源程序文件的扩展名是 ,经过编译后生成的目标文件的扩展名是 ,经过连接后生成的可执行文件的扩展名是 。 6、C 语言的标识符只能由字母、数字和 三种字符组成。

- 2 -

三、判断题

( )1、C源程序是由多个函数组成的,程序的执行是按书写顺序进行的。 ( )2、一个C程序可以由一个文件组成,也可由若干文件组成。 ( )3、变量xx和XX是一样的。

( )4、C程序中无论是整数还是实数,只要在允许的范围内都能准确无误的表示。 ( )5、简单的C程序由函数组成。

( )6、C 程序的每一行结束都有一个\。

3 数据类型、运算符与表达式

一、单项选择题

1、以下选项中,不正确的 C 语言浮点型常量是( c )。 A. 160. B. 0.12 C. 2e4.2 D. 0.0 2、以下选项中,( d)是不正确的 C 语言字符型常量。 A. 'a' B. '\\x41' C. '\\101' D. \

3、 在 C 语言中,字符型数据在计算机内存中,以字符的( c )形式存储。 A.原码 B.反码 C. ASCII 码 D. BCD码

4、若x、i、j和k都是int型变量,则计算下面表达式后,x的值是( c)。 x=(i=4,j=16,k=32)

A. 4 B. 16 C.32 D.52

5、算术运算符、赋值运算符和关系运算符的运算优先级按从高到低依次为(b )。 A. 算术运算、赋值运算、关系运算 B. 算术运算、关系运算、赋值运算 C. 关系运算、赋值运算、算术运算 D. 关系运算、算术运算、赋值运算

3ae6、若有代数式bc ,则不正确的C语言表达式是( c)。

A.a/b/c*e*3 B. 3*a*e/b/c C.3*a*e/b*c D. a*e/c/b*3

7、表达式!x||a==b 等效于( d)。

A. !((x||a)==b) B. !(x||y)==b C. !(x||(a==b)) D. (!x)||(a==b) 8、设整型变量 m,n,a,b,c,d 均为1,执行 (m=a>b)&&(n=c>d)后, m,n 的值是(b )。 A. 0,0 B. 0,1 C. 1,0 D. 1,1

9、 设有语句 int a=3;,则执行了语句 a+=a-=a*=a;后,变量 a 的值是(d )。 a+=a-=a*a 等效于 a+=(a-=a*a); a -= a * a 等效于 a = a - a * a; →a = -6

a += a 等效于 a = a + a; →a = -12

- 3 -

A. 3 B. 0 C. 9 D. -12

10、在以下一组运算符中,优先级最低的运算符是( d)。 A. * B. != C. + D. =

11、设整型变量 i 值为2,表达式(++i)+(++i)+(++i)的结果是( b )。 A. 6 B. 12 C. 15 D. 表达式出错

12、若已定义 x 和 y为double 类型,则表达式 x=1,y=x+3/2 的值是( d )。 A. 1 B. 2 C. 2.0 D. 2.5 13、sizeof (double)的结果值是( a)。 A. 8 B. 4 C. 2 D. 出错

14、设a=1,b=2,c=3,d=4,则表达式:a

?:为三目运算符,运算方向自右向左,所以先算c

15、设a 为整型变量,不能正确表达数学关系:1010 && a<15 D. !(a<=10) && !(a>=15) 16、设 f是实型变量,下列表达式中不是逗号表达式的是( b)。

A. f= 3.2, 1.0 B. f>0, f<10 C. f=2.0, f>0 D. f=(3.2, 1.0) 17、 表达式18/4*sqrt(4.0)/8值的数据类型是( c )。 A. int B. float C. double D. 不确定 18、已知字母A的ASCII码为十进制数65,且c2为字符型,则执行语句C2=’A’+’6’-‘3’;后c2中的值是( b )。

A. D B. 68 C. 不确定的值 D. C 19、以下用户标识符中,合法的是( a )。

A. int B. nit C. 123 D. a+b

20、C 语言中,要求运算对象只能为整数的运算符是( a )。 A. % B. / C. > D. *

21、若有说明语句:char c='\\72';则变量c在内存占用的字节数是(a )。 A. 1 B. 2 C. 3 D. 4 22、字符串\在内存占用的字节数是( d )。 A. 3 B. 4 C. 6 D. 8

23、要为字符型变量 a赋初值,下列语句中哪一个是正确的( ab )。 A. char a=\24、下列不正确的转义字符是( c )。

A. \\\\ B. \\' C. 074 D. \\0

- 4 -

二、填空题

1、C 语言中的逻辑值“真”是用 1 表示的,逻辑值“假”是用 0 表示的。 2、若x和n都是int型变量,且x的初值为12,n的初值为5,则计算表达式x%=(n%=2)后x的值为 。

3、设 c='w',a=1,b=2,d=-5, 则表达式 'x'+1>c, 'y'!=c+2, -a-5*b<=d+1, b==a=2的值分别为 、 、 、 。

4、设 float x=2.5,y=4.7; int a=7;,表达式 x+a%3*(int)(x+y)%2/4的值为 。 5、判断变量 a、b 的值均不为 0 的逻辑表达式为 。

6、求解赋值表达式 a=(b=10)%(c=6),表达式值、a、b、c 的值依次为 。 7、求解逗号表达式 x=a=3,6*a 后,表达式值、x、a 的值依次为 。 8、数学式a/(b*c)的 C 语言表达式 。

三、判断题

( )1、C语言中,非0值作为true,0作为false;若表达式取得true值时,结果为1, 取得false值时,为0。

( )2、为了确保表达式n/2的值为float型,可写成float(n/2)。 ( )3、若有(float)x,则x变成float型变量。 ( )4、若a=3,b=4,c=5,则d=!(a%b)的值是0。

( )5、a是实型变量,进行赋值a=10,因此实型变量中允许存放整型值 ( )6、在赋值表达式中,赋值号左边既可以是变量也可以是任意表达式

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

( )8、有a=3,b=5。执行a=b,b=a后,使a的值为5,b的值为3。

( )9、 getchar( )和scanf()均为输入函数,它们之间可通用,没有任何区别。 ( )10、执行语句scanf(\后,输入123456可使a的值为123.456 。 ( )11、 putchar()函数的作用是输出一串字符 。

( )12、 使用scanf()函数,在输入数据时,若遇非法输入则认为该数据输入结束。 ( )13、在C中所用的变量必须先定义后使用。

( )14、在 C 程序中,运算符%仅能用于整型数的运算。 ( )15、APH与aph 分别表示不同的变量。

( )16、设x和y都是int型变量,则以下语句:x+=y;y=x-y;x-=y;的功能是交换x和y的值。

( )17、设a=5,b=6,c=7,d=8,m=2,n=2,执行(m=a>b)&&(n=c>d)后n的值为0。 ( )18、C语言中无逻辑变量,也无逻辑表达式。

- 5 -

四、编程题:

1、 设长方形的高为 1.5,宽为 2.3,编程求该长方形的周长和面积。

2、 编写一个程序,将大写字母 A转换为小写字母 a。

4 最简单的C程序设计—顺序程序设计

一、单项选择题

1、printf(\的输出结果是( )。

A. f=3.48% B. f=3.5% C. f=3.48% % D. f=347.8% 2、printf(\;的输出结果是( )。 A. a,97 B. a 97 C. 97,a D. 97 a 3、有以下程序段

char c1,c2,c3,c4,c5,c6;

scanf(\%c%c%c%c\,&c1,&c2,&c3,&c4);

c5=getchar( ); c6=getchar( );putchar(c1);putchar(c2);printf(\%c%c\n\,c5,c6);

程序运行后,若从键盘输入(从第1列开始):123<回车>45678<回车>。则输出结果是:( ) A.1267 B.1256 C.1278 D.1245

4、若一个 int 类型的数据占 2 字节,则程序段:int x= 1;printf(\的输出结果是( )。

A. 65535, 1 B. 1,65535 C. 32767, 32768 D. 32768,32767

5、在TC 中getchar、putchar、printf、scanf 四个函数,均包含在头文件( )中。 A. math.h B. stdio.h C. stbio.h D. stdlib.h 6、复合语句是用( )括起来的语句组。

A. ( ) B. [ ] C. { } D. < >

7、下列格式符中,哪一个可以用于以八进制形式输出整数( )。 A. %d B. ? C. %o D. %ld

8、下列格式符中,哪一个可以用于以十六进制形式输出整数( )。

- 6 -

A. d B. %8x C. ?6 D. %d

9、a 是int类型变量,c是字符变量,下列输入语句中哪一个是错误的( )。 A. scanf(\

C. scanf(\

10、要使double x; long a;的数据能正确的输出,输出语句应是( )。 A. printf(\ B. printf(\C. scanf(\ D. printf(\

二、程序改错题

1、以下程序的功能是,从键盘输入一个字符并鸣笛输出。 # include \ mian( )

{ char c getchar(c);

putchar('007') ; /*鸣笛*/ c=putchar( ); 2、以下程序的功能是,输入长方形的两边长(边长可以取整数和实数),输出它的面积和周长。 main

{ int a,b,s,l;

scanf(\ s=a*b; l=a+b;

printf(\ }

三、写出程序运行结果

1、 main( )

{ int a,b;

scanf(\ printf(\ }

运行时输入:12345678 ,输出结果是 。 2、 main( )

{ int a=3,b=5,x,y;

x=a+1,b+6; y=(a+1,b+6); printf(\

- 7 -

}

输出结果是 __。

四、编程题

1、输入 3 个整数,计算它们的和与平均值,平均值的结果保留 2 位小数。

2、输入两个实数a,b,然后交换它们的值,最后输出(提示:要交换两个数得借助一个中间变量temp。首先让temp存放a的值,然后把b存入a,再把temp存入b就完成了)。

5 选择结构程序

一、单项选择题

1、假定所有变量均已正确定义,下列程序段运行后x 的值是( )。

a=b=c=0, x=35; if(!a) x--; else if(b); if(c) x=3; else x=4; A. 34 B. 4 C. 35 D. 3 2、有以下程序段,其输出结果是:( )

inta,b,c; a=10;b=50;c=30; if(a>b) a=b,b=c; c=a; printf(\b=%d c=%d\\n\

A.a=10 b=50 c=10 B.a=10 b=50 c=30 C.a=10 b=30 c=10 D.a=50 b=30 c=50 3、有以下程序段,其输出结果是:( )

int x=1,y=2,z=3; if(x>y) if(y

printf(\

A.331 B.41 C. 2 D.1

4、程序段int x=5,y=8,max; max=(x>y)?x:y; printf(\的输出结果是( )。 A. 5 B. 3 C. 8 D. 13

- 8 -

5、程序段 int x=3,a=1;switch(x) {case 4: a++;case 3: a++;case 2: a++;case 1: a++;} printf (\的输出结果是( )。

A. 1 B. 2 C. 3 D. 4

6、下列语句应将小写字母转换为大写字母,其中正确的是( )。

A.if(ch>='a'&ch<='z') ch=ch-32; B.if(ch>='a'&&ch<='z')ch=ch-32; C.ch=(ch>='a'&&ch<='z')?ch-32:’’; D.ch=(ch>'a'&&ch<'z')?ch-32:ch; 7、有以下程序段,其输出结果是:( ) int x=1,y=0,a=0,b=0; switch(x) { case 1:

switch(y){ case 0:a++;break; case 1:b++;break; } case 2:a++;b++;break; case 3:a++;b++; }

printf(\

A.a=1,b=0 B.a=2,b=2 C. a=2,b=1 D. a=1,b=1

二、填空题

1、当a,b,c的值分别为3,4,5时,以下各语句执行后a,b,c的值为多少? (1)if(a>c) {a=b;b=c;c=a;} else {a=c;c=b;b=a;} 执行后a,b,c的值为___,___,___

(2)if(a

(3)if(a!=c) ; else a=c;c=b;b=a; 执行后a,b,c的值为___,___,___

2、若整数x分别等于95、87、100、43、66、79,则以下程序段运行后屏幕显示是什么? switch(x/10) { case 6:

case 7: printf(\ case 8: printf(\ case 9:

case 10: printf(\ default: printf(\ }

x等于 95时,程序段运行后屏幕上显示 x等于 87时,程序段运行后屏幕上显示 x等于100时,程序段运行后屏幕上显示 x等于 43时,程序段运行后屏幕上显示 x等于 66时,程序段运行后屏幕上显示

- 9 -

x等于 79时,程序段运行后屏幕上显示

三、阅读程序,写出运行结果

1、 void main ( )

{ int a=10, b=4, c=3; if(a

printf(\}

2、void main ( )

{ int x=100, a=10, b=20, ok1=5, ok2=0 ; if(a

3、 int k,a=1,b=2; k=(a++==b) ? 2:3; printf(\

4、void main() { int s=1,k=0; switch (s)

{ case 1: k+=1; case 2: k+=2; default: k+=3;

}

printf(“%d”,k); }

5.void main() { int s=1,k=0; switch (s)

{case1: k+=1;break; case 2: k+=2;break; default: k+=3; }

printf(“%d”,k) }

- 10 -

四、选做题

1、输入 3 个整数,按从大到小的顺序输出。

2、请将以下语句改写成switch语句。 if((s>0)&&(s<=10))

if((s>=3)&&(s<=6)) x=2; else if((s>1)||(s>8)) x=3; else x=1; else x=0;

6 循环控制

一、单项选择题

1、for(i=1;i<9;i+=1);该循环共执行了( )次。 A. 7 B. 8 C. 9 D. 10

2、int a=2;while(a=0) a--;该循环共执行了( )次。 A. 0 B. 1 C. 2 D. 3

3、执行完循环 for(i=1;i<100;i++);后,i 的值为( )。 A. 99 B. 100 C. 101 D. 102 4、以下 for语句中,书写错误的是 。

A. for(i=1;i<5;i++); B. i=1;for(;i<5;i++); C. for(i=1;i<5; i++); D. for(i=1,i<5;) i++; 5、( )语句,在循环条件初次判断为假,还会执行一次循环体。 A. for B. while C. do-while D. 以上都不是

6、有以下程序段 int i=5; do{ if(i%3==1) if(i%5==2) {printf(\break; } i++; }while(i!=0); 其运行结果是( ) A.*2*6 B. *7 C.*5 D. *3*5

7、i、j已定义为 int 类型,则以下程序段中内循环体的执行次数是( ) 。

- 11 -

for(i=5;i;i--) for(j=0;j<4;j++){?} A. 20 B. 24 C. 25 D. 30

8、以下不构成无限循环的语句或语句组是( )。

A.n=10; while(n);{n--;} B.n=0; while(1){n++;} C.n=0; do{++n;}while(n<=0); D.for(n=0,i=1;;i++)n+=i;

9、有以下程序段int y=9; for(y>0;y--) if(y%3==0) printf(\其运行结果是( )。

A. 875421 B.963 C.852 D. 741

10、有以下程序段:int i,j;for(i=3;i>=1;i--){for(j=1;j<=2;j++) printf(\其运行结果是( )。

A.2 3 4 B.4 3 2 C.2 3 D.4 5 3 4 5 5 4 3 3 4 3 4 4 5 2 3

二、判断题

( )1、do {??} while(0); 程序块至少会执行一次 ( )2、语句 for(i=0;i=10;i++) {??}; 至多循环10次 ( )3、for( ; ; )表示无限循环。

( )4、下面的循环不能正常结束: for (s=0,i=1; i<=10; ) { s=s+i; i++; } ( )5、continue语句是终止整个循环的执行。

( )6、对for(表达式1;;表达式3;)可理解为for(表达式1;1;表达式3;)。 ( )7、下列程序段执行循环二次 x=-1; do {x=x*x;}while(!x);

( )8、下列程序段能计算s=10!的值 i=1;s=1; do {s=s*i;i++;} while(i<=10); ( )9、下列程序段将输出3和0 , int x=3; do{printf(“%d\\n”,x-=2);}while(!--x));

三、程序填空题

1.有1020个西瓜,第一天卖一半多两个,以后每天卖剩下的多两个,问几天后卖完? main( )

{ int day,x1,x2; day=0; x1=1020; while( )

{ x2= ; x1= ; day++; } printf(\}

2.输入若干个字符,分别统计数字字符的个数、英文字母的个数,当输入换行符时输出统计

- 12 -

结果,运行结束。 #include void main( ) { int s1=0,s2=0;

char ch; while(( )!='\\n') { if(ch>='0'&&ch<='9') s1++;

if(ch>='a'&&ch<='z' || ) s2++; } printf(“%d,%d”,s1,s2); }

3.下面程序的功能是计算1-3+5-7+??-99+101的值,请填空。 #include main( )

{ int i=1,t=1,s=0;

for(i=1;i<=101; i=i+2 )

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

四、阅读下列程序,写出程序运行的输出结果

1.void main( ) { int y=9;

for( ;y>0; y--)

if(y%3==0) { printf(\}

程序运行后输出结果为 2. main( ) { int n1,n2; scanf(\while(n2!=0)

{ n1=n2; n2=n2/10; printf(\}

程序运行后,如果从键盘上输入1298;则输出结果为 3. main ( ) {int s,i;

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

- 13 -

}

程序运行后输出结果为 4. #include void main( )

{ int s=1,t=1,a,n;

scanf(\ for(int i=1;i

s*=a; printf(\}

程序运行后,如果从键盘上输入2,4;则输出结果为

五、程序改错

1、以下程序是显示[200,300]所有能被7整除的数,每行显示5个数,此程序有 5处错。 main( )

{ int i,n=0; /*n用来记录每行已打印数的个数*/ while(i<300)

{ if(i%7==0) break; printf(\ n=n+1;

if(n=5)/*满5个换行*/ { printf(\ } }

2、以下程序是求 1!+2!+3!+4!+5!+6!+7!的值,其中有 3 处错误。 main()

{ int i,s,t=0; for(i=1;i<=7;i++)

{ s=0; t=t*i; s=s+t; } printf(\ }

六、选做题

1.求序列2/1,3/2,5/3,8/5,13/8,21/13,的前20项之和。

- 14 -

2.请完成用一元人民币换成一分、两分、五分的所有兑换方案。

7 数组

一、单项选择题

1、int a[4]={5,3,8,9};其中 a[3]的值为( )。

A. 5 B. 3 C. 8 D. 9

2、以下 4 个字符串函数中,( )所在的头文件与其他 3 个不同。 A. gets B. strcpy C. strlen D. strcmp 3、以下 4 个数组定义中,( )是错误的。

A. int a[7]; B. #define N 5 long b[N]; C. char c[5]; D. int n,d[n]; 4、字符数组进行初始化,( )形式是错误。

A. char c1[ ]={'1', '2', '3'}; B. char c2[ ]=123; C. char c3[ ]={ '1', '2', '3', '\\0'}; D. char c4[ ]=\5、在数组中,数组名表示( )。

A. 数组第 1 个元素的首地址 B.数组第 2 个元素的首地址 C. 数组所有元素的首地址 D.数组最后 1 个元素的首地址 6、若有以下数组说明,则数值最小的和最大的元素下标分别是( )。 int a[12] ={1,2,3,4,5,6,7,8,9,10,11,12}; A. 1,12 B. 0,11 C. 1,11 D. 0,12

7、若有以下说明,则数值为 4 的表达式是( )。

int a[12] ={1,2,3,4,5,6,7,8,9,10,11,12}; char c=’a’, d, g ; A. a[g-c] B. a[4] C. a['d'-'c'] D. a['d'-c] 8、设有定义:char s[12] = \; 则printf( \A. 6 B. 7 C. 11 D. 12

的输出是( )。 - 15 -

fp1=fopen(“test1”,”r”); fp2=fopen(“test2”,”w”); while(!feof(fp1))

fputc(fgetc(fp1),fp2); fclose(fp1); fclose(fp2); }

该程序的功能是:_______________。

2、分析下面程序:

#include “stdio.h” #define N 100 struct student { char name[20]; int no; int score; }stud[N]; main( ) { FILE *fp; int i;

if ((fp=fopen(“stu.dat”,”r”))==NULL) { printf(“Can’t open file!\\n”); exit(0); }

for (i=0;i

fscanf(fp,\

printf(\ }

fclose(fp); }

该程序的功能是:_____________________。

三、判断题

( )1、由系统控制和分配的标准错误输出文件为打印机。 ( )2、对设备文件的输入输出操作就是读写设备文件的过程。 ( )3、用fread和fwrite函数可对文本文件进行读写操作。 ( )4、C语言中文件可以顺序存取,也可随机存取。

( )5、gets函数的功能是从标准输入文件中读取一个字符。

- 41 -

( )6、对已打开的文件进行输入输出操作是通过指向该文件结构的指针变量进行的。 ( )7、只有通过文件,才能进行大量的原始数据的输入和保存,这些数据甚至可能远远超过内存容量。

- 42 -

printf( \}

3、阅读程序,分析程序的功能。 #include #include void main( ) {

char a[10][80], c[80]; int i, j, k;

for(i=0; i<10; i++) gets(a[i]); for(i=0; i<9; i++) { k=i ;

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

if(strcmp (a [j], a[k])<0) k=j; if(k!=i )

{strcpy(c,a[i]) ; strcpy(a[i], a[k]); strcpy(a[k],c);} // 字符串交换 }

for(i=0; i<10; i++) puts (a[i]); }

4、阅读程序,写出运行结果 #include void main( ) {

int a[6]={12,4,17,25,27,16},b[6]={27,13,4,25,23,16},i,j; for(i=0;i<6;i++) {

for(j=0;j<6;j++) if(a[i]==b[j])break; if(j<6) printf(\ }

printf(\}

5、阅读程序,写出运行结果。 #include void main( ) {

char a[8],temp; int j,k;

- 21 -

for(j=0;j<7;j++) a[j]='a'+j; a[7]='\\0'; for(j=0;j<3;j++) {

temp=a[6];

for(k=6;k>0;k--) a[k]=a[k-1]; a[0]=temp;

printf(\ } }

6、阅读下列程序,写出程序运行的输出结果。 #include #include void main( ) {

char str1[ ]=\ for(int i=0;i<4;i++) {

printf(\ str1[i]=' ';

str1[strlen(str1)-1]='\\0'; } }

7、该程序的运行结果是: min= ,m= ,n= 。 void main() {

float array[3][4]={

{3.4,-5.6,56.7}, {56.8,999.,-.0123}, {0.45,-5.77,123.5}, {43.4,0,111.2} }; int i,j; int min; int m,n;

min = array[0][0]; m=0;n=0;

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

if(min > array[i][j]) {

min = array[i][j]; m=i;n=j;

- 22 -

}

printf(\

8、写出下面这个程序的输出结果: void main() {

char str[]=\

printf(\屏幕上显示 printf(\屏幕上显示 str[2]=str[5];

printf(\屏幕上显示 str[9]='\\0';

printf(\屏幕上显示 }

8 函数

一、单项选择题

1、C 语言总是从( )函数开始执行。

A. main B. 处于最前的 C.处于最后的 D. 随机选一个 2、函数在定义时,省略函数类型说明符,则该函数值的类型为( )。 A. int B. float C. long D. double 2、以下( )函数,真正地没有返回值。

A. int a(){int a=2;return (a);} B. void b(){printf(\C. int a(){int a=2;return a;} D. 以上都是 3、在 C 语言中,有关函数的说法,以下正确的是( )。

A. 函数可嵌套定义,也可嵌套调用 B. 函数可嵌套定义,但不可嵌套调用 C. 函数不可嵌套定义,但可嵌套调用 D. 函数不可嵌套定义,也不可嵌套调用 4、以下函数调用语句中,含有实参的个数为( )。 fun((2,3),(4,5+6,7));

A. 1 B. 2 C. 5 D. 6 5、函数调用可以在( )。

A. 函数表达式中 B. 函数语句中 C. 函数参数中 D. 以上都是 6、被调函数返回给主调函数的值称为( )。

A. 形参 B. 实参 C. 返回值 D. 参数 7、 ( ),可以不进行函数类型说明。

A. 被调函数的返回值是整型或字符型时 B. 被调函数的定义在主调函数定义之前时 C. 在所有函数定义前,已在函数外预先说明了被调函数类型 D. 以上都是

- 23 -

8、被调函数通过( )语句,将值返回给主调函数。 A. if B. for C. while D. return 9、被调函数调用结束后,返回到( )。 A.主调函数中该被调函数调用语句处 B.主函数中该被调函数调用语句处

C.主调函数中该被调函数调用语句的前一语句 D.主调函数中该被调函数调用语句的后一语句

10、以下对 C语言函数的有关描述中,正确的是( )。

A. 在 C 中,调用函数时,只能把实参的值传送给形参,形参的值不能传送给实参 B. C函数既可以嵌套定义又可递归调用 C. 函数必须有返回值,否则不能使用函数

D. C程序中有调用关系的所有函数必须放在同一个源程序文件中 11、C 语言中函数的隐含存储类型是( )。

A. auto B. static C. extern D. 无存储类型

12、能把函数处理结果的两个数据返回给主调函数,在下面的方法中不正确的是( )。 A. return 这两个数 B.形参用两个元素的数组 C. 形参用两个这种数据类型的指针 D.用两个全局变量 13、C语言可执行程序从什么地方开始执行 ( )。 A. 程序中第一条可执行语句 B. 程序中第一个函数

C. 程序中的main函数 D. 包含文件中的第一个函数

14、有一个函数原型为abc(float x,float y);,则该函数的返回类型为( ) 。 A. void B. double C. int D. float

二、填空题

1、变量的作用域主要取决于变量 ,变量的生存期既取决于变量 ,又取决于变量 。

2、说明变量时,若省略存储类型符,系统默认其为 存储类别,该存储类别的类型符为: 。

3、静态型局部变量的作用域是 ,生存期是 。

4、函数中的形参和调用时的实参都是数组名时,传递方式为 ,都是变量时,传递方式为 。

5、函数的形式参数的作用域为 ,全局的外部变量和函数体内定义的局部变量重名时, 变量优先。

6、若自定义函数要求返回一个值,则应在该函数体中有一条 语句,若自定义函数要求不返回一个值,则应在该函数说明时加一个类型说明符 。

7、若函数的形式参数是指针类型,则实参可以是 或 。 8、函数的参数为 char *类型时,形参与实参结合的传递方式为 。 9、函数的实参为常量时,形参与实参结合的传递方式为 。

- 24 -

10、下面这个函数的功能是求两个整数的积,并通过形参传回结果,请填空。 void mul(___x,___y,___result) {

=x*y; }

三、判断题

( )1、函数说明指的是在程序中设定一个函数模块。 ( )2、形参只有在被调用时才分配存储空间。 ( )3、在C的函数中,最好使用全局变量。

( )4、在调用函数时,实参传值给形参,调用结束时,形参值传给实参。 ( )5、所有函数定义都是并行的,相互独立的。 ( )6、函数的隐含存储类型是extern。 ( )7、形参可以是常量、变量或表达式。 ( )8、函数调用可以作为一个函数的形参。

( )9、C语言规定,实参应与其对应的形参类型一致。 ( )10、定义函数时,形参的类型说明可以放在函数体内。

四、程序填空题

1、对数组按值从大到小的顺序排序后输出,请填空。 #include void main() {

float a[7]={2,6,3,8,3,12,9}; int i ;

void sort(float*,int); ;

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

void sort( ) {

int i,j,k; float t; for(i=0;i

k=i;

- 25 -

for(j=i+1;j

if( ) k=j;

{ t=*(p+i); *(p+i)=*(p+k); *(p+k)=t; } } }

2、下列函数在 n 个元素的一维数组中,找出最大值、最小值并传送到调用函数,请填空。 #include

void find(float *p, int max, int min, int n) {

int k;

*max=*p; for(k=1;k

t=*(p+k);

if( ) *max=t; if(t<*min) *min=t; } }

五、选做题

1、写出下列程序运行结果 main() {

int i=1,p; p=fun(i,i+1); printf(\ }

int fun(int a,int b) {

int f; if(a>b) f=1;

else if(a==b) f=0; else f=-1; return f;

- 26 -

}

2、键盘输入 abcdef #include void fun( ) {

char c ;

if((c=getchar( ))!='\\n') fun( ) ; putchar(c); }

void main( ) { fun( ); }

3、写出下列程序运行结果 #include #define C 5 int x=1,y=C; void main( ) {

int x;

x=y++; printf(\

if(x>4) { int x ; x=++y; printf(\ x+=y--;

printf(\}

4、写出下列程序运行结果 #include int c , a=4 ;

func(int a , int b)

{ c=a*b ; a=b-1 ; b++ ; return (a+b+1) ; } void main( ) {

int b=2 , p=0 ; c=1 ; p=func(b , a) ;

printf(\}

5、写出下列程序运行结果

unsigned fun6(unsigned num)

- 27 -

{

unsigned k=1;

do { k*=num; num/=10; } while(num); return k; }

void main( ) {

unsigned n=26;

printf(\}

6、写出下列程序运行结果 #include int max(int a,int b); main() {

int x,y,z,t,m;

scanf(\ t=max(x,y); m=max(t,z); printf(\}

int max(int a,int b) {

if(a>b)

return(a); else

return(b); }

运行时若输入:10,15,9 则输出:

运行时若输入:300,129,300 则输出: 7、写出下列程序运行结果 #include long sum(int a,int b); long factorial(int n); main() {

int n1,n2; long a;

- 28 -

scanf(\ a=sum(n1,n2);

printf(\}

long sum(int a,int b) {

long c1,c2;

c1=factorial(a); c2=factorial(b); return(c1+c2); }

long factorial(int n) {

long rtn=1; int i;

for(i=1;i<=n;i++) rtn*=i; return(rtn); }

运行时若输入:2,3 则输出: 运行时若输入:0, 5 则输出: 8、

#include int s(); int x,y; main() {

int n; x=1;y=2; n=s();

printf(\}

int s() {

int z; x=3;y=4; z=x+y; return(z); }

- 29 -

程序运行后输出:

9 预处理命令

一、单项选择题

1、 以下不正确的叙述是( )

A.宏替换不占用运行时间。 B.宏名无类型。

C.宏替换只是字符替换。 D.宏名必须用大写字母表示。 2、 C语言的编译系统对宏命令的处理( ) A.在程序运行时进行的。 B.在程序连接时进行。

C.和C程序中的其它语句同时进行编译的。 D.在对源程序中其它语句正式编译之前进行的。 3、以下程序的输出结果是( )

A.15 B.100 C.10 D.150 #define MIN(x,y) (x)<(y)?(x):(y) void main( ) {

int I,j,k;

i=10;j=15;k=10*MIN(i,j); printf(“%d\\n”,k);

}

4、以下叙述中正确的是( )

A.用#include包含的文件的后缀必须是“.h”。

B.若一些源程序中包含某个头文件;当该文件有错时,只需对该头文件进行修改,包含此头.文件的所有源程序不必重新进行编译。 C.宏命令行可以看作是一行C语句。 D.预处理是在编译之前进行的。 5、以下叙述中正确的是( ) A.源程序中所有的行都参加编译。

B.宏定义常量与const定义常量是一样的。

C.宏定义可以嵌套定义,即在宏定义中的字符串可以引用另一个宏定义的标识符。 D.以上都不正确。

二、填空题

1、以下程序中for 循环执行的次数是 。

- 30 -

#define N 2 #define M N+1

#define NUM (M+1)*M/2 void main() { int i; for(i=1;i<=NUM;i++); printf(“%d\\n”,i); }

2、以下程序的输出结果是 。 #define A 3

#define B(a) ((A+1)*a) void main() {

int x;

x=3*(A+B(7));

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

}

三、判断题

( )1、宏替换时先求出实参表达式的值,然后代入形参运算求值。 ( )2、宏名无类型,其参数也无类型。

( )3、使用宏次数多时,宏展开后源程序不会变长。

( )4、调用函数只能得到一个返回值,而用宏可以得到几个结果。

( )5、在一被包含文件中又可以包含另一被包含文件,文件包含是可以嵌套的。 ( )6、用一个指定的标识符来代表一个字符串,它的一般形式为 #define 标识符 字符串;

( )7、在宏定义#define PI 3.l4l59中,如果将1误输成小写的L,则编译时不出错,运行时出错。

( )8、取消PI的宏定义为 #undef PI 0 ( )9、#include和 #define不是C语句。

10 指针

一、单项选择题

1、若有定义:int x,*pb;则以下正确的表达式是( ) A.pb=&x B.pb=x C.*pb=&x D.*pb=*x

- 31 -

2、以下程序的输出结果是( )

A.因变量无定义输出不定值 B.0 C.-1 D.1 #include void main()

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

3、以下程序的输出结果是( )

A.5,2,3 B.-5,-12,-7 C.-5,-12,-17 D.5,-2,-7 #include

void sub(int x,int y,int *z) {*z=y-x;} void main() {

int a,b,c;

sub(10,5,&a); sub(7,a,&b); sub(a,b,&c); printf(“%d,%d,%d\\n”,a,b,c); }

4、以下程序的输出结果是( ) A.4 B.6 C.8 D.10 #include void main() {

int k=2,m=4,n=6;

int *pk=&k,*pm=&m,*p; *(p=&n)=*pk*(*pm); printf(“%d\\n”,n); }

5、已知指针p的指向(图一)的a[1],则执行语句*p++;后,*p的值是(A.20 B.30 C.21 D.31 a[0] a[1] a[2] a[3] a[4] 10 20 30 40 50 (图一) 6、已知指针p的指向(图一)的a[1],则表达式*++p的值是( )。 A.20 B.30 C.21 D.31

7、已知指针p的指向(图一)的a[1],则表达式++*p的值是( )。 A.20 B.30 C.21 D.31 8、以下程序的输出结果是( )。

A.23 B.24 C.25 D.26

#include void prtv(int *x)

{printf(“%d\\n”,++*x);}

)。 - 32 -

void main() {

int a=25;prtv(&a);

}

9、以下程序的输出结果是( )。

A.运行出错 B.100 C.a的地址

#include void main() {

int **k,*a,b=100;

a=&b;k=&a;

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

}

D.b的地址

10、以下程序运行后,输出结果是( )。

A. 8 B. 7 C. 6

#include ss(char *s)

{ char *p=s; while(*p) p++; return(p-s); }

main()

{ char *a=\ int i; i=ss(a);

printf(\ }

D.5

二、填空题

1、若有定义:char ch;

(1)使指针p指向变量ch的定义语句是 。

(2)若已定义char *p;,使指针p指向变量ch的赋值语句是 。

(3)在(1)的基础上,通过指针p给变量ch读入字符的scanf调用语句是 。 (4)在(1)的基础上,通过指针p给变量ch赋字符’a’的语句是 。

(5)在(1)的基础上,通过指针p用格式输出函数输出ch中字符的语句是 。 2、以下程序输出的是 。

void main( )

- 33 -

{ int i=3, j=2;

char *a=\DCBA\

printf(\ }

3、以下函数的功能是,把两个整数指针所指的存储单元中的内容进行交换。请填空。

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

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

三、判断题

( )1、若定义 int a[5],*p=a; 则 *&a[5] 是对a数组元素的正确引用。 ( )2、若定义 int a[2][3]; 则 *(*(a+i)+j) 是对a数组第i行第j列元素的正确引用。

( )3、指针变量用于存放指针所指对象的地址。 ( )4、指针就是变量的地址。

( )5、通过指针可以间接引用指针所指的变量。 ( )6、“指针”与“指针变量”是同一个概念。 ( )7、一个指针变量只能指向同一类型的变量。 ( )8、可以给指针变量赋一个整型值。

( )9、所谓数组的指针就是指数组元素的地址。

五、选做题

程序填空:

1、下面程序的输出结果是 。 char b[]=\ABCD\ void main() { char *chp;

for(chp=b; *chp: chp+=2) printf(\ printf(\}

2、下面是一个字符串连接函数,请补充完整。

void mystrcat(char *s1,char *s2) { char *p,*q; for(p=s1; ; ); for( ;*q;q++) ;

- 34 -

}

;

11 结构体与共用体

一、单项选择题

1、设有如下定义: struct sk

{int a;float b;}data,*p;

若有p=&data;,则对data中的a域的正确引用是( )。

A. (*p).data.a B. (*p).a C. p->data.a D. p.data.a 2、根据以下定义,能输出字母M的语句是( )。

A.printf(“%c\\n”,class[3].name); B.printf(“%c\\n”,class[3].name[1]); C.printf(“%c\\n”,class[2].name[1]); D.printf(“%c\\n”,class[2].name[0]); struct person{char name[9];int age;};

struct person class[10]={“John”,17,”Paul”,19,”Mary”,18,”Adam”,16,}; 3、以下程序的输出结果是( )。 A.0 B.1 C.3 D.6 #include void main() {

struct emplx{int x;int y;}enum[2]={1,3,2,7}; printf(“%d\\n”,enum[0].y/enum[0].x*enum[1].x); }

4、若有以下说明及语句,则值为6的表达式是( )。

A.p++->n B.p->n++ C.(*p).n++ D.++p->n struct st{int n;struct st *next;}; struct st a[3],*p;

a[0].n=5;a[0].next=&a[1];a[1].n=7;a[1].next=&a[2]; a[2].n=9;a[2].next=’\\0’;p=&a[0];

5、已知字符0的ASCII码的十进制的值是48,且数组的第0个元素在低位,以下程序的输出结果是( )。

A.39 B.9 C.38 D.8 void main() {

union{int i[2];long k;char c[4];}r,*s=&r;

- 35 -

s->i[0]=0x39;s->i[1]=0x38; printf(“%x\\n”,s->c[0]); }

6、以下程序输出的结果是( )。

A.32 B.16 C.8 D.24

typedef union{long x[2];int y[4];char z[8];}MYTYPE; MYTYPE them; void main() {

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

}

7、设有以下语句 typedef struct S

{ int g; char h;} T; 则下面叙述中正确的是( )。

A.可用S定义结构体变量 B.可以用T定义结构体变量 C. S是struct类型的变量 D.T是struct S类型的变量 8、有以下说明和定义语句 struct student

{ int age; char num[8];};

struct student stu[3]={{20,\struct student *p=stu;

以下选项中引用结构体变量成员的表达式错误的是( )。

A.(p++)->num B. p->num C. (*p).num D. stu[3].age

二、填空题

1、为了建立结构体(含有两个成员,data是数据成员,next是指向自身结构体的指针成员),请填空:

Struct link {

char data;

; }

2、把类型int另取一个类型名称INT,则以下应填: int INT;

3、以下程序的运行结果是 。 # include typedef struct student{

char name[10];

- 36 -

long sno; float score; }STU; main( ) {

STU a={“zhangsan”,2001,95},b={“Shangxian”,2002,90}, c={“Anhua”,2003,95},d,*p=&d; d=a;

if(strcmp(a.name,b.name)>0) d=b; if(strcmp(c.name,d.name)>0) d=c; printf(“%ld%s\\n”,d.sno,p->name); }

三、判断题

( )1、结构体和数组一样,属于构造数据类型。

( )2、在结构体中,各成员应该具有不同的数据类型。 ( )3、结构体可以作为函数的参数。

( )4、结构体和数组不一样,结构体属于构造数据类型,数组是基本数据类型。

( )5、在程序中使用结构体时,一般不允许把结构体作为一个整体参加操作处理,而应通过对结构体的各个成员项的引用来实现各种运算和操作。

( )6、在程序中,可以将一个结构体变量作为一个整体赋给另一个同类型的结构体变量。 ( )7、枚举类型变量可用于while和for语句中的循环控制参数。

五、选做题

程序填空:

以下程序的功能是:处理由学号和成绩组成的学生记录,N名学生的数据已在主函数中放入结构体数组s中,它的功能是:把分数最高的学生数据放在b所指的数组中,注意:分数最高的学生可能不只一个,函数返回分数最高学生的人数。请填空。 #include #define N 16 typedef struct

{

char num[10];

int s; }STREC;

int fun(STREC *a,STREC *b)

- 37 -

{

int i,j=0,max=a[0].s; for(i=0;i

if(max

if( ) b[j++]=a[i]; return j; }

void main() {

STREC s[N]={{“GA005”,85},{“GA003”,76},{“GA002”,69},{“GA004”,85}, {“GA001”,91},{“GA007”,72},{“GA008”,64},{“GA006”,87},{“GA0015”,85}, {“GA0013”,91},{“GA0012”,64},{“GA0014”,91},{“GA0011”,66}, {“GA0017”,64},{“GA0018”,64},{“GA0016”,72},}; STREC h[N]; int i,n; n=fun(s,h);

printf(“The %d highest score:\\n”, ); for(i=0;i

printf(“%s M\\n”,h[i].num,h[i].s); printf(“\\n”); }

12 位运算

一、单项选择题

1、语句:printf(“%d\\n”,12&012);的输出结果是( )。 A. 12 B. 8 C. 6 D. 012

2、设 int b=2;表达式(b>>2)/(b>>1)的值是( )

A. 0 B.2 C. 4 D.8 3、有如下程序段 int a=14,b=15,x; char c=’A’;

x=(a&&b)&&(c<’B’);

执行该程序段后,x的值为( )

A.ture B. false C. 0 D.1

- 38 -

4、整型变量x和y的值相等、且为非0值,则以下选项中,结果为零的表达式是( ) A. x || y B. x | y C. x & y D. x ^ y

5、设char型变量x中的值为10100111,则表达式(2+x)^(~3)的值是( ) A. 10101001 B. 10101000 C. 11111101 D. 01010101 6、有以下程序 main()

{ int x=3, y=2,z=1; printf(\}

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

A. 3 B. 2 C. 1 D. 0 7、有以下程序 int a=2;

int f(int *A) {return (*A) ++;} main( ) { int s=0; { int a=5; s+=f(&A) ; }

s+=f(&A) ;

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

执行后输出结果是( )

A. 10 B. 9 C. 7 D. 8

8、设有定义语句:char c1=92,c2=92;,则以下表达式中值为零的是( ) A. c1^c2 B. c1&c2 C. ~c2 D. c1|c2

二、判断题

( )1、将一个数左移一位,相当于该数乘以2;右移一位相当于除以2; ( )2、~运算符的优先级低于算术运算符,高于关系运算符、逻辑运算符; ( )3、位运算的运算量可以是整型、字符型或实型数据; ( )4、要将一个存储单元i清零,可以实施如下运算:i&0;

- 39 -

13 文件

一、单项选择题

1、在C程序中,可把整型数以二进制形式存放到文件中的函数是

A. fprintf函数 B. fread函数 C. fwrite函数 D. fputc函数

2、若fp是指向某文件的指针,且已读到此文件末尾,则库函数feof(fp)的返回值是 A. EOF B. 0 C. 非零值 D. NULL

3、若fp已正确定义并指向某个文件,当未遇到该文件结束标志时函数feof(fp)的值为 A. 0 B. 1 C. -1 D. 一个非0值 4、下列关于C语言数据文件的叙述中正确的是

A. 文件由ASCII码字符序列组成,C语言只能读写文本文件 B. 文件由二进制数据序列组成,C语言只能读写二进制文件

C. 文件由记录序列组成,可按数据的存放形式分为二进制文件和文本文件 D. 文件由数据流形式组成,可按数据的存放形式分为二进制文件和文本文件 5、系统标准的输入输出文件分别是( )。

A. 读卡器和显示器 B. 键盘和打印机 C. 鼠标和显示器 D. 键盘和显示器 6、以下可作为函数open中第一个参数的正确格式是( )。 A.\ B.\C.\ D. \7、C语言把文件看作是一个( )的序列。

A. 记录 B. 单词 C. 字 D. 字符 8、语句FILE *fp;定义了一个指向( )

A. 某一个文件的变量 B. 某一个文件的结构体变量 C. FILE文件的变量 D. FILE类型的指针变量 9、语句 fp=fopen(\表示( )。 A. 打开文件file1,可从该文件输入数据 B. 打开文件file1,可向该文件输出数据 C. 打开文件file1,可向该文件添加数据 D. 打开文件file1,可向该文件输入输出数据 10、如果希望向文本文件末尾添加数据,则应以( )方式打开文件。 A. “r” B. “w” C. “a” D. “ab”

二、填空题

1、阅读下列程序:

#include “stdio.h” main( )

{ FILE *fp1, *fp2;

- 40 -

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

Top