计算机C语言复习资料及课后题解

更新时间:2024-06-12 16:21:01 阅读量: 综合文库 文档下载

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

欲穷千里目,更上一层楼!

说明:

1、原先的少部分题目有错,请用红色的部分替换掉; 2、如果红色部分有文字“删除该行”,就直接删除该行;

第一章 C语言的基础知识

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

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

A)任何一个C程序都必须有且仅有一个main函数,C语言总是从main函数开始执行。 B)C语言中的变量,可以先使用后定义。 C)所有的C语言语句最后都必须有一个分号

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

第二节 熟悉Visual C++ 习题

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

A).exe B).c C).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)print B)FOR C)&a D)_00 3. 以下叙述中错误的是 A

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

B)用户所定义的标识符应尽量做到“见名知意” C)用户所定义的标识符必须以字母或下划线开头

D)用户定义的标识符中,大、小写字母代表不同标识 4. 可在C程序中用作用户标识符的一组标识符是 A A)and B)Date C)Hi

1

欲穷千里目,更上一层楼!

D)case

_2007 y-m-d Dr.Tom Bigl

5. 以下不合法的用户标识符是 C A)j2_KEY B)Double C)4d D)_8_ 6. 以下不能定义为用户标识符的是 D A)Main B)_0 C)_int D)sizeof 7. 下列选项中,不能用作标识符的是 D A)_1234_ B)_1_2 C)int_2_ D)2_int_ 8. 以下4组用户定义标识符中,全部合法的一组是 A A)_main B)If C)txt D)int enclude -max REAL k_2 sin turbo 3COM _001

第四节 数制转换 习题

1.十进制整数360的八进制为__________,十六进制为_____________。 550 168

第五节 整数和实数 习题

1.以下选项中正确的整型常量是 C A)10110B B)0386 C)0Xffa D)x2a2 2.以下关于long、int和short类型数据占用内存大小的叙述中正确的是 D A)均占4个字节 B)根据数据的大小来决定所占内存的字节数 C)由用户自己定义 D)由C语言编译系统决定 3.以下选项中不属于C语言的类型的是 D A)signed short int B)unsigned long int C)unsigned int D)long short 4.以下选项中合法的实型常数是C A)5E2.0 B)E-3 C).2E0 D)1.3E 5.以下选项中,不能作为合法常量的是 B A)1.234e04 B)1.234e0.4 C)1.234e+4 D)1.234e0 6.以下选项中可作为C语言合法常量的是 A A)-80. B)-080 C)-8e1.0 D)-80.0e 7.以下符合C语言语法的实型常量是 C A)1.2E0.5 B)3.14.15 9E C).5E-3 D)E15 8.以下不合法的数值常量是 C A)011 B)lel C)8.0E0.5 D)0xabcd 9.以下选项中,合法的一组C语言数值常量是 B A)028 B)12. C).177 D)0x8A

5e-3 OXa23 4c1.5 10,000

-0xf 4.5e0 Oabc 3.e5

2

欲穷千里目,更上一层楼!

10.下列定义变量的语句错误的是 D A)int _int ; B)double int_; C)long For; D)float US$;

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

1.表达式3.6-5/2+1.2+5%2的值是 D A)4.3 B)4.8 C)3.3 D)3.8

2.设有定义:float x=123.4567;,则执行以下语句后输出的结果是 _____。123.46 printf(\

3.设有定义:float a=2,b=4,h=3;,以下C语言表达式与代数式 ×h 计算结果不相符的是 B A)(a+b)*h/2 B)(1/2)*(a+b)*h C)(a+b)*h*1/2 D)h/2*(a+b) 第七节 自加自减运算符、逗号表达式 习题

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

2.设有定义:int k=0;,以下选项的4个表达式中与其他3个表达式的值不相同的是 A A)k++ B)k+=1 C)++k D)k+1 3.有以下程序 B main() {

char a1='M', a2='m';

 printf(\ }

以下叙述中正确的是

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

C)格式说明符不足,编译出错 D)程序运行时产生出错信息 4.有以下程序:B main( )

{ int a=0,b=0;

a =10; /*给a赋值 b=20; 给b赋值 */

printf(\ /*输出计算结果*/ }

程序运行后的结果是

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

第八节 字 符 习题

1.以下选项中不属于字符常量的是( )。B A)'C' B)\ C)'0' D)'\\072'

2.已知字母A的ASCⅡ代码值为65,若变量kk为char型,以下不能正确判断出kk中的值为大写字母的表达式是( )。B

A)kk>='A'&&kk<='Z' B)!(kk>='A'‖kk<='Z') C)(kk+32)>='a'&&(kk+32)<='z' D)kk>=48 && kk<91

