C语言历年等级考题(书稿真题&解析)

C语言历年等级考题(书稿真题&解析)
C语言历年等级考题(书稿真题&解析)

3.1.1 C语言概述

1.C语言规定,在一个源程序中main函数的位置______ 。(2010年春选择题第21题)

A.必须在最开始

B.必须在最后

C.必须在预处理命令的后面

D.可以在其他函数之前或之后

【解析】main函数也叫主函数,是C语言编译系统提供的特殊函数,可以放在程序中的任何位臵,但不能定义在其他函数体内。C程序总是从main函数的第一条语句开始执行。

【答案】D

2.以下叙述中正确的是________ 。(2009年秋选择题第21题)

A.C语言系统以函数为单位编译源程序

B.main函数必须放在程序开始

C.用户定义的函数可以被一个或多个函数调用任意多次

D.在一个函数体内可以定义另外一个函数

【解析】C语言系统以程序为单位编译源程序,程序由函数组成。main函数可以放在其他函数之前或之后。除了main函数外,函数可以被其他函数多次调用。函数不能定义在其他函数体内,即不能嵌套定义。

【答案】C

3.以下叙述中正确的是_________ 。(2008年秋选择题第21题)

A.在编译时可以发现注释中的拼写错误

B.C语言程序的每一行只能写一条语句

C.main(){}必须位于程序的开始

D.C语言程序可以由一个或多个函数组成

【解析】C程序的注释不产生编译代码,编译时跳过去,发现不了其中错误。C程序书写格式自由,一行内可以写几个语句,一个语句可以分写在多行上。main函数可以放在程序中的任何位臵。C程序可以由一个或多个函数组成,函数可以为空函数,包括main函数。

【答案】D

4.以下关于C语言源程序的叙述中错误的是________。(2007年春选择题第21题)

A.一个C源程序由若干个函数定义组成,其中必须有且仅有一个名为main的函数定义

B.函数定义由函数头部和函数体两部分组成

C.在一个函数定义的函数体中允许定义另一个函数

D.在一个函数定义的函数体中允许调用另一个函数或调用函数自身

【解析】一个C语言源程序由若干个函数定义组成,其中必须有且仅有一个名为main 的函数定义,函数定义由函数头部和函数体两部分组成。函数可以嵌套调用也可以递归调用,但不能嵌套定义。C的意思是嵌套定义,错误,D的意思是嵌套调用和递归调用,正确。

【答案】C

3.1.2 基本数据类型

1.以下选项中,___________ 是C语言关键字。(2010年春选择题第22题)

A.printf

B.include

C.fun

D.default

【解析】default是关键字,用在switch语句中。printf和include属于预定义标识符,其中printf是输出函数名,include用在预编译处理命令中。fun是用户自定义标识符。

【答案】D

2.在以下各组标识符中,均可以用作变量名的一组是_____。(2007年秋选择题第22题)

A.a01,Int

B.table_1,a*.1

C.0_a,W12

D.for,point

【解析】选项A中两个都符合标识符的命令规则,Int与关键字int是不同的标识符,选项B的第2个标识符中有*号,不符合标识符命名规则,选项C数字开头,不允许,选项D中的for是关键字,不能做变量名。

【答案】A

3.以下定义和声明中,语法均有错误的是___________。(2009年春选择题第21题)

①int _f(int x){} ②int f(int f){} ③int 2x=1; ④struct for{int x;};

A.②③

B.③④

C.①④

D.①②③④

【解析】本题考的是标识符的命名规则。③定义的整型变量名数字开头,不符合命名规则。④中定义的结构体类型名for属于关键字,不能作为结构体类型名。②中使用的函数名和形式参数名相同,在语法上可以,但在实际编程时不提倡使用。

【答案】B

4.在C语言系统中,如果一个变量能正确存储的数据范围为整数-32768~32767,则该变量在内存中占________个字节。(2010年春填空题第3题)

【解析】表示范围为整数-32768~32767的属于int型或short型的变量,它们在内存占2个字节。

【答案】2

5.若有声明“int x;”且sizeof(x)的值为2,则当x值为___________时“x+1>x”为假。

(2009年春填空题第2题)

【解析】x为int型,其表示范围为-32768~+32767,当x为32767时,再加1就变成了-32768了,此时,就是x+1>x”为假的情况。

这是由int型数据在内存中的存储情况决定的。int型数据在内存中占2个字节,以补码的形式存放,32767的补码为01111111 11111111,加1以后就变成了10000000 00000000,为-32768的补码,这种情况为溢出,数处于边界时会溢出。sizeof(x)是求字节数运算符。

【答案】32767

6.已知sizeof(int)的值为2,为将10!的值存储到变量f中(10!=3628800),变量f的类型应声明为___________ 。(2008年秋选择题第23题)

A. long int

B. int

C. short int

D.unsigned int

【解析】10!=3628800,超过了int的范围-32768~+32767,而长整型在内存占4个字节,表示范围大到-214748348~2147483647,应该要用长整型才可以存放3628800。

【答案】A

7.以下常量表示中正确的是__________ 。(2008年春选择题第22题)

A.\xff

B.5L

C.aEb

D.3.14U

【解析】选项A若想表示成十六进制常量,正确的表示应该是0xff,如果表示成转义字符,应该放在单引号内:'\0xff'。选项B表示的是长整型常量,选项C是一个标识符,不能表示常量,选项D表示的是无符号整数,但无符号整数不应该有小数。

【答案】B

8.以下表示中不能用作C语言常量表示的是____。(2007年春选择题第22题)

A.0UL

B.(long)123

C.1e0

D.'\x2a'

【解析】0UL意为将0以无符号长整型存放,B为强制类型转换,是表达式,表示长整型常量应该在123后加字母l或L。C是实常量,指数表示法,意为1乘以10的0次方,e 前面必须有数字,后面的数字必须是整数。D是转义字符,表示十六进制数2a。

【答案】B

9.在C语言源程序中,不带任何修饰的浮点数直接量(例如:3.14)都是按_________类型数据存储的。(2008年春填空题第1题)

【解析】实型常量的类型默认为double类型, 在内存中占8个字节。带f修饰即3.14f 或3.14F,则认为它是float 型,在内存中占4个字节。

【答案】double

10.已知有声明“char ch='g';”,则表达式ch=ch-'a'+'A'的值为字符__________的编码。

(2010年春填空题第2题)

【解析】本题的功能是将小写字母转换成大写字母。-'a'+'A'实际上就是减去32,对于一个小写字母来说,减去32就变成对应的大写字母。

【答案】G

11.若有程序段“char c=256;int a=c;”,则执行该程序段后a的值是______。

(2007年秋选择题第24题)

A.256

B.65536

C.0

D.-1

【解析】将256转换成二进制,为10000 0000,占9位,而char在内存只占一个字节,即8位,截取低8位赋给字符变量c,得c=0,将c的值赋给a,结果为0。

【答案】C

3.1.3 运算符和表达式

1.已知有声明“int a=3,b=4,c;”,则执行语句“c=1/2*(a+b);”后,c的值为_______ 。

(2010年春选择题第23题)

A.0

B.3

C.3.5

D.4

【解析】本题考查的是两整数相除,结果为整数,截取的是整数部分,不是四舍五入。1/2等于0,0乘于任何一个整数结果还是0,最后结果为0。

【答案】A

