您好,欢迎来到钮旅网。
搜索
您的当前位置:首页C语言习题

C语言习题

来源:钮旅网
 第一章

选择题

1.下列4组字符串中都可以用作C语言程序中的标识符的是(A) A. print _3d oodb B. I\\m one_half start$it C. Pxq My->book line# D. Str_1 Cpp into 2.下面的说法正确的是(C) A. C程序由符号构成 B. C程序由标识符构成 C. C程序由函数构成 D. C程序由C语句构成 3.与十进制数35相等的二进制数是(A) A.100011 B。01001 C。100110 D。100101 4.与47值相等的十六进制数是(A) A. 2F B. 215 C. 32F D.115 5.(01101)2 + (101101) 2 的值是(B)。 A. (101010)2 B. (3A)16 C. (2A)16 D. 57 6.将15向左移动2位后的值是(B)。 A. (3C)16 B. (00111100)2 C. (60)10 D. 都正确 7.将250与5进行按位与的结果是(A)。 A. 0 B. 1 C. (FF)16 D. (F0)16

8.将(AF)16与(78)16进行按位异或的结果是()。 A. (D7)16 B. (28)16 C. (D8)16 D. (27)16 9.将(717)8按位取反的结果是()。 A. (110001)2 B. (060)8 C. (60)10 D. 都不正确 - 1 -

练习2-1

1.C语言中的简单数据类型包括(B )。 A.整型、实型、逻辑型 B.整型、实型、字符型 C.整型、字符型、逻辑型 D.整型、实型、逻辑型、字符型 2.在C语言中,错误的int类型的常数是(A )。 A.32768 B.0 C.037 D.0Xaf 3.下列常数中不能作为C的常量的是(D )。 A.0x45 B.2.5e-2 C.3e2 D.0582 4.设int类型的数据长度为2个字节,则unsigned int类型数据的取值范围是(B )。 A.0至255 B.0~65535 C.-32768~32767 D.-256~255 5.下面4个选项中,均是合法转义字符的选项是( A )。 A.'\\'','\\\\','\\n' B.'\\','\\017','\\' C.'\\018','\\f','xab' D.'\\\\0,'101','x1f 6.在C语言中,数字029是一个(D )。 A.八进制数 B.十六进制数 C.十进制数 D.非法数 7.下列可以正确表示字符型常数的是(B )。 A.\"a\" B.'\' C.\"\\n\" D.297 8.以下( C )是错误的转义字符。 A.'\\\\' B.'\\'' C.'\\81' D.'\\0' 9.C语言中整数-8在内存中的存储形式是( A )。 A.1111 1111 1111 1000 B.100000000000 1000 C.000000000000 1000 D.1111 1111 1111 0111 10.将字符g赋给字符变量c,正确的表达式是( C )。

A.c=\"g\" B.c=101 C.c='\\147' D.c='0147' 11.字符串\"\\\\\\22a,0\\n\"的长度是( C)。

A.8 B.7 C.6 D.5 12.为求出s=10!的值,则变量s的类型应当为( C )。

A.int B.unsigned C.long D.以上三种类型均可 13.已知:unsigned int x=65535;,则执行以下语句输出是( D )。