3

欲穷千里目,更上一层楼!

3.已知字符'A'的ASCⅡ代码值是65,字符变量c1的值是'A',c2的值是'D'。执行语句printf(\后,输出结果是( )。C A)A,B B)A,68 C)65,66 D)65,68 4.以(25)以下合法的字符型常量是 A)'\\x13' B)'\\018' C)'65' D)'\\n'

5.已知大写字母A的ASCII码是65,小写字母a的ASCII码是97,以下不能将变量c中大写字母转换为对应小写字母的语句是( )。D 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)a^b B)a|b C) a&b D)a<<4 2.有以下程序 #include main() {

int a=1,b=2,c=3,x;

x=(a^b)&c; printf(\}

程序的运行结果是 D A)0 B)1 C)2 D)3 3.有以下程序 main() {

unsigned char a=2,b=4,c=5,d;

d=a|b; d&=c; printf(\ }

程序运行后的输出结果是 B A)3 B)4 C)5 D)6 4.若变量已正确定义,则以下语句的输出结果是( )。 B s=32; s^=32; printf(\A)-1 B)0 C)1 D)32 5.设有以下语句 int a=1,b=2,c;

c=a^(b<<2); 执行后,c的值为 D A)6 B) 7 C) 8 D) 9

4

欲穷千里目,更上一层楼!

第二章 数据输出与输入

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

1.有以下程序段 char ch; int k; ch='a'; k=12;

printf(\printf(\

已知字符a的ASCII十进制代码为97,则执行上述程序段后输出结果是 D A)因变量类型与格式描述符的类型不匹配输出无定值 B)输出项与格式描述符个数不符,输出为零值或不定值 C)a,97,12k=12 D)a,97,k=12

2.若变量已正确定义,有以下程序段 删除该题 int a=3,b=5,c=7; if(a>b) a=b; c=a; if(c!=a) c=b;

printf(\ 其输出结果是 B

A)程序段有语法错 B)3,5,3 C)3,5,5 D)3,5,7 3.有以下程序,其中%u表示按无符号整数输出 main() {

unsigned short x=0xFFFF;/* x的初值为十六进制数 */ printf(\}

程序运行后的输出结果是 B A)-1 B)65535 C)32767 D)0XFFFF 4.以下叙述中不正确的是 A

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

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

C)在C语言中,整数可以以十进制、八进制或十六进制的形式输出 D)使用putchar函数可以不要输出项 5.设有以下程序 main() {

int c=35; printf(\}

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

5

欲穷千里目,更上一层楼!

A)0 B)70 C)35 D)53 6.以下程序运行后的输出结果是______________。88 main() {

int x=0210; printf(\ }

第三节 数据输入 习题

1.以下程序运行时若从键盘输入:10 20 30<回车>。输出结果是____。A #include main() {

int i=0,j=0,k=0;

scanf(\printf(\} A)10,30,0 B)10,20,30 C)0,0,0 D)程序出错 2.已知字符A的ASCII代码值为65,以下程序运行时若从键盘输入:B33<回车>。输出结果是 A

#include \main() {

char a,b;

a=getchar(); scanf(\ a=a-A+0; b=b*2;

printf(\ %c\}

A)程序段有语法错 B)1 B C)1 65 D)1 b 3.有以下程序  main()  {

int m=0256,n=256;

 printf(\}

程序运行后的输出结果是( )。 A)0256 0400 B)0256 256 C)256 400 D)400 400 4.有以下程序 main() {

int a=666, b=888; printf(\}

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

6

欲穷千里目,更上一层楼!

A)错误信息 B)666 C)888 D)666,888 5.设有以下程序 main( ) {

int x=102,y=012; printf(\ }

执行后输出结果是C A)10,01 B)02,12 C)102,10 D)02,10 6.执行以下程序时输入1234567,则输出结果是________。 #include main() {

int a=1,b;

scanf(\ %d\\n\}

第三章 选择结构

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

1.已知字母A的ASCⅡ代码值为65,若变量kk为char型,以下不能正确判断出kk中的值为大写字母的表达式是 B

A) kk>='A'&&kk<='Z' B) !(kk>='A'‖kk<='Z') C) (kk+32)>='a'&&(kk+32)<='z' D) isalpha(kk)&&(kk<91) 2.当变量c的值不为2、4、6时,值也为“真”的表达式是 B

