2011计算机等考二级C语言课后练习题及答案

更新时间:2024-04-02 07:04:01 阅读量: 综合文库 文档下载

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

2011计算机等级二级C语言课后练习题及答案(1)

一、单项选择题

1.C语言程序的执行,总是起始于【 】。 A) 程序中的第一条可执行语句 B) 程序中的第一个函数 C) main函数

D) 包含文件中的第一个函数

分析:在一个C语言源程序中,无论main函数书写在程序的前部,还是后部,程序的执行总是从main函数开始,并且在main函数中结束。 本题正确答案为C。

2.下列说法中正确的是【 】。 A) C程序书写时,不区分大小写字母 B) C程序书写时,一行只能写一个语句 C) C程序书写时,一个语句可分成几行书写 D) C程序书写时每行必须有行号

分析:C语言严格区分大小写字母,如\和\被认为是两个不同的标识符,C程序的书写非常灵活,既可以一行多句,又可以一句多行,且每行不加行号。 本题正确答案为C。

3.下面对C语言特点,不正确描述的是【 】。

A) C语言兼有高级语言和低级语言的双重特点,执行效率高 B) C语言既可以用来编写应用程序,又可以用来编写系统软件 C) C语言的可移植性较差

D) C语言是一种结构式模块化程序设计语言

分析:C语言是介于汇编语言和高级语言之间的一种语言,由于它可以直接访问物理地址,对硬件操作,所以C语言既可以编写应用程序,又可以开发系统软件,而且C程序可移

植性好于汇编语言,程序清晰具有模块化的特点。 本题正确答案为C。

4.C语言源程序的最小单位是【 】。 A) 程序行B) 语句C) 函数D) 字符

分析:程序行、语句、函数都是由字符构成的,字符是C语言的最小单位。 本题正确答案为D。

5.以下四项中属于C语言关键字的是【 】。 A) CHAR B) define C) unsigned D) return

分析:C语言有32个关键字(或称保留字),它们都有特定的含意,并且由小写字母组成,所以选项A是错的,选项B不是保留字,选项D是return的错误拼写。 本题正确答案为C。

6.十进制数2403转换成十六进制数为【 】。 A) 963 B) 369 C) 953 D) 359

分析:十进制数化成十六进制数的方法是:不断除以16,商0为止,倒取余数。 本题正确答案为A。

7.二进制数00110101转换成八进制数是【 】。 A) 055 B) 065 C) 056 D) 152

分析:二进制数化成八进制数的方法是:从右向左划分,将每3位二进制数书写成1位八进制数。

本题正确答案为B。

8.将二进制数1011011.011转换成十进制数是【 】。 A) 91.75 B) 91.375 C) 91.125 D) 91.25

分析:二进制数化成十进制数的方法是:各数字乘以权重再相加,题中整数部分为:(1011011)2=1×26+1×24+1×23+1×21+1×20=64+16+8+2+1=91,小数部分为:(0.011)2=0×2-1+1×2-2+1×2-3=0.25+0.125=0.375,再将两者合在一起得91.375。

本题正确答案为B。

9.计算机内部运算使用的数是【 】。

A) 十进制数 B) 十六进制数 C) 二进制数 D) 八进制数

分析:在实际生活中找不到具有十个稳定状态的物理元件,而具有两种稳定状态的元件到处可见,如一个开关具有通电和断电两个稳定状态,计算机内部的元件正是以\代表通电,以\代表断电的,所以计算机内部运算使用的数是二进制数,至于八进制数和十六进制数是对二进制数的人为缩写。 本题正确答案为C。

10.一个字长的二进制位数是【 】。

A) 2个BYTE,即16个bit B) 3个BYTE,即24个bit C) 4个BYTE,即32个bit D) 随计算机系统不同而不同

分析:一个二进制位也称做1bit,八个二进制位称做1个BYTE,即所说的一个字节,BYTE和bit有固定的换算关系,但是计算机中的字长WORD和字节BYTE没有固定的换算关系,字长WORD是随CPU型号而异的。 本题正确答案为D。

11.在C语言系统中,假设int类型数据占2个字节,则double、long、unsigned int、char类型数据所占字节数分别多少【 】。

A) 8,2,4,1 B) 2,8,4,1 C) 4,2,8,1 D) 8,4,2,1

分析:由上题知CPU字长决定了分配给各种类型变量多少个字节,当int类型占2个字节时,double、long、unsigned int、char型所占的字节分别为8、4、2、1个字节。 本题正确答案为D。

12.下面程序段执行结果是【 】。 int i=5,k;

k=(++i)+(++i)+(i++); printf(\

A) 24,8 B) 21,8 C) 21,7 D) 24,7

分析:k=(++i)+(++i)+(i++)表达式中,\号在i前面的有两个,所以在计算k之前,i要先增两次,即i变为7,然后再将3个7相加,使k得21,表达式中\号在i后面的有1个,所以得出k的值以后i又增1次变为8。 本题正确答案为B。

13.下面程序段执行结果是【 】。 int i=5;

printf(\ A) 8,20,5 B) 8,21,5 C) 5,20,8 D) 5,21,8