printf(\"%d\\n\; A.65535 B.1 C.无定值 D.-1 14.下面4个选项中,均是合法整型常量的选项是(A )。

A.160,-0xffff,011 B.-0xcdf,01ª,0xe C.-01,986,012,0668 D.-0x48a,2e5,0x 15.下面4个选项中,均是不合法的整型常量的选项是( D)。

A.--0f1,-0xffff,0011 B.-0Xcdf,01a,0xe C.-018,999,5e2 D.-0x48eg,-068,03f 16.下面4个选项中,均是合法浮点数的选项是( B )。

A.+1e+1,5e-9.4,03e2 B.-.60,12e-4,-8e5 C.123e,1.2e-.4,+2e-1 D.-e3,.8e-4,5.e-0

- 2 -

练习2-2

1.已知:char a; int b; float c; double d;,执行语句c=a+b+c+d;后,变量c的数据类型是( C )。 A.int B.char C.float D.double 2.已知int j, i=1;,执行语句j=-i++;后,j的值是( A )。 A.1 B.2 C.-1 D.-2 3.已知int i, a;,执行语句i=(a=2*3, a*5), a+6;后,变量i的值是(C )。 A.6 B.12 C.30 D.36 4.已知int i=5;,执行语句i+=++i;,i的值是( C )。 A.10 B.11 C.12 D.A、B、C答案都不对 5.已知:float x=1, y;,则y=++x*++x的结果为( A )。 A.9 B.6 C.1 D.表达式是错误的 6.已知:int y; float x=-3;,执行语句:y=x%2;,则变量y的结果是(D )。 A. 1 B.-1 C.0 D.语句本身是错误的 7.已知:char w; int x; float y; double z;,则表达式w*x+z-y结果的类型是(D )。 A.float B.char C.int D.double 8.已知:int x=10, y=3, z;,则下列语句的输出结果是( D )。 printf(\"%d\\n\A.1 B.0 C.4 D.3 9.已知:int i=6, j;,则执行语句j=(++i)+(i++);后的j的值是(B )。 A.4 B.14 C.13 D.15

10.已知:int x=1, y=-1;,则语句printf(\"%d\\n\的输出结果是(B )。

A.1 B.0 C.-1 D.2 11.设a=2,b=3,计算表达式c=b*=a-1后,变量c的值是(B )。

A.5 B.3 C.2 D.4 12.若定义了int x;,则将x强制转化成双精度类型应该写成(A )。

A.(double)x B.x(double) C.double(x) D.(x)double 13.下述程序的输出是( B )。

main()

{ int x=023;

printf(\"%f\}

A.2.500000 B.2.750000 C.3.375000 D.3.000000 14.若有定义:int a=7; float x=2.5, y=4.7;,则表达式x+a%3*(int)(x+y)%2/4的值是( A )。 A.2.500000 B.2.750000 C.3.500000 D.0.000000

15.设变量n为float类型,m为int类型,则以下能实现将n中的数值保留小数点

后两位,第3位进行四舍五入运算的表达式是( B )。 A.n=(n*100+0.5)/100.0 B.m=n*100+0.5, n=m/100.0 C.n=n*100+0.5/100.0 D.n=(n/100+0.5)*100.0 16.已知ch是字符型变量,下面不正确的赋值语句是( A )。

A.ch='a+b'; B.ch='\\0'; C.ch='7'+'9'; D.ch=5+9;

- 3 -

第三章 练习3-1

选择题:

1. 在C语言库函数中,可以输出double型变量x值的函数是(D)。

A.getchar B.scanf C.putchar D.printf

2.执行语句:printf("The program\\‟s name is c: \\\ools\\book.txt");后输出是(D)。

A.The program‟s name is c: tools book.txt B.The program‟s name is c: \ools book.txt C.The program‟s name is c: \\\ools book.txt D.The program‟s name is c: \oolook.txt 3.以下程序的输出结果是(D)。 (注:□表示空格) main() {printf("\\n*s1=%15s*","chinabeijing");

printf("\\n*s2=%-5s*","chi"); }

A.*s1=chinabeijing□□□* B.*s1=chinabeijing□□□

*s2=**chi* *s2=chi□□* C.*s1=*□□chinabeijing* D.*s1=*□□□chinabeijing* *s2=□□chi* *s2=chi□□* 4.选择程序的运行结果,①是(B)、 ②是(B)、 ③是(D)、 ④是(C)。 #include main() {int a=-10,b=-3;

printf("%d\\n",a% b); /*输出①*/ printf("%d\\n",a/b*b); /*输出②*/ printf("%d\\n",-a%d); /*输出③*/ printf("%d\\n",a-=b+++1); /*输出④*/ }

① A.-2 B.-1 C.0 D.1 ② A.-10 B.-9 C.-8 D.0 ③ A.-2 B.-1 C.0 D.1 ④ A.-10 B.-9 C.-8 D.-7 5.以下C程序正确的运行结果是(D)。 (注:□表示空格) main()

{int y=2456;

printf("y=%3o\\n",y); printf("y=%8o\\n",y); printf("y=%#8o\\n",y); }

A.y=□□□2456 B.y=□□□4630

y=□□□□□□□□2456 y=□□□□□□□□4630 y=#########2456 y=#########4630

- 4 -

C.y=2456 D.y=4630 y=□□□□2456 y=□□□□4630 y=□□□02456 y=□□□04630 填空题

6.以下程序的输出结果为()。 main() {short i;

i=-4;

printf("\\ni:dec=%d,otc=%o,hex=%x,unsigned=%u\\n",i,i,i,i); }

7.以下程序的输出结果为(120,170,78,x)。 main() {char c=‟x‟;

printf("c:dec=%d,oct=%o,hex=%x,ASCII=%c\\n",c,c,c,c); }

8.已有定义int d=-2; 执行以下语句后的输出结果是()。 printf("*d(1)=%d*d(2)=%3d*d(3)=%-3d*\\n",d,d,d,d); printf("*d(4)=%d*d(5)=%3d*d(6)=%-7d*\\n",d,d,d,d); printf("*d(4)=%d*d(5)=%3d*d(6)=%-6d*\\n",d,d,d,d); 9.以下程序的输出结果是()。 #include main() {int a=252;

printf("a=%o a=%o\\n",a,a); printf("a=%x a=%#x\\n",a,a); }

练习3-2

选择题 1. 已知:int x,y,z,w; 为使以下语句的输出为:1234+123+12+1,正确的输入形式应当为(C)。

scanf("%4d-%3d-%2d-%1d",&x,&y,&z,&w); printf("%4d+%3d+%2d+%1d\\n",x,y,z,w); A.1234123121 B.1234 123 12 1 C.1234-123-12-1 D.1234+123+12+1 2.已知:int x; float y; 所用的scanf调用语句格式为: scanf("x=%d,y=%f",&x,&y);

为了将数据10和66.6分别赋给x和y,正确的输入应当使(A)。

A.x=10, y=66.6<回车> B.10,66.6<回车> C.10<回车>66.6<回车> D.x=10<回车>y=66.6<回车> 3.已知:int x, y; double z; 以下语句中错误的函数调用是(D)。

A.scanf("%d,%x,%1e",&x,&y,&z); B.scanf("%2d*%d%1f",&x,&y,&z);

- 5 -

C.scanf("%x%*d%o",&x,&y);

D.scanf("%x%o%6.2f",&x,&y,&z);

4.已有如下定义和输入语句,若要求a1、a2、c1、c2的值分别为10、20、A和B,当从第一列开始输入数据时,正确的数据输入方式是(A)。(注:□表示空格,表示回车) int a1,a2; char c1,c2; scanf("%d%c%d%c",&a1,&c1,&a2,&c2); A.10A□20B B.10□A□20B

C.10A20B D.10A20□B

5.已有定义 int x; float y; 且执行scanf("%3d%f",&x,&y);语句时,输入数据12345□678,则x的值为①B,y的值为②B。(注:□表示空格)

① A.12345 B.123 C.45 D.345 ② A.无定义 B.45.000000 C.678.000000 D.123.000000 6.阅读以下程序,当输入数据的形式为:25,13,10,正确的输入结果为(D)。 main() {int x,y,z;

scanf("%d%d%d",&x,&y,&z); printf("x+y+z=%d\\n",x+y+z); }

A.x+y+z=48 B.x+y+z=35 C.x+z=35 D.不确定值

7.根据题目中已经给出的数据的输入和输出形式,程序中输入输出语句的正确内容是(B)。 main() {int x; float y;

printf("enter x,y:"); 输入语句 输出语句 }

输入形式 enter x, y: 23.4 输出形式 x+y=5.40

A.scanf("%d,%f",&x,&y); B.scanf("%d%f",&x,&y); printf("\\nx+y=%4.2f",x+y); printf("\\nx+y=%4.2f",x+y); C.scanf("%d%f",&x,&y); D.scanf("%d%3.1f",&x,&y); printf("\\nx+y=%6.1f",x+y); printf("\\nx+y=%4.2f",x+y);

第四章 4-1

选择题

1.*已知:char c=‟A‟; int i=1,j; 执行语句j=!c&&i++; 则i和j的值是(B)。 A.1,1 B.1,0 C.2,1 D.2,0 2.已知:int x=1, y=2, z; 则执行z=x>y?++x:++y; 则z的值为(C)。

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

3.*已知:int a=4, b=5, c; 则执行表达式c=a=a>b后变量a的值为(A)。

- 6 -

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

4.已知:char ch=‟A‟; 则表达式ch=(ch>=‟A‟&&ch<=‟z‟)?(ch+32): ch; 的值是(B)。 A.A B.a C.Z D.z

5.若w=1, x=2, y=3, z=4; 则条件表达式w>x?w:y10?x+100:x-10); printf("%d",w++||z++); printf("%d",!w>z); printf("%d",w&&z); A.0111 B.1111 C.0101 D.0100

7.*已知:a=b=c=1且a、b、c均为int型变量,执行以下语句:++a||++b&&++c; 则变量a值为(D),b值为(B)。 ① A.不正确 B.0 C.2 D.1

② A.1 B.2 C.不正确 D.0 8.执行下面语句后x的值为(D)。 int a=14,b=15,x; char c=‟A‟; x=((a&b)&&(c<‟a‟)); A.TRUE B.FALSE C.0 D.1 9.要判断char型变量m是否是数字,可以使用下列表达式(B)。 A.0<=m&&m<=9 B.‟0‟<=m&&m<=‟9‟

C."0"<=m&&m<="9" D.前面三个答案均是错误的

10.能正确表示“当x取值在[1..10]和[200..210]范围内为真,否则为假”的表达式是(C)。 A.(x>=1)&&(x<=10)&&(x>=200)&&(x<=210)

B.(x>=1)||(x<=10)||(x>=200)||(x<=210)

C.(x>=1)&&(x<=10)||(x>=200)&&(x<=210) D.(x>=1)||(x<=10)&&(x>=200)||(x<=210)

11.设x、y和z是int型变量,且x=3, y=4, z=5, 则下面表达式中值为0的是(D)。 A.‟x‟&&‟y‟ B.x<=y C.x||y+z&&y-z D.!((x=y&&ch<‟B‟&&!y)的值是(C)。 A.0 B.语法错 C.1 D.“假” 13.判断char型变量c1是否为小写字母的正确表达式为(D)。 A.‟a‟<=c1<=‟z‟ B.(c1>=a)&&(c1<=z)

C.(„a‟>=c1)||(„z‟<=c1) D.(c1>=‟a‟)&&(c1<=‟z‟)

读程序、写结果

14.*下面程序的运行结果:①(17)、②(102)、③(9)、④()、⑤(0 0 -1)。 #include main() {int i=16,j,x=6,y,z;

- 7 -

j=i+++1;printf("%d\\n",j); /*输出①*/ x*=i=j; printf("%d\\n",x); /*输出②*/

x=1;y=2;z=3;

x+=y+=z;

printf("%d\\n",z+=x>y?x++:y++); /*输出③*/ x=0x02ff;y=0xff00;

printf("%d\\n",(x&y)>>4|0x005f)

/*输出④*/

x=y=z=-1;

++x||++y&&++z;

printf("%d%d%d\\n",x,y,z); /* ⑤ */

}

4-2

选择题

1.*下面程序的输出是(A)。 #include main() {int x=1,y=0,a=0,b=0;

switch(x)

{case 1:switch(y)

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

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

printf("a=%d,b=%d\\n",a,b); } A.a=2, b=1 B.a=1, b=1 C.a=1, b=0 2.*若有说明 int x,y;不能实现以下函数关系的程序段是(BD)。 -1,(x<0)

y= 0,(x=0) 1,(x>0) A.if(x<0)y=-1; B.y=-1; C.y=0; else if(x==0)y=0; if(x!=0) if(x>=0 else y=1; if(x>0)y=1; {if(x>0)y=1; else y=0; }else y=0; else y=-1; 3.已知:int x,a,b;下列选项中错误的if语句是(B)。 A.if(a=b) x++; B.if(a={case 9: i+=1;

D.a=2, b=2

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

D.if(x) x++;

- 8 -

case 10:i+=1; case 11:i+=1; default:i+=1; }

A.10 B.11 C.12 5.设有说明语句:int a=1, b=0; 则执行以下语句后输出为(B)。 D.13

switch(a) {case 1:switch(b) {case 0:printf("**0**");break;

case 1:printf("**1**");break; }

case 2;printf("**2**");break; } A.**0** B.**0****2** 6.*阅读下列程序,其运行结果是(B)。 #include main() {char c=‟A‟;

if(„0‟<=c<=‟39‟) printf("YES"); else printf("NO");} A.YES B.NO 7.*下列程序的运行结果为(C)。 #include main() {int a=2,b=-1,c=2;

if(aprintf("%d\\n",c); } A.0 B. 1 8.*阅读程序,其运行结果是(C)。 #include main() {int a=-1,b=1,k;

if((++a<0)&&(b--<=0)) printf("%d %d\\n",a,b); else printf("%d %d\\n",b,a); }

A.-1 1 B.0 1 9.选择运行结果。

C.**0****1****2** D.有语法错误

C.YESNO D.语句错误

C.2 D.3

C.1 0 D.0 0

- 9 -

#include main() {char ch; ch=getch(); switch(ch)

{case 65:printf("%c",‟A‟); case 66:printf("%c",‟B‟);

default:printf("%s\\n","other"); } }

如程序可以正常运行,当从键盘输入字母A时,输出结果为(B)。 A.A B.ABother C.Aother D.编译错误,无法运行 10.当a=1,b=3,c=5,d=4时,执行完成下面一段程序后x的值是(B)。 if(a填空题

11.以下程序的输出结果是(-1)。 main() {int a=100,x=10,y=20,ok1=5,ok2=0;

if(xif(y!=10)

if(!ok1) a=1; else if(ok2) a=10;

a=-1;

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

}

12.阅读以下程序: main() {int t,h,m;

scanf("%d",&t); h=(t/100)%12; if(h==0)h=12; printf("%d",h); m=t%100;

- 10 -

if(m<10) printf("0"); printf("%d",m);

if(t<1200||t==2400) printf("AM"); else printf("PM"); }

若运行时输入:1605,程序的运行结果是(405PM)。

13.若运行时输入:3 5/,则以下程序的运行结果是(0.600000)。 main() {float x,y; char o; double r;

scanf("%f%f%c",&x,&y,&o); switch(o)

{case „+‟: r=x+y;break; case „-‟: r=x-y,break; case „*‟: r=x*y;break; case „/‟: r=x/y;break; }

printf("%f",r); }

4-3

选择题

1. 以下不是死循环的语句为(D)。

A.for( ; ; x+=i) B.while(1){x++; } C.for(i=10; ; i--) sum+=i; D.for(;(c=getchar())!=‟\\n‟; )printf("%c",c); 2.执行语句for(i=0;i++<3;);后,变量i的值为(C)。 A.2 B.3 C.4 D.5 3.下面的for语句(C)。 for(x=0,y=0;(y!=123)&&(x<4);x++);

A.是无限循环 B.循环次数不定 C.循环执行4次 D.循环执行3次 4.与语句while(!x)等价的语句是(A)。

A.while(x==0) B.while(x!=0) C.while(x!=1) D.while(~x) 5.定义int i=1;执行语句while(i++<5);后,i的值为(D)。

A.3 B.4 C.5 D.6 6.若a=1,b=10为int型变量,则执行以下语句后b的值为(①D),a的值为(②B)。 do{b-=a;

a++;

}while(b--<0);

① A.9 B.-2 C.-1 D.8

② A.4 B.2 C.1 D.3 7.若int a=5; 则执行以下语句后打印的结果为(A)。 do{printf("%2d\\n",a--);

} while(!a);

- 11 -

A.5 B.不打印任何内容 C.4 D.陷入死循环 8.若 int x;且有下面的程序片段,则输出结果为(D)。 for(x=3;x<6;x++) printf((x%2)?"**%d":"##%d\\n",x);

A.**3 B.##3 C.##3 D.**3##4 ##4 **3 **4##5 **5 **5 ##5

9.等比数列的第一项a=1,公比q=2,下面程序的功能是求满足前n项和小于100的最大n,请选择填空。①(B), ②(B)。 #include main() {int a,q,n,sun;

a=1;q=2;n=sum=0; do{①; ++n; a*=q;

}while(sum<100); ②;

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

①A.sum++ B.sum+=a C.sum*=a ②A.n=n-2 B.n=n C.n++ 读程序,写结果

10.下列程序的运行结果为:i=①5,j=②4,k=③6。 #include main() {int a=10,b=5,c=5,d=5;

int i=0,j=0,k=0; for(; a>b ;++b) i++; while(a>++c) j++; do k++;

while(a>d++);

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

11.下面过程的运行结果:①是(8),②是(6)。 #include main() {int i,j;

for(i=0,j=10;iD.a+=sum D.n-=1 - 12 -

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

12.*下面程序的运行结果是(15)。 #include main() {int k,j,m;

for(k=5;k>=1;k--) {m=0;

for(j=k;j<=5;j++) m=m+k*j; }

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

/*输出②*/

4-4

读程序,写结果

1.*下面程序的运行结果是(0,1,2,5)。 #include main() {int i=0,j=0,k=0,m;

for(m=0;m<4;m++) switch(m)

{case 0: i=m++; case 1: j=m++; case 2: k=m++; case 3: m++; }

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

2. 下面程序的运行结果是(2 5 8 11 14)。

#include main() {int i=1;

while(i<=15)

if(++i%3!=2)continue; else printf("%d ",i);

printf("\\n"); }

3. 若运行以下程序时,从键盘输入Adescriptor表示回车),则下面程序的运行结

果是(12 412)。 #include main()

- 13 -

{char c;

int v0=0,v1=0,v2=0; do{switch(c=getchar())

{case „a‟:case‟A‟: case „e‟:case‟E‟ case „i‟:case‟I‟ case „o‟:case‟O‟;

case „u‟:case‟U‟:v1+=1; default:v0+=1;v2+=1; }

}while(c!=‟\\n‟);

printf("v0=%d,v1=%d,v2=%d\\n",v0,v1,v2); }

4. 下面程序段的输出结果是(死循环)。

x=3;

do{y=x--;

if(!y) {printf("*");

continue;} printf("#"); }while(1<=x<=2);

5. 下面程序的运行结果是(8)。

#include main()

{int i,j,x=0;

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

for(j=0;j<=3;j++) {if(j%2)continue; x++; } x++; }

printf("x=%d\\n",x); }

5-1

选择题

1. 合法的数组说明语句是(B)。

A.int a[]="string"; B.int a[]={0,1,2,3,4,5}; C.char a="string"; D.char a[5]={„0‟,‟1‟,‟2‟,‟3‟,‟4‟,‟5‟}; 2.以下对一维整型数组a的说明正确的是(D)。

- 14 -

A.int a(10); B.int n=10,a[n]; C.int n; D.#define SIZE 10 scanf("%d",&n); int a[SIZE]; int a[n];

3. 已知:int a[10];则对a数组元素的正确引用是(D)。

A.a[10] B.a[3.5] C.a(5) D.a[10-10] 4.以下对一维数组a进行正确初始化的语句是(C)。

A.int a[10]=(0,0,0,0,0); B.int a[10]={}; C.int a[]={0}; D.int a[2]={10,9,8}; 5.对以下说明语句的正确理解是(B)。 int a[10]={6,7,8,9,10};

A.将5个初值依次赋给a[1]至a[5] B.将5个初值依次赋给a[0]至a[4] C.将5个初值依次赋给a[6]至a[10]

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

6.*求所有不超过200的N值,N的平方是具有对称性质的回文数。所谓回文数就是将一个数从左到右与从右到左读都是一样的,例如:343和1234321都是回文数。

例如:满足题意要求的数有:N=11,11*11=[2]; =111, 111*111=[12321]。 #include main()

{int m[16],n,t,count=0; long a,k;

printf("Result is:\\n"); for(n=10;n<200;n++) {k=0; t=1; a=n*n;

for(i=1;a!=0;i++) {①; a/=10; }

for(;i>1;i--)

{k+=m[i-1]*t; ②; }

if(③) printf("%2d:%10d %10d\\n",++count,n,n*n); }

} 则①为(m[i]=a%10;)、②为(t=t*10;)、③为(k==n*n;)。

7.*设数组a包括10个整型元素。下面程序的功能是求出a中各相邻两个元素的和,并将这些

- 15 -

和存在数组b中,按每行3个元素的形式输出。则①是(i=1)、②是(b[i]=a[i+a[i-1];])、③是((i%3))。 main() {int a[10],b[10],i;

for(i=10;i<10;i++) scanf("%d",&a[i]); for(①;i<10;i++) ② for(i=1;i<10;i++)

{printf("%3d",b[i]);

if(③==0) printf("\\n"); } } 8.*下面程序用"顺序查找法"查找数组a中是否存在某一关键字。则①是(break)、②是(i==8)。 main() {int a[8]={25,57,48,37,12,92,86,33};

int i,x;

scanf("%d",&x); for(i=0;i<8;i++) if(x==a[i])

{printf("Found!The index is:%d\\n",i+1);①;} if(②) printf("Can‟t found!"); }

读程序,写结果

9.**若有以下输入(代表回车),则下面程序的运行结果是(Search Successful! The index is:5)。 52 main() {int a[8]={6,12,18,42,44,52,67,94};

int low=0,mid,high=7,found,x; found=0;

scanf("%d",&x);

while((low<=high)&&(found==0)) {mid=(low+high)/2;

if(x>a[mid]) low=mid+1; else if(xif(found==1) printf("Search Successful! The index is:%d\\n",mid); else printf("Can‟t search!\\n"); }

- 16 -

5-2

选择题

1. 已知:int i,x[3][3]={1,2,3,4,5,6,7,8,9};则下面语句的输出结果是(c)。

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

printf("%d",x[i][2-i]); A.1 5 9 B.1 4 7 C.3 5 7 D.3 6 9 2.以下对二维数组a的正确说明是(c)。

A.int a[3][]; B.float a(3,4); C.double a[1][4]; D.flot a(3)(4); 3.已知:int a[3][4];则对数组元素引用正确的是(c)。

A.a[2][4] B.a[1,3] C.a[1+1][0] D.a(2)(1) 4.已知:int a[3][4];则对数组元素的非法引用是(D)。

A.a[0][2*1] B.a[1][3] C.a[4-2][0] D.a[0][4] 5.以下能对二维数组a进行正确赋初值的语句是(BD)。

A.int a[2][]={{1,0,1},{5,2,3}}; B.int a[][3]={{1,2,3},{4,5,6}}; C.int a[2][4]={{1,2},{3,4},{5,6}}; D.int a[][3]={1,2,3,4,5,6}; 6.以下不能对二维数组a进行正确赋初值的语句是(C)。 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}; 7.已知:int a[3][4]={0};则下面正确的叙述是(D)。

A.只有元素a[0][0]可得到初值0 B.此说明语句是错误的

C.数组a中每个元素都可得到初值,但其值不一定为0 D.数组a中每个元素均可得到初值0

8.若有说明:int a[][3]={1,2,3,4,5,6,7};则a数组第一维的大小是(B)。

A.2 B.3 C.4 D.无确定值 9.若二维数组a有m列,则在a[i][j]前的元素个数为(B)。

A.j*m+i B.i*m+j C.i*m+j-1 D.i*m+j+1

填空题

10.下面的程序是求出数组a矩阵的两条对角线上的元素之和,则①是(j=2)、②是(j>=0)。

#include main()

{int a[3][3]={1,3,6,7,9,11,14,15,17},sum1=0,sum2=0,i,j; for(i=0;i<3;i++) for(j=0;j<3;j++)

if(i==j)sum1=sum1+a[i][j];

for(i=0;i<3;i++) for(①;②;j--) if(i+j==2)

sum2=sum2+a[i][j];

printf("sum1=%d,sum2=%\\n",sum1,sum2);

- 17 -

}

11.从键盘上输入若干(不超过100个)学生的成绩,计算出平均成绩,并输出低于平均分的学生的成绩,用输入负数结束输入。则①是(a)、②是(a)、③是(sum/n)、④是(x[i] main() {float x[1000],sum=0,ave,a;

int n=0,i;

printf("Enter mark:"); scanf("%f",&a); while(a>0&&n<1000) {sum+=①; x[n]=②; n++;

scanf("%f",&a); } ave=③;

printf("Output:\\n"); printf("ave=%f\\n",ave); for(i=0;iif(④) printf("%f\\n",x[i]); } 12.下面程序将二维数组a的行和列元素互换后存到另一个二维数组b中,请填空,①是(j<=2)、②是(b[j][i]=a[i][j])、③是(i<=2)。 main() {int a[2][3]={{1,2,3},{4,5,6}};

int b[3][2],i,j;

printf("array a:\\n"); for(i=0;{printf("%5d",a[i][j]); ②; }

printf("\\n"); }

printf("array b:\\n"); for(i=0;③;i++) {for(j=0;j<=1;j++)

printf("%5d",b[i][j]); printf("\\n"); }

}

- 18 -

13.下面程序的功能是检查二维数组是否对称(即:对所有i和j都有a[i][j]=a[j][i])。请填空,①是(i=j+1)、②是(found=1)。 main() {int a[4][4]={1,2,3,4,2,2,5,6,3,5,3,7,4,6,7,4};

int i,j,found=0; for(j=0;j<4;j++) for(①;i<4;i++) if(a[j][i]!=a[i][j]) {②;break;}

if(found)printf("No"); else printf("Yes"); }

5-3

选择题

1.为了判断两个字符串s1和s2是否相等,应当使用(D)。 A.if(s1==s2) B.if(s1=s2)

C.if(strcpy(s1,s2)) D.if(strcmpy(s1,s2)==0) 2.*调用strlen("abcd\\0ef\\0g")的返回值是(A)。 A.4 B.5 C.8 D.9

3.已知:char str1[10],str2[10]={"books"};则在程序中能够将字符串"books"赋给数组str1的正确语句是(B)。 A.str1={"books"}; B.strcpy(str1,str2); C.str1=str2; D.strcpy(str2,str1); 4.下面程序段的运行结果是(B)。(注:□代表空格) char c[5]={„a‟,‟b‟,‟\\0‟,‟c‟,‟\\0‟}; printf("%s",c); A.‟a‟‟b‟ B.ab C.ab□c D.ab□ 5.下面程序段的运行结果是(D)。(注:□代表空格) char a[7]="abcdef"; char b[4]="ABC"; strcpy(a,b); printf("%c",a[5]); A.□ B.\\0 C.e D.f 填空题

6.以下程序是对键盘输入的两个字符串进行比较,然后输出两个字符串中第一个不同字符的ASCII码之差。例如:输入的两个字符串分别为"abcdefg"和"abceef",则第一个不同字符为"d"和"e",输出为-1.请填空,①是(‟\\0‟)、②是(str1[i]-str2[i])。 #include main() {char str1[100],str2[100],c;

int i,s;

printf("Enter string 1:"); gets(str1);

- 19 -

printf("Enter string 2:"); gets(str2); i=0;

while((str1[i]==str2[i]&&str1[i]!=①)) i++; s=②;

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

7.下面程序的功能是在三个字符串中找出最小的。请填空,①是((strcmp(str[0],str[1])<0?str[0]:str[1]); )、②是(s)。 #include #include main() {char s[20],str[3][20];

int i;

for(i=0;i<=3;i++) gets(str[i]); strcpy(s,①);

if(strcmp(str[2],s)<0) strcpy(s,str[2]); printf("%s\\n",②); }

8.下面程序的功能是在任意的字符串a中将与字符‟c‟相等的所有元素的下标值分别存放在整型数组b中,请填空,①是(a[i]==‟c‟)、②是(k++)。 #include main() {char a[80];

int i,b[80],k=0; gets(a);

for(i=0;a[i]!=‟\\0‟;i++) if(①){b[k]=i;②;}

for(i=0;i读程序,写结果

9.当运行以下程序时,从键盘输入:AhaMA□Aha(□代表空格,代表回车),则下面程序的运行结果是(ahAMa)。 #include main() {char s[80],c=‟a‟;

int i=0;

scanf("%s",s); while(s[i]!=‟\\0‟)

{if(s[i]==c) s[i]=s[i]-32;

else if(s[i]==c-32) s[i]=s[i]+32;

- 20 -

i++; } puts(s); }

10.下面程序的运行结果是(SW*)。 #include main() {char str[]="SSSWLIA",c;

int k;

for(k=2;(c=str[k])!=‟\\0‟;k++) {switch(c)

{case „I‟:++k;break; case „L‟:continue;

default:putchar(c);continue; }

putchar(„*‟); } }

11.下面程序段的运行结果是(600)。 char ch[]="600"; int a,s=0; for(a=0;ch[a]>=‟0‟&&ch[a]<=‟9‟;a++) s=10*s+ch[a]-„0‟; printf("%d",s);

练习6-1

选择题

1. 已知函数abc的定义为:

void abc() {„„}

则函数定义中void的含义是( A ).

A.执行函数abc后,函数没有返回值 B.执行函数abc后,函数不再返回C.执行函数abc后,可以返回任意类型 D.以上三个答案全是错误的 2. 已知:int p();p是(C ).

A.int型变量 B.函数p的调用

C.一个函数声明,该函数的返回值是int型的值 D.强制类型转换表达式中的变量 3. 以下正确的函数形式是( D ).

A.double fun(int x,int y) B.fun(int x,y)

{z=x+y;return z;} {int z;return z;} C.fun(x,y) D.double fun(int x,int y)

{int x,y;double z;z=x+y;return z;} {double z;z=x+y;return z;} 4. 以下说法正确的是( C ).

- 21 -

A.定义函数时,形参的类型说明可以放在函数体内 B.return后边的值不能为表达式

C.如果函数值的类型与返回值表达式的类型不一致,以函数值类型为准 D.如果形参与实参的类型不一致,以实参类型为准

5. C语言允许函数值类型缺省定义,此时该函数值隐含的类型是( B ). A.float 型 B.int型 C.long型 D.double型 6. 下面函数调用语句含有实参的个数为( B ).

func((exp1,exp2),(exp3,exp4,exp5));

A.1 B.2 C.4 D.5

7. 以下程序的功能是计算函数F(x,y,z)=(x+y)/(x-y)+(z+y)/(z-y)的值,请选择填空. #include #include float f(float,float); main()

{float x,y,z,sum;

scanf(“%f%f%f”,&x,&y,&z); sum=f(①B)+f(②C);

printf(“sum=%f\\n”,sum);} float f(float a,float b) {float value; value=a/b; return(value);}

①A.x-y,x+y B.x+y,x-y C.z+y,z-y D.z-y,z+y ②A.x-y,x+y B.x+y,x-y C.z+y,z-y D.z-y,z+y 填空题

8. 以下程序的功能是根据输入的"y"("Y")与"n"("N"),在屏幕上分别显示出"

This is YES."与"This is NO.".请填空,①是( break )②是( getchar() ). #include void YesNo(char ch) {switch(ch) {case‟y‟:

case‟Y‟:printf(“\\nThis is YES.\\n”);①; case‟n‟:

case‟N‟: printf(“\\nThis is NO.\\n”); } }

