C复习资料.docx

上传人:b****5 文档编号:6686956 上传时间:2023-01-09 格式:DOCX 页数:22 大小:45.90KB
下载 相关 举报
C复习资料.docx_第1页
第1页 / 共22页
C复习资料.docx_第2页
第2页 / 共22页
C复习资料.docx_第3页
第3页 / 共22页
C复习资料.docx_第4页
第4页 / 共22页
C复习资料.docx_第5页
第5页 / 共22页
点击查看更多>>
下载资源
资源描述

C复习资料.docx

《C复习资料.docx》由会员分享,可在线阅读,更多相关《C复习资料.docx(22页珍藏版)》请在冰豆网上搜索。

C复习资料.docx

C复习资料

《C语言程序设计》综合复习资料

一、单选题

1.C语言中基本数据类型有。

C

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

C)整型、实型、字符型D)整型、实型、字符型、逻辑型

2.在C语言中,数字O29是一个。

A

A)八进制数B)十进制数C)十六进制数D)非法数

3.在以下关于C语言的不严格的叙述中,错误的说法是。

A

A)在标识符中,大写字母和小些字母的意义相同

B)有些不同类型的变量可以在一个表达式中运算

C)在赋值表达式中等号 “=”左边的变量和右边的值可以是不同类型

D)同一个运算符号在不同的场合可以有不同的含义

4.下列关于C语言用户标识符的叙述中正确的是。

B

A)用户标识符中可以出现下划线和中划线(减号)

B)用户标识符中不可以出现中划线,但可以出现下划线

C)用户标识符中可以出现下划线,但不可以放在用户标识符的开头

D)用户标识符中可以出现下划线和数字,它们都可以放在用户标识符的开头

【解析】考查C语言中的用户标识符规则,在C语言程序设计中,用户标识符是由字母、数字和下划线组成的,并且第一个字符必须是字母或下划线。

5.结构化程序设计方法中有三种基本控制结构,以下不正确的是。

D

A)顺序结构B)选择结构C)循环结构D)数组结构

6.C语言提供的合法关键字是。

D

A)swicthB)chaC)CaseD)default

7.以下非法的赋值语句是C

A)n=(i=2,++i);B)j++;C)++(i+1);D)x=j>0;

【解析】对表达式不能进行自加自减运算。

8.在以下一组运算符中,优先级最高的运算符是。

A)<=B)=C)%D)&&

【解析】C语言常用的积累运算符的优先级关系是:

逻辑非“!

”>算术运算符>关系运算符>逻辑与“&&”>逻辑或“||”>赋值运算符>逗号运算符。

由于C选项为求余运算符,所以本题正确答案为C选项。

9.以下四个选项中不能看作一条语句的是。

D

A){;}B)a=0,b=0,c=0;C)if(a>0)D)if(b==0)m=1;n=2;

【解析】C语言的基本语句包含控制语句、表达式语句、空语句、复合语句、函数调用语句。

控制语句:

完成一定的控制功能,C语言有9种控制语句,分别是if-else、while、continue、

switch、return、for、do-while、break、goto;

表达式语句:

由各类表达式构成,后面加上一个分号,就可以单独作为一条语句出现在一行,多数情况下含赋值运算符。

复合语句:

由一对大括号将一组语句序列括起来形成一个程序段,经常出现在选择或循环语句中。

空语句:

只有一个分号,表示什么也不做。

函数调用语句:

由函数名、圆括号内加实参表和分号组成。

本题中D选项为三条语句,一条控制语句,链条表达式语句。

正确答案为D选项。

10.能将高级语言编写的源程序转换为目标程序的软件是。

D

A)汇编程序B)编辑程序C)解释程序D)编译程序

11.以下选项中合法的实型常数是。

C

A)5E2.0B)E-3C).2E0D)1.3E

【解析】以指数形式表示实数时,字母e或E之前必须有数字,且e后面指数必须为整数。

12.依据C语言的语法规则,下列合法标识符是A

A)ElseB)elseC)user$2D)5_examp

【解析】标识符的定义有明确的规则:

(1)标识符只能由字母、数字、下划线三者构成;

(2)标识符的首字符必须是字母或者下划线;(3)标识符命名对字母大小写敏感;(4)标识符定义不能和C语言关键字(KeyWords)相同。

C语言中标识符对大小写敏感,sum和SUM是不同的标识符。