A) (c==2)‖(c==4)‖(c==6) B) (c>=2&&c<=6)‖(c!=3)‖(c!=5) C) (c>=2&&c<=6)&&!(c%2) D) (c>=2&&c<=6)&&(c%2!=1) 3.以下选项中,当x为大于1的奇数时,值为0的表达式 D A) x%2==1 B) x/2 C) x%2!=0 D) x%2==0 4.以下关于逻辑运算符两侧运算对象的叙述中正确的是( )。D A)只能是整数0和1 B)只能是整数0或非0整数 C)可以是结构体类型的数据 D)可以是任意合法的表达式 5.设有定义:int k=1,m=2; float f=7;,则以下选项中错误的表达式是C A)k=k>=k B)-k++ C)k%int(f) D)k>=f>=m 6.设有定义:int a=2,b=3,c=4;,则以下选项中值为0的表达式是A A)(!a==1)&&(!b==0) B)(!a==1)||(!b==0) C)a && b D)a||(b+b)&&(c-a)

第二节 if语句 习题

1.若变量已正确定义,有以下程序段 int a=3,b=5,c=7; if(a>b) a=b; c=a;

7

欲穷千里目,更上一层楼!

if(c!=a) c=b;

printf(\ 其输出结果是 B

A)程序段有语法错 B)3,5,3 C)3,5,5 D)3,5,7 2.当把以下4个表达式用作if语句的控制表达式时,有一个选项与其他3个选项含义不同,这个选项是 D A)k%2 B)k%2==1 C)(k%2)!=0 D)!k%2==1 3.下列条件语句中,功能与其他语句不同的是 D A) if(a) printf(\ B) if(a==0) printf(\C) if (a!=0) printf(\D) if(a==0) printf(\

4.设变量x和y均已正确定义并赋值,以下if语句中,在编译时将产生错误信息的是 C A)if(x++) ; B)if(x>y&y!=0); C)if(x>y)x- - D)if(y<0) {;} else y++: else x++;

第三节 嵌套的if语句 习题

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

A)和之前与其具有相同缩进位置的if配对 B)和之前与其最近的if配对 C)和之前与其最近的且不带else的if配对 D)和之前的第一个if配对 2.有以下程序 main( )

{ int a=5,b=4,c=3,d=2; if(a>b>c) printf(\ else if((c-1>=d)==1) printf(\ else

printf(\ }

执行后输出结果是 D (??) A)2 B)3 C)4 D)编译时有错,无结果

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

{ int a=5,b=4,c=6,d;

printf(\} A)5 B) 4 C) 6 D) 不确定

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

8

欲穷千里目,更上一层楼!

1.以下程序段中与语句k=a>b?(b>c?1:0):0;功能等价的是 A A)if((a>b) &&(b>c) ) k=1; B)if((a>b) ||(b>c) ) k=1; else k=0; else k=0; C)if(a<=b) k=0; D)if(a>b) k=1; else if(b<=c) k=1; else if(b>c) k=1; else k=0; 2.下列叙述中正确的是 D A)beak语句只能用于switch

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

C)break语句必须与switch语句中的case配对使用 D)在switch语句中,不一定使用break语句 3.有以下程序段 B int k=0,a=1,b=2,c=3;

k=ac?c:k; 执行该程序段后,k 的值是 A)3 B)2 C)1 D)0 4.有以下程序 D #include main() {

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=1,b=1 D)a=2,b=1 5.以下叙述中正确的是 C

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

B)continue语句的作用是:使程序的执行流程跳出包含它的所有循环 C)break 语句只能用在循环体内和switch语句体内

D)在循环体内使用break语句和continue语句的作用相同 6.有以下程序 main() {

9

欲穷千里目,更上一层楼!

int k=5,n=0; do {

switch(k)

{case 1: case 3:n+=1; break; default :n=0;k--;

case 2: case 4:n+=2;k--;break; }

printf(“%d”,n);

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

程序运行后的输出结果是 A)235 B)0235

C)02356 D)2345

第四章 循环结构

第一节 while语句 习题

1.有以下程序 main()

{ int y=10; while(y--); printf(\}

程序执行后的输出结果是 B A) y=0 B)y=-1 C)y=1 D)while构成无限循环 2.有以下程序 main() { int k=5;

while(--k) printf(\ printf(\}

执行后的输出结果是 A A)1 B)2 C)4 D)死循环

第二节 do-while语句 习题

1.若变量已正确定义,有以下程序段 i=0; do