2.已知有声明“long x,y;”且x中整数的十进制表示有n位数字(4

A.y=x/(10*(n-1))

B.y=x%(10*(n-1))

C.y=x%(long)pow(10,n-1)

D.y=x%(10∧(n-1))

【解析】本类型的题目,拿一个具体的数,放到四个选项中去计算,就能得到正确答案。假设x为1234,代入A中,为1234/(10*3),肯定不是234,代入B中,为1234%(10*3)也不对,代入C中为1234%(long)103,结果为234,正确,选C。而D中的“∧”在C语言中是指位运算中的“异或”运算,不是求指数。

【答案】C

3.若有声明“float y=3.14619;int x;”,则计算表达式“x=y*100+0.5,y=x/100.0”后y的值是___________ 。(2009年春填空题第3题)

【解析】x=y*100+0.5=3.14619*100+0.5=315,因为x为int,截取整数部分赋给x。然后计算y=x/100.0=315/100=3.15,y是浮点数。

【答案】3.15

4.若有声明“int a=32767,b;”,则在Turbo C 2.0系统中执行语句“printf("%d",b=++a);”后输出结果是_________ 。(2006年秋填空题第3题)

【解析】本题有4个知识点:一是printf语句,输出%d格式,二是赋值运算及赋值表达式的值,三是++运算,四是int型数据的表示范围及整数在内存的存储情况。

b=++a是将a的值加1后赋给b,a、b是int型,处于-32768~32767范围内,32767+1=-32768,整数在计算机中以补码形式存储,32767的补码为01111111 11111111,加1后为10000000 00000000,是-32768的补码。对于int数据,32767+1等于-32768。若是long

型,满足32767+1等于32768。

【答案】-32768

5.已知有声明“int a=3,b=4;”,下列表达式中合法的是______ 。

(2010年春选择题第25题)

A.a+b=7

B.a=|b|

C.a=b=0

D.(a++)++

【解析】本题考查的是赋值运算符和“++”运算符的左值要求。左值必须是变量,不能是常量和表达式。选项A左边是表达式,不允许,选项D括号中的a++也是表达式,不能进行++运算。选项B是一个代数式,必须转换成C语言合法的表达式,表示成a=abs(b)。选项C正确,将0赋给b,再赋给a,a和b的值不再是初始化的值,而变成0了。

【答案】C

6.已知有声明“int n;float x,y;”,则执行语句“y=n=x=3.89;”后,y的值为 ________ 。

(2010年春选择题第28题)

A.3

B.3.0

C.3.89

D.4.0

【解析】本题考查的是不同类型间的赋值。赋值运算符右结合。先将3.89赋给x,表达式的值也为3.89,再将3.89赋给n,n是int,自动截取整数部分,将3赋给n。最后将3赋给y,y是float,将整数3转换成实数3.0后赋给y,y值为3.0。

【答案】B

7.以下程序运行时输出到屏幕的结果是 ___________ 。(2010年春阅读程序第7题)

#include

void main()

{ int a=1,b=2;

a+=b;

b=a-b;

a-=b;

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

}

【解析】本题的考点是复合赋值运算符,程序功能是不用临时变量,实现两个变量的值的交换。计算过程如下:a=a+b=1+2=3,b=a-b=3-2=1,a=a-b=3-1=2。最后结果是a为2,b 为1。变量的值在程序运行过程中可能在不断的变化,每次计算都要用最新得到的值。

【答案】2,1

8.若有声明“int x=2,y=1,z=0;”,则下列关系表达式中有语法错误的是_______ 。

(2008年春选择题第25题)

A. x>y=2

B.z>y>x

C.x>y==1

D.x==(x=0,y=1,z=2)

【解析】赋值表达式的运算数有左值要求,赋值号左边必须是变量,不能是表达式,A 错。B没有语法错误,z>y成立结果为1,不成立为0,再将1或0与x比较,判断其是否成立。C先判断x>y是否成立,得到0或1再与1比较是否相等,最后的结果要么是0要么是1。D先做括号中的逗号表达式,依次进行赋值,最后一个表达式的值2是整个逗号表达式的值,将其与x的值进行是否相等的比较。

【答案】A

9.已知有声明“int a=12,b=15,c;”,则执行表达式“c=(a||(b-=a))”后,变量b和c的值分别为____________ 。(2010年春选择题第29题)

A.3,1

B.15,12

C.15,1

D.3,12

【解析】本题的考点是逻辑表达式的短路特性。a值为12,非零即为真,逻辑表达式的结果只能用1或者0表示,若为真则结果为1。只要有一个为真,逻辑或“||”的结果就为1,b-=a

不用计算了,b的值不变,仍为15。而括号中逻辑表达式的值为1,1赋给c,故c的值为1。

【答案】C

10.已知有声明“int a=3,b=4,c=5;”,以下表达式中值为0的是________ 。

(2009年秋选择题第24题)

A.a&&b

B.a<=b

C.a||b&&c

D.!(!c||1)

【解析】a&&b中a和b都是非0,A的结果为1。B中a<=b成立,结果为1。C中&&优先级高于||,先做&&,b和c的值非0,b&&c的结果为1,因为是||运算,最后的结果肯定是1。D中c非0,!c为0,与1逻辑或为1,将括号中的1再逻辑非,结果为0。

【答案】D

11.C语言中有!、&&、||三个逻辑运算符,其中优先级高于算术运算符的是________ 。

(2009年秋填空题第1题)

【解析】逻辑非“!”是单目运算符,优先级为2级,高于3级的“* / %”和4级的“+”和“-”。“&&”的优先级为11级,“||”的优先级为12,低于算术运算符。

【答案】!

12.以下表示数学式“a

(2007年春选择题24题)

A.a

B.a

C.!(a>=b)&&!(b>=c)

D.!(a>=b||b>=c)

【解析】最好的答案是B,但C、D与B的功能相同。C中!(a>=b)就是a

【答案】A

1 x>0

13.以下选项中,不能表示函数sign(x)= 0 x=0 功能的表达式是________。

-1 x<0

(2009年春选择题第23题)

A.s=(x>0)?1:(x<0)?-1:0

B.s=x<0?-1:(x>0?1:0)

C.s=x<=0?-1:(x==0?0:1)

D.s=x>0?1:x==0?0:-1

【解析】本题考点是嵌套的条件表达式。仔细分析它们的逻辑关系,选项C的功能是当x<=0时值为-1,否则即x>0再判断x=0是否成立决定值为0还是1,不合题意。

【答案】C

14.若有声明“int a=5,b=2;”,则表达式“b+=(float)(a+b)/2”运算后b的值为________ 。

(2007年秋填空题第1题)

【解析】b+=(float)(a+b)/2相当于b=b+((float)(a+b)/2)。先执行a+b得7,转换成实数7.0除以2,得3.5,然后将原来的b=2加3.5得5.5,b是int,截取整数部分5赋给b。

【答案】5

15.设指针变量占2个字节的内存空间,若有声明“char *p="123";int c;”,则执行语句“c=sizeof(p);”后,c的值为_____ 。(2010年春选择题第24题)

A.1

B.2

C.3

D.4

【解析】题目告诉我们指针变量占2个字节,而sizeof的功能就是计算变量在内存中所占的字节数,c的值为指针变量p在内存中占用的字节数,为2。

【答案】B

16.若有声明“int r=2;”,则执行语句“printf("%d",sizeof(2*3.14*r));”时输出________ 。

(2009年秋填空题第2题)

【解析】本题输出表达式2*3.14*r的结果在内存中占用的字节数。2*3.14*r的结果为实

常量,其中有一个实常量3.14,C中实常量默认为double型。根据类型转换规则,其他类型的数据也要转换成double型,最后结果为double型,在内存占8个字节。

一般情况,只要表达式中有一个数据为double型,最后的结果就是double型。

【答案】

17.c语言表达式为pow(x, ________ )。

(2010年春填空题第1题)

【解析】pow(x,y)是求x的y x的三分之一次方。此处注意的是1/3=0,要将其中一个转换为浮点数。

【答案】1.0/3或者1/3.0或者(double)1/3

18.数学表达式

4a

bc

所对应的C语言表达式为________ 。

(2009年秋填空题第3题)

【解析】求平方根的函数为sqrt,求绝对值的函数为abs或fabs,abs求整数的绝对值,fabs求实数的绝对值。“≠”用“!=”表示。4a要用4*a表示,*表示乘号,不能缺省。分母一定要加括号,若不加括号得用除“/”不是用乘“*”。加括号的表示方式看起来更直观。

【答案】sqrt(fabs(x)!=4*a/(b*c)或sqrt(fabs(x)!=4*a/b/c

3.2.1 实现顺序结构的语句

1.以下关于C语言语句的叙述中正确的是_________ 。(2006年秋选择题第27题)

A.所有语句都包含关键字

B.所有语句都包含表达式

C.所有语句都可以出现在源程序中的任何位置

D.除复合语句外的其他所有语句都以分号结束

【解析】关键字只有32个,大多数用来进行变量类型说明以及实现条件选择和循环结构的控制语句。很多语句中没有关键字的,如赋值语句。表达式也不一定在所有的语句中出现的,如函数调用语句。语句是程序的执行部分,放在函数内部,而且在说明部分之后。C 语言中复合语句中的各条语句都必须有分号“;”,但在“}”外没有分号。

【答案】D

2.已知int类型数据在内存中存储长度为2个字节,以下语句中能正确输出整数32768的是________ 。(2009年秋选择题第23题)

A.printf("%d",32768);

B.printf("%ld",32768);

C.printf("%f",32768);

D.printf("%c",32768);

【解析】本题考点是输出格式。%d格式输出int型整数,范围为-32768~32767,%f 格式输出浮点数,%c格式输出字符。%ld格式输出长整型整数,范围为-21亿~21亿。

【答案】B

3.以下语句中有语法错误的是____________ 。(2009年春选择题第24题)

A.printf("%d",0e);

B.printf("%f",0e2);

C.printf("%d",0x2);

D.printf("%s","0x2");

【解析】本题考点为输出格式及常量表示。A中的%d表示输出int型整数,0开头为八进制数,只能为0~7共8个数字,不能为e。B是%f格式,输出实数,0e2是指数形式,即为0*102。C输出int型整数,0x是十六进制形式,D用%s格式输出字符串常量"0x2"。

【答案】A

4.已知有声明和语句“int a;scanf("a=%d",&a);”,欲从键盘上输入数据使a中的值为3,则正确的输入应是_______ 。(2010年春填空题第5题)

【解析】“a=”是原样字符,要照输。“%d”的位臵输入对应的变量a的值3。就是将键盘输入的值3存入变量a的地址单元,这样a的值就为3。

【答案】a=3

5.若有声明“long a,b;”且变量a和b都需要通过键盘输入获得初值,则下列语句中正确的是________ 。(2007年秋选择题第23题)

A.scanf("%ld%ld,&a,&b");

B.scanf("%d%d",a,b);

C.scanf("%d%d",&a,&b);

D.scanf("%ld%ld",&a,&b);

【解析】a和b是long型,输入时要用“%ld”格式。对于变量,scanf函数的地址表中必须有取地址运算符“&”,而且只在格式控制串上有双引号,地址表列上不应有双引号。满足这些要求的只有选项D。

【答案】D

6.若有声明“int i;float x;char a[50];”,为使i得到值1,x得到值3.1416,a得到值yz,当执行语句“scanf("%3d%f%2s",&i,&x,a);”时,正确的输入形式是_________ 。

(2006年秋选择题第23题)

A.1,3.1416,yz

B. 13.1416yz

C.001 3.1416 yz

D.i=001,x=3.1416,a=yz

【解析】第一个输入格式“%3d”对应变量i,要输入3位,而i值为1,只占1位,补足3位,输入时在前面加00,输完“001”后用空格或回车或TAB键分隔。第二个输入格式“%f”,对应的数为实数3.1416,输完加分隔符。第三个输入格式“%2s”,是2个字符的字符串,a 为数组名,本身就已表示地址了,前面无“&”。选项C满足要求。

A用逗号分隔,逗号不是有效的分隔符,只有当格式控制串中有原样字符逗号时才需输入逗号,而且i不足3位。B在输入数据时没有分隔符,D在输入时有“i=”等字符,不需要。

【答案】C

7.已知有声明“char s[80];”,若需要将键盘输入的一个不含空格的字符串保存到s数组中,则下列语句中正确的是________ 。(2009年秋选择题第28题)

A.scanf("%s",s);

B.scanf("%s",s[0]);

C.s=gets();

D.s=getchar();

【解析】A中的scanf函数中的s是数组名,本身就表示地址了,不用再加“&”。B中的s[0]表示一个元素,不是地址,C中应该将s放入括号中作为gets函数的参数,D中的getchar 函数一次只能输入一个字符。scanf函数不能输入空格。

【答案】A

8.若有声明“char s[l0]="remind";”,执行“puts(s+2);”后的输出结果是___________。

(2007年秋填空题第2题)

【解析】puts函数的功能是输出一个字符串。s表示数组的起始地址,s+2表示数组元素的第2个元素的地址,所以从s[2]元素开始输出,结果为mind。

【答案】mind

3.2.2 实现选择结构的语句

1.已知有声明“int x,y;”,若要求编写一段程序实现“当x大于等于0时y取值1,否则y 取值-1”,则以下程序段中错误的是________ 。(2009年秋选择题第26题)

A.if(x>=0) y=1;else y=-1;

B.y=x>=0?1:-1;

C.switch()

D.switch(x-abs(x))

{ case x>=0: y=1;break; { case 0:y=1;break;

default:y=-1; default:y=-1;

} }

【解析】本题考点为if语句和switch语句。选项A用if语句表示,正确。选项B用条件表达式表示,x大于等于0成立将1赋值给y,否则将-1赋值给y。

选项C用switch语句,但不符合switch的语法规则,switch的括号中必须有一常量或表达式,不能为空。case后是一个常量表达式,其中只能有常量和运算符,不能有变量。

选项D中,当x大于等于0时,x-abs(x)为0,执行y=1,否则就不是为0,执行y=-1。

【答案】C

2.以下程序运行时输出到屏幕的结果是________ 。(2009年秋阅读程序第7题)

#include

void main()

{ int i=1,m=0;

switch(i)

{ case 1:

case 2: m++;

case 3: m++;

}

printf("%d",m);

}

【解析】因为case后无break语句,switch中的m++都要执行,m的初值为0,执行2次m++后m的值为2。

【答案】2

3.2.3实现循环结构的语句

1.程序段“int x=3;do{printf("%d",x--);}while(!x);”的执行结果是_________ 。

(2006年秋选择题第24题)

A.3 2 1

B.2

C.3

D.死循环

【解析】本题的考点是do-while循环和自减运算符。先执行输出语句,输出x的值,x--,先用x的值3,再减1,为2。输出一个3,然后判断!x看是否继续循环,x为2,非0,!x 就为0,循环结束。

【答案】C

2.若有声明“int i,k=1;unsigned j;”,则下列语句执行时会出现无限循环的语句是____ 。

(2008年春选择题第27题)

A.for(j=15;j>0;j-=2) k++;

B.for(j=0;j<15;j+=2) k++;

C.for(i=0;i<15;i+=2) k++;

D.for(i=15;i>0;i-=2) k++;

【解析】本题的考点是for循环的结束条件与无符号整数。j是无符号整数,永远不会小于0,选项A中,j的初值为单数,每次减2,还是单数,j也不会等于0,即j>0永远满足,A是无限循环。

【答案】A

3.设有变量声明“char c;”,执行“for(;c=(getchar()!='\n');)printf("%c",c);”时,从键盘上输入“ABCDEFG回车”之后,输出的结果是_________ 。(2006年秋选择题第28题)

A.ABCDEFG

B. AABBCCDDEEFFGG

C.非字母数字字符

D.语句不能执行

【解析】for语句中,先执行条件判断(getchar()!='\n'),若不是回车条件成立,结果为1,将之赋给变量c,输出ASCII码值为1的对应的字符,肯定不是字母或者数字。

【答案】C

4.下面关于循环语句for、while、do_while的叙述中正确的是____。

(2007年春选择题26题)

A.三种循环语句的循环体都必须放入一对花括号中

B.三种循环语句中都可以缺省循环终止条件表达式

C.三种循环语句的循环体都至少被无条件地执行一次

D.三种循环语句都可能出现无穷循环

【解析】对于for和while循环,当循环体只有一个语句时可以不用花括号。只有for 循环可以缺省循环终止条件表达式,其余两种while(表达式)中的表达式不能缺省。do-while 至少被无条件地执行一次,其余两种当型循环条件为0时一次也不执行。

三种循环语句的无穷循环形式如下:

while(1) {……}

do{……}while(1);

for( ; ; ) {……}

【答案】D

5.若在一个C语言源程序中“el”和“e3”是表达式,“s;”是语句,则下列选项中与语句“for(el;;e3) s;”功能等同的语句是_________。(2007年秋选择题第25题)

A.el;while(10)s;e3;

B.el;while(10){s;e3;}

C.el;while(10){e3;s;}

D.while(10){el;s;e3}

【解析】本题主要考for循环的执行过程,与while的比较。对于for,应先执行e1,只执行一次,可以放在循环前面,不能放循环体内。e3和s的执行顺序是先执行循环体s,再执行e3,C错。若将e3放在循环体内,循环体就有2个语句,必须用花括号括起来,A错。

【答案】B

6.以下程序运行时输出结果是___________。(2007年秋阅读程序第6题)

#include

main()

{ int s=1,n=235;

do

{ s*=n%10;

n/=10;

}while(n);

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

}

【解析】本程序求整数n的各位数字之乘积。s初值为1,s*=n%10即s=s*n%10,n%10得到n的最低位,与原来的s相乘。n/=10即n=n/10,取整,去掉用过的最低位。这是典型的数字分离方法。若求n的各位数字之和,将s的初值臵为0,并将乘号改成加号。

【答案】30

7.以下程序运行时输出结果是___________。(2009年春阅读程序第6题)

#include

void main()

{ int k=5,n=0;

while(k>0)

{ switch(k)

{ case 1:

case 3: n+=1;k--;break;

default: n=0;k--;

case 2:

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

}

printf("%3d",n);

}

}

【解析】本题的考点是while语句与switch语句。当k>0时,执行循环体中的语句。

k初值为5,满足>0的条件,执行循环体。无匹配的case语句,执行default后面的语句,n=0,k=4,因为无break,继续执行下面的case语句,n=0+2=2,k=3,输出n的值2。

第2次循环,k=3,执行n+=1; k--; n为3,k为2,有break,跳出switch,输出n的值,为3。

第3次循环,k=2,执行n+=2;k--;break;后n为5,k为1,输出5。

第4次循环,k=1,执行n+=1;k--;break;后n为6,k为0,输出6。

此时,k=0,不再满足k>0的条件,循环结束。

【答案】2 3 5 6

8.以下程序运行后的输出结果的第一行是______________,第二行是_______________。

(2008年春阅读程序第8题)

#include

main()

{ int i,a=0,c=2;

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

switch(++a,a*c)

{ case 1: printf("1");

case 2: printf("2");

case 3: printf("3\n");break;

default: printf("other\n");

}

}

【解析】本题执行2次循环。switch后的括号中是逗号表达式,依次执行,并将后面的表达式的值与case后的常数进行匹配。

第一次循环:++a,值为1,a的值也为1,a*c为2,与case 2匹配,输出2,无break,接着输出3并换行,遇break,跳出switch,进行下一次循环条件的判断。

第二次循环:++a,值为2,a的值也为2,a*c为4,无匹配的case,执行default后面的语句,输出other。

【答案】第一行是23,第二行是other

3.2.4其他语句

1.若程序中已有相应的声明,下列语句中错误的是_______。(2008年春选择题第23题)

A.printf(i==4?"%6d\n":"%6d",i);

B.i==4?printf("%6d\n",i):printf("%6d",i);

C.for(i=10;;i--)if(i==1)break;

D.for(i=10;;)if(i--);break;

【解析】本题的考点是条件表达式及break语句。选项A中输出函数的参数是一个条件运算符,当i为4时换行输出i值。选项B的功能与A相同。选项C是for循环,没有循环结束条件,跳出循环由if语句和break语句实现。选项D中的if语句只执行条件判断与循

环变量减1的操作,后面是空语句,break语句不在for循环中,是一个独立的语句,这在C 语言中是不允许的。break语句只能用在switch语句和循环语句中。

【答案】D

2.以下程序运行后输出结果中第一行为____________,第二行为______________。

(2007年春阅读程序第9题)

#include "stdio.h"

void main()

{ int i=5;

do

{ switch(i%2)

{ case 0: i--; break;

case 1: i--; continue;

}

i--;

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

} while(i>0);

}

【解析】本题的考点是do-while循环、switch语句、continue语句。直到型循环,先执行循环体内的语句,循环体内有三个语句:switch、i--、输出。

首先计算switch后括号中的i%2,为1,执行case 1后的i--,i变成4,接着continue 结束本次循环,继续下次循环。再次计算switch后括号中的i%2,为0,执行case 0后的i--,i为3,break语句在switch中,跳出switch,不是跳出循环,接着执行循环内switch下面的i--,i变成2,输出i值,输出的第一行为2。判断i>0是否成立,成立,继续下次循环。

计算switch后括号中的i%2,为0,执行case 0后的i--,i=1,break后跳出switch,执行i--,i为0,输出i值,第二行的输出为0。此时,不满足i>0的条件,循环结束。

【答案】第一行为2,第二行为0。

3.3.1 数组

1.以下声明中错误的是_________ 。(2008年秋选择题第27题)

A.int a[2]

B.int a[]={0,1}

C.int a[3]=0

D.int a[3][4]={0}

【解析】A定义了一个长度为2的数组a,B在定义数组a的同时进行了初始化,缺省长度系统默认为2。C在对数组初始化时没有花括号。D只对二维数组中的第一个元素a[0][0]进行了初始化,其余元素的值都为0。若数组没有初始化,数组元素的值是随机数。

【答案】C

2.已知有声明“int m[]={5,4,3,2,1},i=0;”,下列对m数组元素的引用中,错误的是____ 。

(2009年秋选择题第27题)

A.m[++i]

B.m[5]

C.m[2*2]

D.m[m[4]]

【解析】定义数组m时进行初始化,大括号中有5个数据,数组长度为5,其元素分别为m[0]~m[4],不存在m[5],B越界。选项A的m[++i]先将i加1,i为1,即m[1],选项C指m[4]。选项D中,m[4]的值为1,m[m[4]]就是m[1],数组的下标可以为整型表达式,也可以为整型变量,但声明的时候方括号中的表达式不能为变量。

【答案】B

3.下列C语言源程序的错误中,通常不能在编译时发现的是_____ 。

(2007年秋选择题第21题)

A.括号不匹配

B.非法标识符

C.数组元素下标值越界

D.程序结构不完整

【解析】数组元素的下标越界,系统是不能发现的,编译时不提示错误,但运行结果会出错。其余三种情况在编译时系统会提示错误,等修改正确以后程序才能运行。

【答案】C

4.若有声明“char ss[8]="Red";”,则sizeof(ss)的值是_______ 。

(2008年秋选择题第30题)

A.8

B.4

C.3

D.1

【解析】sizeof是求字节数运算符,计算数组ss在内存中的字节数,数组在定义时长度为8,所占内存为8个字节,本题计算的不是字符串长度,而是数组的长度。若将声明改为“char ss[]="Red";”,缺省数组长度,那么sizeof(ss)的值为字符个数3加1,字符串都有一个结束标志'\0'。若初始化方式为“char ss[]={'R', 'e', 'd'};”,则sizeof(ss)的值为3。

【答案】A

5.以下程序运行时输出结果中第一行是___________ ,第二行是___________ ,第三行是___________ 。(2007年秋阅读程序第10题)

#include

main()

{ int i,j,a[3][3]={0};

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

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

switch(i-j+2)

{ case 0:

case 1:a[i][j]=1;break;

case 2:a[i][j]=2;break;

case 3:a[i][j]=3;break;

case 4:a[i][j]=5;break;

}

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

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

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

printf("\n");

}

}

【解析】本题通过switch语句对二维数组赋值。对于二维数组要注意行号与列号的变化,一般外循环表示行号的变化,内循环表示列号的变化。每次循环要计算switch括号中表达式值,根据该值决定执行哪个case,得出数组元素的值。最后输出二维数组各元素值。

i=0:j=0,i-j+2=2,a[0][0]=2;j=1,i-j+2=1,a[0][1]=1;j=2,i-j+2=0,a[0][2]=1

i=1:j=0,i-j+2=3,a[1][0]=3;j=1,i-j+2=2,a[1][1]=2;j=2,i-j+2=1,a[1][3]=1

i=2:j=0,i-j+2=4,a[2][0]=5;j=1,i-j+2=3,a[2][1]=3;j=2,i-j+2=2,a[2][2]=2

【答案】第一行是2 1 1,第二行是3 2 1 ,第三行是5 3 2

6.以下程序运行时输出到屏幕的结果第二行是___________,第四行是 ___________ 。

(2010年春阅读程序第11题)

#include

#define N 6

void main()

{ int i,j,a[N+1][N+1];

for(i=1;i<=N;i++) {a[i][i]=1;a[i][1]=1;}

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

for(j=2;j

a[i][j]=a[i-1][j-1]+a[i-1][j];

for(i=1;i<=N;i++)

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

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

printf("\n");

}

}

【解析】本题就是典型的杨辉三角形。注意本题只考虑从1开始的下标,下标为0的不考虑,而且只求矩阵的一半,即斜三角形。

第一个for循环给数组每行的最后一个元素即对角线元素赋值1,给数组的每行的第一个元素赋值1。

第二个for循环从第三行起,除了第一个和最后一个元素,其余元素的值为上一行前一个元素和上一行同列元素之和。这是根据a[i][j]=a[i-1][j-1]+a[i-1][j]得出的。

最后一个for循环输出杨辉三角形。根据上述规律,很快写出杨辉三角形:1

1 1

1 2 1

1 3 3 1

写四行就够了,因为题目只问到第四行的输出。

【答案】第二行是1 1,第四行是 1 3 3 1

7.以下程序运行后输出结果中第一行为_____________,第二行为______________,第三行为________________。(2007年春阅读程序第11题)

#include "stdio.h"

#define N 3

main()

{ int a[N][N],b[N*N]={1,1},i,j;

for(i=2;i

for(i=0;i

for(j=0;j

for(i=0;i

{ for(j=0;j

printf("\n");

}

}

【解析】先生成数组b,b[i]的值为前2个元素之和,得到b各元素的值为1,1,2,3,5,8,13,21,34。

再将b数组元素的值赋给数组a,注意,a是按列的顺序进行赋值的。将b的前3个元素值1、1、2赋给a的第0列,接着的3个3、5、8赋给a的第1列,最后3个13、21、35赋给a的第2列,a的各元素值为1、3、13、1、5、21、2、8、34。

【答案】第一行为1 3 13,第二行为1 5 21,第三行为2 8 34

8.以下程序运行后,输出结果的第一行为____________,第二行为_________。

(2006年秋阅读程序第10题)

#include

void main()

{ char s[]="efgefgef",t[]="efg";int i,j,k;

for(i=strlen(s)-strlen(t);i>=0;i--)

{ for(j=i,k=0;s[j]==t[k] &&t[k]!='\0';j++,k++);

if(t[k]=='\0') printf("%d\n",i);

}

}

【解析】本程序的功能是从后往前找子串。函数strlen求字符串实际长度,s的长度为8,t的长度为3,i的初值为8-3=5。从s的第5个字符开始,即倒数第3个开始,与t比较,若连续3个字符都相等,则输出i的值。执行下次循环,i减1,即s往前移一个字符,继续比较,找到相等的输出s下标i。本题当i=3时和i=0时s的连续3个字符与t的字符相等。

【答案】第一行为3,第二行为0

9.以下程序运行时输出结果中第一行是___________ ,第三行是___________ 。

(2009年春阅读程序第9题)

#include

define N 5

void main()

{ static char a[N][N];

int i,j,t,start=0,end=N-1;

char str[]="123",ch;

for(t=0;t<=N/2;t++)

{ ch=str[t];

for(i=j=start;i

for(j=start;j

for(i=end;i>start;i--)a[i][j]=ch;

for(j=end;j>start;j--)a[i][j]=ch;

if(start==end) a[start][end]=ch;

start++,end--;

}

for(i=0;i

{ for(j=0;j

printf("\n");

}

}

【解析】本程序将一维数组str的三个元素值'1'、'2'、'3'中的一个赋给一个5*5的二维数组。最后输出的二维数组是%c格式,字符'1'的输出就是1。

第1个外循环是将外围元素臵为'1':

第1个内循环臵a[0][0],a[1][0],a[2][0],a[3][0]为'1'

第2个内循环臵a[4][0],a[4][1],a[4][2],a[4][3]为'1'

第3个内循环臵a[4][4],a[3][4],a[2][4],a[1][4]为'1'

第4个内循环臵a[0][4],a[0][3],a[0][2],a[0][1]为'1'

可见,是从a[0][0]开始按逆时针方向进行赋值。

第2个外循环是将第二层元素臵为'2':从a[1][1]开始也是按逆时针方向进行赋值。

第3个外循环只执行if语句,将最后一个中间的元素a[2][2]臵为'3'。

最后得到的数组为:"11111","12221","12321","12221","11111"。

【答案】第一行是11111,第三行是12321

3.3.2 结构体变量和结构体数组

1.以下结构变量stu1的声明中,错误的是________ 。(2008年春选择题第30题)

A.typedef struct stu{char name[10];float score;}STU;STU stu1;

B.#define STU struct stu

STU{ char name[10];; float score;} stu1;

C.struct stu{char name[10];float score;}stu1;

D.struct stu{ char name[10];float score;}STU;STU stu1;

【解析】A用typedef给结构体类型名起了一个别名STU,然后用类型名STU定义变量stu1,等价于struct stu stu1;。B用宏定义的方式将宏名STU替代字符串struct stu,以后只要是STU全都用struct stu替代。C在定义结构体类型名的同时定义了结构体变量名,是最常用的定义方式,其中的类型名stu也可缺省。D中定义结构体类型stu的同时定义了一个结构体变量STU,此处STU是变量名,不是类型名,后面的STU stu1;是错误的。

【答案】D

2.以下程序运行时输出到屏幕的结果第一行是________ ,第二行是________ 。

(2009年秋阅读程序第14题)

#include

typedef struct fact

{ int m,z;

}FACT;

FACT fun1(FACT t1,FACT t2)

{ FACT t3;

t3.m=t1.m*t2.m ;

t3.z=t1.z*t2.m+t2.z*t1.m;

return t3;

}

FACT fun2(FACT t)

{ int m,n,k;

m=t.m;

n=t.z;

while(k=m%n)

{ m=n;n=k; }

t.m=t.m/n;

t.z=t.z/n;

return t;

}

void main()

{ FACT s,s1={8,4},s2={6,5};

s=fun1(s1,s2);

printf("%d,%d\n",s.z,s.m);

s=fun2(s);

printf("%d,%d",s.z,s.m);

}

【解析】函数fun1根据t1和t2的值计算结构体变量t3的值并返回。函数fun2的功能是求最大公约数。注意输出顺序,将先计算得到的后输出。

t3.m=t1.m*t2.m=8*6=48

t3.z=t1.z*t2.m+t2.z*t1.m;=4*6+5*8=64

s={48,64},作为fun2的实际参数传给t,求48与64的最大公约数,为16,最后得到t.m=48/16=3,t.z=64/16=4。

【答案】第一行是64,48,第二行是4,3

3.以下程序运行时输出至到屏幕的结果第一行是_________ ,第二行是_________。

(2010年春阅读程序第13题)

#include

typedef struct{int x,y;}direction;

int visible(direction s,direction A,direction B,direction C)

{ direction p1,p2;

int d;

p1.x=B.x-A.x;

p1.y=B.y-A.y;

p2.x=C.x-A.x;

p2.y=C.y-A.y;

d=s.x*p1.x*p2.x+s.y*p1.y*p2.y;

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

return d>0;

}

void main()

{ char *ss[]={"invisible","visible"};

direction s={1,1},T={1,1},A={0,0},B={2,1};

puts(ss[visible(s,T,A,B)]);

}

【解析】direction是结构体类型名,属于该结构体类型的变量都有2个成员,主函数中初始化了4个结构体变量,通过函数调用进行输出。子函数中的return语句返回一个逻辑值,其值为0或1,返回的0或者1是数组ss的下标,决定最后输出的是ss[0]还是ss[1]。

现在主要的任务是求visible(s,T,A,B)的值,将四个参数分别传给子函数visible,得:s.x=1,s.y=1; A.x=1,A.y=1; B.x=0,B.y=0; C.x=2,C.y=1

计算:p1.x=B.x-A.x=0-1=-1 p1.y=B.y-A.y=0-1=-1

p2.x=C.x-A.x=2-1=1 p2.y=C.y-A.y=1-1=0

d=s.x*p1.x*p2.x+s.y*p1.y*p2.y=1*(-1)*1+1*(-1)*0=-1

所以,输出d的值为-1。返回d>0,因为d为-1故d>0不成立,返回的值为0。ss的下标为子函数的返回值0。最后执行puts(ss[0]),输出的是前面的那个字符串“invisible”。

【答案】第一行是-1,第二行是invisible

4.程序功能:选票统计。二维数组s中保存了投票后10张有效选票上所填写的候选人姓名,结构数组stat中保存统计结果。程序运行后的输出结果是“liu:2 wang:5 zhao:3”。

(2007年秋完善程序第15题)

#include

#include

typedef struct

{ char name[20]; /*候选人姓名*/

int count; /*候选人得票数*/

}COUNT;

int count(char x[][20],int n, _________________)

{ int i,j,k=0; /*k表示被选中的人数*/

for(i=0; ______________; i++) /*n张选票,循环n次*/

{ for(j=0;j

if(strcmp(st[j].name,x[i])==0)

{ __________________ ; break; }

if(j>=k)

{ ___________________;

st[k].count++;

k++;

}

}

return k;

}

main()

{ char s[10][20]=

{"liu","wang","zhao","zhao","wang","liu","wang","zhao","wang","wang"};

COUNT stat[5]={0};

int i,n;

n=count(s,10,stat);

for(i=0;i

printf("%s:%d\t",stat[i].name,stat[i].count);

}

【解析】第一空填的是形式参数,根据实际参数填,实际参数对应位臵为stat,是数组名,该数组属于COUNT类型,第一空填数组类型及数组名,同时中括号不能漏掉。数组类型为COUNT,数组名是函数中用到的st。

第二空填的是循环结束条件,i从0开始,i为多少结束,是循环次数,本题是10次,这在main函数的实际参数的中间这个数体现出来,对应的形式参数为n,填i

第三空是计数,若为某个姓名,则相应变量的值增1。

第四空若票的姓名第一次出现,用strcpy将该姓名复制到结构体数组的一个成员中。

【答案】第一空COUNT st[],第二空i

3.4.1 非递归函数的定义、声明、调用及执行过程

1.以下选项均为fun函数定义的头部,其中错误的是____ 。(2008年春选择题第29题)

A. int fun(int x,int y[])

B. int fun(int x,int y[x])

C. int fun(int x,int y[3])

D.int fun(int x,int *y)

【解析】数组作为函数的参数时,可以只写数组名及中括号,中括号中的下标可以有也可以没有,也可以将数组表示成指针的形式,所以A、C、D都是正确的形式。B的问题是y数组的下标用了动态的变量。

【答案】B

2.若已定义一个有返回值的函数,则以下关于调用该函数的叙述中错误的是_____ 。

(2006年春选择题第28题)

A.函数调用可以作为独立的语句存在

B.函数调用可以出现在表达式中

C.函数调用可以作为一个函数实参

D.函数调用可以作为一个函数形参

【解析】函数调用语句由函数名、实参加分号“;”组成,A正确。函数有返回值,函数调用可以作为表达式的一部分,可以作为函数的实参但不能作为形参。

【答案】D

3.以下程序运行后输出结果中第一行为_________,第二行为____________。

(2007年春阅读程序第10题)

#include

int fun(int a[],int n,int b[])

{ int i=0,j,m=0,c,x;

for(i=0;i

{ x=a[i]; c=1;

for(j=i+1;j

if(a[j]==x) c++;

else { i=j-1; break; }

if(j>=n) i=j;

if(c==1) b[m++]=x;

else { b[m++]=-c; b[m++]=x; }

}

return m;

}

void main()

{ int x[]={4,4,4,4,4,4,4,4,1,2},y[10],i,j,n=10;

n=fun(x,n,y);

for(i=0;i

{ if(i%2==0) printf("\n");

printf("%5d",y[i]);

}

}

【解析】本题是求数组y,y根据数组x的情况得到,返回y的元素个数。本题要注意的是i的变化,i除了作为循环变量改变外还有在内循环中对i的赋值语句。

第1次外循环:i=0,x=a[0]=4,c=1。内循环是计算与a[0]元素相等的元素的个数,共8个,c=8,j=8,接着的内循环因为执行else语句,i变为7,跳出内循环,执行外循环下面的语句,将-c的值-8赋给b[0],x的值4赋给b[1],再执行i++改变循环变量,i为8。

第2次外循环:i=8,x=a[8]=1,c=1,内循环因为a[8]后面的a[9]不为1,所以执行else 语句,i=j-1=8,跳出内循环。c为1,将x赋给b[3],b[3]为1。此时执行i++,i=9,进行第3次循环是否执行的判断。

第3次外循环与第2次类似,将a[9]的值2赋给b[4],循环结束。

主函数输出y数组各元素的值,输2个换行。

【答案】第一行为-8 4,第二行为1 2

4.以下程序运行时,若在键盘上输入2,则输出是______________若在键盘输入i,则输出是______________。(2008年春阅读程序第13题)

#include

#include

int strch(char *s,char ch)

{ int i;

for(i=strlen(s);i>=0;i--)

if(s[i-1]==ch) return i;

if(i<0) return 0;

}

main()

{ char ch,s1[]="as123d2nfghjkm"; int k;

printf("input ch:"); ch=getchar();

k=strch(s1,ch);

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

else printf("not found\n");

}

【解析】本程序的功能是在字符串中查找字符,从字符串的末尾往前找某字符。如果键盘输入2,将2与s1中的最后一个字符比较,不同,再往前一个,直到找到相同的为止,返回的i是从后往前数的字符数,从0开始算,找到最后找不到返回0。子函数中的形参*s 可以看做s[ ],strlen函数的功能是求字符串的实际长度。

【答案】输入2则输出k=7;输入i则输出not found。

3.4.2 函数调用时参数的传递

1.若函数调用时的实参为变量,则以下关于函数形参和实参的叙述中正确的是____ 。

(2009年秋选择题第29题)

A.实参和其对应的形参占用同一存储单元

B.形参不占用存储单元

C.同名的实参和形参占用同一存储单元

D.形参和实参占用不同的存储单元

【解析】实参若为变量,传递的是值,与形参占用各自的内存空间。就是同名的实参与形参也是占用不同的空间。形参在函数调用的时候给其分配内存,调用结束系统收回内存。实参若是数组,传递的是地址,实参和其对应的形参共享内存空间。

【答案】D

2.以下程序运行后的输出结果是______________。(2008年春阅读程序第7题)

#include

int fun(int w1,int w2)

{ return w2-w1; }

main()

{ int w=1,k;

k=fun(fun(w+1,w),w);

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

}

【解析】本题是函数的嵌套调用,尽管嵌套调用了自己,但是不能算递归。因为递归调

用有一个递归结束终止条件的,本调用不存在,只能算嵌套调用。

先计算里面fun函数的参数,fun(w+1,w)即fun(2,1),将2传给w1,1传给w2,返回1-2=-1,所以外面的那个fun函数的参数fun(w+1,w)为-1,再次调用,即fun(-1,1),返回1-(-1)=2。

【答案】2

3.以下程序运行时输出结果是___________ 。(2009年春阅读程序第8题)

#include

int f(int x,int y)

{ return x+y; }

void main()

{ double a=5.5,b=2.5;

printf("%d",f(a,b));

}

【解析】本题的考点是不同类型的参数传递。将实数5.5传给形参x,截取整数部分,为5,同样y为2,返回整数x、y的和,为5+2=7,主函数“%d”格式输出返回值,为整数7。如果要求按“%f”格式输出,则结果应为7.0。

【答案】7

4.以下程序运行时输出到屏幕的结果是___________ 。(2010年春阅读程序第8题)

#include

void swap(int a,int b)

{ int t;

if(a>b) t=a,a=b,b=t;

}

void main()

{ int x=13,y=11,z=12;

if(x>y)swap(x,y);

if(x>z)swap(x,z);

if(y>z)swap(y,z);

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

}

【解析】函数swap的功能是当a>b时,实现两个变量的值的交换,if后面是逗号表达式,尽管没有花括号,但认为是一个语句,依次执行每个赋值语句。因为没有返回语句,而且函数的值是单向传递的,主函数中的x,y,z的值没有交换。

【答案】13 11 12

5.以下程序运行后的输出结果是______________。(2006年秋题阅读程序第7题)

#include

void fun(int x,int y,int *z)

{ y=x*x;*z=x*x*x; }

void main()

{ int a=2,b=0,c=0;

fun(a,b,&c);

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

}

【解析】本题的考点是参数的传递。a和b的值不变,实参a和b传给子函数的形参x 和y,是值传递,单向的,x和y的值改变了,不影响主函数中a和b的值,它们分别占用

历年二级C语言笔试真题及答案

1 2009年9月全国计算机等级考试二级笔试 试卷 1)下列数据结构中,属于非线性结构的是 A )循环队列 B) 带链队列 C) 二叉树 D )带链栈 2)下列数据结果中,能够按照“先进后出”原则存取数据的是 A) 循环队列 B) 栈 C)队列 D)二叉树 3)对于循环队列,下列叙述中正确的是 A )队头指针是固定不变的 B )队头指针一定大于队尾指针 C )队头指针一定小于队尾指针 D )队头指针可以大于队尾指针,也可以小于队尾指针 4)算法的空间复杂度是指 A )算法在执行过程中所需要的计算机存储空间 B )算法所处理的数据量 C )算法程序中的语句或指令条数 D )算法在执行过程中所需要的临时工作单元数 5)软件设计中划分模块的一个准则是 A) 低内聚低耦合 B) 高内聚低耦合 C) 低内聚高耦合 D) 高内聚高耦合 6)下列选项中不属于结构化程序设计原则的是 A) 可封装 B) 自顶向下 C) 模块化 D) 逐步求精 7)软件详细设计产生的图如下: 该图是 A) N-S 图 B) PAD 图 C) 程序流程图 D) E-R 图 8)数据库管理系统是 A )操作系统的一部分B) 在操作系统支持下的系统软件C) 一种编译系统 D) 一种操作系统 9)在E-R 图中,用来表示实体联系的图形是 A) 椭圆图B) 矩形C) 菱形D) 三角形 10)有三个关系R ,S 和T 如下: 其中关系T 由关系R 和S 通过某种操作得到,该操作为 A) 选择 B) 投影 C) 交 D) 并 11)以下叙述中正确的是 A )程序设计的任务就是编写程序代码并上机 B )程序设计的任务就是确定所用数据结 构 C )程序设计的任务就是确定所用算法 D )以上三种说法都不完整 12)以下选项中,能用作用户标识符的是 A )void B )8_8 C )_0_ D )unsigned 13)阅读以下程序 #include main() { int case; float printF; printf(“请输入2个数:”); scanf(“%d %f”,&case,&pjrintF); printf(“%d %f \n”,case,printF); } 该程序编译时产生错误,其出错原因是 A )定义语句出错,case 是关键字,不能 用作用户自定义标识符B )定义语句出错,printF 不能用作用户自定义标识符 C )定义语句无错,scanf 不能作为输入函 数使用 D )定义语句无错,printf 不能输出case 的值 14)表达式:(int)((double)9/2)-(9)%2的值是 A )0 B )3 C )4 D )5 15)若有定义语句:int x=10;,则表达式 x-=x+x 的值为 A )-20 B )-10 C )0 D )10 16)有以下程序 #include main() { int a=1,b=0; printf(“%d,”,b=a+b); printf(“%d \n”,a=2*b); } 程序运行后的输出结果是 A )0,0 B )1,0 C )3,2 D )1,2 17)设有定义:int a=1,b=2,c=3;,以下语 句中执行效果与其它三个不同的是 A )if(a>b) c=a,a=b,b=c; B )if(a>b) {c=a,a=b,b=c;} C ) if(a>b) c=a;a=b;b=c; D ) if(a>b) {c=a;a=b;b =c;} 18)有以下程序 #include main() { int c=0,k; for (k=1;k<3;k++) switch (k) {default: c+=k case 2: c++;break; case 4: c+=2;break; } printf(“%d \n”,c); } 程序运行后的输出结果是 A )3 B )5 C )7 D )9 19)以下程序段中,与语句:k=a>b?(b>c?1:0):0;功能相同的是 A )if((a>b)&&(b>c)) k=1;else k=0; B )if((a>b)||(b>c) k=1;else k=0; C )if(a<=b) k=0;else if(b<=c) k=1; D )if(a>b) k=1;else if(b>c) k=1; else k=0; 20)有以下程序 #include main() { char s[]={“012xy”};int i,n=0; for(i=0;s[i]!=0;i++) if(s[i]>=?a?&&s[i]<=?z?) n++; printf(“%d \n”,n); } 程序运行后的输出结果是 A )0 B )2 C )3 D )5 21)有以下程序 #include main() { int n=2,k=0; while(k++&&n++>2); printf(“%d %d \n”,k,n); } 程序运行后的输出结果是 A )0 2 B )1 3 C )5 7 D )1 2 22)有以下定义语句,编译时会出现编译错误的是 A )char a=?a? B )char a=?\n?; C )char a=?aa?; D )char a=?\x2d?; 23)有以下程序 #include main() { char c1,c2; c1=?A?+?8?-…4?; c2=?A?+?8?-…5?; printf(“%c,%d \n”,c1,c2); } 已知字母A 的ASCII 码为65,程序运行后的输出结果是