main() {char ch;

printf(“\\nEnter a char‟y‟,‟Y‟or‟n‟,‟N‟:”); ch=②;

printf(“ch:%c”,ch);

- 22 -

YesNo(ch); }

9. 下面函数pi的功能是:根据以下公式,返回满足精度(0.0005)要求的д的值,请填空,

①是(s=0.0,t=1.0,n=1 )②是( 2.0*s ).

д/2=1+1/3+(1/3)*(2/5)+(1/3)*(2/5)*(3/7)+(1/3)*(2/5)*(3/7)*(4/9)+…. #include #include< math.h> #include double pi(double eps) {double s,t;int n; for (①;t>eps;n++) {s+=t;

t=n*t/(2*n+1); }

return(②); } main() {double x;

printf(“\\nPlease enter a precision:”); scanf(“%1f”,&x);

printf(“\\neps=%1f,д=%1f”,x,pi(x)); }

读程序,写结果

10. 下列程序的运行结果是( 5 ).

#include fun(int p) {int a=10; p=a; ++p; }

main() {int a=5; fun(a);

printf(“%d\\n”,a); }

11. 下列程序的运行结果是( 8 ).

#include int abc(int u,int v); main()

{int a=24,b=16,c; c=abc(a,b);

- 23 -

printf(“%d\\n”,c); }