分析:此题不能看作将12题中的k=(++i)+(++i)+(i++)代入printf函数,因为函数处理参数的顺序是从右向左,所以(++i)+(++i)+(i++)表达式的值不再是求7+7+7,而是为8+7+5=20。

本题正确答案为A。

14.下面程序段的输出结果是【 】。 int i=32769; printf(\

A) 32769 B) 32767 C) -32767 D) 输出不是确定的数

分析:int型变量表示数据的范围是-32768~+32767,赋值时比-32768小或比+32767大,都会发生溢出,溢出后存放的数值是:正向溢出时,为该数减去模65536,负向溢出时,为该数加上模65536,所以本题输出为32769-65536=-32767。 本题正确答案为C。

15.下面的程序运行后输出为【 】。 main( )

{ int a=-32769; ptintf(\

}

A) 32769 B) %8U C) 32767 D) -32767

分析:格式字符必须小写,题中的\不会当作格式控制符,而是原样输出,变量a将没有对应的格式说明,也不会送出。 本题正确答案为B。 二、填空题

1.若以下程序的输出结果是13,请填空。 main( ) { int x=016;

printf(\【1】); }

分析:在C语言中以0开头的数字是八进制数,016相当于十进制数14,执行printf语句时,输出项应为x的值减1。

本题正确答案为 【1】 --x或x-=1。 2.下面程序段的输出结果是【2】。 int k=10;

float a=3.5,b=6.7,c; c=a+k%3*(int)(a+b)%2/4;

分析:本题考查运算符的优先级概念,式中要先算(a+b)的值,再算强制类型变换,*、/、%是同级的要从左到右计算,最后算加法和赋值。 本题正确答案为【2】 3.500000

3.若执行下面程序段后的输出为:3,4,5,请填空。 int a,b=3,c=5;

a=b printf(\

分析:本题考查条件运算符和增量运算符的概念,题中b 本题正确答案为 【3】 b++。 4.C语言中的运算符,优先级最低的是【4】。

分析:与其它高级语言相比,在C语言中赋值号并不是优先级最低的,C语言中优先级最低的运算符是逗号运算符。

本题正确答案为 【4】 逗号运算符。 5.若下面程序的输出结果是4,请填空。 main( ) { int i,j,k; k=0 ; i=j=-2 ; k+=-i--【5】; printf(\ }

分析在C语言中当3个加号或3个减号连在一起时,中间的符号归属左边的变量,即-i---j相当于-(i--)-j。 本题正确答案为 【5】-j 。

2011计算机等考二级C语言课后练习题及答案(2)

一、单项选择题

1.下面叙述不正确的是【 】。 A) C语句末尾必须有分号

B) C语言中无论是整数还是实数都能准确的表示 C) 运算符“%”只能用于整数运算 D) 乘除运算符优先级高于加减运算符 2.以下叙述正确的是【 】。 A) C语句前面必须有行号 B) C程序中每行只能写一条语句 C) C语言本身没有输入输出语句 D) 注释必须跟在一行语句的后面

3.复合语句应用【 】括起来。

A) 小括号 B) 方括号 C) 大括号 D) 尖括号

4.将二进制数101101101111转换成十六进制数是【 】。 A) 5557 B) B6F C) 7555 D) F6B

5.将十进制数0.625转换成二进制数是【 】。 A) 0.111 B) 0.101 C) 0.5 D) 0.A 6.C语言语句一行写不下时,可以【 】。

A) 用逗号换行 B) 用分号换行 C) 用回车换行 D) 在任意一空格处换行 7.C语言允许将一条语句写在两行上,下列语句不正确是【 】。 A) int a, B) int a C) int D) int a,b b; ,b; a,b; ;

8.下面程序的输出是【 】。(“□”表示一个空格) int a=3366;

printf(\

A) |-0003366| B) |00003366| C) |3366□□□□| D) 输出格式非法 9.若有说明语句:int a; float b;,以下输入语句正确的是【 】。 A) scanf(\ B) scanf(\ C) scanf(\ D) scanf(\ 10.以下程序的输出结果是【 】。 main( )

{ int x=11,y=11;

printf(\ }

A) 11,11 B) 10,10 C) 10,11 D) 11,10 11.将八进制数307转换成二进制数是【 】。

A) 100110011 B) 11000111 C) 1100000111 D) 111000011

12.执行下面程序段,给x、y赋值时,不能作为数据分隔符的是【 】。 int x,y;

scanf(\

A) 空格 B) Tab键 C) 回车 D) 逗号 13.下面合法的语句是【 】。 A) int a=8,b; b=++a++;

printf(\,b++); B) int a;

printf(\ C) char a; scanf(\

char b=scanf(\ D) char c=getchar( ); putchar((int)c);

14.执行下面程序时,欲将25和2.5分别赋给a和b,正确的输入方法是【 】。 int a; float b;

scanf(\ A) 25□2.5 B) 25,2.5 C) a=25,b=5.5

D) a=25□b=2.5

15.与数学公式a?b x?y不等价的语句是【 】。 A) a*b/x*y B) a*b/x/y C) a*b/(x*y) D) a/(x*y)*b 二、填空题

