C语言系列复习题精简版.docx

上传人:b****8 文档编号:29691754 上传时间:2023-07-26 格式:DOCX 页数:57 大小:46.91KB
下载 相关 举报
C语言系列复习题精简版.docx_第1页
第1页 / 共57页
C语言系列复习题精简版.docx_第2页
第2页 / 共57页
C语言系列复习题精简版.docx_第3页
第3页 / 共57页
C语言系列复习题精简版.docx_第4页
第4页 / 共57页
C语言系列复习题精简版.docx_第5页
第5页 / 共57页
点击查看更多>>
下载资源
资源描述

C语言系列复习题精简版.docx

《C语言系列复习题精简版.docx》由会员分享,可在线阅读,更多相关《C语言系列复习题精简版.docx(57页珍藏版)》请在冰豆网上搜索。

C语言系列复习题精简版.docx

C语言系列复习题精简版

C程序设计复习题

二○○九年十月

目录1

第一部分C语言基础题(选择与程序分析)3

1.常量与变量3

1.1常量3

1.2变量3

1.3变量作用域4

1.4static变量5

2.宏定义、宏包含7

3.转义字符7

4.运算符8

4.1逗号运算符8

4.2复合运算符8

4.3++,--运算符9

5.表达式9

5.1算术表达式9

5.2关系表达式9

5.3逻辑表达式9

6.顺序结构10

7.选择结构10

8.循环结构11

9.continue、break12

10.数组13

10.1数据数组13

10.2字符数组15

11.函数16

11.1函数定义16

11.2函数参数传递17

11.3数据处理函数18

11.4字符处理函数21

11.5递归函数23

12.指针24

12.1指向变量的指针24

12.2指向数组的指针25

12.3其它指针27

12.5main函数28

13.结构体28

14.枚举30

15.文件30

16.位操作31

第二部分C语言完成程序题31

1.常规算法31

1.1数据处理31

1.2字符处理34

2.排序算法36

3.查找算法37

4.插入、删除39

5.公式计算39

6.文件40

第一部分C语言基础题(选择与程序分析)

1.常量与变量

1.1常量

1.(2001_1)以下四个选项中,均为非法常量的是C

A.–0x18,01177,0xfB.‘\\’,’\01’,12,456C.‘as’,-0fff,’\0xa’D.0xabc,’\0’,”a”

2.(2000_2)以下常量中正确的是D

A.‘abc’B.’\x123’C.3.14e-1.2D.”a”

1.2变量

1.(1999_2_2)设有说明:

inty;floatx;则执行语句x=y=4.8;后x的值为4.0

2.(2003_8)若有声明:

intk,a,b;

unsignedlongy=5;

doublex=1.23;

则表达式中正确的是D

A.x%(-5)B.x=y[6]C.k=(a=1,b=2,&a+&b)D.a+=a-=(b=2)*(a=3)

3.(2003_2_1)在声明变量时,类型修饰符unsigned一般用于修饰基本类型中的int和;char

4.(1998_6)在C语言中,下面符号串中,能用作变量名的标识符为B

A.autoB.putsC.–1*numD.2-and

5.(2002_2_5)在函数内部声明局部变量时缺省了存储类型,该变量的存储类型为auto

6.(2002_5)已知在某C语言编译系统中表达式sizeof(int)的值为2,如果希望将常量-70000正确的保存在一个变量a中,则该变量声明语句应当是B

A.inta;B.longinta;C.unsignedinta;D.unsignedlonginta;

7.(2003_2_3)已有声明:

floatx;doubley;inta;longb;charc;,则表达式x+y*a/x+b/y+c值的类型为double

8.(1993_4)在C的表达式中,可以将某一类型的变量a强制转换成具有类型b的值,可以为A

A.(b)aB.a(b)C.b(a)D.(a)b

1.3变量作用域

2.(1993_3)外部变量对程序中的任一函数而言,它们是B

A.存在的B.可直接存取的C.不可见的D.不可直接存取的

3.(1994_5)对于extern型变量和static型变量的初始化A

A.在编译时进行

B.在程序开始运行时进行

C.在程序运行过程中使用到它们时进行72

D.不能确定在何时进行

7.(2002_2_8)执行以下程序后,输出x的值为0,y的值为2;

intx;

intf(intx)

{

if(x==3)

{

intx=2;

returnx;

}

else

returnx;

}

voidmain(void)

{

inty,k;

y=f(3);

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

}