int abc(int u,int v) {int w; while(v) {w=u%v; u=v; v=w; }

return u; }

12. 下列程序的运行结果是( ).

#include main() {int a,b; a=5;b=10;

printf(“before swap a=%d,b=%d\\n”,a,b); swap(a,b);

printf(“after swap a=%d,b=%d\\n”,a,b); }

swap(int x,int y) {int temp;

temp=x;x=y;y=temp;

printf(“in swap x=%d,y=%d\\n”,x,y); }

13. 以下程序的运行结果是( 5 2 2 0 2 int i=0; main() {int i=5;

reset(i/2); printf(“i=%d\\n”,i); reset(i=i/2); printf(“i=%d\\n”,i); reset(i/2); printf(“i=%d\\n”,i); workover(i); printf(“i=%d\\n”,i); }

workover(int i)

{i=(i%i)*((i*i)/(2*i)+4); printf(“i=%d\\n”,i); return(i); }

reset(int i) {i=i<=2?5:0;

).- 24 -

return(i); }

练习6-2

选择题

1. 将一个函数说明为static后,该函数将( B ).

A.既能被同一源文件中的函数调用,也能被其他源文件中的函数调用 B.只能被同一源文件中的函数调用,不能被其他源文件中的函数调用 C.只能被其他源文件中的函数调用,不能被同一源文件中的函数调用 D.既不能被同一源文件中的函数调用,也不能被其他源文件中的函数调用 2. 如果在一个函数中的复合语句中定义了一个变量,则该变量( A ). A.只在该复合语句中有效 B.在该函数中有效 C.在本程序范围内均有效 D.为非法变量 3. 以下不正确的说法是( D ). A.在不同函数中可以使用相同名字的变量 B.形式参数是局部变量