1.表达式5%(-3)的值是【1】,表达式-5%(-3)的值是【2】。 2.在C语言中,格式输入库函数为【3】,格式输出库函数为【4】。 3.下面程序的输出结果是【5】。 int x=-32769; printf(\

4.执行下列程序的输出结果是【6】。 main( ) {

float a=1,b; b=++a*++a;

printf(\ }

5.执行下列程序的输出结果是【7】。 main( ) {

int x=5,y; y=++x*++x;

printf(\

}

参 考 答 案

一、选择题(1)B (2)C (3)C (4)B (5)B (6)D (7)D (8)C (9)C (10)D (11)B (12)D (13)D (14)C (15)A

二、填空题【1】 2 【2】 -2 【3】 scanf 【4】 printf 【5】 32767 【6】 6.000000 【7】 49

2011计算机等考二级C语言课后练习题及答案(3)

一、单项选择题

1.下面不属于C语言的数据类型是【 】。 A) 整型 B) 实型 C) 逻辑型 D) 双精度实型

分析:和其它高级语言相比,C语言中没有逻辑型数据,也没有逻辑型变量。 本题正确答案为C。

2.C语言中,下列属于构造类型的是【 】。 A) 整型 B) 实型 C) 指针类型 D) 结构体类型

分析:C语言中构造类型的数据有三种:数组、结构体和共用体,数组是同类型数据的集合,结构体是不同类型的数据集合。 本题正确答案为D。

3.下列字符串不符合标识符规定的是【 】。 A) SUM B) sum C) 3cd D) end

分析:标识符规定只能由26个英文字母(大小写均可),数字0~9和下划线组成,且不能以数字开头,题中的3cd不符合规定。 本题正确答案为C。

4.下面能正确表示八进制数的是【 】。 A) 0x16 B) 029 C) -114 D) 033

分析:选项A)以0x开头是十六进制数,选项B)虽然是0开头,但出现了数字9,选项C)

是十进制数。

本题正确答案为D。

5.下面四个选项中,均是合法实数的选项是【 】。 A) 2e-4.2 B)-0.50 C) 0.2e-.5 D)-e5

分析:实数有两种表示形式:小数形式和指数形式,小数形式必须有小数点,指数形式中,字母e之前必须有数字,e之后必须是整数。选项A)中的\选项C)中的\选项D)中的\均是不合法的。 本题正确答案为B。

6.C语言中,字符型数据在内存中存储形式是【 】。 A) 原码 B) 反码 C) 补码 D) ASCII码

分析:C语言中int型数据是以补码形式存放的,字符型数据是以ASCII码形式存放的。 本题正确答案为D。

7.下列正确的字符型常量是【 】。 A) \\\\\\\\\′ C) \\\\\r\

分析:字符常量的定义是用单引号括起来的一个字符,A和C的定界符不对,D超过了char型数据的表示范围,′\\\\\\\\′是转义字符。 本题正确答案为B。

8.若有说明语句char ch1=′\\\\x41′;则ch1【 】。

A) 包含4个字符 B) 包含3个字符 C) 包含2个字符 D) 包含1个字符

分析:\中的\是十六进制数,即十进制的65,题中ch1存放的65是字母\的ASCII码。

本题正确答案为D。

9.下列程序段输出的字符串长度为【 】。 printf(\′ccc\\\\bddd\\\\\ A) 11 B) 12 C) 13 D) 17

分析:\\\\\\\\、\\\\′、\\\\b和\\\\\为转义字符,程序输出结果为:\\\\aaa′ccddd\ 本题正确答案为A。

10.下列运算符中,要求运算对象必须是整数的是【 】。 A) / B) * C) % D) !

分析:题目中\、\、\的运算对象既可以整数,也可以是实数,只有取余数运算符\要求运算对象必须是整数。 本题正确答案为C。 11.下面合法的赋值语句是【 】。

A) x+y=2002; B) ch=\

分析:赋值号左端不能为表达式,选项A)是错的;赋值号不能将字符串赋给某个变量,选项B)也是错的;增量运算符“++”不能用于表达式,选项C)也是错的。 本题正确答案为D。

12.已知a为int型,b为double型,c为float型,d为char型,则表达式a+b*c-d/a结果的类型为【 】。

A) int 型 B) float型 C) double型 D) char型

分析:不同类型数据混合运算的转换规律是:运算前float型数据会自动转换为double型,char型数据会自动转换为int型。运算时int型数据和double型数据要先化为相同类型,即double型,运算结果也为double型。 本题正确答案为C。

13.执行以下程序段后的输出结果是【 】。 int x=0xcde;

printf(\,%4o,%4x\\\\n\

A) 3294,6336,cde B) 3294,6336,xcde C) 3294,06336,0xcde D) 3294,6336,0cde 分析:0xcde是十六进制数,写成二进制数形式为:1100 1101 1110,按八进制送出时,是从右向左3位二进制数写成1位,按十六进制形式送出时,是从右向左4位二进制数写成1

位。

本题正确答案为A。

14.下面的程序运行后输出为【 】。 #include #include main( ) { int a,b; float c;