printf(\while(i++); printf(\

10

欲穷千里目,更上一层楼!

其输出结果是 B A)0,0 B)0,1 C)1,1 D)程序进入无限循环 2.有以下程序段 D  int n,t=1,s=0;  scanf(\

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

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

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

3.以下程序的功能是:将输入的正整数按逆序输出。例如,若输入135,则输出531,请填空。n/=10

#include main() {

int n,s;

printf(\ scanf(\ printf(\ do {

s=n; printf(\ _____;

} while(n!=0); printf(\}

第三节 for语句 习题

1.有以下程序 #include main() {

int x=8;

for( ; x>0; x--) {

if(x%3) {

printf(\ continue; }

printf(\ } }

程序的运行结果是 D A)7,4,2 B)8,7,5,2 C)9,7,6,4 2.以下不构成无限循环的语句或者语句组是 A

11

D)8,5,4,2 欲穷千里目,更上一层楼!

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

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

C)n=10; D)for(n=0,i=1; ;i++) n+=i; while(n); {n--;}

第四节 循环结构的嵌套 习题

1.有以下程序 main( ) {

int i,n=0;

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

if(i%3) continue; n++;

} while(!i); n++; }

printf(\ }

程序执行后的输出结果是 D A)n=5 B)n=2 C)n=3 2.有以下程序 main() {

int i,j,x=0;

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

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

if(j%2) continue; x++; } x++; }

printf(\ }

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

A)x=4 B)x=8 C)x=6 3.下面程序的功能是输出以下形式的金字塔图案 *

12

D)n=4 D)x=12 欲穷千里目,更上一层楼!

*** ***** ******* main( ) { int i,j;

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

for(j=1;j<=4-i;j++) printf(\ \ for(j=1;j<=_______;j++) printf(\ printf(\ } }

在下划线处应填入的是 B

A)i B)2*i-1

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

1.以下程序段中的变量已正确定义 for(i=0;j<4;i++,i++)

for(k=1;k<3;k++); printf(\ 程序段的输出结果是( ) D

A)******** B)****

C)2*i+1 D)i+2

C)** D)*

第五章 函 数

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

1.在C语言中,函数返回值的类型最终取决于A A)函数定义时在函数首部所说明的函数类型 B)return语句中表达式值的类型

C)调用函数时主函数所传递的实参类型 D)函数定义时形参的类型 2.有以下函数

int fun(char *s) { char *t=s;

while(*t++); return(t-s); }

该函数的功能是 B

A)比较两个字符的大小 B)计算s所指字符串占用内存字节的个数

13

欲穷千里目,更上一层楼!

C)计算s所指字符串的长度 D)将s所指字符串复制到字符串t中 3.程序中对fun函数有如下说明 C void *fun();

此说明的含义是 A)fun函数无返回值

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

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

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

1.有以下程序 #include int f(int x) {

int y;

if(x==0||x==1) return (3); y=x*x-f(x-2); return y; }

main() {

int z; z=f(3);

printf(\ }

程序的运行结果是 C

A)0 B)9 C)6 D)8 2.以下叙述中错误的是 C

A)改变函数形参的值,不会改变对应实参的值 B)函数可以返回地址值

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

D)调用sin函数需要包含头文件math.h 3.若程序中定义了以下函数 double myadd(double a, double b) {

return (a+b); }

并将其放在调用语句之后,则在调用之前应进行函数声明,以下选项中错误的是 A A)double myadd(double a, b); B)double myadd(double, double); C)double myadd(double b, double a); D)double myadd(double x, double y);

第三节 函数的数据传递 习题

14

欲穷千里目,更上一层楼!

1.有以下程序 void f(int v , int w) { int t;

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

main( ) {

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

else if(y>z) f(y,z); else f(x,z);

printf(\ }

执行后输出结果是 C

A)1,2,3 B)3,1,2 C)1,3,2 D)2,3,1 2.以下程序的输出结果是_________。 1 3 #include void fun(int x) {

if(x/2>0) fun(x/2);

printf(\ }

main() {

fun(3); printf(\}

第六章 指 针

第一节 变量的地址和指针 习题

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

A)改变函数形参的值,不会改变对应实参的值 B)函数可以返回地址值

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

D)当在程序的开头包含文件stdio.h时,可以给指针变量赋NULL 2.以下定义语句中正确的是 D

15

欲穷千里目,更上一层楼!

A) int a=b=0 ; B) char ?A?=65+1,b='b'; C) float a=1,*b=&a,*c=&b ; D) double a=0.0,b=1.1;

3.设已有定义:float x;则以下对指针变量p进行定义且赋初值的语句中正确的是D A) float *p=1024; B) int *p=(float x); C) float p=&x; D) float *P=&x;

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

1.设有定义:int n=0,*p=&n,**q=&p;,则以下选项中,正确的赋值语句是 D A)p=1; B)*q=2; C)q=p; D)*p=5; 2.有以下程序 main() {

int a=1,b=3,c=5;

int *p1=&a, *p2=&b, *p=&c; *p=*p1*(*p2); printf(\}

执行后的输出结果是 C A)1 B)2 C)3 D)4 3.设有定义:int n1=0,n2,*p=&n2,*q=&n1;,以下赋值语句中与n2=n1;语句等价的是 A A)*p=*q; B)p=q; C)*p=&n1; D)p=*q; 4.有以下程序

