您好,欢迎来到要发发知识网。
搜索
您的当前位置:首页C语言程序设计试题及答案解析

C语言程序设计试题及答案解析

来源:要发发知识网
C语言程序设计试题

第1、2、3章 概述、类型、表达式 一、选择题

一个C程序由若干个C函数组成,各个函数在文件中的位置顺序为:( ) A、 任意 B、 第一个函数必须是主函数,其他函数任意 C、 必须完全按照执行的顺序排列

D、 其他函数可以任意,,主函数必须在最后 答案:A

下列四个叙述中,正确的是:( ) A、 C程序中的所有字母都必须小写

B、 C程序中的关键字必须小写,其他标 示符不区分大小写 C、 C程序中的所有字母都不区分大小写 D、 C语言中的所有关键字必须小写 答案:D

下列四个叙述中,错误的是:( )

A、 一个C源程序必须有且只能有一个主函数 B、 一个C源程序可以有多个函数

C、 在C源程序中注释说明必须位于语句之后 D、 C源程序的基本结构是函数 答案:C

下面不是C语言合法标识符的是:( )

A、abc B、5n C、_4m D、x3 答案:B

以下叙述不正确的是:( )

A. 分号是C语句的必要组成部分 B. C程序的注释可以写在语句的后面 C. 函数是C程序的基本单位 D. 主函数的名字不一定非用main来表示 答案:D

C语言中允许的基本数据类型包括:( )

A. 整型、实型、逻辑型 B. 整型、实型、字符型

C. 整型、字符型、逻辑型 D. 整型、实型、逻辑型、字符型 答案:B

C语言中能用八进制表示的数据类型为:( )

A、字符型、整型 B、整形、实型

C、字符型、实型、双精度型 D、字符型、整型、实型、双精度型 答案:A

下列属于C语言合法的字符常数是:( ) A、’\\97’ B、”A” C、’\’ D、”\\0” 答案:C

在C语言(VC环境)中,5种基本数据类型的存储空间长度的排列顺序为:( ) A、char1

D、char=int=在C语言中(VC环境),一定是长整型常数的是:( )

A、0L B、4962710 C、0412765 D、0xa34b7fe 答案:A

若有以下定义语句char c1=’b’, c2=’e’; printf(“%d,%c\\n”,c2-c1,c2-‘a’+’A’);则输出结果是:( )

A、2,M B、3,E

C、2,E D、输出项与相应的格式控制不一致,输出结果不确定 答案:B

以下合法的赋值语句是:( )

A、x=y=100 B、d--; C、x + y D、c = int(a+b); 答案:B

设变量t为int型,下列选项中不正确的赋值语句是:( )

A、++t; B、n1=(n2=(n3=0)); C、k=i==m; D、a=b+c=1; 答案:D

在以下一组运算符中,优先级最高的是:( )

A、<= B、== C、% D、&& 答案:C

下列能正确表示a≥10或a≤0的关系表达式是:( ) A、a>=10 or a<=0 B、a<=10 || a>=0 C、a>=10 || a<=0 D、a>=10 && a<=0 答案:C

下列只有当整数x为奇数时,其值为“真”的表达式是:( )

A、x%2==0 B、!(x%2==0) C、(x-x/2*2)==0 D、!(x%2) 答案:B

设a为整型变量,不能正确表达数学关系10=15)

C、a>10 && a<15 D、!(a<=10) && !(a>=15) 答案:A

已知x=43, ch=’A’,y=0;则表达式(x>=y&&ch<’B’&&!y)的值是:( ) A、0 B、语法错 C、1 D、“假” 答案:C

表达式17%4 /8的值为:( )

A、0 B、1 C、2 D、3 答案:A

语句printf(“%d”,(a=2)&&(b= -2));的输出结果是:( ) A、无输出 B、结果不确定 C、-1 D、1 答案:D

一个可执行的C程序的开始执行点是:( )

A. 程序中的第一个语句 B. 包含文件中的第一个函数 C. 名为main的函数 D. 程序中的第一个函数 答案:C

2

组成C语句的一个必不可少的符号是:( )

A. 逗号 B. 引号 C. 冒号 D. 分号 答案:D

若将int、long、float等类型的数据进行混合运算,其结果的数据类型是:( ) A. int B. long C. float D. double 答案:D

下述是C语言中有关变量定义的几个说法,正确的是:( ) A. 变量可以不定义直接使用 B. 一个说明语句只能定义一个变量

C. 几个不同类型的变量可在同一语句中定义 D. 变量可以在定义时进行初绐化 答案:D

与x * = y + z等价的赋值表达式是:( )

A. x = y + z B. x = x * y + z C. x = x * (y + z) D. x = x + y * z 答案:C

当代电子计算机能够自动地处理指定的问题是因为:( ) A.计算机是电动的

B.有解决该问题的计算机程序 C.事先存储了解决该问题的程序 D.以上都不是

( 知识点:程序的基本概念; 难度系数:2; 答案:C ) 以下叙述中最准确的是:( )

A.计算机程序是处理某一问题所有指令的集合

B.计算机程序是处理某一问题所用到的所有数据的集合 C.计算机程序是处理某一问题的所有指令及其数据的集合

D.计算机程序是处理某一问题的所有指令及其数据的有序集合 ( 知识点:程序的基本概念; 难度系数:2; 答案:D ) 关于计算机程序设计,以下描述最准确的是:( ) A.程序设计就是用语言来编写程序

B.程序设计就是用计算机语言来编写程序

C.程序设计就是用计算机程序设计语言来编写程序 D.程序设计就是用计算机能识别的语言来编写程序

( 知识点:程序设计的基本概念; 难度系数:1; 答案:C ) 目前编写计算机程序一般采用的是:( )

A.机器语言 B.汇编语言 C.高级语言 D.英语 ( 知识点:程序设计的基本概念; 难度系数:1; 答案:C ) 设计一个计算机程序最基本的工作是:( )

A.制定正确的算法 B.选择合理的数据结构 C.制定正确的算法和选择合理的数据结构 D.以上都不是 ( 知识点:算法的基本概念; 难度系数:1; 答案:C ) 算法具有五个特性,以下选项中不属于算法特性的是:( )

A.有穷性 B.简洁性 C.可行性 D.确定性 ( 知识点:算法的基本概念; 难度系数:3; 答案:B )

3

下述哪一个不是结构化程序基本结构:( )

A.顺序 B.选择 C.循环 D.嵌套 ( 知识点:结构化程序设计的概念; 难度系数:2; 答案:D ) C语言是一种:( )

A.机器语言 B.汇编语言 C.高级语言 D.以上都不是 ( 知识点:C语言的特点; 难度系数:1; 答案:C ) C语言源程序的扩展名为:( )

A..exe B..c C..obj D..cpp ( 知识点:C语言的特点; 难度系数:1; 答案:B )

C程序编译后最终产生(即计算机执行)的文件的扩展名为( )

A..exe B..c C..obj D..cpp ( 知识点:C语言的特点; 难度系数:1; 答案:A ) 下列各项中,不是C语言的特点是:( ) A.语言简洁、紧凑,使用方便 B.程序执行效率高,可移植性好 C.能实现汇编语言的大多数功能 D.有较强的网络操作功能

( 知识点:C语言的特点; 难度系数:3; 答案:D ) 构成C语言源程序的基本单位是:( )

A.子程序 B.过程 C.文本 D.函数 ( 知识点:C程序的特点; 难度系数:1; 答案:D ) 下列叙述正确的是:( )

A.C语言源程序可以直接在DOS环境中运行

B.编译C语言源程序得到的目标文件可以直接在DOS环境中运行

C.C语言源程序经过编译、连接得到的可执行程序可以直接在DOS环境中运行 D.C语言源程序可以直接在VC++环境中运行

( 知识点:C程序的特点; 难度系数:2; 答案:C )

某C程序由一个主函数main()和一个自定义函数max()组成,则该程序:( ) A.写在前面的函数先开始执行 B.总是从main()函数开始执行 C.总是从max()函数开始执行 D.写在后面的函数先开始执行

( 知识点:C程序的特点; 难度系数:1; 答案:B ) 以下叙述不正确的是:( ) A.分号是C语句的必要组成部分 B.C程序的注释可以写在语句的后面 C.函数是C程序的基本单位

D.主函数的名字不一定用mian表示

( 知识点:C程序的特点; 难度系数:1; 答案:D ) 以下为C语句的是:( )

A.a=8 B.a++; C.if(a>8) D. #include ( 知识点:C语句的特点; 难度系数:2; 答案:B ) 以下不是C语句的是:( )

A.a=8; B.a++; C.if(a>8); D.for(i=1;i<5;i++)

4

( 知识点:C语句的特点; 难度系数:2; 答案:D ) 以下所列语句中,合法的语句是:( )

A.a=1,b=2 B.++a; C.a=a+1=5 D.y=int(a); ( 知识点:C语句的特点; 难度系数:2; 答案:B ) C程序中的复合语句指的是:( )

A.并列的多个C语句 B.写在同一行中的多个C语句 C.用一对大括号对括的多个C语句 D.就是函数体中的语句 ( 知识点:C语句的特点; 难度系数:2; 答案:C )

当一个很长的C语句(中间无字符串)在一行写不下(超出屏幕的宽度)时,应该:( ) A.由系统自动换行 B.立即按回车键换行

C.在任意一个空格处按回车键换行 D.输入一个分号后并按回车键换行换行

( 知识点:C语句的特点; 难度系数:2; 答案:C ) 在x值处于-2~2,4~8时值为“真”,否则为“假”的表达式是:( )。 A.( 2> x> -2 )||(4 > x > 8)

B.!((( x < -2 )||( x >2 )&&(( x <= 4 )||( x > 8 )) C.( x < 2 )&&( x >= -2 )&&( x > 4 )&&( x < 8 ) D.( x > -2 )&&( x >4 )||( x < 8 )&&( x < 2 ) 答案:B

二、判断题

( T )C语言是严格区分大写和小写的,因次主函数不能写成main()以外的其他形式。 ( F )C语言程序是从源文件的第一条语句开始执行的。

( T )C语言对其数据在内存中所占用的实际字节数是有明确规定的。 ( F )C语言中/*..*/之间的注释内容是不能跨行的。

( F )C语言中多个以“;”结束的语句不能放在同一行。 ( T )以下常数:'101',e3,’\\78’,(2+3)e(4-2)都是不合法的。 ( F )变量说明语句int a=b=c=23;是正确的。

( F )字符型数据不可以和整数数据一起进行算术运算。 ( F )C语句:3*x*x+4*x+1+6sin(x)=y.是可以允许的。 ( T )表达式m=(a=4,4*5)和m=a=4,4*5的值是相等的。

( T )C语言中强制类型转换不会改变原变量的原有数据类型。 ( F )表达式j=-i++和j=-(i++)不相等

( T )程序段:i=8,j=10;printf(\"%d,%d,%d,%d\\n\其结果9,10,9,10.

( F )C语言中放在“”之间的内容都被视为字符串的一个构成部分,都可以在屏幕上原样显示。

( T )计算机程序的基本组成是:指示计算机如何去解决某一问题的一组指令。 ( T )计算机程序的执行过程实际上是对程序所表达的数据进行处理的过程。

( T )目前程序设计的理念已经从“面向过程的程序设计”向“面向对象的程序设计”方面转变。

( T )任何一个计算机程序都可以用机器语言、汇编语言和高级语言来编写。 ( T )有人曾提出:计算机程序=算法+数据结构。

5

( T )在程序设计中提到的算法就是“解决问题的方法和步骤”

( T )在程序设计中提到的数据结构就是“程序处理的对象的表示方法” ( T )计算机程序的算法就是解决“做什么”和“怎么做”的问题。

( T )结构化程序设计的基本理念是:将一个较大的问题细分成若干个较小问题的组合。 ( T )C程序的编译是从程序的第一行开始,到程序的最后一行结束。 ( F )C程序的编译是从主函数的第一行开始,到主函数的最后一行结束。 ( F )C程序的执行是从程序的第一行开始,一直到程序的最后一行结束。

( T )C程序的执行是从主函数的第一行开始,一直到主函数的最后一行结束。 ( T )设x、t均为int型变量,则执行语句\"x = 10;t = x && x > 10;\"后,t的值为0

( T )若a和b类型相同,在计算了赋值表达式a=b后b中的值将放入a中,而b中的值不变 ( T )在C程序中,%是只能用于整数运算的运算符 ( T )在C语言中,逻辑“真”等价于不等于0的数 ( F )C语言中字符型、整型、实型都能用八进制表示

(F)在VC语言中,5种基本数据类型的存储空间长度的排列顺序为:char( T )变量的三要素是:变量名、变量类型、变量的值。

三、多选题

目前程序设计采用的基本方法有:

A.面向过程的程序设计 B.面向对象的程序设计 C.面向问题的程序设计 D.面向机器的程序设计

( 知识点:结构化程序设计的概念; 难度系数:1; 答案:AB )

第4章 顺序结构

一、选择题

1、下面程序的输出是:( ) main()

{ int k=11;

printf(\"k=%d,k=%o,k=%x\\n\ }

A) k=11,k=12,k=13 B) k=11,k=13,k=13 C) k=11,k=013,k=oXb D) k=11,k=13,k=b 答案:D

2、以下合法的C语言赋值语句是:( )

A)a=b=58 B)k=int(a+b) ; C)a=58,b=58 D)-- i; 答案:D

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