b=5;c=6;c=b+7;b=c+1; a=sqrt((double)b+c); printf(\ }

A) 11.000000,12.000000,13.000000 B) 11.000000,12.000000,13 C) 11.0000000,12,13 D) 11,12.000000,13

分析:C语言允许将一种类型的数据赋给另一种类型的变量,但是变量的类型并不会因为赋值而发生改变,如本题中将b+7,即12赋给float型变量c,c值应为12.000000而不是整数12,同样a=sqrt((double)b+c),赋值号右边是双精度数,但由于a是整形变量,故a的值为5。

本题正确答案为D。

15.执行以下程序后x的值为【 】。 unsigned int x=65535; printf(\

A) 65535 B) 1 C) 有错误 D) -1

分析:题中将x定义成无符号整数,并且已初始化为:1111111111111111,若按%d格式输出,则最高位的1被当成了符号,1111111111111111成了负数的补码,输出结果为-1。 本题正确答案为D。 二、填空题

1.下面程序段的功能是输出大写字母对应的小写字母的ASCII码,请填空。 char ch;

scanf(\

ch=(ch>=′A′&&ch<=′Z′)?(【1】):ch printf(\【2】\\\\n\

分析:题目中条件运算为判断输入字母是否为大写,当ch>=′A′&&ch<=′Z′为真时,将其转换成对应的小写字母,需ASCII码值加上32,已知题意是将大写字母对应的小写字母ASCII值输出,所以printf语句中的输出格式应为十进制格式。 本题正确答案为 【1】 ch+32, 【2】 %d。 2.下面程序段的执行结果是x=【3】,y=【4】。 inta=3,b=5,x,y; x=a+1,b+6; y=(a+1,b+6);

printf(\

分析:此题考查逗号表达式的概念,因逗号运算符的优先级比赋值号还低,所以执行x=a+1,b+6时,x得到的是a+1的值。 本题正确答案为 【3】 4, 【4】 11。 3.下面程序执行后k的值为【5】。 int a=1,b=2,c=3,d=4,k; k=a>b?a:c>d?c:d

分析:因题中a>b的值为假,故求解表达式k=a>b?a:c>d?c:d相当于求

k=a>b?a:(c>d?c:d)。

本题正确答案为 【5】 4。

4.已知:int a=5;则执行a+=a-=a*a;语句后,a的值为【6】。

分析:a+=a-=a*a的运算顺序是从右向左,相当于求a+=(a-=a*a),其中小括号内的运算得a=5-5*5即a=-20,下一步再求a+=a,即a=a+a,将-20代入得a=-40。 本题正确答案为 【6】 -40。

5.下面程序的运行结果是x=【7】,y=【8】。 main( )

{ float x=4.9;int y; y=(int)x;

printf(\

分析:强制类型变换并不改变x的原值,x仍为4.9,而变换得到的是中间结果,此题将中间结果赋给了y,另外注意是舍弃小数部分,而不是四舍五入。 本题正确答案为 【7】 4.900000 【8】 4。

2011计算机等考二级C语言课后练习题及答案(4)

一、单项选择题

1.对if语句中表达式的类型,下面正确的描述是【 】。 A) 必须是关系表达式

B) 必须是关系表达式或逻辑表达式 C) 必须是关系表达式或算术表达式 D) 可以是任意表达式

分析:C语言中if语句的表达式可以是任意类型,只要表达式的值非0就算作真,是0就作为假。

本题正确答案为D。

2.多重if_else语句嵌套使用时,寻找与else配套的if方法是【 】。

A) 缩排位置相同的if B) 其上最近的if C) 下面最近的if D) 同行上的if

分析:多重if_else嵌套时,else总是与它上面最近的if配对。 本题正确答案为B。

3.以下错误的if语句是【 】。 A) if(x>y) z=x; B) if(x==y) z=0;

C) if(x!=y) printf(\

D) if(x 分析:选项C)中的第一个printf语句后面丢了分号,所以是错误的。 本题正确答案为C。

4.以下判断两个字符串相等的正确方法是【 】。 A) if(str1=str2) B) if(str1==str2)

C) if(strcpy(str1,str2)=0) D) if(strcmp(str1,str2)==0)

分析:选项A)中用了赋值号,显然是错误的,选项C)中的字符串拷贝函数strcpy不能比较大小,选项B)中的\号也不具有串比较功能,比较两个字符串的大小应用字符串比较函数。

本题正确答案为D。

5.执行下面程序的正确结果是【 】。 main( ) { float a=1.9; switch(a)

{ case 0: printf(\ case 1: printf(\ case 2: printf(\ }

printf(\ }

A) 1.900000

B) 111122221.900000 C) 22221.900000

D) 0000111122221.900000

分析:题中定义了单精度实数a,所以最下面的printf语句输出有6位小数,另外C语言在判断switch表达式的值时,是按整型数据处理的(但不4舍5入),所以程序是从case 1处开始执行的,因没有break语句,接着会执行case 2。 本题正确答案为B。 6.以下程序的输出为【 】。 main( )

