选择题
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 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 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)。(注:□表示空格, C.10A20B 5.已有定义 int x; float y; 且执行scanf("%3d%f",&x,&y);语句时,输入数据12345□678 ① A.12345 B.123 C.45 D.345 ② A.无定义 B.45.000000 C.678.000000 D.123.000000 6.阅读以下程序,当输入数据的形式为:25,13,10 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: 2 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:y 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 C.(„a‟>=c1)||(„z‟<=c1) D.(c1>=‟a‟)&&(c1<=‟z‟) 读程序、写结果 14.*下面程序的运行结果:①(17)、②(102)、③(9)、④()、⑤(0 0 -1)。 #include - 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 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 if(„0‟<=c<=‟39‟) printf("YES"); else printf("NO");} A.YES B.NO 7.*下列程序的运行结果为(C)。 #include if(aprintf("%d\\n",c); } A.0 B. 1 8.*阅读程序,其运行结果是(C)。 #include 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 {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(x 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 13.若运行时输入:3 5/ 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 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 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 for(i=0,j=10;i printf("%d\\n",j); } 12.*下面程序的运行结果是(15)。 #include 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 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 while(i<=15) if(++i%3!=2)continue; else printf("%d ",i); printf("\\n"); } 3. 若运行以下程序时,从键盘输入Adescriptor 果是(12 412)。 #include - 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 {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 {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.**若有以下输入( 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 {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] 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;i 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 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 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 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 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 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 {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 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 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 main() {int a=5; fun(a); printf(“%d\\n”,a); } 11. 下列程序的运行结果是( 8 ). #include {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 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;i {for(i=0;i for(i=0;i 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 {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 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 {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 {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 {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;i NET3 -386 - -386 NET3 386 NET3 NET3 7. 下面程序的运行结果是( A ). #include {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++)
Copyright © 2019- niushuan.com 版权所有 赣ICP备2024042780号-2
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务