{ int x=10,y=3; printf(“%d\\n”,y=x/y); }

A)0 B)1 C)3 D)不确定

6

答案:C

4、若变量已正确说明为int类型,要给a,b,c输入数据,以下正确的输入语句是:( ) A)read (a,b,c); B)scanf(“%d%d%d”,a,b,c);

C)scanf(“%D%D%D”,%a,%b,%c); D)scanf(“%d%d%d”,&a,&b,&b); 答案:D

5、执行下面程序段后,c3中的值是:( ) int c1=1 , c2=2 , c3; c3=c1/c2;

A)0 B)1/2 C)0.5 D)1 答案:A

6、若执行以下程序段,其输出结果是:( ) int a=0 , b=0 , c=0; c=(a-=a-5) , (a=b,b+3) ;

printf(“%d , %d , %d\\n” , a,b,c); A)0,0,0 B)0,0,5 C)5,0,5 D)-10,0,-10 答案:B

7、以下程序段的输出是:( ) float a=57.666;

printf(“*%2.2f*\\n”, a); A)*57* B)*58* C)*57.66* D)*57.67* 答案:D

8、若有以下定义和语句:( ) int a=5,b b=a++; 此处b的值是:( )

A) 7 B) 6 C) 5 D) 4 答案:C

9、若有以下定义和语句:( ) char c1='b',c2='e';

printf(\"%d,%c\\n\则输出结果是:( )

A) 2,M B) 3,E C) 2,e D) 输出结果不确定 答案:B

10、以下程序的输出结果是:( ) main()

{ int x=10,y=10;

printf(\"%d%d\\n\ }

A) 10 10 B) 9 9 C) 9 10 D) 10 9 答案:D

11、在C语言中,如果下面的变量都是int类型,则输出结果是:( ) sum=pad=5;

pad=sum++,pad++,++pad; printf(\"%d\\n\

7

A) 7 B) 6 C) 5 D) 4 答案:A

12、以下程序的输出结果:( ) #include main() {

int i=010,j=10;

printf(\"%d,%d\\n\ }

A) 11,10 B) 9,10 C) 010,9 D) 10,9 答案:B 13、在C语言中,short类型数据的范围是-32768~32767,下面程序段的输出结果是:( ) short i =65536; printf(\"%d\\n\

A) 65536 B) 0

C) 1 D)超出取值范围,无输出结果 答案:B

14、已知字符A的ASCII码为十进制的65,下面程序的输出是:( ) main() {

char ch1,ch2; ch1='A'+'5'-'3'; ch2='A'+'6'-'3';

printf(\"%d,%c\\n\ }

A) 67,D B) B,C

C) C,D D) 不确定的值 答案:A

15、若有定义和语句:

char s; s=\"abcd\"; printf(\"%d\\n\; 则结果是:( )

A) 输出 97 B) 输出 a

C) 输出 adcb D) 编译不能通过 答案:D

16、若有定义:int x,y; char a,b,c; 并有以下输入数据(此处代表换行,V代表空格): 1V2 AVBVC

则能给x赋整数1,给y赋数2,给a赋字符A,给b赋字符B,给c赋字符C的正确程序段是:( )

A) scanf(\"x=%d y=%d\

B) scanf(\"%d%d\ C) scanf(\"%d%d%c%c%c\

D) scanf(\"%d%d%c%c%c%c%c%c\答案:D

8

17、两次运行下面的程序,如果从键盘上分别输入6和4,则输出结果是:( ) main() {

int x;

scanf(\"%d\ if (x++>5) printf(\"%d\ else printf(\"%d\\n\ }

A) 7和5 B) 6和3 C) 7和4 D) 6和4 答案:A

18、若执行下面的程序从键盘输入3和4,则输出是:( ) main()

{ int a,b,s;

scanf(\"%d%d\ s=a;

if (aprintf(\"%d\\n\ }

A) 14 B) 16 C) 18 D) 20 答案:B

19、设i是int型变量,f是float型变量,用下面的语句给这两个变量输入值 scanf(\"i=%d,f=%f\

为了把100和765.12分别赋给i和f,则正确的输入为:( ) A) 100<空格>765.12<回车> B) i=100,f=765.12<回车>

C) 100<回车>765.12<回车> D) x=100<回车>,y=765.12<回车> 答案:B

20、以下程序的输出结果是:( ) #include main() { int n;

printf(\"%d\\n\ }

A) -1 B) 0 C) 1 D) 不确定 答案:B 二、判断题

1.( F )在C语言中,实型数据在内存都中占4个字节。

2.( F )在C语言中,参加算术(+,-,*,/,%)运算的数据可以是任何类型的数据。 3.( F )若有定义和语句:int a;char c;scanf(\"%d,%c\当通过键盘输入: 10,‘A’之后,则变量a中存放的是10,变量c中存放的是‘A’。

4.( F )C语言中,变量名只能是小写字母表示,符号常量名可用大写表示 5.( F )在C语言中,变量可以不要定义,直接使用

9

6.( T )一个C语言程序总是从主函数开始执行的 7.( F )注释语句必须用/*和*/括起来,且只能位于某一语句的后面 8.( F ) “a”和‘a’均是占用1个字节的内存空间 的数据

三、多选题

以下所列语句中,不合法的语句是:( ) A、a=1,b=2 B、++a; C、a=a+1=5; D、y= (int) a; E、a=b=c=10; 答案:ACD

下列描述正确的是:( )

A. putchar函数的作用是向屏幕输出一个字符 B. putchar函数能在屏幕上输出控制字符

C. putchar(c)函数中,c只能是字符型变量,不能是整型变量 D. putchar函数能在屏幕上输出转义字符

E.putchar函数的使用需要包含“stdio.h”头文件 答案:ABDE

下列描述正确的是:( ) A. getchar函数只能接收一个字符

B. getchar函数得到的字符可以赋给一个字符变量 C. getchar函数得到的字符可以赋给一个整型变量 D. getchar函数得到的字符可以作为表达式的一部分 E.getchar函数是编程者自定义的函数 答案:ABCD

printf函数中,关于格式字符描述正确的是:( ) A.格式字符o表示以八进制无符号形式输出整数 B.格式字符u 表示以无符号十进制形式输出整数 C.格式字符x 表示以无符号十六进制形式输出整数 D.格式字符f 表示以实数形式输出单、双精度数 E.格式字符e 表示以浮点数形式输出单、双精度数 答案:ABCDE

假设int x,y,z;若从键盘给x、y、z输入数据,下列不正确的输入语句是:( ) A.input x、y、z; B.scanf(\"%d%d%d\",&x,&y,&z); C.scanf(\"%d%d%d\",x,y,z); D.read(\"%d%d%d\",&x,&y,&z); E.scanf(\"%d%d%d,&x,&y,&z\"); 答案:ACDE 假设float x,y,z;,并通过scanf(\"%f%f%f \",&a,&b,&c);对a赋于10.0,b赋予22.0,c赋予33.0的值,下面正确的输入形式是:( )(注:符号︻代表空格) A、10<回车>22<回车> 33<回车> B、10.0<回车>22.0<回车>33.0<回车> C、10.0,22.0,33.0<回车> D、10.0︻22.0︻33.0<回车> E、10︻22︻33<回车>

10

答案:ABDE 若有int a,c;char b;并通过scanf(\"%f%c%f \",&a,&b,&c);对a赋于整数10,b赋予字符M,c赋予整数33的值,下面正确的输入形式是:( )(注:符号︻代表空格) A、10<回车>M<回车> 33<回车> B、10M33<回车>

C、 10︻M︻33<回车> D、10M<回车>33<回车> E、10M︻<回车>33<回车> 答案:BDE

若有 char ch;,下面可以对变量c正确赋值的语句是:( A.ch =‘A’; B.getchar(ch); C.ch = getchar(); D.scanf(“%c”,&ch);

E.printf(“%c”,ch=‘B’); 答案:ACDE

下面属于转义符的有:( ) A.‘\ ’ B.‘\\n’ C.‘%d’ D.‘\\376’答案:ABDE

若a为整型变量,则下列表达式的值为0的是( ), A.a % a B.a != a

C.3/4 D.3 && 0 E.a = 0

答案:ABCDE

第5、6章 选择与循环结构 一、选择题 1. 有以下程序 main( ) { int i;

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

{ case 1 : printf(\"%d \ case 2 : printf(\"%d \ default : printf(\"%d \ } }

执行后输出结果是:( )

A)011122 B)012 C)012020 D)120 答案:A

2. 有以下程序

11

) E.‘\\x20’ main()

{ int i=1, j=1, k=2;

if ( (j++ || k++) && i++) printf(\"%d,%d,%d\\n\ }

执行后输出结果是:( )

A)1,1,2 B)2,2,1 C)2,2,2 D)2,2,3 答案:C

3. 有以下程序 main()

{ int a=5,b=4,c=3,d=2; if (a>b>c)

printf(\"%d\\n\ else if ( (c-1 >= d) ==1)

printf(\"%d\\n\ else

printf(\"%d\\n\ }

执行后输出结果是:( )

A)2 B)3 C)4 D)编译时有错,无结果 答案:B

4. 有以下程序 main()

{ int i=0,s=0; do {

if (i%2) { i++; continue; } i++; s += i;

} while( i<7 ); printf(\"%d\\n\ }

执行后输出结果是:( )

A)16 B)12 C)28 D)21 答案:A

5. 以下程序的输出结果是:( ) main()

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

printf(\"%d\\n\ }

A) 5 B) 4 C) 6 D) 不确定 答案:C

6. 以下程序中,7. while循环的循环次数是:( ) main()

12

{ int i=0; while(i<10)

{ if(i<1) continue; if(i==5) break; i++; } }

A) 1 B) 10 C) 6 D) 死循环,不能确定次数 答案:D

8. 以下程序的输出结果是:( ) main( )

{ int a=0,i;

for(i=1;i<5;i++) switch(i) { case 0:

case 3: a+=2; case 1:

case 2: a+=3; default: a+=5; }

printf(\"%d\\n\ }

A) 31 B) 13 C) 10 D) 20 答案:A

9. 以下程序的输出结果是:( ) main()

{ int a=4,b=5,c=0,d; d=!a && !b || !c; printf(\"%d\\n\ }

A) 1 B) 0 C) 非0的数 答案:A

10. 以下程序的输出结果是:( ) #include main()

{ int i=0,a=0; while(i<20)

{ for( ; ; ) { if((i%10)==0) break; else i--; }

i+=11; a+=i; }

printh(\"%d\\n\

13

D) -1 }

A) 21 B) 32 C) 33 D) 11 答案:B

11. 阅读以下程序:( ) main() { int x;

scanf(\"%d\

if(x--<5) printf(\"%d\"x); else printf(\"%d\"x++); }

程序运行后,如果从键盘上输人5,则输出结果是:( ) A)3 B) 4 C) 5 D) 6 答案:B

12. 假定w、x、y、z、m均为int型变量,13. 有如下程序段: w=1; x=2; y=3; z=4;

m=(w14. 以下程序的输出结果是:( ) main() { int a, b;

for(a=1, b=1; a<=100; a++) { if(b>=10) break; if (b%3==1)

{ b+=3; continue; } }

printf(\"%d\\n\ }

A) 101 B) 6 C) 5 D) 4 答案:D

15. 若执行以下程序时从键盘上输入9,16. 则输出结果是:( main() { int n;

scanf (\"%d\ if(n++<10) printf (\"%d\\n\ else

printf(\"%d\\n\ }

A) 11 B) 10 C) 9 D) 8

答案:B

17. 有以下程序段

14

) int k=0 while(k=1) k++;

则while 循环执行的次数是:( )

A) 无限次 B) 有语法错,不能执行 C) 一次也不执行 D) 执行1次 答案:A

18. 以下程序执行后sum的值是:( ) main()

{ int i , sum;

for(i=1;i<6;i++) sum+=i; printf(\"%d\\n\ }

A)15 B)14 C) 不确定 D)0 答案:A

19. 有以下程序段 int x=3 do

{ printf (\"%d\}while (!(--x));

其输出结果是:( )

A) 1 B) 3 0 C) 1 -2 D) 死循环 答案:C

20. 若变量c为char类型,21. 能正确判断出c为小写字母的表达式是:( A) 'a'<=c<= 'z' B) (c>= 'a')||(c<= 'z') C) ('a'<=C)and ('z'>=c) D) (c>= 'a')&&(c<= 'z') 答案:D

22. 以下程序的输出结果是:( ) main()

{ float x=0.5; char z='a'; printf(\"%d\\n\ }

A) 0 B) 1 C) 2 D) 3 答案:A