C语言历年考题真题解析

C语言历年考题真题解析 This model paper was revised by the Standardization Office on December 10, 2020

语言规定,在一个源程序中main函数的位置 ______ 。(2010年春选择题第21题) A.必须在最开始 B.必须在最后 C.必须在预处理命令的后面 D.可以在其他函数之前或之后 【解析】main函数也叫主函数,是C语言编译系统提供的特殊函数,可以放在程序中的任何位置,但不能定义在其他函数体内。C程序总是从main函数的第一条语句开始执行。 【答案】D 2.以下叙述中正确的是________ 。(2009年秋选择题第21题) 语言系统以函数为单位编译源程序 函数必须放在程序开始 C.用户定义的函数可以被一个或多个函数调用任意多次 D.在一个函数体内可以定义另外一个函数 【解析】C语言系统以程序为单位编译源程序,程序由函数组成。main函数可以放在其他函数之前或之后。除了main函数外,函数可以被其他函数多次调用。函数不能定义在其他函数体内,即不能嵌套定义。 【答案】C 3.以下叙述中正确的是_________ 。(2008年秋选择题第21题) A.在编译时可以发现注释中的拼写错误 语言程序的每一行只能写一条语句 (){}必须位于程序的开始 语言程序可以由一个或多个函数组成 【解析】C程序的注释不产生编译代码,编译时跳过去,发现不了其中错误。C程序书写格式自由,一行内可以写几个语句,一个语句可以分写在多行上。main函数可以放在程序中的任何位置。C程序可以由一个或多个函数组成,函数可以为空函数,包括main函数。 【答案】D 4.以下关于C语言源程序的叙述中错误的是________。(2007年春选择题第21题) A.一个C源程序由若干个函数定义组成,其中必须有且仅有一个名为main的函数定义 B.函数定义由函数头部和函数体两部分组成 C.在一个函数定义的函数体中允许定义另一个函数 D.在一个函数定义的函数体中允许调用另一个函数或调用函数自身 【解析】一个C语言源程序由若干个函数定义组成,其中必须有且仅有一个名为main的函数定义,函数定义由函数头部和函数体两部分组成。函数可以嵌套调用也可以递归调用,但不能嵌套定义。C的意思是嵌套定义,错误,D的意思是嵌套调用和递归调用,正确。 【答案】C 基本数据类型 1.以下选项中,___________ 是C语言关键字。 (2010年春选择题第22题) 【解析】default是关键字,用在switch语句中。printf和include属于预定义标识符,其中printf是输出函数名,include用在预编译处理命令中。fun是用户自定义标识符。