C.在函数内定义的变量只在本函数范围内有效

D.在函数内的复合语句中定义的变量在本函数范围内有效 4. 以下程序的正确运行结果是( D ). #define MAX 10 int a[MAX],i; main()

{printf(“\\n”);sub1();sub3();sub2();sub3(); }

sub2()

{int a[MAX],i,max; max=5;

for(i=0;isub1()

{for(i=0;isub3() {int i;

for(i=0;iA.0 2 4 6 8 10 12 14 16 18 B.0 1 2 3 4

0 1 2 3 4 0 2 4 6 8 10 12 14 16 18 C.0 1 2 3 4 5 6 7 8 9 D.0 2 4 6 8 10 12 14 16 18 0 1 2 3 4 0 2 4 6 8 10 12 14 16 18

5. 凡是函数中未指定存储类别的局部变量,其隐含的存储类别为( A ).

- 25 -

A.自动(auto) B.静态(static) C.外部(extern) D.寄存器(register) 6. 以下程序的正确运行结果是( D ). main() {int a=2,i;

for(i=0;i<3;i++) printf(“%4d”,f(a)); }

f(int a)

{int b=0;static int c=3; b++;c++;

return(a+b+c); }

A.7 7 7 B.7 10 13 读程序,写结果

7. *写出下面程序的运行结果,①是( #include main()

{int k=4,m=1,p;

p=fun(k,m);printf(“%d”,p); /* p=fun(k,m);printf(“%d”,p); /* }

fun(int a,int b) {static int m=0,i=2; i+=m+l; m=i+a+b; return(m); }

8. 下面程序的运行结果是( 84 #include int d=1; fun(int p) {int d=5; d+=p++;

printf(“%d‟,d); }

main() {int a=3; fun(a); d+=a++;

printf(“%d”,d); }

7 9 11 8 )②是(① */ ② */ ).

7 8 9 17 ).

- 26 -

C. D. 练习7-1

选择题

1. 已知:int *p,a;则语句"p=&a;"中的运算符"&"的含义是( D ). A.位与运算 B.逻辑与运算 C.取指针内容 D.取变量地址 2. 已知:int a,x;则正确的赋值语句是( C ).

A.a=(a[1]+a[2])/2; B.a*=*a+1; C.a=(x=1,x++,x+2); D.a="good"; 3. 已知:int a,*p=&a;则下列函数调用中错误的是( D ).

A.scanf(“%d”,&a); B.scanf(“%d”,p); C.printf(“%d”,a); D.scanf(“%d”,*p); 4. 已知:char *p,*q;选择正确的语句( C ).

A.p*=3; B.p/=q; C.p+=3; D.p+=q; 5. 已知:int x;则下面的说明指针变量pb的语句( C )是正确的. A.int pb=&x; B.int *pb=x; C.int *pb=&x; D.*pb=*x;

练习7-2

选择题

1. 设有说明int(*ptr) [M];其中的标识符ptr是( C ). A.M个指向整型变量的指针 B.指向M个整型变量的函数指针

C.一个指向具有M列的二维数组的一行的指针 D.具有M个指针元素的一维数组的指针

2. 已知:double *p[6];它的含义是( C ).

A.p是指向double型变量的指针 B.p是double型数组 C.p是指针数组 D.p是数组指针

3. 已知:char s[10],*p=s,则在下列语句中,错误的语句是(B ). A.p=s+5; B.s=p+s; C.s[2]=p[4]; D.*p=s[0];

4. 已知:char s[100];int i;则在下列引用数组元素的语句中,错误的表示形式是( D ). A.s[i+10] B.*(s+i) C.*(i+s) D.*((s++)+i) 5. 已知:char b[5],*p=b;则正确的赋值语句是( C ).

A.b="abcd"; B.*b="abcd"; C.p="abcd"; D.*p="abcd"; 6. 下列对字符串的定义中,错误的是( A ).

A.char str[7]="FORTRAN" B.char str[ ]="FORTRAN"

C.char *str="FORTRAN" D.char str[ ]={„F‟,‟O‟,‟R‟,‟T‟,‟R‟,‟A‟,‟N‟,0}

7. 已知:char s[20]="programming",*ps=s;则不能引用字母o的表达式是( A ). A.ps+2 B.s[2] C.ps[2] D.ps+=2,*ps 8. 已知:char **s; 正确的语句是( B ).

A.s="computer"; B.*s="computer";C.**s="computer"; D. *s='A'; 9. 已知:char c[8]="beijing",*s=c;int i;则下面的输出语句中,错误的是( B ). A.printf(“%s\\n”,s); B.printf(“%s\\n”,*s); C.for(i=0;i<7;i++) D.for(i=0;i<7;i++)

printf(“%c”,c[i]); printf(“%c”,s[i]);

10. 已知:char *aa[2]={ "abcd", "ABCD"};则以下说法正确的是( D ).

- 27 -

A.aa数组元素的值分别是"abcd"序列和"ABCD"序列

B.aa是指针变量,它指向含有两个数组元素的字符型一维数组

C.aa数组的两个元素分别存放的是含有4个字符的一维字符数组的首地址 D.aa数组的两个元素中各自存放了字符"a"和"A"的地址

11. *已知:int a[3][4],*p=&a[0][0];p+=6;那么*p和( D )的值相同. A.*(a+6) B.*(&a[0]+6) C.*a[1]+2 D.a[1][2]

12. 已知:int a[]={1,2,3,4,5,6,7,8,9,10,11,12},*p=a;则值为3的表达式是( A ). A.p+=2,*(p++) B.p+=2,*++p C..p+=3,*p++ D.*(&a[0][0]+6) 13. 已知:int**p;则变量p是( B ).

A.指向int的指针 B.指向指针的指针

C.int型变量 D.以上三种说法均是错误的

14. 已知:int a[ ]={1,2,3,4},y,*p=&a[1];则执行语句“y=(*--p)++;”之后,变量y的值为

( A ).

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

15. 已知:int b[ ]={1,2,3,4},y,*p=b;则执行语句“y=*p++;”之后,变量y的值为( A ). A.1 B.2 C.3 D.4

16. 已知:int x[ ]={1,3,5,7,9,11},*ptr=x;则能够正确引用数组元素的语句是( B ). A.x B.*(ptr--) C.x[6] D.*(--ptr)

17. 已知:int x[ ]={1,3,5,7,9,11},*ptr=x;则不能够正确引用数组元素的语句是( B ). A.*(ptr--) B.*(--ptr) C.*(ptr++) D.*(++ptr) 18. 若有以下语句且0<=k<6,则正确表示数组元素地址的语句是( C ). static int x[ ]={1,3,5,7,9,11},*ptr=x, k;

A.x++ B.&ptr C.&ptr[k] D.&(x+1) 19. 已知:int i,x[3][4];则不能将x[1][1]的值赋给变量i的语句是( A ). A.i=*(*(x+1)+1) B.i=x[1][1] C.i=*(*(x+1)) D.i=*(x[1]+1) 20. 已知:int a[2][3]={2,4,6,8,10,12};正确表示数组元素的地址是( C ). A.*(a+1) B.*(a[1]+2) C.a[1]+3 D.a[0][0]

21. 已知:int*p;使用如下语句动态申请一个int型的存储单元,应当使用( D ). p=( )malloc(sizeof(int));

A.int B.int* C.(*int) D.(int*) 填空题

22. 阅读程序,下面程序的输出结果是( 15 ).

#include main()

{static int a[2][3]={{1,2,3},{4,5,6}}; int m,*ptr; ptr=&a[0][0];

m=(*ptr)*(*(ptr+2))*(*(ptr+4)); printf(“%d\\n”,m); }

23. 下面程序的功能是:从键盘上输入一行字符,存入一个字符数组中,然后输出该字符串.则

- 28 -

①是( „\\0‟ )②是( ++ ). main()

{char str[81],*sptr; int i;

for(i=0;i<80;i++) {str[i]=getchar();

if(str[i]==‟\\n‟) break; }

str[i]=①; sptr=str; while(*sptr) putchar(*sptr②); }

24. 在下面的程序中若第一个printf语句的输出为ffe2,则其余语句的输出结果分别为:①是

( fff4 )②是( a )③是( 0 )④是( b ). main()

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

printf(“%x\\n”,p); /* 输出结果为ffe2*/ printf(“%x\\n”,p+9); /* 输出① */ printf(“%x\\n”,*p+9); /* 输出② */ printf(“%x\\n”,*(p+9)); /* 输出③ */

printf(“%x\\n”,*++p+9); /* 输出④ */ }

25. *下面程序的输出结果,①是( m )②是( a )③是( w )④是( z )

⑤是(mnopqr ). #include

char *pp[2][3]={“abc”, “defgh”, “ijkl”, “mnopqr”, “stuvw”, “xyz”}; main()

{ printf(“%c\\n”,***(pp+1)); /* 输出① */ printf(“%c\\n”,**pp[0]); /* 输出② */ printf(“%c\\n”,(*(*(pp+1)+1))[4]); /* 输出③ */ printf(“%c\\n”,*(pp[1][2]+2)); /* 输出④ */ printf(“%s\\n”,**(pp+1)); /* 输出⑤ */ }

读程序,写结果

26. 下面程序的运行结果是( ).

#include main()

{int a[3][4]={1,3,5,7,9,11,13,15,17,19,21,23}; int *p,i;

for(p=a,i=0;p<&a[0][0]+12;p++,i++)

- 29 -

{if(i%4==0) printf(“\\n”); printf(“%4d”,*p); } }

27. 下面程序的运行结果是( 3,3,3 ).

#include main()

{int a=2,*p,**pp; pp=&p;p=&a; a++;

printf(“%d,%d,%d\\n”,a,*p,**pp); }

练习7-3

选择题

1. main(argc,argv)中形式参数argv的正确说明形式应当为( A ). A.char *argv[ ] B.char argv[ ][ ] C.char argv[ ] D.char *argv 2. 说明语句"int (*p)();"的含义是( c ). A.p是一个指向一维数组的指针变量 B.p是指针变量,指向一个整型数据

C.p是一个指向函数的指针,该函数的返回值是一个整型 D.以上都不对

3. 说明语句"int *(*p)();"的含义是( D ). A.p是一个指向int型数据的指针 B.p是指针变量,它构成了指针数组

C.p是一个指向函数的指针,该函数的返回值是一个整型

D.p是一个指向函数的指针,该函数的返回值是一个指向整型的指针 4. 已知函数说明语句"void *f();",则它的含义是( A ). A.函数f的返回值是一个通用型指针 B.函数f的返回值可以是任意的数据类型 C.函数f无返回值

D.指针f指向一个函数,该函数无返回值

5. *函数的功能是交换变量x和y中的值,并且通过正确调用返回交换的结果.能正确执行此

功能的函数是( D ).

A.funa(int *x,int *y) B.funb(int x,int y)

{int *p; {int t;

*p=x;*x=*y;*y=*p; t=x;x=y;y=t; } }

C.func(int *x,int *y) D.fund(int *x,int *y)

{*x=*y;*y=*x;} {*x=*x+*y;*y=*x-*y;*x=*x-*y;} 6. 阅读程序,下面程序的输出结果是( D ).

假设可执行文件的文件名为:PROG.EXE

- 30 -

运行时键入的命令行为:PROG-386 NET3<回车> #include

main(int argc;char *argv[]) {int i;

for(i=0;iA.-386 B.PROG.EXE C.PROG.EXE D.PROG

NET3 -386 - -386 NET3 386 NET3 NET3 7. 下面程序的运行结果是( A ).

#include f(int x,int y) {return(y-x);} main()

{int a=5,b=6,c=2; int f();

int (*g)()=f; c=(*g)(a,b);

printf(“%d\\n”,c); }

A.1 B.2 C.3 D.前面三个答案均是错误的 8. 若用数组名作为函数调用的实参,传递给形参的是( A ). A.数组的首地址 B.数组第一个元素的值 C.数组中全部元素的值 D.数组元素的个数 填空题

9. 下面的函数fun的功能是将形参x的值转换成二进制数,所得二进制数的每一位放在一维

数组中返回,二进制的最低位放在下标为0的元素中,其他依次类推,则①是( 2 )②是( 2 ) fun(int x,int b[]) {int k=0,r; do

{r=x%①; b[k++]=r; x/=②; }while(x); }

10. 函数expand(char s[],char t[])在将字符串s复制到字符串t时,将其中的换行符和制表符转

换为可见的转义字符,即用"\\n"表示换行符,用"\"表示制表符.则①是( j++ )②是(‘\\\\’ )③是( j++ )④是( ‘\\\\’ )⑤是( j++ )⑥是( \\0 ).

- 31 -

expand(char s[],char t[]) {int i,j;

for(i=j=0;s[i]!=‟\\0‟;i++) switch(s[i])

{case‟\\n‟:t[①]= ②; t[j++]=‟n‟; case‟\‟:t[③]= ④; t[j++]=‟t‟; break; default:t[⑤]=s[i]; break; }

t[j]= ⑥; }

读程序,写结果

11. *以下程序的运行结果是( 10 7 5 3 -7 ).main()

{int a[5]={5,10,-7,3,7},i,t,j; sort(a);

for(i=0;i<=4;i++) printf(“%d”,a[i]); }

sort(int a[ ]) {int i,j,t;

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

if(a[j]12. *以下程序的运行结果是( -1 3 6 8 9 ).

main()

{int a[5]={9,6,8,3,-1},i,t,j,p; sort(a);

for(i=0;i<=4;i++) printf(“%d”,a[i]); }

sort(int a[ ]) {int i,j,t,p;

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

for(i=j;i<=4;i++) if(a[i]- 32 -

13. 以下程序的运行结果是(sum=6 ).

main()

{int a[3][3]={1,3,5,7,9,11,13,15,17};int sum; sum=func(a);

printf(“\\nsum=%d\\n”,sum); }

func(int a[ ][3]) {int i,j,sum=0; for(i=0;i<3;i++) for(j=0;j<3;j++) {a[i][j]=i+j;

if(i==j) sum=sum+a[i][j]; }

return(sum); }

14. 下面程序的运行结果是( before swap a=5,b=10 #include main() {int a,b; a=5;b=10;

printf(“%d,b=%d\\n”,a,b); swap(&a,&b);

printf(“after swap a=%d,b=%d\\n”,a,b); }

swap(int *px,int *py) {int temp;

temp=*px; *px=*py; *py=temp;

printf(“in swap x=%d,y=%d\\n”,*px,*py); }

15. 下面程序的运行结果是(0 1 2 3 ).

#include func(int b[ ]) {int j;

for(j=0;j<4;j++) b[j]=j; }

main() {int a[4],i; func(a);

in swap x=10,y=5 after swap a=10,b=5).- 33 -

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

printf(“%d”,a[i]); }

16. 运行下面程序,如果从键盘上输入字符串"qwerty"和字符串"abcd",则程序的运行结

果是( 10 ). #include

strle(char a[ ],char b[ ]) {int num=0,n=0;

while(a[num]!=‟\\0‟) num++; while(b[n]) {a[num]=b[n]; num++;n++; }

return(num); }

main()

{char str1[81],str2[81]; gets(str1); gets(str2);

printf(“%d\\n”,strle(str1,str2)); }

17. *下面程序的运行结果是( AGAAGAG ).

#include #include void fun(char *w,int m) {char s,*p1,*p2; p1=w;

p2=w+m-1; while(p1{s=*p1++;*p1=*p2--;*p2=s;} }

main()

{static char a[ ]= “ABCDEFG”; fun(a,strlen(a)); puts(a); }

练习8

选择题

1. 在程序中要使用语句:printf(“%s\\n”,STRING);输出一个长度为5个字符的提示信息"

OK!",则应使用宏定义语句( D ).

A.#define STRING"OK! " B.#define STRING""OK! ""

- 34 -

C.#define STRING\\"OK! \\" D.#define STRING"\\"OK! \\"" 2. 以下正确的描述为( C ).

A.每个C语言程序必须在开头用预处理命令#include B.预处理命令必须位于C源程序的首部 C.在C语言中预处理命令都以"#"开头

D.C语言的预处理命令只能实现宏定义和条件编译的功能 3. C语言的编译系统中宏命令是( D ). A.在程序运行时进行代换处理的 B.在程序连接时进行处理的

C.和源程序中其他C语句同时进行编译的

D.在对源程序中其他成分正式编译之前进行处理的

4. 从下列选项中选择不会引起二义性的宏定义是( D ). A.#define POWER(x) x*x B.#define POWER(x) (x)*(x) C.#define POWER(x) (x*x) D.#define POWER(x) ((x)*(x)) 5. 若有宏定义如下: #define X 5 #define Y X+1 #define Z Y*X/2

则执行以下printf语句后,输出结果是( D ). int a;a=Y;

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

A.7,6 B.12,6 C.12,5 D.7,5

6. 若a,b,c,d,t均为int型变量,则执行以下程序段后结果为( C ). #define MAX(A,B)(A)>(B)?(A):(B) #define PRINT(Y) printf(“Y=%d\\n”,Y) „„

a=1;b=2;c=3;d=4; t=MAX(a+b,c+d); PRINT(t);

A.Y=3 B.存在语法错误 C.Y=7 D.Y=0

练习9-1

一、选择题

1.typedef unsigned long LONG的作用是( D )。 A.建立了一种新的数据类型 B.定义了一个整形变量 C.定义了一个长整型变量 D.定义了一个新的数据类型标识符 2.下面的4个运算符中,优先级最低的是(D )。 A.( ) B. . C.-> D.++ 3.已知:

- 35 -

struct { int i; char c; float a; }test;

则sizeof(test)的值是( D )。 A.4 B.5 C.6 D.7 4.当声明一个结构变量时系统分配给它的内存是( A )。 A.各成员所需内存量的总和 B.结构中第一个成员所需内存量 C.成员中占内存量最大者所需的容量 D.结构中最后一个成员所需内存量 5.以下对结构类型变量的定义中错误的是( D )。 A.typedef struct student { int num; float age;

}STUDENT std1;

C.struct { int num; float age; }std1;

B.struct student { int num; float age; }std1; D.struct { int num; float age; }student;

struct student std1;

- 36 -

6.根据下面的定义,能打印出字母M的语句是( D )。 struct person

{ char name[9]; int age; };

struct person class[10]={\"John\A.printf(\"%c\\n\ B.printf(\"%c\\n\C.printf(\"%c\\n\ D.printf(\"%c\\n\7.以下scanf函数调用语句中对结构变量成员的错误引用是( D )。 struct pupil

{ char nam[20]; int age; int sex }pup[5], *p; p=pup;

A.scanf(\"%s\ B.scanf(\"%d\C.scanf(\"%d\ D.scanf(\"%d\8.若有以下程序段: struct dent { int n; int *m; };

int a=1, b=2, c=3;

struct dent s={{101, &a}, {102, &b}, {103, &c}}; struct dent *p=s;

则以下表达式中值为2的是(D )。 A.(p++)->m B.*(p++)->m C.(*p).m D.*(++p)->m 二、填空题 9.已知: struct

{ int x, y;

}s[2]={{1, 2}, {3, 4}}, *p=s; 则表达式++p->x的值( ①2 ),表达式(++p)->x的值是( ②3 )。 10.下面的程序从终端上输入5个人的年龄、性别和姓名,然后输出。则①是(p+n )、

②是(gets(p->name) )、③是(p+n )。 #include \"stdio.h\" struct man

{ char name[20]; unsigned age; char sex[7]; };

- 37 -

main()

{ struct man person[5]; data_in(person, 5); data_out(person, 5); }

data_in(struct man *p, int n) { struct man *q=①; for (; p{ printf(\"age:sex:name\");

scanf(\"%u%s\ ②; } }

data_out(struct man *p, int n) { struct man *q=③; for (; pprintf(\"%s;%u%s\\n\}

读程序,写结果。

11.下面程序的运行结果是(Zhao )。

#include struct stu { int num;

char name[10]; int age; };

void fun(struct stu *p)

{ printf(\"%s\\n\}

main() { struct

students[3]={{9801,\"Zhang\};

fun(students+2); }

12.下列程序输出结果是(1, minicomputer)。

#include \"stdio.h\" struct tree { int x; char *s; }t;

stu

- 38 -

func(struct tree t) { t.x=10;

t.s=\"computer\"; return(0); }

main() { t.x=1;

t.s=\"minicomputer\"; func(t);

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

}

练习9-2

一、选择题

1.设有以下说明和定义语句,则下面表达式中值为3的是(d )。 struct s { int i1; struct s *i2; };

static struct a[3]={1, &a[1], 2, &a[2], 3, &a[0]}; static struct s *ptr; ptr=&a[1];

A.ptr->i1++ B.ptr++->i1 C.*ptr->i1 D.++(ptr->i1) 2.下面对枚举变量的定义中,正确的是( )。 A.enum color {red, blue, grenn} a, b; B.enum color={red, blue, green} a,b; C.enum color={\"red\D.enum color {red, blue, green} a, b; 3.执行以下语句后的输出结果是( )。

enum weekday {sun, mon=3, tue, wed, thu}; enum weekday workday; workday=wed;

printf(\"%d\\n\A.5 B.3 C.4 D.编译时出错 4.已知: union { int i; char c; float a; }test;

则sizeof(test)的值是( A )。 A.4 B.5 C.6 D.7 5.已知函数原型为:

struct tree *f(int x1, int *x2, struct tree x3, struct tree *x4)

- 39 -

其中tree为已定义过的结构,且有下列变量定义:struct tree pt, *p; int i; 请选择正确的函数调用语句(B )。 A.&pt=f(10, &i, pt, p) B.p=f(i++, &i, pt, &pt); C.f=f(i+1, &(i+2), *p, p); D.f(i+1, &i, p, p); 读程序,写结果

6.下面程序的运行结果是(mix.i= 12345678)。 #include mix.k=5678

mix.ii=78

main() mix.s[0]=78 mix.s[1]=56 { union mix.s[2]=34 mix.s[3]=12 { long i; int k; char ii; char s[4]; }mix;

mix.i=0x12345678;

printf(\"mix.i=%lx\\n\ printf(\"mix.k=%x\\n\ printf(\"mix.ii=%x\\n\

printf(\"mix.s[0]=%x\ mix.s[1]=%x\\n\ printf(\"mix.s[2]=%x\ mix.s[3]=%x\\n\}

7.下面程序对应的运行结果是(380039 )。 #include 9 main() { union

{ int i[2]; long k; char c[4]; }t,*s=&t; s->i[0]=0x39; ss->i[1]=0x38;

printf(\"%1x\\n\ printf(\"%c\\n\}

- 40 -

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- niushuan.com 版权所有 赣ICP备2024042780号-2

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务