23. 以下程序的输出结果是:( ) main()

{ int x=10,y=10,i; for(i=0;x>8;y=i )

printf(“%d %d ”,x--,y); }

A)10 1 9 2 B)9 8 7 6 C)10 9 9 0 D)10 10 9 0 答案:D

24. 以下程序的输出结果是:( )

15

) main()

{ int i;

for(i=1;i<=6;i++) { if(i%2) { printf(“#”); continue; }

printf(“*”); }

printf(“\\n”); }

A)#*#*# B)##### C)***** D)*#*#* 答案:A

25. 以下程序的输出结果是:( ) main() { int i;

for(i='A';i<='I';i++) printf(“%c”,i+32);

printf(“\\n”); }

A)编译不通过,无输出 B) aceg C)acegi D)abcdefghi 答案:D

26. 以下程序输出结果是:( ) main () { int m=5; if (m>5) printf (“%d\\n”,m); else printf (“%d\\n”,m--); }

A )7 B )6 C)5 D)4 答案:C

27. 运行以下程序后,28. 如果从键盘上输入china#《回车》,29. #include main()

{ int v1=0,v2=0; char ch ; while ((ch=getchar())!='#') switch (ch ) { case 'a': case 'h':

default:v1++; case '0':v2++; }

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

16

则输出结果为:( ) }

A) 2,0 B)5,0 C) 5,5 D)2,5 答案:C

30. 设有如下定义:

int a=1,b=2,c=3,d=4,m=2,n=2;

则执行表达式:(m=a>b)&&(n=c>d)后,n的值为:( ) A)1 B)2 C)3 D)0 答案:D

31. 以下程序的输出结果是:( ) 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(“x=%d\\n”,x); }

A)x=4 B)x=8 C)x=6 D)x=12 答案:B

32. 设x和y均为int型变量,33. 则执行以下的循环后,34. y值为:( for(y=1,x=1;y<=50;y++) { if(x==10)) break;

if (x%2==1) { x+=5; continue; }

x-=3; }

A)2 B)4 C)6 D)8 答案:C

35. 假定a和b为int型变量,36. 则执行以下语句后b的值为:( ) a=1;b=10; do

{ b-=a; a++; }while (b--<0);

A)9 B)-2 C)-1 D)8 答案:D

37. 设j为int型变量,38. 则下面for循环语句的执行结果是:( )

17

) for (j=10;j>3;j--) { if(j%3) j--; --j;--j;

printf(“%d ”,j); }

A)6 3 B)7 4 C)6 2 D)7 3 答案:B

39. 有以下程序 main() { int x, i; for(i=1;i<=50;i++) { x=i; if(x%2==0) { x++; if(x%3==0) { x++; if(x%7==0) { x++; printf(\"%d \ } } }

} } 输出结果是:( )

A)28 B)27 C)42 D)26 答案:D

40. 假定所有变量均已正确说明,41. 下列程序段运行后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 答案:B

42. 执行表达式k = ( 10>12 ? 15 :6>5 ? 8 :9 )后,43. 变量k的值为:( A. 9 B. 8 C. 15 D. 1 答案:B

44. 以下程序运行后,45. 如果从键盘上输人5,46. 则输出结果是:( )main( ) {

18

) int x;

scanf(\"%d\",&x); if(x--<5)

printf(\"%d\",x); else

printf(\"%d\",x++); } A、3 B、4 C、5 D、6 答案:B

47. 以下程序段的输出结果是:( ) int k, j , s ;

for(k=2;k<6;k++,k++) { s=1;

for (j=k;j<6;j++) s+=j; }

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

A)9 B)1 C)11 D)10 答案:D

48. 以下程序段的输出是:( ) int i,j,m=0;

for (i=1;i<=15;i+=4) for (j=3;j<=19;j+=4) m++;

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

A)12 B)15 C)20 D)25 答案:C

49. 以下程序段的输出结果是:( ) int i, sum;

for(i=1;i<6;i++) sum+=sum;

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

A)15 B)14 C)不确定 D)0 答案:C

50. 下面程序的输出是:( ) main()

{ int x=3,y=6,a=0; while (x++!=(y-=1)) { a++;

if (yprintf(\"x=%d,y=%d,a=%d\\n\ }

A) x=4,y=4,a=1 B) x=5,y=5,a=1

19

C) x=5,y=4,a=3 D) x=5,y=4,a=1 答案:D

51. 定义如下变量:int n=10;则下列循环的输出结果是:( ) while (n>7)

{ n--; printf(\"%3d\ }

A) 10 9 8 B) 9 8 7 C) 10 9 8 7 D) 9 8 7 6 答案:B

52. 以下程序段的输出结果是:( ) int x=3; do

{ printf(\"%3d\} while (!(--x));

A) 1 B) 3 0 C) 1 -2 答案:C

53. 执行下面的程序后,54. a的值为:( ) main() { int a,b;

for (a=1,b=1;a<100;a++) {

if (b>=20) break; if (b%3==1)

{ b+=3; continue; } b-=5; } }

A) 7 B) 8 C) 9 答案:B 55. 读程序: main()

{ int num=0;

while (num<=2)

{ num++; printf(\"%3d\ }

上面程序的输出结果是:( )

A) 1 B) 2 2 C) 1 2 3 D) 1 2 答案:C

56. 以下循环体的执行次数是:( ) main() { int i,j;

for(i=0,j=1;i<=j+1;i+=2,j--) printf(\"%d \\n\

20

D) 死循环 3 4 D) 10 }

A) 3 B) 2 C) 1 D) 0 答案:C

57. 在C语言的循环语句for,while,do-while语句中,58. 用于直接中断最内层循环的语句是:( )

A) switch B) continue C) break D) if 答案:C 二、判断题:

( F )用1作while循环的判断条件,则循环一次也不执行。 ( F )for循环表达式的括号内的3个表达式均不可以省略。 ( T )语句while(!E);中的条件!E等价于E==0。 ( T )语句while(E);中的条件E等价于E!=0。

( F )若有for( ; ; ){……},是指循环体执行0次。 ( F )程序有死循环的时候,上机编译不能通过。

( T )强制终止死循环可以使用CTRL+BREAK组合键。 ( F )执行for(I=0;I<3;I++);后I的值为2。

( F )执行for(I=0,j=0;I<2;I++);j=j+1;后j的值为1。 ( T )所有类型的循环都可以进行嵌套使用。 ( T )利用break语句可以提前终止循环的执行。 ( F )利用continue语句可以提前终止循环的执行。

( F )break语句和continue语句不可以同时出现在同一个循环体内。 ( F )switch语句中,每一个case的冒号后面都必须至少跟有一条语句 ( F ) 关于if语句中,条件表达式只能是关系表达式或逻辑表达式 三、多选题

关于if语句,下列叙述正确的是:( )

A.if语句中,条件表达式只能是关系表达式或逻辑表达式 B.if语句中,条件表达式的括号不可以省略

C.else子句不能作为一个独立的语句单独使用,必须是if语句的一部分。

D.if和else后面可以包含多个操作语句,此时要用一对大括号把这多个语句对括起来成为一个复合语句。 答案:BCD

以下4条语句,没有语法错误的是()

A.if (a>b) m =a; B.if (a);

C.if ((a=b)>=0) m=a; D.if ((a=b;)>=0) m=a; 答案:ABC

如果不加花括号表示else与if的配对关系,则else与if的匹配方法,不正确的是 A.else与它上面最远的if配对 B.else与它上面最近的if配对 C.else与离它最近的if配对

D.else与它上面最近的且没有和其他else配对的if配对 答案:ABC

关于条件运算符的叙述正确的是

21

A.条件运算符的优先级别比关系运算符和算术运算符都低 B.条件运算符是C语言中惟一的一个三目运算符 C.条件运算符的结合方向是“自右至左” D.条件运算符可以替代任何if语句的功能 答案:ABC

关于switch语句叙述正确的是

A.语句中,case的冒号后面允许没有语句。

B.switch语句中,每一个case的冒号后面都允许跟有多条语句。

C.在与switch语句配套的case语句中所使用的表达式可以是变量或常量 D.switch语句中,可以没有default语句。 答案:ABD

在计数循环for(表达式1;表达式2;表达式3)中,可以省略的表达式是:( ) A.表达式1 B.表达式2 C.表达式3 D.三个表达式都可以 E.一个都不能少 答案:ABCD

下列语句段是死循环的是( )

A.n=100; B.s=33;

while(n) n=n%100+1; while(s++%2+s%2) s++; C.for(;;); D.for(i=1;;)

if(--i)break; E.x=0; do{ x++;

}while(x>=0); 答案:ABCE 第7章 数组 一、选择题

1、若有以下说明语句:

int a[12]={1,2,3,4,5,6,7,8,9,10,11,12}; char c=’a’,d,g;

则数值为4的表达式是:( )。

A、a[g-c] B、a[4] C、a[‘d’-‘c’] D、a[‘d’-c] 答案:D

2、假设int型变量占两个字节的存储单元,若有定义: int x[10]={0,2,4};

则数组x在内存中所占字节数为:( )

A、3 B、6 C、10 D、20 答案:D

3、下列合法的数组定义是:( )

A、int a[]=”string”; B、int a[5]={0,1,2,3,4,5}; C、char a=”string”; D、char a[]={0,1,2,3,4,5}; 答案:D

4、若给出以下定义: char x[]=”abcdefg”;

char y[]={‘a’,’b’,’c’,’d’,’e’,’f’,’g’};

22

则正确的叙述为:( )

A、数组x和数组y等价 B、数组x和数组y的长度相同

C、数组x的长度大于数组y的长度 D、数组y的长度大于数组x的长度 答案:C

5、下面程序段的输出结果是:( ) int j;

int x[3][3]={1,2,3,4,5,6,7,8,9}; for (j=0;j<3;j++)

printf(“%d”,x[j][2-j]);

A、1 5 9 B、1 4 7 C、3 5 7 D、3 答案:C

6、下列程序运行后的输出结果是:( ) main()