{ int a=20,b=30,c=40; if(a>b) a=b, b=c;c=a;

printf(\ }

A) a=20,b=30,c=20 B) a=20,b=40,c=20 C) a=30,b=40,c=20 D) a=30,b=40,c=30

分析:题中的\, b=c;\是一个语句书写在了两行,因a>b为假,所此句不执行,又\与if语句无关,总要执行,故a,b值不变,c值为20。 本题正确答案为A。

7.对于条件表达式(k)?(i++):(i--)来说,其中的表达式k等价于【 】。 A) k==0 B) k==1 C) k!=0 D) k!=1

分析:因为条件表达式e1?e2:e3的含义是e1为真时,取表达式e2的值,否则取表达式e3的值,\为真\的意思就是不等于0。 本题正确答案为C。

8.执行下面的程序后,输出为【 】。 main( ) { int m=20; swith(m)

{ case 19: m+=1; case 20: m+=1; case 21: m+=1; case 22: m+=1; }

printf(\ A) 20 B) 21 C) 22 D) 23

分析:因无break控制语句,程序会从case 20开始连续执行后面的各个case语句,最后结果是m=23。 本题正确答案为D。

9.下面程序运行结果为【 】。 main( )

{ char c=′a′;

if(′a′ elseprintf(\ }

A) LOW B) UP C) LOWUP D) 语句错误,编译不能通过

分析:关系运算符“<”和“<=”的优先级相同,计算顺序是从左向右,求解表达式′a′ 本题正确答案为A。

10.对下述程序,正确的判断是【 】。 main( ) { int a,b;

scanf (\ if(a>b)a=b; b=a; elsea++; b++;

printf(\ A) 有语法错误不能通过编译 B) 若输入4,5则输出5,6 C) 若输入5,4则输出4,5 D) 若输入5,4则输出5,5

分析:不管if语句中的条件真假,它只能执行一个语句,要想根据条件执行多个语句,应写成复合语句,程序中if和else的后面都有两个语句,违反了这一点。 本题正确答案为A。 11.分析以下程序,结论是【 】。 main( )

{ int x=5,a=0,b=0;

if(x=a+b) printf(\ elseprintf(\ }

A) 有语法错,不能通过编译 B) 能通过编译,但不能连接 C) 输出**** D) 输出 ####

分析:if语句中的判别式可以是赋值表达式,题中if(x=a+b)的含义是,先把a+b的值赋给x,再判断x的值是否为0。 本题正确答案为D。

12.对下面的程序,正确的说法是【 】。 main( )

{ int a,b=1,c=2; a=b+c,a+b,c+3; c=(c)?a++:b--;

printf(\

A) 无错误 B) 第三行有错误 C) 第四行有错误 D) 第五行有错误

分析:第三行是由逗号表达式组成的语句,第四行是由条件表达式组成的语句,第五行printf语句的输出项为逗号表达式,本题没有语法错误。 本题正确答案为A。

13.执行下面的程序时,输入abc(其中CR代表回车),输出结果是【 】。 #include #include main( ) { char ch;

while((ch=getchar( ))!=′\\\\n′) { switch(ch-′a′) { case 0: putchar(ch+1);

case 1: putchar(ch+1);break; case 2: putchar(ch+2); case 3: putchar(ch+2);break; } } }

A) abc B) bbc C) abcd D) bbcee

分析:用getchar函数输入数据,接收的是ASCII码,当输入为a时对应执行case 0和case 1处的语句,当输入为b时,执行case 1处的语句,当输入为c时,对应执行case 2和case 3处的语句。 本题正确答案为D。 二、填空题

1.下面程序的输出结果是-11,请填空。 main( )