C语言考试题库及答案复习整理

C 语言理论上机考试选择题部分(共200题) 1、下面程序的输出是___D______ #include void main() { int k=11; printf("k=%d,k=%o,k=%x\n",k,k,k); } A) k=11,k=12,k=11 B) k=11,k=13,k=13 C) k=11,k=013,k=0xb D) k=11,k=13,k=b 2、在下列选项中,不正确的赋值语句是__D______. A) ++t; B) n1=(n2=(n3=0)); C) k=i=j; D) a=b+c=1; 3、下面合法的C 语言字符常量是______A____. A) '\t' B) "A" C) 65 D) A 4、表达式: 10!=9的值是 ________D____. A) true B) 非零值 C) 0 D) 1 5、C 语言提供的合法的数据类型关键字是_____B____. A) Double B) short C) integer D) Char 6、字符(char)型数据在微机内存中的存储形式是__D__. A) 反码 B) 补码 C) EBCDIC 码 D) ASCII 码 7、C 语言程序的基本单位是_____C______. A) 程序行 B) 语句 C) 函数 D) 字符 8、设 int a=12,则执行完语句

a+=a-=a*a 后,a 的值是____D____ A) 552 B) 264 C) 144 D) -264 9、执行下面程序中的输出语句后,输出结果是____B__. #include void main() {int a; printf("%d\n",(a=3*5,a*4,a+5)); } A) 65 B) 20 C) 15 D) 10 10、下面程序的输出是____B______. #include void main() {int x=023; printf("%d\n",--x); } A) 17 B) 18 C) 23 D) 24 11、下面程序的输出的是_____C____. #include void main() {int x=10,y=3; printf("%d\n",y=x/y); } A) 0 B) 1 C) 3 D) 不确定的值 12、已知字母A 的ASCII 码为十进制的65,下面程序的输出是______A_____. #include void main() {char ch1,ch2; ch1='A'+'5'-'3'; ch2='A'+'6'-'3'; printf("%d,%c\n",ch1,ch2); } A) 67,D B) B,C C) C,D D) 不确定的值 13、若要求在if 后一对圆括号中表示a 不等于0的关系,则能正确表示这一关系的表达式为____D__. A) a<>0 B) !a C) a=0 D) a