{ int n[3],t,j,k; for(t=0;t<3;t++) n[t]=0; k=2;

for(t=0;tA、 2 B、 1 C、 0 D、3 答案:D 7、有以下程序 main()

{ int p[7]={11,13,14,15,16,17,18}, i=0,k=0; while(i<7 && p[i]%2) { k =k+ p[i]; i++; } printf(\"%d\\n\ }

执行后输出结果是:( )

A、58 B、56 C、45 D、24 答案:D

8、以下能正确定义数组并正确赋初值的语句是:( ) A、int N=5,b[N][N]; B、int a[1][2]={{1},{3}}; C、int c[2][]= {{1,2},{3,4}}; D、int d[3][2]={{1,2},{3,4}}; 答案:D 9、有以下程序 main()

{ int m[][3]={1,4,7,2,5,8,3,6,9}; int i,j,k=2;

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

{ printf(\"%d \ } }

23

6 9 执行后输出结果是:( )

A、4 5 6 B、2 5 8 C、3 6 9 D、7 8 9 答案:C

10、以下能正确定义一维数组的选项是:( ) A、int num[]; B、int num[0..100]; C) #define N 100 D) int N=100; int num[N]; int num[N]; 答案:C

11、下列选项中正确的语句组是:( )

A、char s[8]; s={\"Beijing\ B、char *s; s={\"Beijing\C、char s[8]; s=\"Beijing\"; D、char *s; s=\"Beijing\"; 答案:D

12、有以下程序段

int?a[10]={1,2,3,4,5,6,7,8,9,10},*p=&a[3],b; b=p[5];

b中的值是:( )

A、5 B、6 C、8 D、9 答案:D 13、有以下程序 main(?)

{??char?a[]=\"abcdefg\

?? printf(\"%d??%d\\n\}

执行后输出结果是:( )

A、7??7 B、8?8 C、8?10 D、10?10 答案:C

14、有以下程序的输出结果是:( ) void?swap1(int?c[]) {?int?t;

t=c[0];c[0]=c[1];c[1]=t; }

void?swap2(int?c0,int?c1) {??int?t;

t=c0;c0=c1;c1=t;} main(?)

{? int?a[2]={3,5},b[2]={3,5};

swap(a);??swap2(b[0],b[1]);

printf(\"%d??%d??%d??%d\\n\}

A、5?3?5?3 B、?5?3?3?5 C、3?5?3?5 答案:B 15、有以下程序 int?f(int?b[][4]) {? int?i,j,s=0;

24

D、3?5?5?3 for(j=0;j<4;j++) {??i=j; if(i>2)??i=3-j; s+=b[i][j]; }

return?s; }

main(?)

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

执行后的输出结果是:( )

A、12 B、11 答案:D 16、有以下程序

void?sort(int?a[],int?n) {??in t?i,j,t;

for(i=0;iif(a[i]main()

{? int?aa[10]={1,2,3,4,5,6,7,8,9,10},i; sort(aa,10);

for(i=0;i<10;i++) printf(\"%d\ printf(\"\\n\"); }

其输出结果是:( )

A、1,2,3,4,5,6,7,8,9,10, C、9,2,7,4,5,6,3,8,1,10, 答案:C 17、有以下程序

void?f(int?a[],int?i,int?j) {??int??t; if(i{t=a[i];?a[i]=a[j];a[j]=t; f(a,i+1,j-1); } }

main(?)

{??int?i,aa[5]={1,2,3,4,5}; f(aa,0,4);

C、18 D、16 B、10,9,8,7,6,5,4,3,2,1, D、1,10,3,8,5,6,7,4,9,2, 25

for(i=0;i<5;i++) printf(\"%d,\printf(\"\\n\"); }??

执行后输出结果是:( )

A、5,4,3,2,1,? ?B、5,2,3,4,1,?? C、1,2,3,4,5,?? D、1,2,3,4,5, 答案:A

18、 以下程序的输出结果是:( ) main()

{ char cf[3][5]={\"AAAA\ printf(\"\\\"%s\\\"\\n\ }

A、\"AAAA\" B、 \"BBB\" C、 \"BBBCC\" D、 \"CC\" 答案:B

19、 以下程序的输出结果是:( ) main()

{ int b[3][3]={0,1,2,0,1,2,0,1,2},i,j,t=1; for(i=0;i<3;i++)

for(j=i;j<=i;j++) t=t+b[i][b[j][j]]; printf(\"%d\\n\ }

A、 3 B、 4 C、 1 D、 9 答案:B

20、有以下程序 main()

{ int aa[4][4]={{1,2,3,4},{5,6,7,8},{3,9,10,2},{4,2,9,6}}; int i,s=0;

for(i=0;i<4;i++) s+=aa[i][1]; printf(\"%d\\n\ }

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

A、 11 B、 19 C、 13 D、、20 答案:B

21、若有以下定义语句:

char s[10],s=”abcd”;printf(“%s\\n”,s); 则运行结果是:( )

A、输出abcd B、输出a C、输出ab cd D、编译不通过 答案:D

22、不能把字符串“Hello!”赋给数组b的语句是:( )

A、char b[10]={‘H’,’e’,’l’,’l’,’o’,’!’}; B、char b[10];b=”Hello!”; C、char b[10]; strcpy(b,”Hello!”); D、char b[10]=”Hello!”; 答案:B

23、若有以下程序段:

char str[]=”ab\\n\\012\\\\\\””; printf(“%d”,strlen(str));

26

该程序段的输出结果是:( )

A、 3 B、 4 C、 6 D、12 答案:C

24、函数调用strcat(strcpy(str1,str2),str3)的功能是_:( ) A、将串str1复制到串str2中后在连接到串str3之后 B、将串str1连接到串str2之后再复制到串str3之后

C、将串str2复制到串str1中后再将串str3连接到串str1之后 D、将串str2连接到串str1中后再将串str1复制到串str3中 答案:C

25、下列程序的输出结果是:( ) main()

{ char ch[7]={“65ab21”}; int j,s=0;

for(j=0;ch[j])>=’0’&&ch[j]<=’9’;j+=2) s=10*s+ch[j]-‘0’; printf(“%d\\n”,s); }

A、12ba56 B、66521 C、6 D、62 答案:C

26、设已定义char s[]=”\\”Name\\\\Address\\”\\n”;,则字符串s所占的字节数是:( A、19 B、18 C、15 D、14 答案:C

27、设已定义char c[8]=”Tianjin”和int j,则下面的输出函数调用中错误的是:( A、printf(“%s”,c); B、for(j=0;j<8;j++) printf(“%c”,c[j]); C、puts(c); D、for(j=0;j<8;j++) puts(c[j]); 答案:D

28、设已定义char a[10]和 int j,则下面输入函数调用中错误的是:( ) A、scanf(“%s”,a); B、for(j=0;j<9;j++) scanf(“%c”,a[j]); C、gets(a); D、for(j=0;j<9;j++) scanf(“%c”,&a[j]); 答案:B

29、设已定义char x[8]和int j,为了给该数组赋值,下面语句中正确的是:( )A、x[8]=”Turbo C”; B、x=” Turbo C”;

C、x[]=”Turbo C”; D、for(j=0;j<7;j++) x[i]=getchar(); 答案:D

30、有如下程序, main()

{ int n[5]={0,0,0},j,k=2;

for(j=0;j该程序的输出结果是:( )

A、不确定的值 B、2 C、1 D、0 答案:D

在C语言中,一维数组的定义方式为:类型说明符 数组名( )。

27

) ) A.[常量表达式] B.[整型表达式] C.[整型常量]或[整型表达式] D.[整型常量] 答案:A

若有说明:int a[10];,则对a数组元素的正确引用是:( )。 A.a[10] B.a[3.5] C.a(5) D.a[10-10] 答案:D

在C语言中,引用数组元素时,其数组下标的数据类型允许是:( )。 A.字符常量 B.浮点型常量 C.整型常量或整型表达式 D.任何类型的表达式 答案:C

下列数组定义、初始化或赋值语句中,正确的是:( )。 A.int x[5]={1,2,3,4,5,6}; B.int n=8; int score[n]; C.int a[8]; a[8]=100; D.int x[]={1,2,3,4,5,6}; 答案:D

合法的数组说明语句是:( )。 A.int a[]=“string”; B.char a[]={0,1,2,3,4,5}; C.char a =“string”; D.int a[5]={0,1,2,3,4,5}; 答案:B

已知int a[][3]={1,2,3,4,5,6,7};,则数组a的第一维的大小是:( )。 A.2 B.3 C.4 D.无确定值 答案:B

若有说明:int a[3][4];,则对a数组元素的非法引用是:( )。 A.a[0][2*1] B.a[1][3] C.a[4-2][0] D.a[0][4] 答案:D

已有定义:char a[]=\"xyz\,以下叙述中正确的是:( )。 A.数组a和数组b的长度相同 B.a数组长度小于b数组长度 C.a数组长度大于b数组长度 D.数组a和数组b等价 答案:C

对两个数组a和b进行如下初始化: char a[]=“ABCDEF”;

char b[]={‘A’, ‘B’, ‘C’, ‘D’, ‘E’, ‘F’}; 则以下叙述正确的是:( )。 A.数组a与数组b完全相同 B.数组a与数组b长度相同 C.数组a与数组b中都存放字符串 D.数组a比数组b长度长 答案:D

有下面的程序段: char a[3],b[]=“China”; a=b;

printf(“%s”,a);

A.运行后将输出China B.运行后将输出Ch C.运行后将输出Chi D.编译出错 答案:D

下面程序的运行结果是:( )。 char c[5]={‘a’, ‘b’, ‘\\0’, ‘c’, ‘\\0’};

28

printf(“%s”,c); A.ab B.abc C.ab\\0 D.ab\\0c\\0 答案:A

设有数组定义:char array[]=“china”;,则数组array所占的空间为:( )。 A.4个字节 B.5个字节 C.6个字节 D.7个字节 答案:C

判断字符串s1是否大于字符串s2,应当使用:( )。 A.if(s1>s2) B.if(strcmp(s1,s2)) C.if(strcmp(s2,s1)>0) D.if(strcmp(s1,s2)>0) 答案:D

若有说明:int a[][4]={0,0};,则下面不正确的叙述是:( )。 A.数组a的每个元素都可得到初值0 B.二维数组a的第一维大小为1

C.因为二维数组a中初值的个数不能被第二维大小的值整除,则第一维的大小等于所得商数再加1,故数组a的行数为1

D.只有元素a[0][0]和a[0][1]可得到初值0,其余元素均得不到初值 答案:D

下列语句中,不正确的是:( )。 A.char str[5]=\"hello\";

B.char str[]={'h','e','l','l','o','\\0'}; C.char str[5]={\"hi\D.char str[100]=\"\"; 答案:A

下面错误的初始化语句是:( )。 A.char str[]=\"hello\"; B.char str[100]=\"hello\"; C.char str[]={'h','e','l','l','o'}; D.char str[]={'hello'}; 答案:D

定义了一维int型数组a[10]后,下面错误的引用是:( )。 A.a[0]=1; B.a[10]=2; C.a[0]=5*2;

D.a[1]=a[2]*a[0]; 答案:B

下面的二维数组初始化语句中,错误的是:( )。 A.float b[2][2]={0.1,0.2,0.3,0.4}; B.int a[][2]={{1,2},{3,4}}; C.int a[2][]= {{1,2},{3,4}}; D.float a[2][2]={0}; 答案:C

引用数组元素时,数组下标可以是:( )。 A.整型常量 B.整型变量 C.整型表达式 D.以上均可 答案:D

29

定义了int型二维数组a[6][7]后,数组元素a[3][4]前的数组元素个数为:( )。 A.24 B.25 C.18 D.17 答案:B

strlen(\"A\\0B\\0C\")的结果为:( )。 A.0 B.1 C.2 D.3 答案:B

下面程序的运行结果是:( )。 main() { int a[][3]={1,2,3,4,5,6}; printf(\"%d\} A.3 B.4 C.5 D.6 答案:C

下面程序的运行结果是:( )。 main() { char s1[20]=\"Good!\"; char s2[15]=\"AB\"; printf(\"%d\}

A.20 B.15 C.5 D.2 答案:D

下面程序的运行结果是:( )。 main() { char s1[20]=\"ABCDEF\"; int i=0; while(s1[i++]!='\\0') printf(\"%c\}

A.ABCDEF B.BDF C.ABCDE D.BCDE 答案:B

下面程序的运行结果是:( )。 main() { int n[2]={0},i,j,k=2; for(i=0;iA.不确定的值 B.3 C.2 答案:A

30

D.1 下面程序的运行结果是:( )。 main() { int x[]={22,33,44,55,66,77,88}; int k,y=0; for (k=1;k<=4;k++) if (x[k]%2==1) y++; printf(\"%d\} A.0 B.1 C.2 D.3 答案:C

下面程序的运行结果是:( )。 main() { int a[3][3]={{1,2},{3,4},{5,6}},i,j,s=0; for(i=1;i<3;i++) for(j=0;jA.14 B.19 C.20 D.21 答案:A

下面程序的运行结果是:( )。 main() { char ch[7]= {\"12ab56\ int i,s=0; for(i=0;ch[i]>='0'&&ch[i]<='9';i+=2) s=10*s+ch[i]-'0'; printf(\"%d\} A.1 B.1256 C.12ab56 D.l2 答案:A

下面程序的运行结果是:( )。 main() { char s[]=\"ab1c2d4e\"; int i; i=0; while(s[i]!='\\0') { if(s[i]>='a'&&s[i]<='z') printf(\"%c\

31

i++; } }

A.ab B.ab1c2d4e C.abcde D.a 答案:C

下面程序的运行结果是:( )。 main() { int i=0,n=0; char s[10]=\"298h01\"; for(i=0;s[i]!='\\0';i++) if(s[i]<='9'&&s[i]>='0') n=n*10+(s[i]-'0'); else break; printf(\"%d\\n\ }

A.298h01 B.29801 C.01 D.298 答案:D

二、判断题:

( F )在程序中可以对数值数组中的数据进行整体使用。

( T )如果strcmp(s1,s2)的返回值为一个负数,则表明字符串s1一定小于字符串s2。 ( F )字符数组的输出不能一次性的整体输出。 ( T )用scanf函数输入的字符串不可以带空格。 ( T )用gets函数输入的字符串可以带空格。

( F )实现两个字符串的复制可以使用str1=str2;语句。 ( T )使用strcpy函数可以实现两个字符串的复制。 ( T )使用strcat函数可以实现两个字符串的连接。

( F )使用strlen函数可以求出一个字符串的实际长度(包含‘\\0’字符)。 ( F )如有定义char a[]=”student”;则数组a的长度为7。

( F )如有定义char a[20];则可以通过a=“I am a boy”;给a赋值。 ( T )如有定义int a[2][3];则数组a的最后一个元素为a[1][2]。

( T )如有定义int a[3][4]={0}; 则数组a的所有元素初值均为0。

( F )C语言中数组名实质上是数组的首地址,是一个变量地址,可对其进行赋值。 ( F )构成数组的各个元素可以有不同的数据类型。

( F )若有说明:int a[10];,则可以a[10]引用数组a的第10个元素。

( T )引用数组元素时,其数组下标的数据类型允许的是:整型常量或整型表达式。 ( T )若有int a[10]={6,7,8,9,10};,则是将5个初值依次赋给a[0]至a[4]。

( T )一个一维数组,它的每一个元素也是类型相同的一维数组时,便构成二维数组。 ( T )在C语言中,允许用字符串来直接初始化字符数组。 ( F )字符数组的输出不能一次性的整体输出。

( F )使用strcat函数可以实现两个字符串的复制。 三、多选题

32

以下关于数组的描述中,正确的有:( )。 在定义数组时,有时可以将该数组的维数省略

数组名实质上是数组的首地址,是一个变量地址,可对其进行赋值 构成数组的各个元素可以有不同的数据类型

有定义:int a[3]; 则定义了a[0]、a[1]、a[2]三个数组元素 在程序中可以对数值数组中的数据进行整体使用 答案:AD

以下关于数组的描述中,错误的有:( )。

引用数组元素时,其数组下标的数据类型允许的是:整型常量或整型表达式 可以通过数组名来整体引用一个数组

在程序中可以对数值数组中的数据进行整体使用

若有说明:int a[10];,则可以a[10]引用数组a的第9个元素 若有说明:int a[10];,则可以a[10]引用数组a的第10个元素 答案:BCDE

以下关于数组的描述中,错误的有:( )。

可以通过如下语句来完成对一个数组的输入:int a[10]; scanf(\"%d\可以通过如下语句来完成对一个数组的输入:int a[10]; scanf(\"%d\若有int a[10]={6,7,8,9,10};,则是将5个初值依次赋给a[0]至a[4] 数组元素可以像普通变量一样使用 int a[9]; 则数组a的下标范围是1-9 答案:ABE

以下关于数组的描述中,正确的有:( )。

数组名实质上是数组的首地址,是一个常量,不能对其赋值 在定义数组时,有时可以将该数组的维数省略

一个一维数组,它的每一个元素也是类型相同的一维数组时,便构成二维数组 如有定义int a[3][4]={0}; 则数组a的所有元素初值均为0 可以通过数组名来整体引用一个数组 答案:ABCD

以下关于数组的描述中,错误的有:( )。

如有定义int a[2][3];则数组a的最后一个元素为a[1][2]

一个一维数组,它的每一个元素也是类型相同的一维数组时,便构成二维数组 若有说明:static int a[3][3]; 那么数组a中每个元素初值为0 在定义二维数组时,可以将该数组的两个维数全部省略 如有定义char a[20]; 则可以通过a=\"I am a boy\"; 给a赋值 答案:DE

若有说明:int a[][4]={0,0};,则下面正确的叙述有:( )。 数组a的每个元素都可得到初值0 二维数组a的第一维大小为1

因为二维数组a中初值的个数不能被第二维大小的值整除,则第一维的大小等于所得商数再加1,故数组a的行数为1

只有元素a[0][0]和a[0][1]可得到初值0,其余元素均得不到初值 只有元素a[1][1]和a[1][2]可得到初值0,其余元素均得不到初值 答案:ABC

以下关于数组的描述中,正确的有:( )。

33

若有定义char a[]=\"hello\";,则数组a的长度为6

有定义char a[3]; 则定义了a[1]、a[2]、a[3]三个数组元素 构成字符数组的各个元素必须是字符类型的数据 可以通过数组名来整体引用一个数组

设有数组定义char array [ ]=\"China\"; 则数组array所占的空间为5个字节 答案:AC

以下关于数组的描述中,正确的有:( )。

在C语言中,允许用字符串来直接初始化字符数组

若有定义char a[20];,则可以通过a=\"I am a boy\";给a赋值 若有char a[10]={1,2,3};,则是将3个初值依次赋给a[1]至a[3] 构成字符数组的各个元素必须是字符类型的数据

数组名实质上是数组的首地址,是一个常量,不能对其赋值 答案:ADE

以下关于数组的描述中,错误的有:( )。 字符数组的输出不能一次性的整体输出

若有char a[10]={1,2,3};,则是将3个初值依次赋给a[0]至a[2] 构成字符数组的各个元素可以是不同数据类型的元素 构成字符数组的各个元素必须是字符类型的数据 若有定义char b[]=\"hello\";,则数组b的长度为6 答案:AC

下列语句中,正确的有:( )。 char str[5]=\"hello\";

char str[]={'h','e','l','l','o','\\0'}; char str[5]={\"hi\char str[100]=\"\"; char str[3]=\"this\"; 答案:BCD

函数调用strcat(strcpy(str1,str2),str3)的功能,以下说法错误的有:( )。 将串str1复制到串str2中后在连接到串str3之后 将串str1连接到串str2之后再复制到串str3之后

将串str2复制到串str1中后再将串str3连接到串str1之后 将串str2连接到串str1中后再将串str1复制到串str3中 将串str2连接到串str1中后再将串str3复制到串str1中 答案:ABDE

以下关于数组的描述中,正确的有:( )。 在定义数组时,有时可以将该数组的维数省略 数组元素可以像普通变量一样使用

若有int a[10]={6,7,8,9,10};,则是将5个初值依次赋给a[0]至a[4] 如有定义char a[]=\"student\"; 则数组a的长度为7

若有定义double x[3][5]; 则x数组中行下标的下限为0,列小标的上限为4 答案:ABCE

定义了一维int型数组a[10]后,下面正确的引用有:( )。 a[0]=1; a[10]=2;

34

a[0]=5*2;

a[1]=a[2]*a[0]; a[2]=a[1]+a[0]; 答案:ACDE

第8章 函 数 一、选择题

若调用一个函数,且此函数中没有RERUrn语句,则关于该函数正确的说法是:( ) 没有返回值

返回若干个系统默认值

能返回一个用户所希望的函数值 返回一个不确定的值 答案:D

在c语言中以下不正确的说法是:( ) 实参可以是常量、变量、或表达式 形参可以是常量、变量或表达式 实参可以为任意类型

形参应与其对应的实参类型一致 答案:B

以下程序有语法性错误,有关错误原因的正确说法是:( ) main()

{ int G=5,k; void prt_char(); ……

k=prt_char(G); …… }

语句void prt_char();有错,它是函数调用语句,不能用void说明 变量名不能使用大写字母

函数说明和函数调用语句之间有矛盾 函数名不能使用下划线 答案:C

以下正确的说法是:( )

函数的定义可以嵌套,但函数的调用不可以嵌套 函数的定义不可以嵌套,但函数的调用可嵌套 函数的定义和调用均不可以嵌套 函数的定义和调用均可以嵌套 答案:B

若使用一个数组名作函数实参,则以下正确的说法是:( ) 必须在主调函数中说明此数组的大小 实参数组类型与形参数组类型可以不匹配 在被调用函数中,不需要考虑形参数组的大小 实参数组名与形参数组名必须一致

35

答案:A

在一个函数内部定义的变量是:( )

A、 简单变量 B、 局部变量 C、 全局变量 D、 标准变量 答案:B

若已定义的函数有返回值,则以下关于该函数调用的叙述中错误的是:( ) A)函数调用可以作为独立的语句存在 B)函数调用可以作为一个函数的实参 C)函数调用可以出现在表达式中

D)函数调用可以作为一个函数的形参 答案:D

已定义以下函数 fun(int*p) { return *p; }

该函数的返回值是:( )

A)不确定的值 B)形参p中存放的值 C)形参p所指存储单元中的值 D)形参p的地址值 答案:C

以下所列的各函数首部中,正确的是:( ) 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) 答案:C

当调用函数时,实参是一个数组名,则向函数传送的是:( ) A、 数组的长度 B、 数组的首地址

C、 数组每一个元素的地址 D、 数组每个元素中的值 答案:B

在调用函数时,如果实参是简单变量,它与对应形参之间的数据传递方式是:( A、 地址传递 B、 单向值传递

C、 由实参传给形参,再由形参传回实参 D、 传递方式由用户指定 答案:B

以下函数值的类型是:( ) fun ( float x ) { float y; y= 3*x-4; return y; }

A、 int B、 不确定 C、 void D、 float 答案:A

下列函数的功能是:( ) int fun1(chat* x) { char *y=x; while(*y++); return(y-x-1);

36

) }

A)求字符串的长度 B、比较两个字符串的大小

C、将字符串X复制到字符串Y D、将字符串X连接到字符串Y后面 答案:A

下面程序的输出结果是:( ) void prty(int * x)

{ printf(\"%d\\n\ main()

{ int a=25; prtv(&a); }

A、23 B、24 C、25 D、26 答案:D

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

A、只能把实参的值传送给形参,形参的值不能传送给实参 B、C函数既可以嵌套定义又可以递归调用 C、函数必须有返回值,否则不能使用函数 D、C程序中所有函数都可以嵌套调用 答案:A

以下叙述中不正确的是:( )

A)在C中,函数体中定义的动态变量可以赋初值,每调用一次,赋一次初值. B、 在C中,函数体中定义的静态变量可以赋初值,每调用一次,赋一次初值. C、 在C中,局部变量的隐含类别是自动存储类别.

D)在C中,在调用函数时,实在参数和对应形参在类型上只需赋值兼容. 答案:B

以下叙述中不正确的是:( )

在不同的函数中可以使用相同名字的变量 函数中的形式参数是局部变量

在一个函数内定义的变量只在本函数范围内有效

D)在一个函数内的复合语句中定义的变量在本函数范围内有效 答案:D 有以下程序

void fun (int a,int b,int c) { a=456; b=567; c=678;} main()

{ int x=10, y=20,z=30; fun (x,y,z);

printf(\"%d,/%d,%d\\n\ }

输出结果是:( )

A、30,20,10 B、10,20,30 C、456,567,678 D、678,567,456 答案:B

有以下程序 ( )

int fun(int x,int y,int *cp,int *dp) { *cp=x+y; *dp=x-y; } main()

37

{ int a, b, c, d; a=30; b=50; fun(a,b,&c,&d);

printf(\"%d,%d\\n\ }

输出结果是:( )

A、50,30 B、30,J50 C、80,-20 D、80,20 答案:C

下列程序执行后的输出结果是 ( )。 void func(int *a,int b[]) { b[0]=*a+6; } main()

{ int a,b[5]; a=0; b[0]=3;

func(&a,b); printf(“%d \\n”,b[0]); }

A、 6 B、 7 C、 8 答案:A

一个完整的可运行的C源程序中,( )。 A、 可以有一个或多个函数 B、 必须有且仅有一个主函数 C、 可以没有主函数

D、 必须有主函数和其他函数 答案:B

下述函数定义形式正确的是( )。 A、 int f(int x; int y) B、 int f(int x,y) C、 int f(int x, int y) D、 int f(x,y: int) 答案:C

关于函数参数,说法正确的是( )。

A、 实参与其对应的形参各自占用独立的内存单元 B、 实参与其对应的形参共同占用一个内存单元

C、 只有当实参和形参同名时才占用同一个内存单元 D、 形参是虚拟的,不占用内存单元 答案:A

一个函数的返回值由( )确定。 A、 return语句中的表达式 B、 调用函数的类型 C、 系统默认的类型 D、 被调用函数的类型 答案:D

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

A、 C语言程序总是从第一个定义的函数开始执行

B、 在C语言程序中,要调用的函数必须在main()函数中定义 C、 C语言程序总是从main()函数开始执行

D、 C语言程序中的main()函数必须放在程序的开始部分 答案:C

38

D、 9 以下函数 fff(float x) { printf(“%d\\n”,x*x); }

的类型是( )。

A、 与参数x的类型相同 B、 void类型 C、 int类型 D、 无法确定 答案:C

以下对C语言函数的描述中,正确的是( )。 A、 C程序由一个或一个以上的函数组成 B、 C函数既可以嵌套定义又可以递归调用 C、 函数必须有返回值,否则不能使用函数

D、 C程序中调用关系的所有函数必须放在同一个程序文件中 答案:A

以下叙述中不正确的是( )。

A、 在C语言中,调用函数时,只能把实参的值传送给形参,形参的值不能传送给实参 B、 在C的函数中,最好使用全局变量

C、 在C语言中,形式参数只是局限于所在函数 D、 在C语言中,函数名的存储类别为外部 答案:B

在一个源文件中定义的外部变量的作用域为( )。 A、 本文件的全部范围 B、 本程序的全部范围 C、 本函数的全部范围

D、 定义该变量的位置开始至本文件结束 答案:B

有以下函数调用语句:

func((exp1,exp2),(exp3,exp4,exp5)); 其中含有的实参个数和是( )。 A、 1 B、 2 C、 4 D、 5 答案:B

C语言中形参的默认存储类别是( )。 A、 自动(auto) B、 静态(static) C、 寄存器(register) D、 外部(extern) 答案:A

以下正确的函数形式是( )。 A、 double fun(int x,int y) { z=x+y; return z; } B、 fun(int x,y) { int z; return z; } C、 fun(x,y)

{ int x,y; double z; z=x+y; return z; } D、 double fun(int x,int y)

39

{ double z; z=x+y; return z; } 答案:D

在一个源程序文件中定义的全局变量的有效范围为( )。 A、 一个C程序的所有源程序文件 B、 该源程序文件的全部范围

C、 从定义处开始到该源程序文件结束 D、 函数内全部范围 答案:C

下列函数中,能够从键盘上获得一个字符数据的函数是( )。 A、 puts( ) B、 putchar( ) C、 getchar( ) 答案:C

以下程序的输出结果是( )。 fun(int a,int b,int c) { c=a+b; }

main() { int c; fun(2,3,c); printf(“%d\\n”,c); }

A、 2 B、 3 C、 5 答案:D

分析以下程序的运行结果( )。 func(int a,int b) { int temp=a; a=b; b=temp; }

main() { int x,y; x=10; y=20; func(x,y);

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

A、 10,20 B、 10,10 C、 20,10 答案:A

下面程序的输出是( )。 fun(int x) {

static int a=3; a+=x;

40

D、 gets( ) D、D、 20,20 无定值 return(a); }

main() { int k=2,m=1,n; n=fun(k); n=fun(m); printf(“%d”,n); }

A、 3 B、 4 C、 答案:C

以下程序输出的结果是( int func(int a,int b) {

return(a+b); }

main() {

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

A、 12 B、 13 C、 答案:D

以下程序的输出结果是( int a,b void fun() {

a=100; b=200; }

main() {

int a=5,b =7; fun(); printf(“%d%d \\n”,a,b); A、 100200 B、 57 C、 200100 D、 75 答案:B

以下程序的输出结果是( int x=3; main() { int i; for(i=1;i6 D、 9

。 14 D、 15

。 。 41

) ) ) incre(); }

incre() {

static int x=1; x*=x+1; printf(“%d”,x); }

A、 33 B、 22 C、 26 D、 25 答案:C

二、判断题

( F ) 函数定义void max(int a,int b)表示该函数的返回值不确定。 ( T )在C语言中,函数体中变量的隐含存储类别是自动变量auto。 ( F )return语句作为函数的出口,在一个函数体内只能有一个。 ( T )在C程序中,函数不能嵌套定义,但可以嵌套调用。 ( F ) C语言的源程序中必须包含库函数。 ( F )在C程序中,函数调用不能出现在表达式语句中。 ( F )在C函数中,形参可以是变量、常量或表达式。 ( F )在主函数main( )中定义的变量都可以在其它被调函数中直接使用。

( T )在C语言中,一个函数一般由两个部分组成,它们是函数说明和函数体。 ( F )C语言程序中的main( )函数必须放在程序的开始部分。 ( F )若定义的函数没有参数,则函数名后的圆括号可以省略。 ( T )函数的函数体可以是空语句。

( T )函数的实参和形参可以是相同的名字。

( T )函数调用中,形参与实参的类型和个数必须保持一致。

( F )C语言中函数返回值的类型由return语句中的表达式的类型决定。 ( T )外部类型的变量只能定义一次,但可在不同地方声明多次。 ( F )外部类型的变量作用范围大,编程中应多用外部变量。 三、多选题

以下叙述中正确的有( )。

一个C语言程序有且仅有一个main函数 C语言程序中,main函数是没有参数的

一个函数通过其他函数间接的调用了自身,这种情况也是一种递归调用 main函数是由系统调用的

若要通过函数参数带回多个返回值,则应使用按地址传送的参数结合方式 答案:ACDE

下面叙述中,正确的有( )。

函数的定义不能嵌套,但函数调用可以嵌套 为了提高可读性,编写程序时应该适当使用注释

变量定义时若省去了存储类型,系统将默认其为静态型变量 函数中定义的局部变量的作用域在函数内部 函数必须有返回值,否则不能使用函数

42

答案:ABD

以下不正确的说法有( )。

定义函数时,形参的类型说明可以放在函数体内 return后边的值不能为表达式

函数返回值的类型可能会与函数的计算结果类型不一致 在不同的函数中可以使用相同名字的变量

如果形参与实参的类型顺序不一致,以实参顺序为准 答案:ABE

以下叙述中,正确的描述是有( )。

函数之内定义的变量称为内部变量,内部变量是全局变量

在一个函数中既可以使用本函数中的局部变量,又可以使用外部变量 外部变量定义和外部变量说明的含义不同 外部变量与局部变量的作用范围不同 在C的函数中,最好使用全局变量 答案:BCD

以下正确的说法有( )。 C语言程序的基本组成单位是函数 函数必须要有返回值

一个函数的类型为void,在定义时,可以省略void 函数声明是一条C语句 return语句只能返回一个值 答案:ADE

以下叙述中正确的有( )。

调用函数时,只能把实参的值传送给形参,形参的值不能传送给实参 函数的实参可以是常量、变量和表达式 形式参数只是局限于所在函数

函数定义时的函数首部不是语句,后面不能跟分号 函数名的存储类别为外部 答案:ABCDE

以下对C语言函数的有关描述中,正确的有( )。 调用函数时,实参与形参应该数量相同,类型一致 函数可以嵌套定义

函数必须有返回值,否则不能正确使用

程序中有调用关系的所有函数必须放在同一个源程序文件中 C程序由一个或一个以上的函数组成 答案:AE

以下对C语言函数的有关描述中,正确的有( )。 在C程序中,函数调用不能出现在表达式语句中

在C语言中,一个函数一般由两个部分组成,它们是函数说明和函数体 函数的实参和形参可以是相同的名字

在main()中定义的变量都可以在其它被调函数中直接使用 外部类型的变量只能定义一次,但可在不同地方声明多次 答案:BCE

一个数据类型为void的函数在被调用后,下列错误的描述有( )。

43

A、 函数没有返回值 B、 函数可以返回一个系统默认值 C、 函数返回值由用户临时决定 D、 函数可以返回一个不确定的值 答案:BCD

下列函数中,能够输出字符数据的函数有( )。

A、 puts( ) B、 printf( ) C、 scanf( ) D、 putchar( ) E、 put( ) 答案:ABD

第9章 编译预处理 选择题

1、若有宏定义“#define PI =3.14159 ”,且在程序中有语句 s +PI; 其中宏名PI代替的是:( )

A、PI的值 B、3.14159 C、=3.14159 D、宏定义错误,编译通不过

答案:C

2、设有以下宏定义:#define N 3

#define Y(n) ((N+1)*n) 执行语句z=2*(N+Y(5+1));后,z的值为:( )

A、出错 B、42 C、48 D、54 答案:C

3、以下说法正确的是:( ) A、#define和printf都是C语句

B、#define 是C语句,而printf不是 C、printf是C语句,但#define不是 D、#define 和printf都不是C语句 答案:C

4、编译预处理命令以___________结尾。

A、 ; B、 . C、 \\ D、回车 答案:D

5、用C语言编写的程序是一种_________能运行的程序。 A、只需要经过编译就 B、只需要经过连接就 C、需要经过编译和连接才 D、不需要作任何处理就 答案:D

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

A、 用#include包含的头文件的后缀不可以是“.a”

B、 若一些源程序中包含某个头文件,当该头文件有错时,只需对该头文件进行修改,包含此头文件的所有源程序不必重新进行编译 C、 宏命令行可以看做是一行C语句

D、 C编译中的预处理是在编译之前进行的 答案:D

7、下面是对宏定义的描述,不正确的是( )。

A、 宏不存在类型问题,宏名无类型,它的参数也无类型 B、 宏替换不占用运行时间

C、 宏替换时先求出实参表达式的值,然后代入形参运算求值

44

D、 其实,宏替换只不过是字符替代而已 答案:C

8、以下正确的描述为( )。

A、 每个C 语言程序必须在开头使用预处理命令#include B、 预处理命令必须位于C源程序的首部 C、 在C语言中预处理命令都以“#”开头

D、 C语言的预处理命令只能实现宏定义和条件编译的功能 答案:C

9、下列选项中不会引起二义性的宏定义是( )。 A、 #define POWER(x) x*x B、 #define POWER(x) (x)*(x) C、 #define POWER(x) (x*x) D、 #define POWER(x) ((x)*(x)) 答案:D

10、以下程序的输出结果是( )。 #define f(x) x*x #include main() {

int a=6,b=2,c; c=f(a)/f(b); printf(“%d\\n”,c); }

A、 9 B、 6 C、 36 D、18 答案:C

11、以下程序运行后,输出结果是( )。 #define PT 5.5

#defme S(x) PT*x*x #include main() {

int a=1,b=2; printf(“%4.1f\\n”,S(a+b)); }

A、 49.5 B、 9.5 C、22.0 D、45.0 答案:B

12、下列程序执行后的输出结果是( )。 #define MA(x) x*(x-1) #include main() {

int a=1,b=2; printf(“%d\\n”,MA(1+a+b)); }

A、 6 B、 8 C、 10 D、12 答案:B

45

13、以下程序的输出结果为( )。 #include #define SQR(x) x*x main() { int a,k=3; a=++SQR(k+1); printf(“%d\\n”,a); } A、6 B、l0 C、 8 D、 9 答案:D

14、对下面程序段,正确的判断是( )。 #define A 3

#define B(a) ((A+1)*a) ...

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

A、 程序错误,不许嵌套宏定义 B、 x=93 C、 x=21 D、 程序错误,宏定义不许有参数. 答案:B

15、以下程序的输出结果为( )。 #include #define F(y) 3.84+y

#define PRINT(a) PR(a);putchar(‘\\n’) main() { int x=2; PRINT(F(3)*x); }

A、 8 B、 9 C、 10 D、 11 答案:B

二、判断题

( F )预处理命令行必须以#开头,且最后要用分号结尾。 ( T )宏命令的处理占用编译时间,而不占用运行时间。 三、多选题

下面是对宏定义的描述,正确的有( )。

A、 宏不存在类型问题,宏名无类型,它的参数也无类型 B、 宏替换不占用运行时间

C、 宏替换时先求出实参表达式的值,然后代入形参运算求值 D、 预处理命令行必须以#开头,且最后要用分号结尾 E、 宏命令的处理占用编译时间,而不占用运行时间 答案:ABE

以下叙述中不正确的是( )。

A、 用#include包含的头文件的后缀不可以是“.a”

46

B、 宏不存在类型问题,宏名无类型,它的参数也无类型 C、 宏命令行可以看做是一行C语句

D、 C编译中的预处理是在编译之前进行的 E、 在C语言中预处理命令都以“#”开头 答案:AC

第10章 指 针 选择题

1、 有以下程序

void fun(char *a, char *b) { a=b; (*a)++; } main()

{ char c1='A',c2='a',*p1,*p2; p1=&c1; p2=&c2; fun(p1,p2); printf(\"%c%c\\n\}

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

A)Ab B)aa C)Aa D)Bb 答案:A

2、 下列选项中正确的语句组是:( )

A)char s[8]; s={\"Beijing\ B)char *s; s={\"Beijing\C)char s[8]; s=\"Beijing\"; D)char *s; s=\"Beijing\"; 答案:D

3、 已定义以下函数 fun(int *p) { return *p; }

该函数的返回值是:( )

A)不确定的值 B)形参p中存放的值 C)形参p所指存储单元中的值 D)形参p的地址值 答案:C

4、 若有定义:int *p[3];,5、 则以下叙述中正确的是:( ) A)定义了一个类型为int的指针变量p,该变量具有三个指针

B)定义了一个指针数组p,该数组含有三个元素,每个元素都是基类型为int的指针 C)定义了一个名为*p的整型数组,该数组含有三个int类型元素

D)定义了一个可指向一维数组的指针变量p,所指一维数组应具有三个int类型元素 答案:B

6、 已定义以下函数 fun(char *p2, char *p1)

{ while((*p2=*p1)!='\\0'){ p1++;p2++; } } 函数的功能是:( )

A)将p1所指字符串复制到p2所指内存空间 B)将p1所指字符串的地址赋给指针p2

C)对p1和p2两个指针所指字符串进行比较

D)检查p1和p2两个指针所指字符串中是否有'\\0'

47

答案:A

7、 有以下程序: main()

{ int p[7]={11,13,14,15,16,17,18},i=0,k=0; while(i<7&&*(p+i)%2) {k=k+*(p+i); i++;} printf(\"%d\\n\}

执行后输出的结果是:( )

A) 58 B) 56 C) 45 D) 24 答案:D

8、 若有如下定义char a[10],*p=a,9、 则对a数组中元素的不10、( )

A)*&a[5] B)a+2 C)*(p+5) D)*(a+5) 答案:B 11、 有以下程序 int *f(int *x,int *y) { if(*x<*y) return x; else return y; }

main()

{ int a=7,b=8,*p,*q,*r; p=&a; q=&b; r=f(p,q);

printf(\"%d,%d,%d\\n\}

执行后输出结果是:( )

A) 7,8,8 B) 7,8,7 C) 8,7,7 D) 8,7,8 答案:B 12、 有以下程序 main()

{ char *s[]={\"one\p=s[1];

printf(\"%c,%s\\n\}

执行后输出结果是:( )

A) n,two B) t,one C) w,one D) o,two 答案:C 13、 有以下程序 main()

{ int x[8]={8,7,6,5,0,0}, *s; s=x+3;

printf(\"%d\\n\

48

正确的引用是:

}

执行后输出结果是:( )

A) 随机值 B) 0 C) 5 D) 6 答案:B 14、 以下函数的功能是:通过键盘输入数据,15、 为数组中的所有元素赋值。 #define N 10

void arrin(int x[N]) { int i=0; while(iscanf(\"%d\}

在下划线处应填入的是:( )

A) x+i B) &x[i+1] C) x+(i++) D) &x[++i] 答案:A 16、 有以下程序 main()

{ char *s=\"\\n123\\\\\";

printf(\"%d,%d\\n\}

执行后输出结果是:( )

A) 5,4 B) 5,6 C) 6,7 D) 7,8 答案:A 17、 阅读以下函数 fun(char *sl,char *s2) { int i=0;

while( sl[i]==s2[i] && s2[i]!='\\0') i++; return( sl[i]=='\\0' && s2[i]=='\\0' ); }

此函数的功能是:( ) A) 将s2所指字符串赋给s1

B) 比较s1和s2所指字符串的大小,若s1比s2的大,函数值为1,否则函数值为0 C) 比较s1和s2所指字符串是否相等,若相等,函数值为1,否则函数值为0

D) 比较s1和s2所指字符串的长度,若s1比s2的长,函数值为1,否则函数值为0 答案:C 18、 有以下程序 main()

{ char str[ ]=\"xyz\while(*ps) ps++;

for(ps--;ps-str>=0;ps--) puts(ps);} 执行后输出结果是:( )

A) yz B) z C) z D) x xyz yz yz xy xyz xyz 答案:C