8.(2000_2_3)下列程序的运行结果为

voidmain(void)

{

externintx;

printf("%d",x+=2);

fun1

(2);

}

intx=1;

voidfun1(intx)

{

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

fun2

(2);

}

voidfun2(void)

{

printf("%d",x);

{

intx=5;

printf("%d",x);

}

}

1.4static变量

1.(1994_2_3)运行该程序,第一行的输出是;第三行的输出是;将程序中标有/*change*/的注释行改为:

inta2=1;则第五行的输出是。

intf()

{

staticinta1=0;

staticinta2=1;/*change*/

a1=a2;

return(a2+=2*a1+1);

}

main()

{

inti,sum,f();

for(i=sum=0;i<5;i++)

printf("\nsum=%d",sum+=f());

}

2.(1996_2_9)以下程序输出的第一行是;输出的第二行是.

intabc()

{

staticinti;

i+=10;

return(i++);

}

main()

{

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

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

}

 

5.(2001_2_7)以下程序的运行结果为

intfun(intm)

{

staticintk=1;

while(m)

k*=m--;

return(k);

}

voidmain(void)

{

inti,j;

i=fun(3);

j=fun(5);

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

}

2.宏定义、宏包含

3.(1997_2)若有宏定义和变量说明如下:

#defineX5

#defineYX+1

#defineZY*X/2

inta;a=Y;

则执行以下printf语句后输出的结果是。

printf(”%d%d\n”,Z,--a);

A.75B.126C.125D.76

8.(2003_2_6)以下程序的运行结果是;

#definePT3.14

#defineS(x)PT*x*x

voidmain(void)

{

inta=2;

printf("%4.1f",6.28/S(a));

}

3.转义字符

1.(1999_1)char*str="\t\'c\\Language\n";

printf("\n%d",strlen(str));的值为

2.(1998_2_4)执行以下程序后,程序输出为

#include"string.h"

main()

{

printf("%d\n",strlen("ab\034\\\x89"));

}

3.(1999_2_4)如下程序的输出结果是

printf("%d\n",strlen("abc\0defg"));

4.(1997_1)执行语句printf(”字串为:

isc:

\\too1s\’book.txt);后的输出是

A.字串为:

isc:

tools’book.txtB.字串为:

isc:

\too1sbook.txt

C.字串为:

isc:

\\tools\’book.txtD.字串为:

isc:

\too1sbook.txt

4.运算符

1.(1999_2_3)在C语言中,任一语句必定以字符结束。

2.(1996_2_5)运算符“&”有二种含义:

一种是,另一种是:

4.1逗号运算符

1.(1998_2)设有变量说明:

intx;则表达式(x=4*5,x*5),x+25的值为。

A.20B.45C.100D.125

2.(1997_5)设a和b为整型变量,执行语句:

b=(a=2+3,a*4),a+5;

后,a和b的值为。

A.5,10B.20,25C.5,25D.5,20

3.(2002_2)表达式(a=4*5,b=a*2),b-a,a+=2的值是

4.2复合运算符

1.(2000_2_1)若有

inta=5;

a+=a-=-a*a;

printf("\n%d",a);则a的值为

2.(1996_2)设a是整型变量,初值是12,执行完表达式a+=a-=a*a后,a的值是

A.144B.-264C.264D.0

4.3++,--运算符

1.(1993_2_1)设有如下的说明:

 inti=3,j=5,m;

问:

执行语句m=(i++)-(--j);后,m的值是, j的值是。

5.表达式

5.1算术表达式

1.(1994_3)inta1=10,a2=3;floata3=8.0;若程序中,有表达式a1/a2*a2*a3,结果值为

A.80B.80.0C.72D.72.0

3.(2000_1)intk=11;

k=1/3*k++;

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

5.2关系表达式

1.(1999_2_1)在C语言中,当关系表达式的关系成立时,关系表达式的值为

2.(2000_3)设有inta;以下不能正确表达数学式10

A.1010&&a<15D.!

(a<=10)&&(a>10)

5.3逻辑表达式

1.(1993_1)当a的值为5, b的值为4时,逻辑表达式a<=6&&a+b>8的值为C

A.trueB.falseC.非0整型值D.整型值0

3.(1996_10)若x,y,z的初值均为1,则执行表达式w=++x||++y&&++z后,x,y,z的值为D

A.x=1,y=1,z=2B.x=2,y=2,z=2C.x=1,y=2,z=1D.x=2,y=1,z=1

