东北大学C语言程序设计复习题

第一部分(填空题):

1.按照C语言规定的用户标识符命名规则,不能出现在标识符中的是()。

A.大写字母B.连接符C.数字字符D.下划线

答案:B

2.下面关于计算机正确的是()。

A.计算机由硬件系统和软件系统两部分构成

B.只要有硬件系统,计算机就能工作

C.计算机只能处理文本信息

D.计算机只能处理计算问题

答案:A

3.()是c语言提供的合法的数据类型关键字。

A.IntB.longC.CharD.integer

答案:B

4.面向过程的高级语言包括()。

A.C,JAVAB.C,BASICC.C++.NET,ASPD.C,VB

答案:B

5.软件按功能可以分为:应用软件、系统软件和支撑软件(或工具软件)。下面属于应用软件的是()。

A.编译程序B.操作系统C.教务管理系统D.汇编程序

答案:C

6.以下选项中关于C语言常量的叙述错误的是()。

A.所谓常量,是指在程序运行过程中,其值不能被改变的量

B.常量分为整型常量、实型常量、字符常量和字符串常量

C.常量可分为数值型常量和非数值型常量

D.经常被使用的变量可以定义成常量

答案:D

7.下面描述中正确的是()。

A.C语言提供了专门的输入/输出语句

B.C语言调用输入/输出函数时需要使用include命令包含头文件

C.C语言可以直接使用输入/输出函数

D.输入/输出函数所在的头文件是stdlib.h

答案:B

8.假设有char型变量c1,c2,执行下面程序段:

c1=gatchar();

c2=gatchar();

printf(“c1=%c,c2=%c\n”,c1,c2);

如果c1和c2的值分别为字符a和b,则从键盘正确的输入方式是()。

A.ab回车B.a回车b回车

B.C.a空格b回车D.atabb回车

答案:A

9.下面描述中正确的是()。

A.printf()函数的输出列表项只允许是变量

B.printf()函数的输出列表项可以是常量、变量以及表达式

C.printf()函数输出列表项也可以是另一个printf()函数

D.printf()函数的输出列表项之间用空格分隔

答案:B

10.假设有:inta,b;scanf(%d,%d,a,b);

为了得到a和b分别为10和20,从键盘正确输入数据的是()。

A.10空格20回车B.10回车20回车

C.10,20回车D.10,20,回车

答案:C

11.下面说法正确的是()。

A.表达式计算时要考虑运算符的优先级和结合性

B.表达式计算需要考虑运算符的优先级

C.表达式计算时需要考虑运算符的结合性

D.括号()可以改变运算符的优先级

答案:A

12.下面说法正确的是()。

A.负数参与“/”和“%”运算时,其结果与C89或C99的标准有关

B.C语言的“/”和“%”运算可以写成5/0或5%0的形式

C.赋值运算要求他的左操作数可以是变量、常量或另一个表达式

D.表达式(x=ab)(y=cd)是错误的写法

答案:A

13.假设有下面程序段:inta;floatb;b=a=4.5;

下面错误的描述是()。

A.变量a的值是4B.变量b的是4.0

C.赋值表达式a=4.5的结果值是4D.变量b的值是4.5

答案:D

14.假设a,b,c,x,y均为int型,下面说法正确的是()。

A.表达式“a+=2”等价于表达式“a=a+2”

B.表达式“a*=b+c”等价于表达式“a=a*b+c”

C.表达式“y=x++”等价于表达式“x++,y=x”

D.表达式“y=x++”等价于表达式“y=x,x++”

答案:D

15.逻辑运算符两侧运算对象的数据()。

A.只能是0或1B.只能是0或非0正数

C.只能是整型或字符型数据D.可以是任何类型的数据

答案:D

16.sizeof(float)是()。

A.一个双精度型表达式B.一个整型表达式

C.一个函数调用D.一个不合法的表达式

答案:B

17.结构化程序的实现由()组成程序逻辑。

A.顺序结构B.分支结构

C.循环结构D.顺序结构、分支结构和循环结构

答案:D

18.假设变量a为整型量,语句if(a!=0);和语句if(a);相比较,正确答案()。

A.两者作用不同B.两者作用等价

C.两者作用相反D.if(a)语法错

答案:B

19.为了避免在嵌套的条件语句if-else中产生二义性,C语言规定:else子句总是与()。

A.缩排位置相同的if配对

B.其之前最近且不带else的if配对

C.其之前最近的if配对

D.第一个if配对

答案:B

20.阅读下面程序:该程序()。

#includestdio.h

main()

{

intx=-10,y=5,z=0;

if(x=y+z)

printf(***\n);

else

printf($$$\n);

}

A.有语法错不能通过编译

B.输出***

C.可以通过编译但不能通过连接

D.输出$$$

答案:B

21.下面说法错误的是()。

A.当条件满足时重复执行某一段程序(代码)就是循环

B.循环体只有一条语句时,可以不写成复合语句形式

C.while语句、for语句可以相互转换

D.do...while语句可以实现前判断结构

答案:D

22.下面说法错误的是()。

A.break语句可退出循环体而执行该循环语句后面的语句

B.break语句可以出现在switch语句和循环语句中

C.continue语句只能出现在循环结构中

D.goto语句即可以从函数体跳出,也可以跳入函数体中

答案:D

23.以下不是无限循环的是()。

A.for(y=6,x=1;xy;x+=2,y-=2);B.for(;;);

C.while(-5)x++;D.for(i=20;;i--)sum+=i;

答案:A

24.对以下说明语句的正确理解是()。

inta[10]={6,7,8,9,10};

A.将5个初值依次赋给a[1]至a[5]

B.B.将5个初值依次赋给a[0]至a[4]