49

19、 有以下程序 void fun(int *a,int i,int j) { int t; if (i{ t=a[i];a[i]=a[j];a[j]=t; fun(a,++i,--j); }

main()

{ int a[]={1,2,3,4,5,6},i; fun(a,0,5);

for(i=0;i<6;i++) rintf(\"%d\}

执行后输出结果是:( )

A) 6 5 4 3 2 1 B) 4 3 2 1 5 6 C) 4 5 6 1 2 3 D) 1 2 3 4 5 6 答案:A 20、 下列程序的输出结果是:( ) main()

{ char a[10]={9,8,7,6,5,4,3,2,1,0},*p=a+5; printf(\"%d\}

A) 非法 B)a[4]的地址 C)5 答案:C 21、 下列程序的运行结果是:( ) void fun(int *a, int *b) { int *k; k=a; a=b; b=k; }

main()

{ int a=3, b=6, *x=&a, *y=&b; fun(x,y);

printf(\"%d %d\}

A) 6 3 B) 3 6 C) 0 0 答案:B 22、 下面程序的输出结果是:( ) main()

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

printf(\"%d\\n\}

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

50

D)3 D)编译出错 答案:C 23、 以下程序的输出结果是:( ) main()

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

A) 1,5,9 B) 1,4,7 C) 3,5,7 D)3,6,9 答案:C 24、 以下程序的输出结果是:( ) main()