5.(1999_5)inta=4,b=5,c=6,d=7,m=1,n=1,e;

c=(m=a>b)&&(n=c>d);

printf("\n%d\t%d",m,n);

6.顺序结构

1.(2003_10)在缺省情况下,标准C的编译系统中预定义的标准输出流stdout直接连接的设备是

A.软盘B.硬盘C.键盘D.显示器

3.(1996_2_13)若输入数据为:

3452456ABCD<CR>,其中为回车,则程序的输出结果为a=3,b=4,s=5,c=,d=2456

main()

{

intd;

chara,b,c,s[10];

scanf("%c%c%s%d%c",&a,&b,s,&d,&c);

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

}

7.选择结构

1.(2000_5)关于if语句描述,错误的是

A.条件表达式可以是任意的表达式

B.条件表达式只能是关系表达式或逻辑表达式

C.条件表达式的括号不可以省略

D.与else配对的if语句是其之前最近的未配对的if语句

2.(1997_8)对下面三条语句(其中s1和s2为内嵌语句),正确的论断是

(1)if(a)sl;elses2

(2)if(a==0)s2;elsesl

(3)if(a!

=0)s1;elses2

A.三者相互等价B.

(1)和

(2)等价,但与(3)不等价

C.三者互不等价D.

(1)和(3)等价但与

(2)不等价

3.(2002_2_6)以下程序运行后,x,y,z的值分别为

intx=0,y=3,z=2;

if(x++&&y++)

z--;

elseif(x+1==6||y--)

z++;

4.(1997_2_7)程序输出的最后一行是

#include

main()

{

inti=-5;

while(i++)

{

switch(i+5)

{

case1:

switch(-i-3)

{

case1:

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

case2:

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

}

case2:

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

case3:

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

}

}

}

8.循环结构

1.(1998_7)设整型变量x的当前值为3,执行以下循环语句后,输出的结果是

do

printf(“%d\t”,x=-2);

while(!

(--x));

A.0B.1-2C.30D.死循环

2.(1999_6)循环语句:

for(x=0,y=0;y!

=150||x<4;x++)y+=50;执行了多少次?

3.(1997_2_1)有inta,b;则对于下面“for循环中的scanf语句最少可执行次。

最多可执行次。

for(a=0,b=0;b!

=30&&a<3;a++)scanf(%d,&b).

4.(1996_4)设i和s都是整型变量,执行如下语句:

for(i=0,s=0;i+s<10;i++,s++);printf(“%d,%d\n”,i,s);

输出的i和s的值分别为:

A.11,11B.5,5C.6,6D.10,10

5.(1996_2_12)以下程序的输出结果为。

main()

{

inti,j;

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

{

for(j=i+1;j<10;j++,i++)

printf("*");

printf("\n");

}

}

5.(2001_2_5)下列程序的运行结果为

voidmain(void)

{

inti=0,j=10,k=2,s=0;

for(;i<=j;)

{

i+=k++;

s=s+i;

}

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

}

9.continue、break

2.(2003_9)以下跳转语句中,只有可以选择不唯一的跳转目的地。

A.continueB.breakC.goto标识符D.return

3.(2001_2_1)任何函数返回值都是通过函数体中的语句返回的,类型的函数没有返回值,因此它的调用形式不能作为表达式的运算分量;

5.(2001_2_9)执行以下程序时输出第二行是第三行是;

voidmain(void)

{

inta[4][4]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16},i,j;

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

{

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

{

if(i>j+1)

continue;

if(i

break;

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

}

printf("\n");

}

}

10.数组

10.1数据数组

1.(2002_4)以下声明语句正确的是

A.intn,a[n];B.inta[];C.inta[2][3]={{1},{2},{3}};D.inta[][3]={{1},{2},{3}};

2.(2003_3)已有声明:

ints[2][3];以下选项中正确的引用了数组s中的基本元素。

A.s[1>2][!

1]B.s[2][0]C.s[1]D.s

3.(1999_4)设有说明:

inta[4][4];与数组元素a[3][3]不等价表示的是