#include main() {

int n,*p=NULL; *p=&n;

printf(\ scanf(\ printf(\ printf(\ }

该程序试图通过指针p为变量n读入数据并输出,但程序有多处错误,以下语句正确的是A A)int n,*p=NULL; B)*p=&n; C)scanf(\ D)printf(\

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

1.以下程序的功能是:利用指针指向3个整型变量,并通过指针运算找出3个数中的最大值,输出到屏幕上,请填空:*pmax=x; (或者max=x)

main() {

int x,y,z,max,*px,*py,*pz,*pmax; scanf(\

16

欲穷千里目,更上一层楼!

px=&x; py=&y; pz=&z;

pmax=&max;

__________________ if(*pmax<*py) *pmax=*py; if(*pmax<*pz) *pmax=*pz;

printf(\}

2.void f( int y, int *x) { y=y+*x; *x=*x+y;} main( )

{ int x=2,y=4; f(y,&x);

printf(\ %d\\n\}

执行后输出的结果是 。8 4

3.以下程序的输出结果是__________。 3 5 #include

void swap(int *a,int *b) {

int *t;

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

main() {

int i=3, j=5, *p=&i, *q=&j; swap(p,q);

printf(\ }

第七章 数 组

第一节 一维数组 习题

1.有以下程序段

int j; float y; char name[50]; scanf(\

当执行上述程序段,从键盘上输入55566 7777abc后,y的值为 B

A)55566.0 B)566.0 C)7777.0 2.有以下程序 main()

17

D)566777.0

欲穷千里目,更上一层楼!

{

char ch[]=\; pc=ch; printf(\}

程序运行后的输出结果是 A A)z B)0 C)元素ch[5]地址 D)字符y的地址 3.有以下程序 #include main() {

int s[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=1;i<5;i++) printf(\ printf(\ }

程序的运行结果是 C A)1 2 3 4 B)2 3 4 4 C)4 3 3 2 D)1 1 2 3

第二节 二维数组 习题

1.以下错误的定义语句是 C A)int x[][3]={{0},{1},{1,2,3}};

B)int x[4][3]={{1,2,3},{1,2,3},{1,2,3},{1,2,3}}; C)int x[4][]={{1,2,3},{1,2,3},{1,2,3},{1,2,3}}; D)int x[][3]={1,2,3,4};

2.若有定义:int a[2][3];,以下选项中对a数组元素正确引用的是 D A)a[2][!1] B)a[2][3] C)a[0][3] D)a[1>2][ !1]

3.若有定义语句:int a[3][6]; ,按在内存中的存放顺序,a数组的第10个元素是B A)a[0][4] B)a[1][3] C)a[0][3] D)a[1][4]

第三节 数组应用举例 习题

1.有以下程序 main()

{ int i,t[][3]={9,8,7,6,5,4,3,2,1}; for(i=0; i<3; i++) printf(\}

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

A) 7 5 3 B) 3 5 7 C) 3 6 9 D) 7 5 1 2.有以下程序 main() { int a[4][4]={{1,4,3,2,},{8,6,5,7,},{3,7,2,5,},{4,8,6,1,}},i,k,t;

18

欲穷千里目,更上一层楼!

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(\}

程序运行后的输出结果是 B A)6,2,1,1, B)6,4,3,2, C)1,1,2,6, 3.有以下程序 main() {

int a[4][4]={{1,4,3,2,},{8,6,5,7,},{3,7,2,5,},{4,8,6,1,}},i,j,k,t; for(i=0;i<4;i++) for(j=0;j<3;j++) for(k=j+1;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(\}

程序运行后的输出结果是 A A)1,2,5,7, B)8,7,3,1, C)4,7,5,2,

第八章 字符串

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

1.以下关于字符串的叙述正确的是 D A)C语言中有字符串类型的常量和变量

B)两个字符串中的字符个数相同时才能进行字符串大小的比较 C)可以用关系运算符对字符串的大小进行比较 D)空串一定比空格打头的字符串小 2.以下正确的字符串常量是 D A)\ B)'abc' C) OlympicGames 3.设有如下程序段 A char s[20]= \ p=s;

则执行p=s;语句后,以下叙述正确的是 A)可以用*p表示s[0]

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

19

D)2,3,4,6,

D)1,6,2,1,

D)\

欲穷千里目,更上一层楼!

C)s和p都是指针变量