{ int a[3][3]={ {1,2},{3,4},{5,6} },i,j,s=0; for(i=1;i<3;i++) for(j=0;j<=i;j++) s+=a[i][j];

printf(\"%d\\n\}

A) 18 B) 19 C) 20 D)21 答案:A 25、 若有说明:int i, j=2,26、 *p=&i;,27、 则能完成i=j赋值功能的语句是:(A) i = *p; B) *p = *&j; C) i = &j; D) i = **p; 答案:B 28、 以下定义语句中,29、 错误的是:( ) A) int a[]={1,2}; B) char *a[3]; C) char s[10]=\"test\"; D) int n=5,a[n]; 答案:D 30、 以下程序的输出结果是:( ) char cchar(char ch) {

if(ch>='A'&&ch<='Z') ch=ch-'A'+'a'; return ch; }

main()

{ char s[]=\"ABC+abc=defDEF\while(*p)

{ *p=cchar(*p); p++; }

printf(\"%s\\n\}

A) abc+ABC=DEFdef B) abc+abc=defdef C) abcaABCDEFdef D) abcabcdefdef 答案:B 31、 以下程序段的输出结果是:( ) char s[]=\"\\\\141\\141abc\\";

51

) printf (\"%d\\n\

A) 9 B) 12 C) 13 D) 14 答案:A 32、 以下程序调用findmax函数返回数组中的最大值。 findmax(int *a,int n) { int *p,*s;

for(p=a,s=a; p-amain()

{ int x[5]={12,21,13,6,18}; printf(\"%d\\n\}

在下划线处应填入的是:( )

A) p>s B) *p>*s C) a[p]>a[s] D) p-a>p-s 答案:B 33、 以下程序的输出结果是:( ) main()