A.(a[3]+3)B.(*(a+3)+3)C.&a[3][3]D.(*(*(a+3))+3

4.(2002_10)设有声明语句:

inta[3][3]={1,2,3,4,5,6,7,8,9};以下语句中不是a[1][2]表达形式的是

A.*(*(a+1)+2)B.*(&a[2][0]-1)C.*(a[1]+2)D.*(a+1)[2];

9.(2002_2_9)执行以下程序时输出第一行是,第二行是;

voidmain(void)

{

inta[3][3]={1,2,3,4,5,6,7,8,9},m,k,t;

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

for(k=0;k<=m;k++)

if((m+k)%2)

t=a[m][k],a[m][k]=a[k][m],a[k][m]=t;

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

{

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

printf("%d",a[m][k]);

printf("\n");

}

}

10.2字符数组

1.(1999_3)staticcharx[]="12345";

staticchary[]={'1','2','3','4','5'};关于以上两语句说法正确的是:

A.x数组和y数组的长度相同B.x数组长度大于y数组长度

C.x数组长度小于y数组长度D.x数组等价于y数组

2.(2002_1)若有声明语句chars1[10]={0},s2[10]=”books”;则能将字符串”books”赋给数组s1保存的表达式是

A.s1=”books”;B.strcpy(s2,s1);C.s1=s2;D.stract(s1,s2);

3.(1998_9)判断两个字符串s1s2是否相等,应当使用

A.if(s1==s2)B.if(s1=s2)C.if(strcmp(s1,s2))D.if(!

strcmp(s1,s2))

5.(1997_2_5)设输入的字符串为:

TheWinXPOperatingsystem

则执行程序后,输出的第一行和最后一行分别是和

#include

main()

{

chara[4][10],i,j;

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

scanf("%s",a[i]);

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

{

j=i;

printf("%s\n",a[i++]+j);

}

}

11.函数

11.1函数定义

1.(2003_1)在定义任何一个函数时,下列选项中是不可缺少的。

A.函数名前的数据类型B.函数名后的圆括号C.形参声明D.函数体中的语句

2.(1998_10)C语言中函数返回值的类型是由决定的。

A.return语句中的表达式类型B.调用该函数的主调函数类型

C.定义函数时所指定的函数类型D.传递给函数的实参类型

3.(1994_2)若对一个函数执行在先,说明在后,C语言将视其返回值为

A.非法B.无返回值C.浮点值D.整型值

4.(2002_2_4)当语句被执行时,程序的执行流程无条件地从一个函数跳转到另一个函数。

5.(2002_3)以下自定义函数的头部,正确的是

A.intfun(inta[],b)B.intfun(inta[],inta)C.intfun(int*a,intb)D.intfun(chara[][],intb)

6.(1998_1)数学式

在C程序中对应正确的表达式为。

A.sqrt(x*x+y*y)/x*yB.sqrt(x*x+y*y)/x*y

C.sqrt(x*x+y*y)/x/yD,sqrt(x*x+y*y)/(x*y))

7.(2000_6)设有以下函数定义,则返回的函数值是

int*fun(int*a)

{

int*t;

*a=99;

t=a;

returnt;

}

voidmain(void)

{

intx,*y;

y=fun(&x);

----

}

A.无确定值B.形参a的地址C.主程序中变量x的地址D.函数中变量t的地址

11.2函数参数传递

1.(1997_3)C语言规定,调用一个函数时,实参变量和形参变量之间的数据传递是。

A.地址传递B.值传递C.由实参传给形参,并由形参传回来给实参。

D.由用户指定传递方式

2.(2001_7)在以下程序的main函数中需要调用search函数的位置,填入正确的是

A.search(c[3][4],12,8)B.search(&c[0][0],12,8)C.search(&c,12,8)D.search(**c,12,8)

intsearch(intx[],intn,intk)

{

inti;

for(i=0;i

if(x[i]==k)

returni;

return-1;

}

voidmain(void)

{

intk,c[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};

if(!

=-1)

printf("found");

else

printf("notfound");

}

 

11.3数据处理函数

1.(1998_2_5)执行以下程序后,第一行输出是,第二行的输出是,最后一行的输出是。

voidf(intb,intt)

{

intm;

if(b

{

m=(b+t)/2;

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

f(b,m-1);

f(m+1,t);

}

}

main()

{

f(1,6);

}

2.(1999_2_8)执行以下程序时输出第一行是,第二行是,第三行是;

inti,j=2;

voidp(void)

{

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

{

printf("%d",++j);

if((i+1)%2==0)

printf("\n");

}

}

voidmain(void)

{

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

p();

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

}

3.(2000_2_7)以下程序的运行结果为

int*swap(int*a,int*b)

{

int*p;

p=a;a=b

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

当前位置:首页 > 人文社科 > 文化宗教

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

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