D)数组s中的内容和指针变量p中的内容相等 4.以下能正确定义字符串的语句是D

A)char str[]={' \\064'}; B)char str=\ C)char str=\ D)char str[]=\

第二节 字符串的输入输出 习题

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

A) scanf() B) getchar() C) gets() D) getc() 2.有以下程序 #include

void fun(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*b B) a*b C) a*b**** D) ab

第三节 对字符串的操作 习题

1.若有定义:char *x=\,以下选项中正确运用了strcpy函数的是 D A)char y[10]; strcpy(y,x[4]); B)char y[10]; strcpy(++y,&x[1]); C)char y[10],*s; strcpy(s=y+5,x); D)char y[10],*s; strcpy(s=y+1,x+1); 2.有以下程序 #include main() {

char p[20]={ 'a', 'b', 'c', 'd'},q[]=\strcat(p,r);

strcpy(p+strlen(q),q); printf(\}

程序运行后的输出结果是

A) 9 B) 6 C) 11 D) 7 3.有以下程序

20

欲穷千里目,更上一层楼!

#include

void f(char p[][10], int n ) /* 字符串从小到大排序 */ {

char t[10]; int i,j; for(i=0; i<9; i++) 改成for(i=0;i0) {

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

main() {

char p[5][10]={ \f(p,5);

printf(\}

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

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

第九章 文 件

第一节 文件的基础知识 习题

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

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

B)打开一个已存在的文件进行了写操作后,原有文件中的全部数据必定被覆盖

C)在一个程序中当对文件进行了写操作后,必须先关闭该文件然后再打开,才能读到第1个数据

D)当对文件的读(写)操作完成之后,应关闭文件,否则可能导致数据丢失 2.以下叙述中错误的是 C

A)C语言中对二进制文件的访问速度比文本文件快 B)C语言中,随机文件以二进制代码形式存储数据 C)语句 FILE fp; 定义了一个名为fp的文件指针 D)C语言中的文本文件以ASCII码形式存储数据

第二节 文件的操作 习题

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

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

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

21

欲穷千里目,更上一层楼!

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

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

2.读取二进制文件的函数调用形式为:fread(buffer,size,count,fp); ,其中buffer代表的是C A)一个文件指针,指向待读取的文件

B)一个整型变量,代表待读取的数据的字节数 C)一个内存块的首地址,代表读入数据存放的地址 D)一个内存块的字节数 3.设fp为指向某二进制文件的指针,且已读到此文件末尾,则函数feof(fp)的返回值为 B A)EOF B)非0值 C) 0 D)NULL 第三节 文件例题 习题

1.有以下程序(提示:程序中fseek(fp,-2L*sizeof(int),SEEK_END);语句的作用是使位置指针从文件尾向前移2*sizeof(int)字节) #include main( ) {

FILE *fp; int i,a[4]={1,2,3,4},b; fp=fopen(\

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

fp=fopen(\;

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

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

printf(\ }

执行后输出结果是 D

A)2 B)1 C)4 D)3 2.有以下程序

#include main() {

FILE *fp; int k,n,a[6]={1,2,3,4,5,6}; fp=fopen(\

fprintf(fp, \ fprintf(fp, \ fclose(fp);

fp=fopen(\

fscanf(fp, \ printf(\fclose(fp); }

程序运行后的输出结果是 D A)1 2 B)1 4 C)123 4 D)123 456 3.有以下程序 #include

22

欲穷千里目,更上一层楼!

main() {

FILE *fp; int a[10]={1,2,3,0,0},i; fp=fopen(\fwrite(a,sizeof(int),5,fp); fwrite(a,sizeof(int),5,fp); fclose(fp);

fp=fopen(\fread(a,sizeof(int),10,fp); fclose(fp);

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

程序的运行结果是 D

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

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

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

1.以下关于typedef的叙述错误的是 A A)用typedef可以增加新类型

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

C)用typedef可以为各种类型说明一个新名,但不能用来为变量说明一个新名 D)用typedef为类型说明一个新名,通常可以增加程序的可读性 2.以下叙述中错误的是 D

A)在程序中凡是以“#”开始的语句行都是预处理命令行 B)预处理命令行的最后不能以分号表示结束 C)#define MAX是合法的宏定义命令行

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

3.若程序中有宏定义行:#define N 100,则以下叙述中正确的是 B A)宏定义行中定义了标识符N的值为整数100

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

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

1.在C语言中,只有在使用时才占用内存单元的变量,其存储类型是 A A)auto和register B) extern和register C) auto和static D) static和register 2.有以下程序: fun(int x, int y)

23

欲穷千里目,更上一层楼!