大学C语言考试试题

C语言模拟试题 一、判断 1、关系运算符<= =与= =的优先级相同。(N ) 2、C语言的函数可以嵌套定义。(N ) 3、若有定义和语句:int a;char c;float f;scanf(“%d,%c,%f”,&a,&c,&f);若通过键盘输入:10,A,12.5, 则a=10,c=?A?,f=12.5.( Y ) 4、变量根据其作用域的范围可以分作局部变量和全局变量。( Y ) 5、#define和printf都不是C语句。( Y ) 6、Int I,*p=&I;是正确的C说明。( Y ) 7、结构体类型只有一种。( N ) 8、在Turbo C中,整形数据在内存中占2个字节。( N ) 9、一个include命令可以指定多个被包含的文件。( N ) 10、有如下说明:int a[10]={1,2,3,4,5,6,7,8,9,10},*p=a;则数值为9的表达式是*(p+8).( Y ) 二、选择 2、C语言中,char类型数据占(A) A、1个字节 B、2个字节 C、4个字节 D、8个字节 3、已知x=43,ch=?A?,y=o;则表达式(x>=y&&ch1;i--) for(j=1;j

C语言期末考试题(含答案)

《C 语言程序设计》期末试卷 一、单项选择题(10x2’=20’) 1、以下叙述正确的是() A )C 语言的源程序不必通过编译就可以直接运行。 B ) C 语言中的每条可执行语句最终都将被转换成二进制的机器指令。 C )C 语言源程序经编译形成的二进制代码可以直接运行。 D )C 语言中的函数不可以单独进行编译。 2、一个C 语言的源程序中() A )必须有一个主函数 B )可能有多个主函数 C )必须有除主函数外其它函数 D )可以没有主函数 3、以下不能定义为用户标识符的是() A )scanf B )Void C )_3com D )int 4、若以下选项中的变量已正确定义,则正确的赋值语句是() A )x1=26.8%3; B )1+2=x2; C )x3=0x12; D )x4=1+2=3; 5、设有定义:floata=2,b=4,h=3;以下C 语言表达式中与代数式h b a *)(2 1 的计算结果不.相符的是() A )(a+b)*h/2 B )(1/2)*(a+b)*h C )(a+b)*h*1/2 D )h/2*(a+b) 6、C 语言中用于结构化程序设计的3种基本结构是() A )顺序结构、选择结构、循环结构 B )if 、switch 、break C )for 、while 、do-while D )if 、for 、continue 7.在while (!x )语句中的!x 与下面条件表达式等价的是() A)x!=0B)x==1C)x!=1D)x==0