13.以下选项中合法的用户标识是。

A)longB)_2TestC)3DmaxD)A.dat

【解析】选项中A为保留字;选项C没有以字母或者“_”开头;选项D中不能有“.”

14.在C语言中,字符型数据在内存中的存储形式是。

D

A)原码B)补码C)反码D)ASCII码

【解析】数据在内存中是以二进制形式存放的。

数值是以补码表示的。

c的char数据属于基本类型,在内存中字符的存储实际上是把字符相对应的ASCII代码放到存储单元中的。

而这些ASCII代码值在计算机中也是以二进制形式存放的。

这个与整型的存储很相似。

因此这两类之间的转换也比较方便!

整型:

一个正数的补码和其原码的形式相同。

而负数的补码方式是将其绝对值的二进制形式“按位求反再加1”;实型:

在内存中占4个字节,是按照指数形式存储的,实型数据分为小数部分和指数部分,分别存放!

计算机用二进制表示小数部分,用2的幂次来表示指数部分!

15.以下非法的赋值语句是。

C

A)n=(i=2,++i);B)j++;C)++(i+1);D)x=j>0;

【解析】对表达式不能进行自加自减运算。

16.已定义c为字符型变量,则下列正确的赋值语句是。

D

A)c='66';B)c="66";C)c="B";D)c=66;

17.已知小写字母的ASCII码为97,对于inta=99,b='b';printf(“%c,%d”,a,b);的结果是。

B

A)99,bB)c,98C)99,98D)c,b

【解析】字符类型变量用char来定义,特别要注意字符数据在内存中的存储方式:

字符数据在内存中是用字符对应的ASCII码存储,其存储形式实质是采用整数形式,由于ASCII码集合中有256个字符,因此用0~255这个范围内的256个整数分别与每个字符对应。

因此字符型数据和整型数据在一定范围(0~255)内,形式上可以相互引用。

表现在这两种类型的变量能够以对方形式常量来赋值,以对方的形式来输出,还可以同时出现在算数表达式中参与运算

int  n='a';          /*相当于n=97*/

char c=65;       /*相当于c='A',A的ASCII码是65*/

printf("n=%d,n=%c",n,n);/*输出:

c=97,n=a*/      

printf("c=%d,c=%c",c,c);/*输出:

n=65,n=A*/       

虽然字符型数据和整型数据在一定范围内可以通用,但其外在表现形式并不影响各自的数据类型,上例中n本质上还是整型变量,c本质上还是字符型变量。

18.若变量a和i已正确定义,且i已正确赋值,合法的语句是。

B

A)a=1B)++i;C)a=a++=5D)a=int(i)

【解析】C语言的语句必须以分号结束,选项A是错误的。

赋值表达式等号的左边只能是变量,而不能是表达式,选项C中含有a++=5,是错误的。

选项D中的强制转换类型必须用圆括号将int括起来,也是不正确的。

19.假定x和y为double型,则表达式x=2,y=x+3/2的值是。

D

A)3.500000B)3C)2.000000D)3.000000

【解析】算出来结果为3,排除A和C选项;又因为是double型,所以D选项为正确答案。

20.以下程序的输出结果是。

C

main()

{

inta=5,b=4,c=6,d;

printf(“%d\n”,d=a>b?

(a>c?

a:

c):

(b));

}

A)5B)4C)6D)不确定

【解析】本题考察条件表达式。

简单的条件表达式(条件表达式?

表达式1:

表达式2)可以用来代替if语句进行赋值。

详见教材102页。

21.设a=3,b=4,c=-5,则逻辑表达式:

a||b+c&&b==c的值是。

B

A)1B)0C)非0D)语法错

【解析】运算符优先级由高到底为算术运算符---关系运算符---&&和||---赋值运算符。

其中&&和||的结合方向为从左到右

22.表示关系x<=y<=z的c语言表达式为。

A

A)(x<=y)&&(y<=z)B)(x<=y)AND(y<=z)

C)x<=y<=zD)(x<=y)&(y<=z)

【解析】C语言中没有关键字AND,逻辑与运算符是&&,不是AND,因此选项B是错误的;而&是C语言的位与运算符,因此选项D是错误的;选项C是数学表达式,也是错误的。

23.设有变量intx=0,y=1,z=1,则运行表达式:

x=y++>z--后,x,y,z的值分别是。

D

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

【解析】注:

前缀是先增值后引用,后缀是先引用再增值

24.已知inta=4,b=5;,执行表达式a=a>b后,变量a的值为。

A

A)0B)1C)4D)5

【解析】C语言常用的积累运算符的优先级关系是:

逻辑非“!

”>算术运算符>关系运算符>逻辑与“&&”>逻辑或“||”>赋值运算符>逗号运算符。

由于关系运算符优先级别高于赋值运算符,所以先执行a>b,得到结果为假,即0,所以变量a的值为0。

25.能正确表示逻辑关系“a≥10或a≤0”的C语言表达式是。

B

A)a>=10ora<=0B)a>=10||a<=0

C)a>=10&&a<=0D)a>=10|a<=0

26.设有定义inta=3,b=4,c=5;,则以下表达式中,值为0的表达式是。

D

A)a&&bB)a<=bC)a||b+c&&b-cD)!

((a

c||1)

27.以下合法的赋值语句是。

B

A)x=(1,y=2);B)++x;C)x=y=15;D)y=int(x);

28.以下选项中,与k=n++完全等价的表达式是。

A

A)k=n,n=n+1B)n=n+1,k=nC)k=++nD)k+=n+1

【解析】在本题中,k=n++为后辍运算,根据其运算规则,应先把n的值赋给k,然后n的值再加上1,选项A的表达式与本题中的表达式等价。

29.若有定义:

“inta=8,b=5,c;”,执行语句“c=a/b+0.4”后,c的值为。

A)1.4B)1C)2.0D)2

【解析】由于a,b,c都是整型变量,所以每一步计算都要取整,所以选B。

不同类型数据间是可以进行转换和运算的。

整型、字符型、实型数据可以混合运算,如果表达式内的运算量的类型不同,不同类型的数据要先转换成同一类型,在进行运算。

转换方向由低到高为:

char/short、int、unsigned、long、float、double。

当然也可以使用强制类型转换符来转变类型,但变量本身的类型并未发生变化。

   例如:

(double)n,(int)(a+b)。

30.设所有变量均为整型,则表达式(a=2,b=5,a++,b++,a+b)的值是。

C

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

31.已定义c为字符型变量,则下列语句中正确的是。

D

A)c='97';B)c="97";C)c="a";D)c=97;

32.已知charch='A';且表达式ch=(ch>='A'&&ch<='Z')?

(ch+32):

ch的值是。

B

A)AB)aC)ZD)出错

【解析】考察条件表达式。

见教材102页。

首先执行(ch>='A'&&ch<='Z'),为1。

接着执行(ch+32)。

因此结果是小写字母a。

33.设有如下程序段:

intx=2,y=3;

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

则以下叙述中正确的是。

B

A)输出语句中格式说明符的个数少于输出项的个数,不能正确输出

B)运行时产生出错信息

C)输出值为2

D)输出值为3

34.对于循环for(k=16;k>0;k-=3)putchar(‘*’);输出是。

B

A)*****B)******C)*******D)无限循环

【解析】在k分别为16,13,10,7,4,1的时候,分别输出一个*。

putchar()函数(字符输出函数)的作用是向终端输出一个字符。

用putchar()函数可以输出能在屏幕上显示的字符,也可以输出控制字符,如putchar(’\n’)的作用是输出一个换行符,使输出的当前位置移到下一行的开头。

35.已知inti=1;执行语句while(i++<4)后,变量i的值为。

C

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

【解析】i++是先进行其他运算,运算终了后再将i加1。

所以循环中过程如下:

i=0

判断i<4:

成立

i=i+1,于是i=1

继续循环:

判断i<4:

成立

i=i+1,于是i=2

继续循环:

判断i<4:

成立

i=i+1,于是i=3

继续循环:

判断i<4:

成立

i=i+1,于是i=4

继续循环:

判断i<4:

不成立

i=i+1,于是i=5

跳出循环,程序结束

36.已知:

inta[][3]={1,2,3,4,5,6,7,8,9,0};则数组a的第一维的大小是。

C

A)2B)3C)4D)无法确定;

【解析】此数组共3列。

应该是

在C语言中如果对全部元素都赋初值(即提供全部初始数据),则定义数组时对第一维的长度可以不指定,但第二维的长度不能省。

系统会根据总个数和第二维的长度算出第一维的长度。

本题中一共有10个元素,每行3列,显然可以确定行数为4.见教材138.