{ char cf[3][5]={\"AAAA\printf(\"\\\"%s\\\"\\n\}

A) \"AAAA\" B) \"BBB\" C) \"BBBCC\" D) \"CC\" 答案:B 34、 以下不35、 能正确进行字符串赋初值的语句是:(A) char str[5]=\"good!\"; B) char str[]=\"good!\";

C) char *str=\"good!\"; D) char str[5]={'g','o','o','d'}; 答案:D 36、 以下程序的输出结果是:( ) f(int *b , int m, int n) { int i,s=0;

for(i=m;imain()

{ int x,a[]={1,2,3,4,5,6,7,8,9}; x=f(a,3,7);

printf(\"%d\\n\}

A) 10 B)18 C) 8 D) 15 答案:A 37、 以下程序的输出结果是:( ) #include #include

52

) main()

{ char b1[8]=\"abcdefg\while (--pb>=b1) strcpy(b2,pb); printf(\"%d\\n\}

A) 8 B) 3 C) 1 D) 7 答案:D 38、 若有说明:int n=2,*p=&n,*q=p;,39、 则以下非法的赋值语句是:( ) A) p=q; B) *p=*q; C) n=*q; D) p=n; 答案:D 40、 有以下程序 void fun(char *c,intd) { *c=*c+1;d=d+1; printf(\"%c,%c,\ }

main()

{ char a='A',b='a';

fun(&b,a); printf(\"%c,%c\\n\ }

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

A) B,a,B,a B) a,B,a,B C) A,b,A,b D) b,B,A,b 答案:D 41、 以下程序中函数sort的功能是对a所指42、 数组中的数据进行由大到小的排序 ,

void sort(int a[],int n) { int i,j,t;

for(i=0;i{ t=a[i];a[i]=a[j];a[j]=t; } }

main()

{ int aa[10]={1,2,3,4,5,6,7,8,9,10},i; sort(&aa[3],5);

for(i=0;i<10;i++) printf(\"%d,\ printf(\"\\n\"); }

程序运行后的输出结果是:( ) A) 1,2,3,4,5,6,7,8,9,10, B) 10,9,8,7,6,5,4,3,2,1, C) 1,2,3,8,7,6,5,4,9,10, D) 1,2,10,9,8,7,6,5,4,3, 答案:C 43、 有以下程序

53

main()

{ char a[]={'a','b','c','d','e','f','g','h','\\0'}; int i,j; i=sizeof(a); j=strlen(a); printf(\"%d,%d\\n\ }

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

A) 9,9 B) 8,9 C) 1,8 D) 9,8 答案:D 44、 以下程序中的函数reverse的功能是将a所指45、 数组中的内容进行逆置。 void reverse(int a[],int n) { int i,t;

for(i=0;i{ t=a[i];a[i]=a[n-1-i];a[n-1-i]=t; } }

main()

{ int b[10]={1,2,3,4,5,6,7,8,9,10}; int i,s=0; reverse(b,8);

for(i=6;i<10;i++) s+=b[i]; printf(\"%d\\n\ }

程序运行后的输出结果是:( ) A) 22 B) 10 C) 34 D) 30 答案:A 46、 有以下程序 main()

{ int aa[4][4]={{1,2,3,4},{5,6,7,8},{3,9,10,2},{4,2,9,6}}; int i,s=0;

for(i=0;i<4;i++) s+=aa[i][1]; printf(\"%d\\n\ }

程序运行后的输出结果是:( ) A) 11 B) 19 C) 13 D) 20 答案:B 47、 有以下程序 #include main()

{ char *p=\"abcde\\0fghjik\\0\"; printf(\"%d\\n\ }

程序运行后的输出结果是:( ) A) 12 B) 15 C) 6 D) 5 答案:D 48、 有以下程序 void ss(char *s,char t)

54

{ while(*s)

{ if(*s==t) *s=t-'a'+'A'; s++; } }

main()

{ char str1[100]=\"abcddfefdbd\ ss(str1, C); printf(\"%s\\n\ }

程序运行后的输出结果是:( ) A) ABCDDEFEDBD B) abcDDfefDbD C) abcAAfefAbA D) Abcddfefdbd 答案:B

38. 变量的指针,其含义是指该变量的______. a)值 b)地址 c)名 d)一个标志 答案:B

39.若有语句int *point,a=4;和point=&a;下面均代表地址的一组选项是_______. a)a,point,*&a b)&*a,&a,*point c)*&point,*point,&a d)&a,&*point ,point 答案:D

40.若有说明;int *p,m=5,n;以下正确的程序段的是____. a)p=&n; b)p=&n;

scanf(\"%d\c)scanf(\"%d\ *p=n;?? *p=m; 答案: D

41.下面程序段的运行结果是_______. char *s=\"abcde\"; s+=2;printf(\"%d\

a)cde b)字符'c' c)字符'c'的地址 d)无确定的输出结果 答案:D

42.设p1和p2是指向同一个字符串的指针变量,c为字符变量,则以下不能正确 执行的赋值语句是______.

a)c=*p1+*p2; b)p2=c c)p1=p2 d)c=*p1*(*p2); 答案:B?

43.以下正确的程序段是______.

55

a)char str[20];? b)char *p; scanf(\"%s\

c)char str[20];? d)char str[20],*p=str; scanf(\"%s\答案:A

44.若有说明语句

char a[]=\"It is mine\"; char *p=\"It is mine\";

则以下不正确的叙述是_____. a)a+1表示的是字符t的地址

b)p指向另外的字符串时,字符串的长度不受限制 c)p变量中存放的地址值可以改变 d)a中只能存放10个字符 答案:D

45.下面程序的运行结果是____. #include? #include main() {

char *s1=\"AbDeG\"; char *s2=\"AbdEg\"; s1+=2;s2+=2;

printf(\"%d\\n\}

a)正数 b)负数?? c)零?? d)不确定的值 答案: B

46.下面程序的运行结果是___. #include? #include? fun(char *w,int n) {char t,*s1,*s2; s1=w;s2=w+n-1;

while(s1main() {char *p;

p=\"1234567\"; fun(p,strlen(p)); puts(p); }

a)7654321 b)1714171 c)1711717 d)7177171

56

答案:C

47.若有以下定义,则对a数组元素的正确引用是______. int a[5],*p=a;

a)*&a[5] b)a+2? c)*(p+5)? d)*(a+2) 答案:D

48.若有定义:int a[2][3],则对a数组的第i行j列元素地址的正确引用为_____ a)*(a[i]+j) b)(a+i) c)*(a+j)? d)a[i]+j 答案:D

49.若有以下定义,则p+5表示___. int? a[10],*p=a;

a)元素a[5]的地址 b)元素a[5]的值 c)元素a[6]的地址 d)元素a[6]的值 答案:A

50. 以下程序的输出结果是________. #include void fun(int x); int main() { int x = 3; fun(x); printf(“x = %d\\n”, x); }

void fun(int x) { x = 5; }

A) 3 B) 5 C) 8 D) 2 答案:A

51. 以下程序的输出结果是________. #include void fun(int *p); int main() { int x = 3; fun(&x); printf(“x = %d\\n”, x); }

void fun(int *p) { *p = 5;

57

}

A) 3 B) 5 C) 8 D) 2 答案:B

52. 以下count函数的功能是统计substr在母串str中出现的次数。 int count(char *str,char *substr) { int i,j,k,num=0; for(i=0; ① ;i++)

{for( ② ,k=0;substr[k]==str[j];k++,j++) if(substr[ ③ ]==’\\0’) {num++;break;} }

return num; }

① A) str[i]==substr[i] B) str[i]!=‘\\0’ C) str[i]==‘\\0’ D) str[i]>substr[i] 答案:B

② A) j=i+1 B) j=i C) j=i+10 D) j=1 答案:B

③ A) k B) k++ C) k+1 D) ++k 答案:C

53. 以下Delblank函数的功能是删除字符串s中的所有空格(包括Tab、回车符和换行符)。 void Delblank(char *s) { int i,t; char c[80];

for(i=0,t=0; ① ;i++)

if(!isspace( ② ))c[t++]=s[i]; c[t]=‘\\0’; strcpy(s,c); }

① A) s[i] B) !s[i] C) s[i]=‘\\0’ D) s[i]==‘\\0’ 答案:B

② A) s+i B) *c[i] C) *(s+i)=‘\\0’ D) *(s+i) 答案:D

54. 以下conj函数的功能是将两个字符串s和t连接起来。 char *conj(char *s,char *t) { char *p=s; while(*s) ① ; while(*t)

{*s= ② ;s++;t++;} *s=‘\\0’;

③ ; }

58

① A) s-- B) s++ C) s D) *s 答案:B

② A) *t B) t C) t-- D) *t++ 答案:A

③ A) return s B) return t C) return p D) return p-t 答案:C

55. 下列程序的输出结果是 。 #include main()

{int **k,*a,b=100;a=&b; k=&a;printf(“%d\\n”,**k);}