8、有以下程序: #include voidmain(){ inti=1,j=1,k=2; if((j++||k++)&&i++) printf(“%d,%d,%d\n”,i,j,k);} 执行后的输出结果是() A)1,1,2 B)2,2,1 C)2,2,2 D)2,2,3 9、有以下程序: #include voidmain(){ inti,s=0; for(i=1;i<10;i+=2) s+=i+1; printf(“%d\n”,s);} 程序执行后的输出结果是() A)自然数1~9的累加和B)自然数1~10的累加和 C)自然数1~9中奇数之和D)自然数1~10中偶数之和 10、有以下函数定义: voidfun(intn,doublex){……} 若以下选项中的变量都已经正确定义并赋值,则对函数fun的正确调用语句是()A)fun(inty,doublem); B)k=fun(10,12.5); C)fun(x,n);D)voidfun(n,x); 二、填空题(10x2’=20’) 11、C语言描述“x和y都大于或等于z”的表达式是:。 12、函数定义时涉及的基本要素是:、、。

大学C语言考试试题及答案

精选考试类文档,如果您需要使用本文档,请点击下载! 祝同学们考得一个好成绩,心想事成,万事如意! 大学C语言考试试题及答案 姓名成绩 温馨提示:同学们,经过培训学习,你一定积累了很多知识,现在请认真、仔细地完成这张试题吧。加油! 一单项选择题 1. 在C语言中,以 D 作为字符串结束标志 A)’\n’ B)’ ’ C) ’0’ D)’\0’ 2.下列数据中属于“字符串常量”的是( A )。 A.“a” B.{ABC} C.‘abc\0’ D.‘a’ 若干个字符构成字符串 在C语言中,用单引号标识字符;用双引号标识字符串

选项B,C,分别用{}和’’标识字符串 选项D,标识字符。 3、以下说法中正确的是( C )。 A、C语言程序总是从第一个定义的函数开始执行 B、在C语言程序中,要调用的函数必须在main( )函数中定义 C、C语言程序总是从main( )函数开始执行 D、C语言程序中的main( )函数必须放在程序的开始部分 4.下列关于C语言的说法错误的是( B )。 A) C程序的工作过程是编辑、编译、连接、运行 B) C语言不区分大小写。 C) C程序的三种基本结构是顺序、选择、循环 D) C程序从main函数开始执行 5.下列正确的标识符是(C )。 A.-a1 B.a[i] C.a2_i D.int t 6.下列C语言用户标识符中合法的是( B )。 A)3ax B)x C)case D)-e2 E)union 7.下列四组选项中,正确的C语言标识符是( C )。 A) %x B) a+b C) a123 D) 123 8、下列四组字符串中都可以用作C语言程序中的标识符的是( A )。 A、print _3d db8 aBc B、I\am one_half start$it 3pai C、str_1 Cpp pow while D、Pxq My->book line# His.age 9.C语言中的简单数据类型包括(D )。 A、整型、实型、逻辑型 B、整型、实型、逻辑型、字符型 C、整型、字符型、逻辑型 D、整型、实型、字符型 10.在C语言程序中,表达式5%2的结果是 C 。 A)2.5 B)2 C)1 D)3 11.如果int a=3,b=4;则条件表达式"a