37.判断字符串的长度,应该使用的函数是。

A)strcatB)strcmpC)strcpyD)strlen

【解析】

strlen(string)

---字符串长度

strcpy(字符数组1,字符串2)

---STRingCoPY(字符串复制)的简写。

它是“字符串复制函数”,作用是将字符串2复制到字符数组1中去。

见教材147页。

strcat(字符数组1,字符数组2)

---(字符串连接)其作用是连接两个字符数组中的字符串,把字符串2接到字符串1的后面,结果放在字符数组1中,函数调用后得到一个函数值---字符数组1的地址。

strcmp(string,string)

---比较2个字符串,0为相同,>0前1个大,<0后1个大

38.初始化多维数组的语句中,可以默认的是。

B

A)最后一个下标界B)第1个下标界

C)第2个下标界D)以上都不对

39.若有:

inta[10],*p=&a[0];,关于数组名a的不正确的说法是。

A

A)a是个数组指针B)数组名a表示数组的首地址

C)数组名a与a[0]等价D)a和p都指向同一个存储单元

【解析】一个变量有地址,一个数组包含若干元素,每个数组元素都在内存中占用存储单元,它们都有相应的地址。

指针变量即然可以指向变量,当然也可以指向数组元素(把某一元素的地址放到一个指针变量中)。

所谓数组元素的指针就是数组元素的地址。

在本题中,定义a为包含10个整型数据的数组,定义p为指向整型变量的指针变量。

并且把a[0]元素的地址赋给指针变量p,也就是使p指向a数组的第0号元素。

C语言规定数组名代表数组中首元素的地址。

因此下面两个语句等价:

P=&a[0];p=a;注意数组名a不代表整个数组,上述“p=a;”的作用是“把a数组的首元素的地址赋给指针变量p”而不是“把数组a各元素的值赋给p”。

40.设有定义inta[]={1,5,7,9,11,13},*p=a+3;则*(p-2),*(a+4)的值是。

A

A)511B)19C)59D)有错误

【解析】因为*p=a+3它的作用是将a数组第4个元素a[3]的地址赋给指针变量p(而不是赋给*p),a代表数组首元素的地址,a+3代表数组中的第4个元素a[3]。

在数组中的对应关系如下图。

按C语言的规定:

如果指针变量p已指向数组中的一个元素,则p+1指向同一数组中的下一个元素,而不是将p的值(地址)简单的加1。

另外,如果p的初值为&a[0],则p+i和a+i就是a[i]的地址,或者说,它们指向a数组的第i个元素,这里需要特别注意的是a代表数组首元素的地址。

*(p+i)或*(a+i)是p+i或a+i所指向的数组元素,即a[i]。

在本题中*(a+4)=a[4]=11详见教材230页。

41.C语言中,函数返回值的类型是由。

B

A)return语句中的表达式类型决定

B)调用函数的主调函数类型决定

C)调用函数时的临时类型决定

D)定义函数时所指定的函数类型决定

42.执行下面程序:

main()

{

intx=1,y=1,z=1;

x=x+++y+++z++;

printf("%d,%d,%d",x,++y,z++);

}

输出的结果为。

A

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

【解析】语句x=x+++y+++z++;中++运算符均为后缀,所以是先引用后增值,此语句又可写为x=x+y+z;x++;y++;z++;这样我们便很容易看出结果为x=4;y=2;z=2。

43.以下程序段的输出结果是。

A

intm=10;

while(m>7)

{

m--;

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

}

C)9

8

7

6

B)10

9

8

7

A)9

8

7

D)10

9

8

 

【解析】复习一下while循环的执行过程:

(1)计算while一对圆括号中表达式的值。

当值为非零时,执行步骤

(2);当值为零时,执行步骤(4)。

(2)执行循环体中语句。

(3)转去执行步骤

(1)。

(4)退出while循环。

由以上while循环的一般过程来看,只有当while后面的括号中表达式的值为零时才停止循环。

本题中,当m=7是循环停止,也就是说最后一个输出的应是7.开始m被赋予10,进入循环体,由于m--;所以m自减1为9,所以第一个输出的应是9.

44.若有如下程序段,其中s、a、b、c均已定义为整型变量,且a、c均已赋值(c大于0)

s=a;for(b=1;b<=c;b++)s=s+1;则与上述程序段功能等价的赋值语句是。

B