{ int x=100,a=200,b=50; int v1=25,v2=20; if(a if(b!=50) if(!v1) x=11; else if(v2) x=12; x=【1】; printf(\ }

分析:此题属于if语句的嵌套应用,因第一个if语句的条件就为假,所以后面的if

语句都没有被执行,只执行了x=【1】;一句。 本题正确答案为 【1】-11。

2.执行下面程序时,若从键盘上输入8,则输出为9,请填空。 main( ) { int x; scanf(\ if(【2】>8)

printf(\ else printf(\ }

分析:在【2】处不能为大于8的数,否则要执行printf(\语句,使输出值大于9,if语句的条件表达式中应有一个先用后增1的变量x,才能在输入x为8时,执行else后面的语句:printf(\输出9。 本题正确答案为 【2】 x++。 3.执行下面程序时输出为1,请填空。 main( )

{ int a=4,b=3,c=2,d=1; printf(\ }

分析:因为a 本题正确答案为 【3】d或1。 4.执行以下程序后的输出结果为a=【4】,b=【5】。 main( ) { int k=1,m=0; int a=10,b=10; switch(k)

{ case 1: switch(m)

{ case 0: a+=1;break; case 1: b++ ;break; }

case 2: a++;b++;break; case 3: a++;b++; }

printf(\ }

分析:此题概念是考查switch语句的嵌套应用,switch语句的特点是在没有遇到break语句时,要连续执行后面的case语句,本程序的执行路线是外部switch的case 1→内部switch的case 0→外部switch的case 2。 本题正确答案为 【4】12 【5】11。

5.根据下式填空,将程序补充完整。 y=-1.0(x<0.0)

2.0/(x-1.0)(0.0 3.0/x(x=1.0或10.0 4.0(x>=20)main( ) { float x,y; scanf(\ if(【6】) y=-1.0;

else if((【7】)&&(x!=1)) y=2.0/(x-1.0); else if(【8】) y=3.0/x; else y=4.0;

printf(\

分析:本题可根据已知的分段函数式中x与y之间的关系和条件判断语句if的先后顺序,将x的值按从小到大进行判断填空。

本题正确答案为 【6】 x<0.0 【7】 x<10.0 【8】 x<20.0。

2011计算机等考二级C语言课后练习题及答案(5)

一 、选择题

(1)下列叙述中正确的是

A)线性表是线性结构 B)栈与队列是非线性结构 C)线性链表是非线性结构 D)二叉树是线性结构 正确答案: A

(2)非空的循环单链表head的尾结点(由p所指向),满足 A)p->next==NULL B)p==NULL C)p->next=head D)p=head 正确答案: C

(3)已知数据表A中每个元素距其最终位置不远,为节省时间,应采用的算法是 A)堆排序 B)直接插入排序 C)快速排序 D)直接选择排序 正确答案: B

(4)对建立良好的程序设计风格,下面描述正确的是 A)程序应简单、清晰、可读性好 B)符号名的命名只要符合语法 C)充分考虑程序的执行效率 D)程序的注释可有可无 正确答案: A

(5)下列不属于结构化分析的常用工具的是 A)数据流图 B)数据字典

C)判定树 D)PAD图 正确答案: A

(6)在软件生产过程中,需求信息的给出是 A)程序员 B)项目管理者

C)软件分析设计人员 D)软件用户 正确答案: D

(7)下列工具中为需求分析常用工具的是 A)PAD B)PFD C)N-S D)DFD 正确答案: D (8)NULL是指 A)0 B)空格

C)未知的值或无任何值 D)空字符串 正确答案: C

(9)数据库的故障恢复一般是由 A)数据流图完成的 B)数据字典完成的 C)DBA完成的 D)PAD图完成的 正确答案: C

(10)下列说法中,不属于数据模型所描述的内容的是 A)数据结构 B)数据操作 C)数据查询 D)数据约束 正确答案: C

(11)C语言程序的基本单位是 A)程序行 B)语句

C)函数 D)字符 正确答案: C

(12)下面四个选项中,均是合法整型常量的选项是 A)160 -0xffff 011 B)-0xcdf 01a 0xe C)-01 986,012 0668 D)-0x48a 2e5 0x 正确答案: A

(13)以下选项中合法的用户标识符是 A)long B)_2Test C)3Dmax D)A.dat 正确答案: B

(14)假定x和y为double型,则表达式x=2,y=x+3/2的值是 A)3.500000 B)3 C)2.000000 D)3.000000 正确答案: D

(15)以下变量x,y,z均为double类型且已正确赋值,不能正确表示数学式子x÷y÷z的C语言表达式是 A)x/y*z B)x*(1/(y*z))

C)x/y*1/z D)x/y/z 正确答案: A

(16)设x,y,t均为int型变量,执行语句: x=y=3; t=++x||++y; 完成后,y的值为 A)不确定 B)4 C)3 D)1

正确答案: C

(17)已知i,j,k为int型变量,若从键盘输入:1,2,3<回车>,使i的值为1,j的值为2,k的值为3,以下选项中正确的输入语句是 A)scanf(\ B)scanf(\ C)scanf(\ D)scanf(\ 正确答案: C

(18)若变量已正确定义并赋值,下面符合C语言语法的表达式是 A)m∶=5 B)c=b=a=1 C)float 8%5 D)x+5=y+2 正确答案: B

(19)下列程序运行的结果是 main() {float x; int i; x=3.6; i=(int)x;

printf(\ }

A)x=3.600000,i=3 B)x=3.6,i=3 C)x=3,i=3

D)x=3.600000,i=3.000000 正确答案: A

(20)若执行下面的程序时,从键盘上输入5和2,则输出结果是 main() { int a,b,k;

scanf(\ k=a;

if(a else k=b%a; printf(\ } A)5 B)3 C)2 D)0

正确答案: C

(21)C语言中 while 和do-while循环的主要区别是 A)do-while的循环体至少无条件执行一次

B)while的循环控制条件比do-while的循环控制条件更严格 C)do-while允许从外部转到循环体内 D)do-while 的循环体不能是复合语句 正确答案: A

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

{ int x=1,y=3; printf(\ { int x=0;x+=y*2; printf(\ }

printf(\ }

A)1,6,3,1,3 B)1,6,3,6,3 C)1,6,3,2,3 D)1,7,3,2,3 正确答案: C

(23)下面程序输出的结果是 main() { int i;

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

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

printf(\ } A)1 5 9 B)7 5 3 C)3 5 7 D)5 9 1 正确答案: B

(24)请阅读以下程序: main()