大学C语言考试题库(含标准答案)

单项选择 ================================================== 题号:1482 执行以下程序段后,输出结果和a的值是()。int a=10 。printf("%d",a++) 。 A、11 和10 B、11 和11 C、10 和11 D、10 和10 答案: C 题号:2100 已知字符'A' 的ASCⅡ代码值是65, 字符变量c1的值是'A',c2 的值是'D'. 执行语句printf("%d,%d",c1,c2-2) 。后, 输出结果是 A、65,66 B、A,B C、 65,68 D、A,68 答案: A 题号:5055 相同结构体类型的变量之间,可以()。 A、比较大小 B、地址相同 C、赋值 D、相加 答案: C 题号:3217 int a[10] 。合法的数组元素的最小下标值为()。 A、1 B、0 C、10 D、9 答案: B 题号:45 能正确表示逻辑关系:" a ≥10或a≤0 " 的C语言表达式是 A、a>=0 | a<=10 B、a>=10 or a<=0 C、a>=10 && a<=0 D、a>=10 || a<=0

D 题号:157 main() {int x=1,a=0,b=0 。 switch (x) { case 0: b++ 。 case 1: a++ 。 case 2: a++ 。b++。} printf("a=%d,b=%d",a,b) 。} 该程序的输出结果是( ) A、2,2 B、2,1 C、1,1 D、1,0 答案: B 题号:4784 设变量a是整型,f 是实型,i 是双精度型,则表达式10+'a'+i*f 值的 数据类型为()。 A、不确定 B、double C、int D、 float 答案: B 题号:1647 以下程序中,while 循环的循环次数是______ main() { int i=0 。 while(i<10) { if(i<1) continue 。 if(i==5) break 。 i++ 。 } } A、死循环,不能确定次数 B、6 C、4 D、1

专升本C语言历年试题及答案

专升本C语言历年考试题及答案 一、单项选择题 1. ___D___是合法的用户自定义标识符。 A、 b-b B、float C、 D、 _isw 2. 若变量已正确定义并赋值,表达式___B___不符合C语言语法。 A、a*b/c; B、3.14%2 C、2, b D、a/b/c 3. ___C__是不正确的字符常量。 A、'n' B、'1' C、"a" D、'101' 4. 在 C 程序中,用___B__表示逻辑值“真”。 A、1 B、非 0 的数 C、非 1 的数 D、大于 0 的数 5. __C____把x、y定义成float类型变量,并赋同一初值3.14。 A、float x, y=3.14; B、float x, y=2*3.14; C、float x=3.14, y=x=3.14; D、float x=y=3.14; 6. 若变量已正确定义,表达式___C___的值不是2。 A、2&3 B、1<<1 C、a==2 D、1^3 7. 若变量已正确定义,语句“if(a>b) k=0; else k=1;”和__C____等价。 A、k=(a>b)?1:0; B、k=a>b; C、k=a<=b; D、a<=b ? 0 : 1; 8. 设变量定义为“int a, b;”,执行下列语句时,输入_D____,则a和b的值都是10。 scanf("a=%d, b=%d",&a, &b); A、10 10 B、10, 10 C、a=10 b=10 D、a=10, b=10 9. 下列程序的输出结果是__D___。

fun(int a, int b, int c) { c =a*b; } void main( ) { int c; fun(2,3,c); printf(”%dn”,c); } A、0 B、1 C、6 D、无法确定 10. 在C程序中,若对函数类型未加说明,则函数的隐含类型为__A___。 A、int B、double C、void D、char 11. 表达式 strlen(”hello”) 的值是___B____。 A、 4 B、 5 C、 6 D、 7 12. 设变量定义为“int a[4];”,则表达式__D____不符合C语言语法。 A、*a B、a[0] C、a D、a++ 13. 设变量定义为“int x, *p=&x;”,则&*p相当于__A___。 A、p B、*p C、x D、*&x 14. 若变量已正确定义,_A___不能使指针p成为空指针。 A、p=EOF B、p=0 C、p=’’ D、p=NULL 15. 对于以下的变量定义,表达式__D____不符合C语言语法。 struct node { int len; char *pk;

计算机二级c语言历年真题及答案

计算机二级c语言历年真题及答案【篇一:国家计算机二级c语言历年真题及答案】 class=txt>c语言程序设计 (考试时间90分钟,满分100分) 一、选择题((1)—(10)、(21)—(40)每题2分,(11)—(20)每题1分,共70分) (1)下列数据结构中,属于非线性结构的是 a)循环队列 b) 带链队列 c) 二叉树 d)带链栈 (2)下列数据结果中,能够按照“先进后出”原则存取数据的是 a) 循环队列 b) 栈 c)队列 d)二叉树 (3)对于循环队列,下列叙述中正确的是 a)队头指针是固定不变的 b)队头指针一定大于队尾指针 c)队头指针一定小于队尾指针 d)队头指针可以大于队尾指针,也可以小于队尾指针 (4)算法的空间复杂度是指 a)算法在执行过程中所需要的计算机存储空间 b)算法所处理的数据量 c)算法程序中的语句或指令条数 d)算法在执行过程中所需要的临时工作单元数 (5)软件设计中划分模块的一个准则是 a) 低内聚低耦合 b) 高内聚低耦合 c) 低内聚高耦合 d) 高内聚高耦合 (6)下列选项中不属于结构化程序设计原则的是 a) 可封装 d) 自顶向下

c) 模块化 d) 逐步求精 (7)软件详细设计产生的图如下: 该图是 a) n-s图 b) pad图 c) 程序流程图 d) e-r图 (8)数据库管理系统是 a)操作系统的一部分 b) 在操作系统支持下的系统软件 c) 一种编译系统 d) 一种操作系统 (9)在e-r图中,用来表示实体联系的图形是 a) 椭圆图 b) 矩形 c) 菱形 d) 三角形 (10)有三个关系r,s和t如下: 其中关系t由关系r和s通过某种操作得到,该操作为 a) 选择 b) 投影 c) 交 d) 并 (11)以下叙述中正确的是 a)程序设计的任务就是编写程序代码并上机调试 b)程序设计的任务就是确定所用数据结构 c)程序设计的任务就是确定所用算法 d)以上三种说法都不完整 (12)以下选项中,能用作用户标识符的是 a)void b)8_8 c)_0_ d)unsigned (13)阅读以下程序

C语言试题及答案

第1章 C语言概述习题 1. 单项选择题 (1) C 语言是在 B 语言的基础上产生的。 A. A B. B C. D D. E (2) 在 C 语言中,每个语句必须以 D 结束。 A. 回车符 B. 冒号 C. 逗号 D. 分号 (3) 标识符和关键字间,要用 C 隔开。 A. 回车符 B. 冒号 C. 空格 D. 分号 (4) 用 C 语言编写的源文件经过编译,若没有产生编译错误,则系统将( B )。 A. 生成可执行目标文件 B. 生成目标文件 C. 输出运行结果 D.自动保存源文件 (5) 下列说法中正确的是( B )。 A. 由于 C 源程序是高级语言程序,因此一定要在 TC 软件中输入 B. 由 C 源程序是字符流组成,因此可以作为文本文件在任何文本编辑的软件中输入 C. 由于C 程序是高级语言程序,因此输入后即可执行 D. 由于 C 程序是高级语言程序,因此它由命令组成 (6) 下列说法中正确的是( A )。 A. C 语言程序由主函数和 0 个或多个函数组成 B. C 语言程序由主程序和子程序组成 C. C 语言程序由子程序组成 D. C 语言程序由过程组成 (7) 下列说法中错误的是( D )。 A. 主函数可以分为两个部分:主函数说明部分和主函数体 B. 主函数可以调用任何非主函数的其他函数 C. 任何非主函数可以调用其他任何非主函数 D. 程序可以从任何非主函数开始执行 2. 填空题 (1) C 语言只有 32 个关键字和 9 种控制语句。 (2) C 语言是一种“中级语言”,既具有高级语言的特点又具有低级语言的特点;既适合于开发系统软件又适合于编写应用程序。 (3) 每个源程序有且只有一个主函数,系统总是从该函数开始执行C语言程序。 (4) 在 C 语言程序中允许出现的字符集是 ASCII码字符集。 (5) C 语言的程序中有特殊含义的英语单词称为保留字。 (6) C 语言标识符的长度是前 8 位有效。 (7) C 语言中,标识符的定义规则是以字母或下划线为开头。 (8) C 语言程序的注释可以出现在程序中的任何地方,它总是以 /* 符号作为开始标记,以 */ 符号作为结束标记。 第2章数据类型运算符和表达式习题 1. 单项选择题 (1) 以下选项中,正确的 C 语言整型常量是 D 。 A. 32L B. 510000 C. -1.00 D. 567 (2) 以下选项中, D 是不正确的 C 语言字符型常量。

C语言期末考试真题

第五套 一、判断题 1.(F)在一个c程序中,main函数必须出现在所有函数之前。 2.(F)#include”stdio.h”是每个程序中必须写的。 3.(F)c程序总是从程序的第一条语句开始执行的。 4.(F)以下各数均不是合法的八进制数:256,03A2,-0127。 5.(F)语句scanf(“%7.2f”,&a):是一个合法的scanf函数。 6.(T)整数-32100可以赋值给int型和long int型变量。 7.(F)表达式(j=3,j++)的值是4. 8.(F)在c程序中,赋值运算符的优先级最低。 9.(F)7&3+12的值是15. 10.(F)若a是实型变量,在执行了a=5后,a将变为整型变量。 11.(F)若有i=10,j=2:则执行完i*=j+8:后i的值是28. 12.(F)若a是实型变量,c程序中允许以下赋值a=10:因此实型变量中允许存放整型变量。 13.(T)在c语言中,逻辑“真”等价于不等于0的数。 14.(F)开关语句switch最多可以形成3个分支. 15.(T)Int a=1,b=2,c=3:if(a>c)b=a:a=c:c=b:则c的值是2. 16.(T)Int i=3,j=5:if(i>j):是正确的。 17.(F)若有i=10,j=0:则执行完语句if(j=0):i++:elsei --:i的值为11 18.(T)break语句只能用于循环语句switch-case语句中。 19.(T)若有说明int c:则while(c=getchar()):是正确的c语句。 20.(T)Int a[10]:for(i=1:i<10:i++)a[i-1]=i:能使数组元素分别取值{1,2,3,4,5,6,7,8,9,10}. 21.(F)二维数组在内存中储存以列为主序方式存放。 22.(T)c程序中#include和#define均不是c语句 23.(F)通过return语句,函数可以带回一个或一个以上的返回值 24.(T)在程序中定义了一个结构体类型后,可以多次用它来定义具有该类型的变量 25.(T)对结构体类型的变量的成员可以象普通变量一样参与各种运算 二、选择题 1.(A)是构成c语言程序的基本单位。 A函数 B变量 C子程序 D语句 2.(B)以下叙述中正确的是 A.c语言的源程序不必通过遍译就可以直接运行。 B.语言中的每条可执行语句最终都将被转换成二进制的机器指令 C.c源程序经编译形成的二进制代码可以直接运行