A)s=a+b;B)s=a+c;C)s=s+c;D)s=b+c;

【解析】掌握两点:

一、a赋给了s;二、s执行c次自加;所以最终相当于将a+c赋给了s。

45.以下程序中,while循环的循环次数是。

D

main()

{

inti=0;

while(i<10)

{

if(i<1)continue;

if(i==5)break;

i++;

}

……

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

【解析】在循环中,如果执行continue,将直接开始下一次循环,不继续执行continue下面的语句。

进入循环时,i=0,当执行到if(i<1)continue;一句时,将执行continue命令,直接开始下一次循环,i的值始终没有变,循环条件(i<10)将一直满足下去。

所以,程序将一直无法退出循环,即死循环。

46.当对两个字符串进行比较时,应该使用的函数是。

B

A)strcatB)strcmpC)strcpyD)strlen

47.若有定义“intk,*q;”,则下列各选项中赋值表达式正确的是。

B

A)q=(&k+1)B)q=&kC)q=kD)*q=&k

【解析】

(1)本题的定义语句中,在q前面有一个*号说明符,表示q是一个指针变量,而C语言规定,在指针变量中只能存放存储单元(即变量)的地址。

(2)因为在定义中,q的基类型为int,所以q中只能存放int类型变量的地址。

(3)在C程序中&号是求地址符,表达式&k的值是变量k在内存中的地址,而*号的作用是求地址指向单元的值。

(4)现在来看看选项C和D。

C中,是把整型变量直接赋给指针变量q,由于赋值不兼容性,这是错误的。

D中,企图把k的地址赋给一个整型变量(*p在此可代表一整型变量),这也是不允许的,地址值不可能转换为一个整数。

(5)关于A,还得声明一点,地址符&只能应用于变量和以后将要介绍的数组元素,不可以用于表达式,常量或者被说明为register的常量。

因此A也不正确。

(6)那答案只能是B,因为此处q中只能存放int类型的地址,而k是int型,&k又是k的地址,B当然是正确的。

48.若有以下定义:

chars[20]=“programming”,*ps=s;则不能代表字符g的表达式是。

A

A)ps+3B)s[3]C)ps[3]D)ps+=3,*ps

【解析】

1、C语言对字符串常量是按字符数组处理的,在内存中开辟了一个字符数组用来存放该字符串常量。

2、指向数组的指针变量也可以带下标,如p[i]与*(p+i)等价。

详见教材231页。

49.以下能正确定义数组并正确赋初值的语句是。

C

A)intN=5,b[N][N];B)inta[1][2]={{1},{3}};

C)intc[2][]={{1,2},{3,4}};D)intd[3][2]={{1,2},{34}};

【解析】如果对全部元素都赋初值(即提供全部初始数据),则定义数组时对第一维的长度可以不指定,但第二维的长度不能省!

系统会根据总个数和第二维的长度算出第一维的长度。

详见教材p138

50.假设已定义charc[8]="test";inti;则下面的输出函数调用中错误的是。

D

A)printf("%s",c);B)for(i=0;i<8;i++)printf("%c",c[i]);

C)puts(c)D)for(i=0;i<8;i++)puts(c[i]);

【解析】首先A、B两个选项是没有问题的,puts函数一般形式为puts(字符数组),其作用是输出字符串,所以D选项是错误的。

51.下程序段:

chars[20]="xyz",*sp=s;strcat(sp,"12345");puts(sp);的输出结果是。

A

A)xyz12345B)12345xyzC)12345D)xyz

【解析】strcat(字符数组1,字符数组2)---(字符串连接)其作用是连接两个字符数组中的字符串,把字符串2接到字符串1的后面,结果放在字符数组1中,函数调用后得到一个函数值---字符数组1的地址。

52.在执行inta[][3]={{1,2},{3,4}};语句后a[1][2]的值是。

C

A.3B.4C.0D.2

【解析】考查知识点:

二维数组的初始化inta[][3]={{1,2},{3,4}};

初始化的数组元素如下:

53.已知:

inta[][3]={1,2,3,4,5,6,7,8,9,0};则数组a的第一维的大小是。

C

A.2B.3C.4D.无法确定;

【解析】此数组共3列。

应该是

在C语言中如果对全部元素都赋初值(即提供全部初始数据),则定义数组时对第一维的长度可以不指定,但第二维的长度不能省。

系统会根

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 幼儿教育 > 家庭教育

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1