{ int a=5,b=0,c=0; if(a=b+c)printf(\ else printf(\ } 以上程序

A)有语法错不能通过编译 B)可以通过编译但不能通过连接 C)输出*** D)输出$$$ 正确答案: D

(25)以下程序的输出结果是 main()

{ char c=′z′; printf(\ }

A)a B)Z C)z-25 D)y

正确答案: A (26)下面函数的功能是

char *fun(char *str1,char*str2) {while((*str1)&&(*str2++=*str1++)); return str2; }

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

C)将字符串str1复制到字符串str2中 D)将字符串str1接续到字符串str2中 正确答案: C

(27)下面函数调用语句含有实参的个数为 func((exp1,exp2),(exp3,exp4,exp5)); A)1 B)2 C)4 D)5

正确答案: B

(28)下面程序段的运行结果是 char *s=\ s+=2;printf(\

A)cde B)字符′c′ C)字符′c′的地址 D)无确定的输出结果 正确答案: C

(29)已有变量定义和函数调用语句:int a=25;print_value(&a);下面函数的正确输出结果是

void print_value(int *x) {printf(\ A)23 B)24 C)25 D)26 正确答案: D

(30)当顺利执行了文件关闭操作时,fclose函数的返回值是 A)-1 B)TRUE C)0 D)1

正确答案: C (31)设有如下定义

char *s[2]={ \ 则下列说法错误的是

A)s数组元素的值分别是\和\两个字符串的首地址 B)s是指针数组名,它含有两个元素分别指向字符型一维数组

C)s数组的两个元素分别存放的是含有4个字符的一维字符数组中的元素 D)s数组的两个元素中分别存放了字符′a′和′A′的地址 正确答案: C

(32)以下不能对二维数组a进行正确初始化的语句是 A)int a[2][3]={0}; B)int a[][3]={{1,2},{0}};

C)int a[2][3]={{1,2},{3,4},{5,6}}; D)int a[][3]={1,2,3,4,5,6}; 正确答案: C (33)有以下程序 struct STU

{ char num[10]; float score[3]; }; main()

{struct STU s[3]={{\ {\ { \ },*p=s;

int i; float sum=0; for(i=0;i<3;i++) sum=sum+p->score[i]; printf(\ }

程序运行后的输出结果是 A)260.00 B)270.00

C)280.00 D)285.00 正确答案: B

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

(35)下面程序段中,输出*的个数是 char *s=\

for(;*s!=′\\0′;s++)printf(\ A)9 B)5 C)6 D)7

正确答案: C (36)设有如下函数 fun (float x) {

printf(\ 则函数的类型是 A)与参数x的类型相同 B)是void C)是int型

D)无法确定 正确答案: C (37)有如下定义 #define D 2

int x=5;float y=3.83; char c=′D′; 则下面选项中错误的是 A)x++; B)y++; C)c++; D)D++; 正确答案: D

(38)以下程序段的执行结果为 #define PLUS(X,Y)X+Y main()

{ int x=1,y=2,z=3,sum; sum=PLUS(x+y,z)*PLUS(y,z); printf(\ } A)SUM=9 B)SUM=12 C)SUM=18 D)SUM=28 正确答案: B

(39)C语言规定,函数返回值的类型是由

A)return语句中的表达式类型所决定 B)调用该函数时的主调函数类型所决定 C)调用该函数时系统临时决定

D)在定义该函数时所指定的函数类型所决定 正确答案: D

(40)下列程序的运行结果是 void fun(int *a,int *b) { int *k; k=a;a=b;b=k; } main()

{ int a=2004, b=9,*x=&a,*y=&b; fun(x,y);

printf(\ } A)2004 9 B)9 2004 C)0 0 D)编译时出错 正确答案: A

(41)下列程序是用来判断数组中特定元素的位置所在。如果输入如下整数: 876 675 896 101 301 401 980 431 451 777 #include #include

int fun(int *s, int t, int *k)

{ int i; *k=0;

for(i=0;i if(s[*k] return s[*k]; } main() {

int a[10]={ 876,675,896,101,301,401,980,431,451,777},k; clrscr(); fun(a, 10, &k);

printf(\ }

则输出结果为 A)7,431 B)6 C)980 D)6,980 正确答案: D

(42) C语言结构体类型变量在程序执行期间 A)所有成员一直驻留在内存中 B)只有一个成员驻留在内存中 C)部分成员驻留在内存中 D)没有成员驻留在内存中 正确答案: A

(43)下面程序应能对两个整型变量的值进行交换。以下正确的说法是 main()

{int a=10,b=20;

printf(\ swap(&a,&b);

printf(\ }

swap(int p,int q) {int t; t=p;p=q;q=t; }

A)该程序完全正确

B)该程序有错,只要将语句swap(&a,&b);中的参数改为a,b即可

C)该程序有错,只要将swap()函数中的形参p和q以及t均定义为指针(执行语句不变)即可

D)以上说法都不对 正确答案: D (44)有以下程序 #include main() { char *p,*q;

p=(char *)malloc(sizeof(char)*20); q=p; scanf(\%s\ }

若从键盘输入:abc def<回车>,则输出结果是 A)def def B)abc def