A) 运行出错 B) 100 C) a的地址 D) b的地址 答案:B

56. 下列程序的输出结果是 。 #include fun(int *a,int *b)

{int *w;*a=*a+*a;*w=*a; *a=*b; *b=*w;} main()

{int x=9,y=5,*px=&x,*py=&y;fun(px,py);printf(“%d, %d\\n”,x,y);} A)出错 B) 18, 5 C) 5, 9 D) 5, 18 答案:A

57. 若定义了以下函数: void f(……) {……

p=(double *)malloc(10*sizeof(double)); …… }

p是该函数的形参,要求通过p把动态分配存储单元的地址传回主调函数,则形参p的正确定义应当是 。 A) double *p B) float **p C) double **p D) float *p 答案:C 二、判断题

1.(F)指针变量里存放的是地址值,因此指针变量只能是int型的。 2.(T)在C语言中,所谓指针型数据,即指该数据是一个地址。 3.(T)有一个一维数组a[10],那么a与&a[0]等价。

4.(F)如有说明:int b[10], *p = b;表明在使用时b与p就完全等价了。

5.(T)数组中的每一个元素相当于一个变量。若要让一个指针变量指向它,必须用“&数组元素”的方法向该指针变量赋值。

6.(F)有如下程序段:int i, j = 2, k, *p = &i;k = *p + j;这里出现的两个“*”号,含义是一样的。

7.(F)在C语言中,每一个变量在内存里占用的单元数都是相同的。 8.(T)通过指针变量,就能间接地得到它所指向的变量的内容。

9.(T)说明语句:int *p, p1, p2;只说明了一个能指向int型变量的指针。

10.(F)有说明:int *p;且p指向地址为1500的内存单元,那么经过操作“p++;”后,p将指向1501的内存单元。

59

11.(F)数组元素可以是不同数据类型的。

12.(F)如果初值表中的初值个数少于数组长度,那么C语言编译程序会自动把剩余的元素初始化为初值表中的最后一个值。 13.主调函数把单个数组元素传递给修改该元素值的被调函数时,主调函数就能够得到修改后的值。(F)

14.(T)设p是指向数组a的指针变量,则a[i]和p[i]等价。 15.(T)一个变量的指针就是该变量的地址。

16.(F)若定义int **p;则程序中调用*p时,它代表的是p的地址。

17.(F)若指针占用的内存大小为2Byte,则指向它的二重指针占用内存大小为4Byte . 18.(F)带参main函数中的形参的值可以在程序中得到。

19.(F)main(argc,argv)中的参数argv的定义格式为char argv[]。 20.(F)int **p;表示定义一个*p指针变量。

21.(F)在C语言中允许将一个整数赋给指针变量。

22.(F)一个指针变量加1表示将该指针变量的原值(地址)加1。 23.(F)int *p();表示定义一个指向函数的指针变量p。

24.(F)当函数实参中使用指针变量时,形参变量也必须使用指针变量。 25.(F)*p++等价于(*p)++。

26.(F)使用指针技术,可以通过修改形参变量的值达到修改实参变量的值的目的。。

27.(F)因为用字符数组和字符指针变量都能实现字符串的存储和运算,因此它们二者是完全等价的。

28.(T)对指向函数的指针变量,像p+n、p++、p- -等运算是无意义的。 29.(T)main(int argc,char *argv[])中的参数argc表示命令行只参数的个数。 30.(T)在int a[3][4];中a+i和*(a+i)的含义是不一样的。

31.(F)char *p[10];定义了一个指向字符数组的指针变量。

32.(F)将指向函数的指针作为函数的参数,虽然可以提高效率,但是容易造成混乱,所以不符合结构化程序设计的原则。

33.(F)数组名实际上是此数组的首地址,所以数组名相当于一个指针变量。 34.(F)若定义数组a[2][3],则a+1和*(a+1)完全等价。

35.(T)函数的形参为一个数组,则调用此函数时将数组名作为对应的实参。

第11章 结构与联合 一、单选题 下列关于结构的说法错误的是:( ) A:结构是由用户自定义的一种数据类型 B:结构中可设定若干个不同数据类型的成员

C:结构中成员的数据类型可以是另一个已定义的结构 D:在定义结构时,可以对成员进行初始化 答案:D 以下关于结构体的叙述中,错误的是:( ) A:结构体是一种可由用户构造的数据类型 B:结构体中的成员可以具有不同的数据类型 C:结构体中的成员不可以与结构体变量同名 D:结构体中的成员可以是数组

60

答案:C 以下结构体类型说明及结构体变量a,b的定义中,正确的是:( ) A:struct ss B:struct ss { char flag; { char flag; float x; float x; } ; }; ss a,b; struct ss a,b; C:struct D:struct { char flag; { char flag; float x; float x; }ss;; }ss;

ss a,b; struct ss a,b;

答案:B 设有以下说明语句: struct stu { int a;

float b; }stutype;

则下面的叙述不正确的是:( ) A:struct是结构体类型的关键字

B:struct stu是用户定义的结构体类型名 C:stutype是用户定义的结构体类型名 D:a和b都是结构体成员名 答案:C 在16位IBM-PC机上使用C语言时,若有如下定义: struct data { long i;

char ch; double f; }b;

则结构变量b占用内存的字节数是:( )

A:4 B:8 C:12 D:答案:D 下面程序的运行结果是:( ) main( )

{ struct cmplx { int x; int y; }c[2]={1,3,2,7};

printf(\"%d\}

A:0 B:1 C:3 D:6 答案:D

61

13 若有以下说明和语句,则对pup中sex域的正确引用方式是:( ) struct pupil

{ char name[20]; int sex; }pup,*p; p=&pup;

A:p.pup.sex B:p->pup.sex C:(*p).pup.sex D:(*p).sex 答案:D

当定义一个结构体变量时系统分配给它的内存是:( )

A:各成员所需内存量的总和 B:成员中占内存量最大者所需的容量 C:结构中第一个成员所需内存量 D:结构中最后一个成员所需内存量 答案:A

若有以下说明和语句,则下面表达式中值为1002的是:( ) struct student { int age; int num; };

struct student stu[3]={ {1001,20},{1002,19},{1003,21} }; struct student *p; p=stu;

A:(p++)->num B:(p++)->age C:(*p).num D:(*++p).age 答案:D 当说明一个共用体变量时,系统分配给它的内存是:( ) A:各成员所需内存量的总和

B:共用体中第一个成员所需内存量 C:成员中占内存量最大者所需的内存量 D:共用体中最后一个成员所需内存量 答案:C 以下对C语言中共用体类型数据的叙述正确的是:( ) A:可以对共用体变量名直接赋值

B:一个共用体变量中可以同时存放所有成员 C:一个共用体变量中不能同时存放其所有成员 D:共用体类型定义中不能出现结构体类型的成员 答案:C 若有以下定义和语句: union data { int i; char c; float f; }a;

则以下语句正确的是:( )

62

A:a=5 B:printf(\"%d\\n\ C:a={2,'a',1.2}; D:n=a 答案:B 下面程序运行后的输出结果应为:( ) #include \"stdio.h\" main( ) { union

{ int a[2]; long b; char c[4]; }s;

s.a[0]=0x39; s.a[1]=0x38;

printf(\"%c\}

A;39 B:9 C:38 D:8 答案:B

根据以下定义,能输出字母M的语句是______________ struct person { char name[9];int age;}; struct person class[10]={ “John”,17, “Paul”,19, “Mary”,18, “Adam”,16,}; 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]); 答案:D

对整个结构能够进行的操作是____________。 A) 对结构进行赋值 B) 对结构进行存取 C) 对结构进行减法运算 D) 对结构体做加法 答案:A

下列对结构类型的描述错误的是___________。 A) 结构体变量可以有不同类型的成员

B) 结构体变量所占内存空间一定等于各个分量所占内存空间之和。 C) 结构体变量既可以做函数参数,又可以从函数中返回 D) 结构体变量的成员既可以读又可以写 答案:B

第12 章 文 件 一、单选题

1.利用C语言的文件操作,可以把数据永久保存在:( )

63

A.磁盘 B.内存 C.屏幕 D.键盘 答案:A

2.若有程序片段 FILE *fp; fp=fopen(“a.txt”,”r”); 则以下说法中正确的是:( ) A.fp指向磁盘文件a.txt的地址 B.fp指向磁盘文件a.txt 所对应的FILE 结构 C.如果fp不为NULL,表示文件打开失败 D.可以利用fp指针对文件a.txt进行写操作 答案:B

3.fopen函数的作用是:( ) A.将文件的内容读入内存 B.读出文件的大小 C.建立与文件关联的FILE结构体变量并返回该结构体变量的地址 D.向文件写数据 答案:C 9.fclose函数的作用是:( ) A.删除文件 B.删除文件中的数据 C.释放与该文件相关联的FILE结构体变量 D.清空文件缓冲区 答案:C

4.已知fp是一个指向已打开文件的指针,ch是一个字符型变量,则ch=fgetc(fp)的作用是:( ) A.获取键盘输入的字符,并赋值给ch B.获取fp所指向的文件的第一个字节的内容,并赋值给ch C.获取fp所指向的文件的当前文件位置指针所指向的一个字节的内容,并赋值给ch D.将ch的值输出到fp所指向的文件中 答案:B

5、以下可作为函数fopen中第一个参数的正确格式是_____________。 A)c:user\ext.txt B)c:\ext.txt C)”c:\ext.txt” D)”c:\\\\\ext.txt” 答案:D

6、若执行fopen函数时发生错误,则函数的返回值是________________ 。 A)地址值 B)0 C)1 D)EOF 答案:B

7、若要用fopen函数打开一个新的二进制文件,该文件要求既能读也能写,则打开方式字符串应是_______。 A)”ab+” B)”wb+” C)”rb+” D)”ab” 答案:B

8、若以“a+”方式打开一个已存在的文件,则以下叙述正确的是______________。

A)文件打开时,原有文件内容不被删除,位置指针移到文件末尾,可作添加和读操作 B)文件打开时,原有文件内容不被删除,位置指针移到文件开头,可作重写和读操作 C)文件打开时,原有文件内容删除,只可作写操作 D)以上各种说法皆不正确

64

答案:A

9、当顺利执行了文件关闭操作时,fclose函数的返回值是_______________。 A)-1 )TURE C)0 D)1 答案:D 10、已知函数的调用形式:fread (buffer,size,count,fp);其中buffer代表的是____________。 A)一个整型变量,代表要读入的数据项总数 B)一个文件指针,指向要读的文件

C)一个指针,指向要读入数据的存放地址 D)一个存储区,存放要读的数据项 答案:C

11、fscanf函数的正确调用形式是_________________。 A)fscanf (fp,格式字符串,输出表列); B)fscanf(格式字符串,输出表列,fp); C) fscanf(格式字符串,文件指针,输出表列) D)fscanf(文件指针,格式字符串,输入表列) 答案:A

12、fwrite函数的一般调用形式是______________。 A)fwrite(butter, count, size fp); B) fwrite(fp, size, count, butter); C) fwrite(fp, count, size, butter); D) fwrite(butter, size, count, fp); 答案:D

13、fgetc函数的作用是从指定文件读入一个字符,该文件的打开方式必须是____________。 A)只写 B)追加 C)读或读写 D)答案B和C都正确 答案:C

14、若调用fputc函数输出字符成功,则其返回值是___________。 A)EOF B)1 C)0 D)输出的字符 答案: D

15、若调用fputc函数输出字符失败,则其返回值是___________。 A)EOF B)1 C)0 D)输出的字符 答案:A 二、判断题

1. ( T )C语言中,2. 认为键盘是标3. 准输入文件stdin 4. ( T )C语言中,5. 认为显示器是标6. 准输出文件stdout 7. ( F )C语言中,8. 文件都是以ASCII码形式存储。 9. ( F )C语言中,10. 文件是以记录(record)组成。 11. ( T )C语言中,12. 文件存取是以字节为单位的。

13. ( T )fopen(“c:\est.dat”,”r”)的作用是打开一个磁盘文件,14. 此文件可以被执行写操作

15. ( F )fopen(“test.txt”,”r”)表示为写操作打开一个二进制文件 16. ( T )使用文件前必须先打开文件 17. ( T )文件时候结束后必须关闭文件

18. ( T )fputc函数的作用是把一个字符写到磁盘文件中去。

65

19. ( T )如果希20. 望向文件的末尾添加新的数据,21. 可以选择“W+”方式打开文件 ( )。

22. ( F )当遇到文件结束时,23. feof()函数的值为0,24. 否则为1 ( )。 25. ( T )如果文件以二进制形式打开,26. 用fread和fwrite函数就可以读写任何类型的信息( )。

27. ( T )当文件操作完成后必须使用fclose命令关闭文件 ( )。

28. ( F )用文件结束标29. 志EOF判断文件是否结束,30. 可以适用于任何类型的文件 ( )。

66

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

Copyright © 2019- net188.cn 版权所有 湘ICP备2022005869号-2

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务