{

static int m=0,i=2;

i+=m+1; m=i+x+y; return m; }

main() {

int j=1,m=1,k;

k=fun(j,m); printf(\k=fun(j,m); printf(\}

执行后的输出结果是 B A)5,5 B)5,11 C)11,11 D)11,5 3.有以下程序 int a=4; int f(int n) {

int t=0; static int a=5;

if(n%2) {int a=6; t+=a++;} else {int a=7;t+=a++;} return t+a++; }

main() {

int s=a,i=0;

for(;i<2;i++) s+=f(i); printf (\}

程序运行后的输出结果是B A)24 B)28 C)32 D)36

第三节 动态存储分配 习题

1.已有定义:double *p;,请写出完整的语句,利用malloc函数使p指向一个双精度型 的动态存储单元_______________________。p = (double*)malloc(sizeof(double))

2.以下程序中给指针p分配3个double型动态内存单元,请填空。3 * sizeof(double) # include main ( ) { double *p;

p=(double *) calloc(_______________); p[0]=1.5; p[1]=2.5; p[2]=3.5;

24

欲穷千里目,更上一层楼!

printf(“%f%f%f\\n”,p[0],p[1],p[2]); }

3.以下程序的输出结果是 ______________。 40 # include main() {

char *s1,*s2,m;

s1=s2=(char*)malloc(sizeof(char)); *s1=15; *s2=20; m=*s1+*s2;

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

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

1.设有定义语句int(*f)(int);,则以下叙述正确的是 B A)f是基类型为int的指针变量。

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

D)f是函数名,该函数的返回值是基类型为int类型的地址。 2.有以下程序:

int add(int a,int b){return(a+b);} main() {

int k,(*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.有以下程序

float f1(float n) { return n*n; } float f2(float n) { return 2*n; } main() {

float (*p1)(float),(*p2)(float),(*t)(float), y1, y2; p1=f1; p2=f2;

y1=p2( p1(2.0) );

t = p1; p1=p2; p2 = t;

25

欲穷千里目,更上一层楼!

y2=p2( p1(2.0) );

printf(\}

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

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

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

1.有以下程序: fun(int x) {

int p;

if(x==0||x==1) return(3); p=x-fun(x-2); return p; }

main() {

printf(\}

执行后的输出结果是 C A)7 B)3 C)2 D)0 2.有以下程序 int fun(int n) {

if(n==1) return 1; else

return (n+fun(n-1)); }

main() { int x;

scanf(\ }

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

A)55 B) 54 C) 65 3.有以下程序 #include void fun(int n,int *p) {

int f1,f2;

if(n==1||n==2) *p=1;

26

D) 45 欲穷千里目,更上一层楼!

else {

fun(n-1,&f1); fun(n-2,&f2); *p=f1+f2; } }

main() { int s;

fun(3,&s); printf(\}

程序的运行结果是 A

A)2 B)3 C)4 4.以下叙述中正确的是( )。B

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

B)可以在程序中由用户指定任意一个函数作为主函数,程序将从此开始执行。C)C语言规定必须用main作为主函数名,程序将从此开始执行,在此结束。D)main可作为用户标识符,用以命名任意一个函数作为主函数。

第十一章 结构体与共用体

第一节 结构体 习题

1.有以下程序段

typedef struct node { int data; struct node *next; } *NODE; NODE p;

以下叙述正确的是 C

A)p是指向struct node结构变量的指针的指针。 B)NODE p;语句出错。

C)p是指向struct node结构变量的指针。 D)p是struct node结构变量。

2.以下结构体类型说明和变量定义中正确的是 A A)typedef struct B)struct REC {int n; char c;}REC; {int n; char c;}; REC t1,t2; REC t1,t2; C)typedef struct REC ; D)struct

{int n=0; char c='A';}t1,t2; {int n;char c;}REC t1,t2; 3.有以下程序 #include struct tt

{int x;struct tt *y;} *p;

27

D)5 欲穷千里目,更上一层楼!

struct tt a[4]={20,a+1,15,a+2,30,a+3,17,a}; main() { int i; p=a;

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

printf(\ p=p->y; } }

程序的运行结果是 D

A)20,30, B)30,17, C)15,30, D)20,15, 4.有以程序

#include #include

typedef struct { char name[9]; char sex; float score[2]; } STU; void f( STU a) {

STU b={\ strcpy(a.name,b.name); a.sex=b.sex;

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

main() {

STU c={\ f(c);

printf(\ }

程序的运行结果是 A A)Qian,p,95,92 B)Qian,m,85,90 C)Zhao,f,95,92 D)Zhao,m,85,90

第二节 共用体 习题