C)abc d D)d d 正确答案: A

(45)以下程序的输出结果是 int f()

{ static int i=0; int s=1; s+=i; i++; return s; } main() { int i,a=0;

for(i=0;i<5;i++)a+=f(); printf(\ } A)20 B)24 C)25 D)15 正确答案: D

46)已知 int a=1,b=3则a^b的值为 A)3 B)1 C)2 D)4

正确答案: C

(47)如果需要打开一个已经存在的非空文件\进行修改下面正确的选项是 A)fp=fopen(\ B)fp=fopen(\ C)fp=fopen(\ D)fp=fopen(\ 正确答案: D

(48)若要打开A盘上user子目录下名为abc.txt的文本文件进行读、写操作,下面符合此要求的函数调用是

A)fopen(\ B)fopen(\ C)fopen(\ D)fopen(\ 正确答案: B (49)有以下程序 #include main()

{ char *p=\ printf(\ }

程序运行后的输出结果是 A)12 B)15 C)6 D)5

正确答案: D (50) 有以下程序 #include struct NODE

{ int num; struct NODE *next; }; main()

{ struct NODE *p,*q,*r;

p=(struct NODE*)malloc(sizeof(struct NODE)); q=(struct NODE*)malloc(sizeof(struct NODE)); r=(struct NODE*)malloc(sizeof(struct NODE)); p->num=10; q->num=20; r->num=30; p->next=q;q->next=r;

printf(\ }

程序运行后的输出结果是 A)10 B)20 C)30 D)40

正(1)冒泡排序算法在最好的情况下的元素交换次数为 正确答案: 1.(0)

(2)在最坏情况下,堆排序需要比较的次数为 【2】 。 正确答案: 1.(O(nlog2n))

(3)若串s=\,则其子串的数目是 【3】 。 正确答案: 1.(46)

1】 。 【 (4)软件开发环境是全面支持软件开发全过程的 【4】 集合。 正确答案: 1.(软件工具)

(5)关系数据库的关系演算语言是以 【5】 为基础的DML语言。 正确答案: 1.(谓词演算) (6)下列y的值是 【6】 。 int y; y=sizeof (2.25*4); 正确答案: 1.(8)

(7)下列x的值是 【7】 。 int x;x=sizeof 2.25*4; 正确答案: 1.(32)

(8)以下程序的输出结果是 【8】 。 main ()

{int i=010,j=10; pirntf (\ }

正确答案: 1.(8,10)

(9)下列程序的输出结果为 【9】 。 main () {int x=3,y=5;

printf (\ }

正确答案: 1.(12)

(10)以下程序的输出结果是 【10】 。 fun (int x,int y,int z) { z =x*x+y*y;}

main () {int a=31; fun (6,3,a) printf (\ }

正确答案: 1.(31)

11)若有int a=1;int b=2;则a|b的值为 【11】 。 正确答案: 1.(3)

(12)已知字母a的ASCII码为十进制数97,且设ch为字符型变量,则表达式ch=′a′+′8′-′3′的值为 【12】 。 正确答案: 1.(f)

(13)若从键盘输入58,则以下程序输出的结果是 【13】 。 main() {int a;

scanf(\

if(a>50)printf(\ if(a>40)printf(\ if(a>30)printf(\ }

正确答案: 1.(585858)

(14)下列程序的输出的结果是 【14】 , 【15】 。 main()

{int i,j row,colum,m;

static int array[3][3]={{100,200,300},{28,72,-30}{-850,2,6}}; m=array[0][0];for(i=0;i<3;i++)

for(j=0;j<3;j++) if(array[i][j]< p>

{m=array[i][j];colum=j;row=i;} printf(\ }

正确答案: 1.(-850,)

(15)以下程序中,select 函数的功能是:在N行M列的二维数组中,选出一个最大值作为函数值返回,并通过形参传回此最大值所在的行下标。请填空。 #define N 3 #define M 3

select(int a[N][M],int *n) {int i,j,row=1,colum=1;

for(i=0;i for(j=0;j if(a[i][j]>a[row][colum]){row=i;colum=j;} *n= 【16】 ; return 【17】 ; } main()

{int a[N][M]={9,11,23,6,1,15,9,17,20},max,n; max=select(a,&n);

printf(\ }

正确答案: 1.(row) 2.(a[row][colum])

(16)函数my_cmp()的功能是比较字符串s和t的大小,当s等于t时返回0,否则返回s和t的第一个不同字符的ASCII码差值,即s > t时返回正值,当s < t时返回负值。请填空。

my_cmp(char *s, char *t) {while (*s == *t)

{if (*s == ′\\0′)return 0; ++s; ++t;

} return 【18】 ; }

正确答案: 1.(*s-*t)

(17)若有以下说明和定义语句,则变量w在内存中所占的字节数是 【19】 。 union aa {float x; float y; char c[6]; };

struct st{ union aa v; float w[5]; double ave; } w; 正确答案: 1.(34)

(18)\的作用是定义一个文件指针变量,其中的\是在 【20】 头文件中定义的。

正确答案: 1.(stdio.h)

确答案: D

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

Top