C语言上机作业试题5套含答案

第一次上机作业(2014): 要求: ?独立完成,上机调试通过后上交 ?作业提交邮箱: ?邮件主题命名:班级学号姓名(第1次作业), 例如:电1301班2王鹏(第1次作业) ?以附件形式将每次作业的所有程序源程序压缩打包后提交,压缩文件命名格式同上。 ?程序必须采用缩进格式 1.大写字母转换成小写字母 从键盘输入一个大写英文字母,输出相应的小写字母。 例:输入G 输出g 2.求平方根 输入一个实数x,计算并输出其平方根(保留1 位小数)。 例:输入17 输出The square root of 17.0 is 4.1 3.温度转换 设计一个程序将华氏温度转换成摄氏温度c = 5/9(f-32) a)输入华氏温度(实型) b)输出的摄氏温度结果保留两位小数 例:Please input Fahrenheit temperature: 76.8 The corresponding Celsius temperature is 24.89 4. 计算旅途时间 输入二个整数time1 和time2,表示火车的出发时间和到达时间,计算并输出旅途时间。 (输入的有效的时间范围是0000 到2359,不需要考虑出发时间晚于到达时间的情况。) 例:输入712 1411 (出发时间是7:12,到达时间是14:11) 输出The train journey time is 6 hours 59 minutes. 5. 数字加密 输入一个四位数,将其加密后输出。方法是将该数每一位上的数字加9,然后除以10 取余,做为该位上的新数字,最后将第1 位和第3 位上的数字互换,第2 位和第4 位上的数字互换,组成加密后的新数。 例:输入1257 输出The encrypted number is 4601 思考题:你能否编程找出谁做的好事? 有四位同学中的一位做了好事,不留名,表扬信来了之后,校长问这四位是谁做的好事。 ?A说:不是我。 ?B说:是C。 ?C说:是D。 ?D说:他胡说。 已知三个人说的是真话,一个人说的是假话。现在要根据这些信息,找出做了好事的人。 第二次上机作业(2014): 要求: ?独立完成,程序必须采用缩进格式,上机调试通过后上交

c语言期中考试试题及答案

《C语言程序设计》期中考试试卷 课程编号:03402513试卷类型:A卷考试形式:笔试考试日期: 注意事项:1.请将试卷最后一页的答题纸撕下,将答案填写在其中;2.交卷时请确认答题纸是否按要求写好姓名等信息并与试题一起上交;3.不准携带任何书籍、资料、纸张等。4.草稿纸用试卷的背面。 一、单项选择题(1空1分,共20分) 1、C语言程序的基本结构是(【1】) 。 【1】A) 函数B) 语句C) 字符D) 程序行 2、一个C程序的执行是(【2】) 。 【2】A) 从本程序的主函数开始,到本程序的主函数结束 B)从本程序的第一个函数开始,到本程序的最后一个函数结束 C) 从本程序的主函数开始,到本程序的最后一个函数结束 D)从本程序的第一个函数开始,到本程序的主函数结束 3、下列四个叙述中,错误的是(【3】) 。 【3】A) 一个C源程序必须有且只能有一个主函数 B) 一个C源程序可以含一个或多个子函数 C) 在C源程序中注释说明必须位于语句之后 D) C源程序的基本结构是函数 4、下面不属于C语言保留字的是(【4】) 。 【4】A) short B) ELSE C) extern D) for 5、下列四个叙述中,正确的是(【5】) 。 【5】A) 库函数也是C语言本身的组成部分 B) C语言中的输入输出操作是由相应语句完成的 C) 库函数是C编译系统提供的功能函数 D) 标题文件(头文件)可以在程序的函数内部调用 6、下列四组数据类型中,C语言允许的一组是(【6】)。 【6】A) 整型、实型、逻辑型B) 整型、实型、字符型 C) 整型、双精度型、布尔型D) 整型、实型、复型 7、在C语言中不同数据类型的的长度是(【7】)。 【7】A) 固定的B) 由用户自己定义的 C) 任意的D) 与机器字长有关

c语言历年考题真题解析

(2010年春选择题第21题) A.必须在最开始 B.必须在最后 C.必须在预处理命令的后面 D.可以在其他函数之前或之后 【解析】main函数也叫主函数,是C语言编译系统提供的特殊函数,可以放在程序中的任何位置,但不能定义在其他函数体内。C程序总是从main函数的第一条语句开始执行。 【答案】D 2.以下叙述中正确的是________ 。(2009年秋选择题第21题) 语言系统以函数为单位编译源程序 函数必须放在程序开始 C.用户定义的函数可以被一个或多个函数调用任意多次 D.在一个函数体内可以定义另外一个函数 【解析】C语言系统以程序为单位编译源程序,程序由函数组成。main函数可以放在其他函数之前或之后。除了main函数外,函数可以被其他函数多次调用。函数不能定义在其他函数体内,即不能嵌套定义。 【答案】C 3.以下叙述中正确的是_________ 。(2008年秋选择题第21题) A.在编译时可以发现注释中的拼写错误 语言程序的每一行只能写一条语句 (){}必须位于程序的开始 语言程序可以由一个或多个函数组成

【解析】C程序的注释不产生编译代码,编译时跳过去,发现不了其中错误。C程序书写格式自由,一行内可以写几个语句,一个语句可以分写在多行上。main函数可以放在程序中的任何位置。C程序可以由一个或多个函数组成,函数可以为空函数,包括main函数。 【答案】D 4.以下关于C语言源程序的叙述中错误的是________。(2007年春选择题第21题) A.一个C源程序由若干个函数定义组成,其中必须有且仅有一个名为main的函数定义 B.函数定义由函数头部和函数体两部分组成 C.在一个函数定义的函数体中允许定义另一个函数 D.在一个函数定义的函数体中允许调用另一个函数或调用函数自身 【解析】一个C语言源程序由若干个函数定义组成,其中必须有且仅有一个名为main 的函数定义,函数定义由函数头部和函数体两部分组成。函数可以嵌套调用也可以递归调用,但不能嵌套定义。C的意思是嵌套定义,错误,D的意思是嵌套调用和递归调用,正确。 【答案】C 基本数据类型 1.以下选项中,___________ 是C语言关键字。 (2010年春选择题第22题) 【解析】default是关键字,用在switch语句中。printf和include属于预定义标识符,其中printf是输出函数名,include用在预编译处理命令中。fun是用户自定义标识符。 【答案】D 2.在以下各组标识符中,均可以用作变量名的一组是_____。(2007年秋选择题第22

C语言期末上机考试题及答案

C语言上机考试题—01 1. //#include #include double fun( int n ) { double sum=0,a=1; for(;n>0;n--,a++) sum=sum+1/(a*(a+1)); return sum; } main() { // clrscr(); printf("%f\n", fun(10)); } 2. #include main() { int k,m,s=0,i,b=0; for(k=10000;k<=20000;k++ ) { if(k%10==7) { for(i=2,b=0;i main() { int a; printf("请输入一个需要判 断的年份:\n"); scanf("%d",&a); if(a%4==0&&a%100!=0) printf("是闰年\n"); else if(a%400==0) printf("是闰年 \n"); else printf("不是闰 年\n"); } C语言上机考试题—02 1. //#include #include double fun( int n ) { double sum=0,a=1; for(;n>0;n--,a++) sum=sum+1/(a*(a+1)); return sum; } main() { // clrscr(); printf("%f\n", fun(10)); } 2. #include fun(int n) { int i,j=0; for(i=2;i #include main() { char str[81]; int i,j=0,w=1,s=0; printf("请输入一串字符: \n"); gets(str); for(i=0;i

C语言试题库(完整版)

C语言试题库 一、单项选择 第一章 C语言概述 (1)一个C程序的执行是从 A、本程序的MAIN函数开始,到MAIN 函数结束。 B、本程序文件的第一个函数开始,到本程序文件的最后一个函数结束。 C、本程序的MAIN函数开始,到本程序的最后一个函数结束。 D、本程序文件的第一个函数开始,到本程序的MAIN函数结束。(2)以下叙述正确的是 A、在C程序中,MAIN函数必须位于程序的最前面。 B、 C程序的每行中只能写一条语句。 C、 C语言本身没有输入输出语句。 D、在对一个C程序进行编译的过程中,可发现注释中的拼写错误。(3) C语言规定,在一个源程序中,MAIN主函数的位置是在: A、必须在最前面。 B、必须在系统调用的库函数的后面 C、可以在任意位置。

D、必须在最后面 (4)一个C程序是由: A、一个主程序和若干子程序组成 B、函数组成 C、若干过程组成 D、若干子程序组成 (5)以下叙述不正确的是: A、一个C源程序可由一个或多个函数组成 B、一个C源程序必须包含一个MAIN函数 C、 C程序的基本组成单位是函数 D、在C程序中,注释说明只能位于一条语句的后面 第二章数据类型、运算符与表达式 (1)若x, i, j, k都是int型变量,则计算下面表达式后,x的值为x=( i=4, j=16, k=32) A、4 B、16 C、32

D、52 (2)下列四组选项中,均不是C语言键字的选项是 A、define , IF, type B、getc, char, printf C、include, scanf, case E、 if, struct, type (3)下面四个选项中,均是不合法的用户标识符的选项是A、A,P_0,do B、float,1a0, _A C、b-a, goto, int D、_123, temp, INT (4)若有代数式3ae/bc,则正确的C语言表达式是A、a/b/c*e*3 B、3*a*e/bc C、3*a*e/b*c D、a*e/c/b*3 (5)已知各变量的类型说明如下:

相关文档
最新文档