1.若有以下定义和语句 union data

{int i; char c;float f;} x; int y;

则以下语句正确的是B

A)x=10.5 B)x.c=101 C)y=x; D)printf(\2.设有以下定义 union data

{ int d1; float d2; }demo;

28

欲穷千里目,更上一层楼!

则下面叙述中错误的是D

A)变量demo与成员d2所占的内存字节数相同。 B)变量demo中各成员的地址相同。 C)变量demo和各成员的地址相同。

D)若给demo.d1赋99后, demo.d2中的值是99.0。 3.若有以下说明和定义 union dt {

int a; char b; double c; }data;

以下叙述中错误的是C

A)data的每个成员起始地址都相同。

B)变量data所占内存字节数与成员c所占字节数相等。

C)程序段:data.a=5;printf(\输出结果为5.000000。 D)data可以作为函数的实参。

第三节 链 表 习题

1.假定已建立以下链表结构,且指针p和q已指向如图所示的结点:

data nexthead apbqc 则以下选项中可将q所指结点从链表中删除并释放该结点的语句组是( )D A)(*p).next=(*q).next; free(p); B)p=q->next; free(q); C)p=q; free(q); D)p->next=q->next; free(q);

第十二章 数组与指针

第一节 一维数组与指针 习题

1.有以下程序 #include void fun(char **p) {

++p;

printf(\}

main() {

char *a[]={\fun(a); }

程序的运行结果是A

29

欲穷千里目,更上一层楼!

A)Afternoon B)fternoon C)Morning D)orning 2.有以下程序 删除该题 #include

void fun(char *a,char *b) {

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

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

main() {

char *s=”****a*b****”,t[80]; fun(s,t); puts(t); }

程序的运行结果是

A)*****a*b B)a*b C)a*b**** D)ab 3.有以下程序 #include #include void fun(char *s[ ],int n) {

char *t; int i,j; for(i=0;i

if(strlen(s[i])>strlen(s[j])) {t=s[i];s[i]=s[j];s[j]=t;} }

main() {

char *ss[]={\ fun(ss,5);

printf(\,%s\\n\ }

程序的运行结果是 A

A)xy,aaaacc B)aaaacc,xy C)bcc,aabcc D)aabcc,bcc

第二节 二维数组与指针 习题

1.有以下定义和语句

int a[3][2]={1,2,3,4,5,6,},*p[3]; p[0]=a[1];

则*(p[0]+1)所代表的数组元素是 C A) a[0][1] B) a[1][0] C) a[1][1] D) a[1][2] 2.有以下程序 main()

30

欲穷千里目,更上一层楼!

{

int a[3][3],*p,i; p=&a[0][0]; for(i=0;i<9;i++) p[i]=i;

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

printf(\}

程序运行后的输出结果是 D A)0 1 2 B)1 2 3 C)2 3 4 D)3 4 5 3.有以下程序

#include main() 删除该行

void f(char p[][10], int n ) /* 字符串从小到大排序 */ {

char t[10]; int i,j;

for(i=0;i<9;i++) 改成for(i=0;i0)

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

main() {

char p[5][10]={\f(p,5);

printf(\}

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

A) 2 B) 4 C) 6

第三节 数组与函数 习题

1.有以下程序 int f(int b[][4]) {

int i,j,s=0;

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

if(i>2) i=3-j; s+=b[i][j]; }

return s;

31

D) 3 欲穷千里目,更上一层楼!

}

main( ) {

int a[4][4]={{1,2,3,4},{0,2,4,5},{3,6,9,12},{3,2,1,0}}; printf(\ }

执行后的输出结果是 D

A)12 B)11 C)18 D)16 2.有以下程序

#include #include

typedef struct{ char name[9];char sex; float score[2]; } STU; STU f(STU a) {

STU b={\ int i;

strcpy(a.name,b.name); a. sex=b.sex;

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

main() {

STU c={\d=f(c);

printf(\}

程序的运行结果是 C A)Qian,f,95,92 B)Qian,m,85,90 C)Zhao,m,85,90 D)Zhao,f,95,92 3.以下程序中,函数sumColumM的功能是:求出M行N列二维数组每列元素中的最小值,并计算它们的和值。和值通过形参传回主函数输出。请填空。 #define M 2 #define N 4

void SumColumMin(int a[M][N],int *sum) {

int i,j,k,s=0; for(i=0;i

for(j=1;ja[j])k=j;

s+= _______ ; a[k][i] }

*sum]=s;

32

欲穷千里目,更上一层楼!

}

main() {

int x[M][N]={3,2,5,1,4,1,8,3},s; SumColumMin( _______ ); x, &s printf(\}

33

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

Top