C.将5个初值依次赋给a[6]至a[10]

D.因为数组与初值的个数不相同,所以此语句不正确

答案:B

25.判断字符串a和b是否相等,应当使用()。

A.a==bB.a=bC.strcpy(a,b)D.strcmp(a,b)

答案:D

26.在c语言的函数调用过程中,如果函数funA调用了函数funB,函数funB有调用了函数funA,则()。

A.称为函数的直接递归B.称为函数的间接递归

C.称为函数的递归定义D.c语言不允许这样的递归形式

答案:B

27.若有说明:inta=2,*p=a,*q=p;,则以下非法的赋值语句是()。

A.p=q;B.*p=*q;C.a=*q;D.q=a;

答案:D

27.若有定义:inta[2][3];,则以下对a数组元素地址的正确表示为()。

A.*(a+1)B.*(a[1]+2)

C.a[1]+3D.a[0][0]

答案:A

29.以下对C语言中共用体类型数据的叙述正确的是()。

A.可以对共用体变量名直接赋值

B.共用体类型定义中不能出现结构体类型的成员

C.一个共用体变量中不能同时存放其所有成员

D.一个共用体变量中可以同时存放其所有成员

答案:A

30.若用fopen打开一个新的二进制文件,要求文件既能读又能写,则应选用的文件方式字符串是()。

A.wb+B.r+C.rb+D.ab+

答案:A

第二部分(编程题):

1.判断一个4位数是否为回文数(正读反读都一样的数)?

答案:

#includestdio.h

intmain()

{inti;

inta,b,c,d;

printf(....\n);

for(i=;i=;i++)

{a=i/;

b=i%10;

c=(i/)%10;

d=(i%)/10;

if(a==bc==d)

printf(%6d,i);}

}

2.输入正整数n,输出n行n列的空心四边形图案。以下是n=4的图案

****

**

**

****

答:

#includestdio.h

intmain()

{

inti,j,n;

printf(请输入n);

scanf(%d,n);

for(i=1;i=n;i++)

{

for(j=1;j=n;j++)

if(i==1

j==1

i==n

j==n)

printf(*);

else

printf();

printf(\n);

}

return0;

}

3.有一个分数序列:2/1,3/2,5/3,8/5,13/8,…..编程求此序列的前20项之和。

答:

#includestdio.h

intmain()

{

inta,b,c,i;

doublesum=0;

a=2,b=1;

for(i=0;i20;i++){

sum+=1.0*a/b;

c=b;

b=a;

a=a+c;

}

printf(%.2lf\n,sum);

return0;

}

4.从键盘上输入一个百分制成绩S,按下列原则输出其等级:若成绩大于或等于90,则等级为A;若成绩大于等于80,小于90,则等级为B;若成绩大于等于70,小于80,则等级为C;若成绩大于等于60,小于70,则等级为D;若成绩小于60,则等级为E。

答:

#includestdio.h

voidmain()

{

intdata;

chargrade;

printf(Pleaseenterthescore:);

scanf(%d”,data);

switch(data/10){

case10:

case9:grade=’A’;break;

case8:grade=’B’;break;

case7:grade=’C’;break;

case6:grade=’D’;break;

default:grade=’E’;

}

printf(thegradeis%c”,grade);

}

第三部分(简答题):

1.说明算法可以采用哪几种控制结构组合。

答:算法的控制结构给出了算法的基本框架,不仅决定了算法中各操作的执行顺序,也直接反映了算法的设计是否符合结构化原则。一个算法一般可以用顺序、选择、循环三种基本控制结构,通过顺序或嵌套组合而成。

2.c语言程序的基本单位是什么?它的结构又如何?

答:函数是c语言程序的基本模块单元。

任何函数(包括主函数main())都是由函数说明和函数体两部分组成。其一般结构如下:[函数类型]函数名(函数参数表)

{说明语句部分;

执行语句部分;

}

3.分析下面程序的执行过程,给出输出结果。

main()

{

int x=2,y=3,z=4,a=0;

a=xz?y:z;

printf(%d,a);

}

答:3。a=xz?y:z判断方式为:若x小于z则将a赋值y;否则,则将a赋值z,题目中x的值为2,z的值为4,x小于z,因此将a赋值3。

4.分析下面程序的执行过程,给出输入55时的输出结果。

main()

{int a;

intb=33;

scanf(%d,a);

if(a50)printf(%d,b);

if(a40)printf(%d,a);

if(a30)printf(%d,a);

}

答:

a=55,a大于50于是执行printf(%d,b),输出b的值,b的值为33,;

接着a大于40,输出a的值,a的值为55;

最后a大于30,输出a的值,a的值为55;

故输出为

5.分析下面程序的执行过程,若键盘输入为5,给出输出结果。

main()

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

switch(x){

case0:b++;

case1:a++;

case2:a++;

b++;

}

printf(a=%d,b=%d,a,b);

}

答:a=2,b=1

6.分析下面程序的执行过程,给出结果说明break和continue的区别。

main()

{ inta=1,b;

for(b=l;b10;b++)

{ if(b7)

{a=1;

continue;

}

if(b==8)a++;

if(b8)break;

a++;

}

printf(%d\n,a);

}

答:4

7.分析下面程序的执行过程,给出输出结果。

main()

{inta=10;

if(a++10)

print(%d\n,++a);

else

print(%d\n,a--);

}

答:10

8.分析下面程序的执行过程,给出输出结果。

main()

{inti=0,s=0;

do{

if(i%2)

{i++;continue;}

i++;

s+=i

}while(i7)

print(%d\n,s);

}

;

答:16




转载请注明:http://www.aierlanlan.com/grrz/2184.html