C语言笔试11

更新时间:2024-04-15 02:25:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

第一

一、 选择题

1. 以下不是C语言的特点的是(B)。 A.语言简洁紧凑 B.能够编制出功能复杂的程序 C.C语言可以直接对硬件操作 D.C语言移植性好

2. 下列字符序列中,不可用作C语言标识符的是( B)。

A.abc123 B.no.1 C._123_ D._ok 3. 正确的C语言标识符是 ( A)。

A._buy_2 B.2_buy C.?_buy D.buy? 4. 下列符号中,不属于转义字符的是(B )。

A.\\\\ B.\\0xAA C.\\t D.\\0 5. 不属于C语言关键字的是( D)。

A.int B.break C.while D.character 6. 是C语言提供的合法关键字的是(C )。

A.Float B.Signed C.integer D.char 7.一个C程序是由(B )。 A.一个主程序和若干子程序组成 B.一个或多个函数组成 C.若干过程组成 D.若干子程序组成

8. C语言程序的基本单位是( C)。

A.程序行 B.语句 C.函数 D.字符 9.以下选项中,合法的实型常数是( C)。

A.5E2.0 B.E-3 C.2E0 D.1.3E

10.已知大写字母A的ASCII码值是65, 小写字母a的ASCII码是97,则用八进制表示的字符常量’\\101’是( A)。

A.字符A B.字符a C.字符c D.非法的常量 11.以下选项中,正确的字符常量是( C)。

A.”F” B.’\\\\’’ C.’W’ D.’123’ 12.以下选项中可作为C语言合法整数的是(C)

A.10110B B.0386 C.0Xffa D.x2a2 14.已知各变量的类型说明如下: int m=8,n, a, b; unsigned long w=10; double x=3.14, y=0.12;

则以下符合C语言语法的表达式是( A)。 A.a+=a-=(b=2)*(a=8) B. n=n*3=18 C.x%3 D.y=float (m)

1

15.已知字母A的ASCII码为十进制数65,且S为字符型,则执行语句S=’A’+’6’-’3’;后,S中的值为(A )。

A.’D’ B.68 C.不确定的值 D.’C’ 16.在C语言中,要求运算数必须是整型的运算符是(D )。 A./ B.++ C.*= D.%

17.若有说明语句:char s=’\\72’;则变量s(A )。 A.包含一个字符 B.包含两个字符

C.包含三个字符 D.说明不合法,s的值不确定

18.若有定义:int m=7; float x=2.5, y=4.7; 则表达式x+m%3*(int)(x+y)%2/4的值是( A)。

A.2.500000 B.2.750000 C.3.500000 D.0.000000 19.在C语言中,char型数据在内存中的存储形式是( D)。 A.补码 B.反码 C.原码 D.ASCII码 20.表达式13/3*sqrt(16.0)/8的数据类型是(C )。

A.int B.float C.double D.不确定

21.设以下变量均为int类型,则值不等于7的表达式是(C)。 A.(m=n=6, m+n, m+1) B.(m=n=6, m+n, n+1)

C.(m=6, m+1, n=6, m+n) D.(m=6, m+1, n=m, n+1)

22.假设所有变量均为整型,则表达式(x=2, y=5, y++, x+y)的值是( B)。

A.7 B.8 C.6 D.2

23.putchar函数可以向终端输出一个(D)。

A.整型变量表达式 B.字符串 C.实型变量 D.字符。

第二

一、选择题

3xn

1.与数学式子2x?1对应的C语言表达式是 C 。

A)3*x^n/(2*x-1) B)3*x**n/(2*x-1)

C)3*pow(x,n)*(1/(2*x-1)) D)3*pow(n,x)/(2*x-1)

2.若有定义:int a=8,b=5,c;,执行语句c=a/b+0.4;后,c的值为B 。

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

3.设x、y、t均为int型变量,则执行语句:x=y=3;t=++x||++y;后,y的值为 C 。

A)不定值 B)4 C)3 D)1 4.以下程序的输出结果是 B 。

# include main() {

int i=010,j=10;

2

printf(\}

A)11,10 B)9,10 C)010,9 D)10,9

5.若float a,b,c;要通过语句scanf(\给a赋于10.0,b赋予22.0,c赋予33.0,不正确的输入形式是 B 。

A)10<回车>22<回车>33<回车> B)10.0,22.0,33.0<回车> C)10.0<回车> 22.0 33.0<回车> D)10 22<回车> 33<回车> 6.请选出合法的C语言赋值语句 B 。

A)a=b=58 B)i++; C)a=58,b=58 D)k=int(a+b);

7.x、y、z被定义为int型变量,若从键盘给x、y、z输入数据,正确的输入语句是 B 。

A)INPUT x、y、z; B)scanf(\C)scanf(\ D)read(\8.设有语句int a=3;则执行了语句a+=a-=a*a;后,变量a的值是 D 。

A)3 B)0 C)9 D)-12

9.设a=5,b=6,c=7,d=8,m=2,n=2,执行(m=a>b)&&(n=c>d)后n的值为 B 。

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

10.若变量c为char类型,能正确判断出c为小写字母的表达式是 D 。

A)'a'<=c<= 'z' B)(c>='a')||(c<= 'z') C)('a'<=c)and ('z'>=c) D)(c>= 'a')&&(c<= 'z')

11.设a和b均为double型常量,且a=5.5、b=2.5,则表达式(int)a+b/b的值是 A 。

A)6.000000 B)7 C)8 D)7.500000 12.执行下面的程序段

int x=35;char z='A';int b;

b=((x&&15)&&(z<'a'));后,b的值为 B 。 A)0 B)1 C)2 D)3

13.已有定义:int x=3,y=4,z=5;,则表达式!(x+y)+z-1&&y+z/2的值是 D 。

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

14.假定w、x、y、z、m均为int型变量,有如下程序段:

w=1;x=2;y=3;z=4; m=(w

m=(m

1.有以下程序段:

int m=0,n=0; char c='a';

scanf(\printf(\

若从键盘上输入:10A10<回车>,则输出结果是 10 A 10 。 2.下列程序的输出结果是什么?

# include main()

{ int a=2,c=5;

printf(\}

3.以下程序的输出结果是什么?a

main()

{ char c='z';

printf(\}

3

4.若有以下程序段(n所赋的是八进制数)

int m=32767,n=032767;

printf(\执行后输出结果是什么?32767,32767 5.有以下程序

main()

{ char a,b,c,d; a='\\';b='\\xbc'; c='\\0xab';d='A';

printf(\

}编译时出现错误,分析出错误的语句。a='\\\\'或者a='\\''(后面应有两个分号) c='\\0xab' C语言不支持这种表示方法 6.写出下面程序的输出结果。

#include\main()

{ char a='2',b='a'; int c; c=a+b; a=c;

printf(\}

7.下面程序的输出结果是 2,1 。

main()

{ int a=1,b=2;

a=a+b;b=a-b;a=a-b; printf(\}

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

main() { int a=0; a+=(a=8);

printf(\}

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

main()

{ int a=5,b=4,c=3,d; d=(a>b>c);

printf(\}

10.以下程序运行后的输出结果是 3 。main() { int p=30;

printf(\}

11.分析以下程序的输出结果。13.700000

#include #include main()

{ int a=1,b=4,c=2; float x=10.5,y=4.0,z;

z=(a+b)/c+sqrt((double)y)*1.2/c+x; pritnf(\}

12.分析以下程序的输出结果。1

main()

{ int a=4,b=5,c=0,d; d=!a&&!b||!c;

4

printf(\}

13.分析以下程序的输出结果。6

main()

{ int a=5,b=4,c=6,d;

printf(\} 三、按要求写结果

1、计算下面表达式的值。设a=1,b=2,c=3。 (1)a = a!=b?b:c 3 (2)a>b?b+1:c+1 4 (3)(a=4) ? a--:b-- 1

2、写出满足下面条件的关系或逻辑表达式。

(1)a在区间(3,10)内。A>3&&a<10 (2)x是3的倍数。X%3=0

(3)x和y的和大于100且x大于45。X+Y>100&&x>45 (4)a等于c或b不等于0 a=c||b!=0 (5)a是小写字母a>=?c?&&a<=?z?

3、计算下面逻辑表达式的值。设a=0,b=1,c=2,d=4。

(1)a>=b (2)c-b==a (3)c!=d-b (4)b>a && c>b (5)a && d-c (6)!a && b>c (7)(b>a) || cd (10)(a||b) && cd

第三

一、选择题

1.下列运算符中优先级最高的是 B 。

A)> B) + C) && D)!=

2.以下关于运算符优先级的描述中,正确的是 A 。

A)!(逻辑非)>算术运算>关系运算>&&(逻辑与)>||(逻辑或)>赋值运算 B)&&(逻辑与)>算术运算>关系运算>赋值运算

C)关系运算>算术运算>&&(逻辑与)>||(逻辑或)>赋值运算 D)赋值运算>算术运算>关系运算>&&(逻辑与)>||(逻辑或) 3.逻辑运算符的运算对象的数据类型 D 。

A)只能是0或1 B)只能是.T.或.F. C)只能是整型或字符型 D)任何类型的数据

4.能正确表示x的取值范围在[0,100]和[-10,-5]内的表达式是 B 。

A)(x<=-10)||(x>=-5)&&(x<=0)||(x>=100) B)(x>=-10)&&(x<=-5)||(x>=0)&&(x<=100) C)(x>=-10)&&(x<=-5)&&(x>=0)&&(x<=100) D)(x<=-10)||(x>=-5)&&(x<=0)||(x>=100) 5.以下程序的运行结果是 B 。 main( )

5

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

main()

{int a=-1,b=4,k;

k=(++a<=0)&&!(b--<=0); printf(\}

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

43.若已定义int a=25,b=14,c=19;以下三项运算符(?:)所构成的语句的执行结果是 D 。 a++<=25&&b--<=2&&c++?printf(\d\\n\

A)(***a=25,b=14,c=19) B)(***a=26,b=13,c=19) C)(###a=25,b=14,c=19) D)(###a=26,b=13,c=19) 二、填空题

4.以下程序的功能是计算一元二次方程ax2+bx+c=0的根,补足程序中空缺的语句。 #include main( )

{float a,b,c,_abs,_derta,_doublea,part1,part2; printf(\

scanf(\if( a=0 ) if( b=0 ) printf(\

else printf(\else

{_derta=b*b-4*a*c;

_doublea=2*a; part1=-b/(2*a); _abs=abs(_derta);

part2=sqrt(_abs)/_doublea;

if( derta<0 ) printf(\else

printf(\

} }

5.设有程序片段如下:

switch(class)

{case 'A':printf(\case 'B':printf(\case 'C':printf(\case 'D':printf(\default:printf(\

}若class的值为'C',则输出结果是 OK! 。 6.以下程序段的运行结果是 x=1,y=0 。 int x=1,y=0; switch(x)

11

{case 1:

switch(y)

{case 0:printf(\ case 1:printf(\ }

case 2:printf(\}

8. 输入3个实数 a, b, c要求按从大到小的顺序输出三数。 main( ) { float a,b,c,t;

scanf(“%f,%f,%f”,&a,&b,&c); if (a

9. 输入一个字符,如果是大写字母,则把其变成小写字母;如果是小写字母,则变成大写字母;其它字符不变。请在()内填入缺省的内容。 main( )

{ char ch; scanf(“%c”,&ch);

if (ch>=?A?&&ch<=?Z?) ch=ch+32; else if(ch>=?a?&&ch<=?z?) ((ch=ch-32); printf(”%c\\n”,ch); }

10. 以下程序的运行结果是:___-1______。 main( )

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

c = a ;

if ( a>b ) c = 1 ;

else if ( a == b ) c = 0 ; else c = -1 ; printf ( “%d\\n”, c ) ; }

11. 以下程序的运行结果是:_____x=6____。

main( ) { int x;

x=5;

if (++x>5) printf(“x=%d”,x);

else printf(“x=%d”,x--); }

15.以下程序的运行结果是:___a=2,b=2,c=4______。

main()

{int a,b,c; a=b=c=1; a+=b;

12

b+=c; c+=a;

printf(\printf(\

(a>=b>=c)?printf(\printf(\}

17.以下程序的运行结果是:__3233_______。

main()

{int x=1,y=1,z=1; y=y+z;x=x+y;

printf(\

printf(\printf(\printf(\}

18.以下程序的运行结果是:__0 1_______。

mian() {int x,y,z; x=3;y=z=4;

printf(\printf(\}

第四

一、选择题

1.while循环语句中,while后一对圆括号中表达式的值决定了循环体是否进行,因此,进入while循环后,一定有能使此表达式的值变为 A 的操作,否则,循环将会无限制地进行下去。

A)0 B)1 C)成立 D)2

2.在do-while循环中,循环由do开始,用while结束;必须注意的是:在while表达式后面的 A 不能丢,它表示do-while语句的结束。

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

3.for语句中的表达式可以部分或全部省略,但两个 C 不可省略。但当三个表达式均省略后,因缺少条件判断,循环会无限制地执行下去,形成死循环。

A)0 B)1 C); D), 4.程序段如下

int k=-20;while(k=0) k=k+1;则以下说法中正确的是 C 。

A)while循环执行20次 B)循环是无限循环 C)循环体语句一次也不执行 D)循环体语句执行一次 5.程序段如下

int k=1;while(!k==0) {k=k+1;printf(\说法正确的是 B 。

A)while循环执行2次 B)循环是无限循环

13

C)循环体语句一次也不执行 D)循环体语句执行一次 6.以下for循环是 D 。 for(a=0,b=0;(b!=123)&&(a<=4);a++)

A)无限循环 B)循环次数不定 C)执行4次 D)执行5次 7.在下列程序中,while循环的循环次数是 D 。 main( ) { int i=0; while(i<10)

{if(i<1) continue; if(i= =5) break; i++; } ...... }

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

8.程序段如下

int k=0; while(k++<=2) printf(\则执行结果是 A 。

A)1 B)2 C)0 D)无结果 2 3 1 3 4 2 9.程序段如下 int k=0;

while(k++<=2); printf(\则执行结果是last= C 。

A)2 B)3 C)4 D)无结果

10.执行下面的程序后,a的值为 B 。 main() {int a,b;

for(a=1,b=1;a<=100;a++) {if(b>=20)break;

if(b%3==1) {b+=3; continue; } b-=5; } }

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

11.以下程序的输出结果 C 。 main() {int x=3; do

{printf(\}while(--x);

14

}

A)1 B)30 3 C)1 -2 D)死循环

12.定义如下变量:

int n=10;则下列循环的输出结果是 B 。 while(n>7) {n--;

printf(\}

A)10 B)9 C)10 D)9 9 8 9 8 7 8 7 13.以下程序的输出结果 A 。 main() {int n=0;

while(n++<=1) printf(\printf(\}

A)1 2 3 B)0 1 2 C)1 1 2 14.以下程序的输出结果是 B 。 main() {int i;

for(i=1;i<=5;i++) {if(i%2)printf(\else continue; printf(\}

printf(\}

A)*#*#*#$ B)#*#*#*$ 15.以下程序的输出结果是 A 。 main() {int a=0,i;

for(i=1;i<5;i++) {switch(i) {case 0:

case 3:a+=2; case 1:

case 2:a+=3; default:a+=5; } }

printf(\

15

8 7 6 D)1 2 2

C)*#*#$ D)#*#*$

}

A)31 B)13 C)10 D)20

16.以下程序的输出结果是 B 。 #include main()

{int i=0,a=0; while(i<20)

{for(;;) {if((i)= =0) break;else i--;} i+=11; a+=i; }

printf(\}

A)21 B)32 C)33 D)11

17.当输入为\时,下面程序的执行结果是 B 。 #include main()

{char c;c=getchar();

while((c=getchar())!='?') putchar(++c);}

A)Quert B)vfsu C)quert? D)rvfsu?

18.当输入为\时,下面程序的执行结果是 C 。 #include main()

{while(putchar(getchar())!='?');}

A)quert B)Rvfsu C)quert? D)rvfsu?

19.当输入为\时,下面程序的执行结果是 A 。 #include main()

{char c;c=getchar(); while(c!='?') {

putchar(c); c=getchar(); } }

A)quert B)Rvfsu C)quert? D)rvfsu?

20.在C语言的循环语句for,while,do-while中,用于直接中断最内层循环的语句是 C 。

A)switch B)continue C)break D)if

21.

22.以下程序的功能是:按顺序读入10名学生的4门课程的成绩,计算出每位学生的平均分并输出,程序如下:

main() {int n,k;

float score,sum,ave;

16

sum=0.0;

for(n=1;n<=10;n++) {for(k=1;k<=4;k++)

{scanf(\ave=sum/4.0;

printf(\} }

上述程序有一条语句出现在程序的位置不正确。这条语句是 A 。

A)sum=0.0; B)sum+=score;

C)ave=sum/4.0; D)printf(\30. 以下能正确计算1×2×3×…×10的程序段是 C 。

A)do {i=1;s=1; s=s*i; i++; } while(i<=10); B)do {i=1;s=0; s=s*i; i++; } while(i<=10); C)i=1;s=1; do {s=s*i; i++; } while(i<=10);

D)i=1;s=0; do {s=s*i; i++; } while(i<=10); 34. 以下程序的运行结果是: A 。

main( ) { int n=4; while(n--)

printf (“-”,--n);}

A)2 0 B)3 1 C)3 2 1 D)2 1 0 35.

36. 下面程序的运行结果是: B 。 #include main( ) { int I ;

for ( I = 1; I <=5; I++) switch ( I%5 )

{ case 0: printf ( “ * ” ); break; case 1: printf ( “ # ” ); break; default : printf (“\\n”);

case 2: printf ( “ &” ); break; } }

A)#&&* B)#& C)# D)#&

& &

&* & *

& *

三、程序填空题

1.以下程序的功能是:从键盘上输入若干个学生的成绩,统计并输出最高成绩和最低成绩,当输入负数时结束输入。请填空。

17

main()

{float x,amax,amin; scanf(\amax=x; amin=x;

while x>0 {if(x>amax) amax=x;

if x

printf(\}

3.以下程序的功能是根据e?1?空: main( )

{int i=1; double e,new; e=1.0; new=1.0; while( e=1.0 )

{new/=(double) i; e+=new; new>10e-6 ;} printf(“e=%e\\n”,e);

}

四、读程序写结果题

1.

2.下面程序的输出结果是 5 。 main() {int s,i;

for(s=0,i=1;i<3;i++,s+=i); printf(\}

3.下面程序的输出结果是 52 。 main()

{int i=10,j=0; do

{j=j+i;i--;} while(i>2);

printf(\}

4.设有以下程序 main() {int n1,n2;

scanf(\

18

111?6???...求e的近似值,精度要求为10。请填1!2!3!

while(n2!=0) {n1=n2; n2=n2/10;

printf(\}

}程序运行后,如果从键盘上输入1298,则输出结果为 8921 。 5.下面程序的输出结果是 S=6 。 main() {int s=0,k;

for(k=5;k>=0;k--) {switch(k) {case 1:

case 5:s++;break; case 3:

case 4:break; case 0:

case 2:s+=2;break; } }

printf(\}

6.下面程序运行结果是: 6 。 main( ) { int x, i ;

for( i=1,x=1; i<=50; i++ ) { if(x>=10) break;

if(x%2==1) { x+=5;continue;} x - = 3;}

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

第五

一、选择题

1.在C语言中,引用数组元素时,其数组下标的数据类型允许是 A 。

A)整型常量 B)整型常量或整型表达式 C)整型表达式 D)任何类型的表达式 2.以下对一维整型数组a的正确说明是 D 。

A)int a(10); B)int n=10,a[n]; C)int n; scanf(“%d”,&n); int a[n]; D ) #define SIZE 10 int a[SIZE]; 3.下面程序的运行结果是 C 。 main() {int a[6],i;

19

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

{ a[i]=9*(i-2+4*(i>3))%5; printf(\} }

A)-4 0 4 0 4 B)-4 0 4 0 3 C)-4 0 4 4 3 D)-4 0 4 4 0

4.设有char str[10],下列语句正确的是 D 。

A) scanf(\ B) printf(\ C) printf(\ D) printf(\

5.分析下列程序 main()

{int n[3],i,j,k; for(i=0;i<3;i++) n[i]=0; k=2;

for(i=0;i

}上述程序运行后,输出的结果是 D 。 A)2 B)1 C)0 D)3 6. 若有以下定义:

int a[5]={ 5, 4, ,3, 2, 1 } ;

char b= ?a?, c, d, e;则下面表达式中数值为2的是 B 。 A)a [3] B)a [e – c] C)a [d-b] D)a [ e-b ]

7.下面能用来把字符串str2连接到字符串str1后的一个是: A 。

A)strcat(str1,str2) ; B)strcat(str2,str1); C)strcpy(str1,str2) ; D)strcmp(str1,str2);

8.设有两字符串“Beijing”、“China”分别存放在字符数组str1[20],str2[10]中,下面语句中能把“China”连接到“Beijing”之后的为: C

A)strcpy(str1,str2); B)strcpy(str1, “China”); C)strcat(str1,“China”); D)strcat(“Beijing”,str2); 9.若有如下定义:

int a[3][3]={1,2,3,4,5,6,7,8,9},i ; 则下列语句的输出结果是: A 。

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

A)3 5 7 B)3 6 9 C)1 5 9 D)1 4 7

10.下列字符串赋值语句中,不能正确把字符串C program赋给数组的语句是: C 。

A)char a[]={?C?,? ?,?p?,?r?,?o?,?g?,?r?,?a?,?m?}; B)char a[10]; strcpy(a, “C program”); C)char a[10]; a= “C program”; D)char a[10]={ “C program”}; 11. 下面程序的运行结果是 D 。

20

char c[5]={‘a’,‘b’,‘\\0’,‘c’,‘\\0’}; printf(“%s”,c); } A)‘a’‘b’ B)ab\\0c\\0 C)ab c D)ab

12. 判断字符串a和b是否相等,应当使用 D 。

A)if (a= =b) B)if (a=b) C)if (strcpy(a,b)) D)if(strcmp(a,b)) 13. 有字符数组a[80]和b[80],则正确的输出语句是 D 。

A)puts (a,b); B)printf(“%s,%s”,a[],b[]);

C)putchar(a,b); D)puts(a),puts(b); 14. 若有如下定义和语句: char s[12]= “abook!”;

printf(“%d”,strlen(s) );则输出结果是: C 。

A)12 B)10 C)6 D)7

二、程序填空题

1.以下程序可求出所有水仙花数(指3位正整数中各位数字立方和等于该数本身,如153=13+53+33),请填空。

main( )

{ int x, y ,z, a[10], m, i=0;

printf(“shui xian huan shu :\\n”); for(___m=100____;m<1000;m++) { x=m/100;

y=____(m/10)____; z=m;

if(m==x*x*x+y*y*y+z*z*z) {____a[i]=m___; i ++; } } for( x=0;x

printf(“m”,a[x] ) ; }

2. 打印以下杨辉三角形.(要求打印出10行) main( )

{ int a[10][10],i, j ; 1 for( i=0;i<10;i++) 1 1

{__a[i][0]=1___ ___a[i][i]=1___ } 1 2 1 for( i=2; i<10; i++ ) 1 3 3 1 for(j=1; j

a[i][j] =___a[i-1][j-1]+a[i-1][j]__; … … … for(i=0; i<10; i++)

{ for( j=0; j<=i; j++) printf(“]”,a[i][j]); printf(“\\n”);} }

3. 用起泡法对十个数由大到小排序。 main( )

{ int a[11], i, j, t;

printf(“input 10 numbers: \\n”); for(i=1;i<11;i++) scanf(“%d”,&a[i]);

21

printf(“\\n”);

for (j=1;j<=9;j++)

for(i=1; _i<11__; i++) if (__a[i]

4. 下面程序中的数组a包括10个整数元素,从a中第二个元素起,分别将后项减前项之差存入数组b,并按每行3个元素输出数组b。请填空。

main( )

{ int a[10],b[10], i for(i=0;i<10; i++) scanf(“%d”,&a[i]) ; for(i=1;____ i<10 ___; i++) b[i]=____ a[i]-a[i-1]_____; for(i=1;i<10;i++) { printf(“=”,b[i]); if (___i%4==0___)

printf(“\\n”); } }

5. 以下程序是求矩阵a , b的和,结果存入矩阵c中并按矩阵形式输出。请填空: main( )

{ int a[3][4] = { { 7, 5, -2, 3 },{ 1, 0, -3, 4 },{ 6, 8, 0, 2 } }; int b[3][4] = { { 5, -1, 7, 6 },{ -2, 0, 1, 4 },{ 2, 0, 8, 6 } }; int i, j, c[3][4]; for ( i=0; i<3; i++ )

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

c[i][j] = ___a[i][j]+b[i][j]____ ; for ( i=0; i<3; i++ )

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

printf ( “=”, c[i][j] ) ; ____ printf(“\\n”)___ ; } }

四、读程序写结果题

2. 下列程序的运行结果是1 5 9

2 6 10 3 7 11

4 8 12

main( )

{ int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12}, b[4][3]; int i, j;

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

22

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

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

{ for ( j=0;j<3;j++ )

printf( “]”,b[i][j] ); printf( “\\n” ); } }

3. 下列程序的运行结果是 2,3,5,7,11,13,17,19 。 main( ) { int a[21],i,j,n=0; for(i=2;i<20;i++ )

a[i]=i;

for ( i=2;i<10;i++ ) {if (a[i]==0) continue; for (j=i+1;j<=20;j++)

if (a[j]%a[i]==0) a[j]=0;} for ( i=2;i<=20;i++ )

if (a[i]!=0) { printf(“M”,a[i]); n=n+1;} if (n%4==0) printf(“\\n”); }

4. 下面程序的运行结果是:_ *****

*________5。

main( )

{ char a[5][5],i,j; for(i=0;i<5;i++)

for(j=0;j<5;j++) if(i==0 ||i+j==4) a[i][j]='*'; else a[i][j]=' '; for(i=0;i<5;i++)

{for(j=0;j<5;j++)

printf(\

printf(\ } }

5. 下面程序的运行结果是: 5***** 。 main( )

{ char a[5][5],i,j; for(i=0;i<5;i++)

for(j=0;j<5;j++) if(i= =0||i= =j) a[i][j]='*'; else a[i][j]=' '; for(i=0;i<5;i++) {for(j=0;j<5;j++)

printf(\

printf(\ }

}

6. 下面程序的运行结果是: 。1 2 1 3 3 1 4 6 4 1

23

main( )

{ int a[5][5],i, j ; for( i=0;i<5;i++) { a[i][0] =1; a[i][i] =1; } for( i=2; i<5; i++ ) for(j=1; j

}

7. 下面程序的运行结果是: 。 #include main( )

{ char str[ ]={“a1b2c3d4e5”},i,s=0;

for(i=0;str[i]!=?\\0?;i++) if(str[i]>=?a?&&str[i]<=?z?) printf(“%c\\n”,str[i]); printf(“\\n”); }

8. 下面程序运行结果是: 。 main( )

{ char a[6][6], i, j; for(i=0;i<6;i++) for(j=0;j<6;j++) { if ( i

a[i][j]= ?#?;

else if(i==j) a[i][j]= ? ?; else a[i][j]= ?*? ; } for(i=0;i<6;i++) { for(j=0;j<6;j++)

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

printf(“\\n”);} }

24

第六

一、选择题

1.以下函数定义正确的是: A 。

A) double fun(int x, int y) B) double fun(int x; int y) C) double fun(int x, int y) ; D) double fun(int x , y)

2.C语言规定,简单变量作实参,它与对应形参之间的数据传递方式是: B 。 A)地址传递; B)单向值传递;

C)双向值传递; D)由用户指定传递方式

3.以下关于C语言程序中函数的说法正确的是: B 。 A)函数的定义可以嵌套,但函数的调用不可以嵌套; B)函数的定义不可以嵌套,但函数的调用可以嵌套; C)函数的定义和调用均不可以嵌套; D)函数的定义和调用都可以嵌套。 4.以下正确的函数形式是: 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; {double z;

z=x+y; return z;} z=x+y; return z;}

5.以下说法不正确的是: B 。 C 语言规定

A)实参可以是常量、变量或表达式

B)形参可以是常量、变量或表达式 C)实参可以是任意类型

D)形参应与其对应的实参类型一致

6.C语言允许函数值类型缺省定义,此时该函数值隐含的类型是 B 。 A) float型 B) int 型 C)long 型 D)double 型

8.若用数组名作为函数调用的实参,传递给形参的是 A 。 A)数组的首地址 B)数组第一个元素的值 C)数组中全部元素的值 D)数组元素的个数

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

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

for(i=0;i<3;i++) printf(“M”,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 C)7 9 11 D)713.下面函数调用语句中实参的个数为: B 。

25

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

A) 1 B) 2 C) 4 D) 5 22.有如下程序 int func(int a,int b) { return(a+b);} main( )

{ int x=2,y=5,z=8,r; r=func(func(x,y),z); printf(“%\\d\\n”,r); }

该程序的输出的结果是 D 。

A) 12 B) 13 C) 14 D) 15 23.有如下程序 long fib(int n)

{ if(n>2) return(fib(n-1)+fib(n-2)); else return(2); }

main( )

{ printf(“%d\\n”,fib(3));}

该程序的输出结果是 B 。

A}2 B}4 C}6 D} 8 24.有以下程序

void f(int x,int y) { int t;

if(x

main()

{ int a=4,b=3,c=5; f(a,b); f(a,c); f(b,c);

printf(\}

执行后输出的结果是 D 。

A) 3,4,5 B) 5,3,4 C) 5,4,3 D) 4,3,5 26.有以下程序 main()

{ char s[]=\

printf(\}

执行后输出结果是 C 。

A) 赋初值的字符串有错 B) 6,7

C) 5,6 D) 6,6

28. 执行后输出的结果是 C 。 main()

{int a=4,b=3,c=5,d,e,f;

26

d=f1(a,b); d=f1(d,c); e=f2(a,b); e=f2(e,c); f=a+b+c-d-e;

printf(\ }

f1(int x, int y)

{int z; z=(x>y)?x:y; return(z); } f2(int x, int y)

{int z; z=(x

A) 3,4,5 B) 5,3,4 C) 5,4,3 D)3,5,4 29.以下程序的输出结果是 A 。 #include int f(void)

{ static int i = 0; int s =1;

s += i; i++;

return (s);

}

void main(void) {

int i, a = 0;

for (i=0; i<5; i++) a += f(); printf(“%d\\n”, a);

}

A) 1 B) 0 C) 非0的数 D) –1

31.以下所列的各函数首部中,正确的是 C 。

A) void play(var :Integer,var b:Integer) B) void play(int a,b)

C) void play(int a,int b) D) Sub play(a as integer,b as integer) 36.以下函数值的类型是 A 。 fun ( float x ) { float y; y= 3*x-4; return y; }

A) int B) 不确定 C) void D) float

38. 下面程序的输出结果是: B 。 int m=13;

int fun( int x, int y) { int m=3;

return( x*y-m); }

27

main( ) {int a=7,b=5;

printf(“%d\\n”, fun(a,b)/m); }

A)1 B)2 C)7 D)10 40. 以下程序的运行结果是: D 。 main( ) { int a=2, i ;

for(i=0;i<3;i++) printf(“M”,f(a) ) ; } f( int a)

{ int b=0,c=3;

b++; c++; return(a+b+c); }

A)7 10 13 B)7 7 7 C)7 9 11 D)7 8 9 三、程序填空题

1.下面程序的功能是利用函数调用求两整数的最大公约数和最小公倍数,请填空。 main( )

{ int a, b ,c,d;

scanf(“%d, %d”, &a, &b ) ; c = gongyue( a, b ) ; (1) ;

printf(“gongyue=%d,gongbei=%d\\n”, c,d ) ; } gongyue( int num1, int num2 ) { int temp, x, y ; if (__ (2) __) { temp=num1; num1=num2 ; num2=temp ; } x=num1 ; y=num2 ; while(__ (3) _____) { temp=x%y ; x=y ; y = temp ; } return (y) ; }

3.以下Check函数的功能是对value中的值进行四舍五入计算,若计算后的值与ponse值相等,则显示“WELL DONE!!”,否则显示计算后的值。已有函数调用语句Check(ponse,value);请填空。

viod Check ( int ponse, float value)

{ int val; val= (1) ; printf (“计算后的值: %d”, val);

if (val= =ponse) printf(“\\n WELL DONE!! \\n”);

else printf (“\\nSorry the correct answer is %d\\n”, val); }

4.以下程序的运行结果是输出如下图形。请填空。

* * * * * * * * *

* * * * * * * *

28

* * * * *

* * *

*

# include void a (int i)

{ int j, k; for (j=0; j<=7-i; j++) printf (“ “); for (k=0; k< (1) ; k++) printf(“﹡”); printf(“\\n”); } main ( )

{ int i; for( i=0; i<3; i++) (2) ; for( i=3; i>=0; i--) (3) ; }

5.函数fun的功能是:使字符串str按逆序存放。 void fun (char str[]) {

char m; int i, j;

for (i=0, j=strlen(str); i< (1) ; i++, j--) { m = str[i];

str[i] = (2) ; str[j-1] = m; }

printf(\}

6.以下程序使用递归法求n!, 请填空。 float fac(int n) { float f;

if(n<0) {printf(“n<0” data error); f=-1;} else if(n==0||n==1) f=1; else f=___ (1) ___; return( f ); } main( )

{ int n; float y;

printf(“input a integer number”); scanf(“%d”,&n);

y=___ (2) ____; printf(“%d! = .0f”, n, y ); }

7. 以下程序可计算10名学生1门功课成绩的平均分,请填空。 float average( float array[10] ) { int i; float aver, sum=array[0]; for ( i=1; __ (1) ___;i++) sum+=___ (2) ___; aver=sum/10; return(aver); } main( )

29

{ float score[10], aver ; int i ; printf(“\\ninput 10 scores:”);

for(i=0; i<10;i++) scanf(“%f”,&score[i] ); aver =___ (3) ___; printf(“\\naverage score is %5.2f\\n”, aver); }

四、读程序写结果题

1.下面程序的运行结果是: 15 。

main( ) { int i=5; printf(“%d\\n”, sub(i) ) ; } sub ( int n )

{ int a ;if ( n==1) a=1; else a=n+sub(n-1); return( a ) ; }

3. 下面程序的运行结果是: 15 。

main( ) { increment ( ); increment ( ); increment ( ); } increment ( ) { int x=0; x+=1; printf (“%d”, x); }

4.以下程序的运行结果是 12 。 int a=5; int b=7;

main( ) { int a=4, b=5,c;

c=plus (a,b); printf(“A+B=%d\\n”,c) ; }

plus (int x, int y) { int z; z=x+y; return (z); }

5.以下程序的运行结果是 。

main( ) { increment ( ); increment ( ); increment ( ); } increment ( ) {static int x=0; x+=1; printf (“%d”, x); }

6.以下程序的输出结果是 246 。 void fun()

{ static int a=0;

a+=2; printf(“%d”,a); }

main() { int cc;

for(cc=1;cc<4;cc++) fun() ; printf(“\\n”); }

7.以下程序的输出结果是 1:a=1,b=1 2:a=1,b=2 3:a=1,b=3 。

#include void f(int c) { int a=0; static int b=0; a++; b++;

printf(\}

void main(void)

30

{ int i;

for (i=1; i<=3; i++) f( i );

}

8.以下程序的输出结果是 x=10 。 #include void increment(void); void main(void) {

increment(); increment(); }

void increment(void) {

static int x = 8; x ++;

printf(\

}

9.若有以下程序,执行后输出结果是 9 。 int f(int x,int y)

{ return((y-x)*x); } main()

{ int a=3,b=4,c=5,d; d=f(f(3,4),f(3,5)); printf(\}

10. 假如在运行程序时输入5 ,写出程序的运行情况及最终结果: 5!=120 。

float fac(int n) { float f ;

if(n<0){printf(“n<0,dataerror!”);

f=-1;}

else if (n==0||n==1) f=1;

else f=fac(n-1)*n; return(f);

} main( ) {int n ; float y ;

printf(“input a integer number:”); scanf(“%d”,&n); y=fac(n);

printf(“%d!=%5.0f”, n,y); }

11.下面程序的运行结果是: 21 。 func( int x, int y) { int z;

z=x+y; return(z); } main( )

31

{ int a=6, b=7, c=8, r;

r=func( ( a--, b++, a+b), c--);

printf(“%d”, r) ; }

12.下面程序的运行结果是: 777 。 func( int a) { int b=0,c=3;

b++;c++; return(a+b+c);} main( ) { int a=2,i;

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

13. 下面程序的运行结果是: 15 。 main( ) { int i=5 ;

printf(“%d\\n”, sub(i) ); } sub( int n) { int a;

if(n==1) a=1;

else a= n+sub(n-1); return(a); }

14.下面程序的运行结果是:___0________。 main( ) { int i=2,p; p=f( i++, ++i ); printf(“%d”, p); } int f( int a, int b ) { int c;

if(a>b) c=1;

else if(a==b) c=0; else c=-1; return(c); }

15. 以下程序的运行结果是:___26_________。 main( )

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

sum = func ( a ) ;

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

32

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 ); }

第七

一、选择题

1.变量的指针,其含义是指该变量的 B 。

A)值 B)地址 C)名 D)一个标志 2.设有说明 int (﹡ptr)[M];其中ptr是 D 。

A) M个指向整型变量的指针

B) 指向M个整型变量的函数指针

C) 一个指向具有M 个整型元素的一维数组的指针

D) 具有 M个指针元素的一维指针数组,每个元素都只能指向整型量 4.如下程序的执行结果是 C 。 # include main( )

{int i; char ﹡s=〞a\\\\\\\\\\n 〞;

for( i=0; s[i]!=?\\0?;i++) printf(〞%c 〞,﹡(s+i)); } A)a B)a\\ C)a\\\\ D)a\\\\\\\\ 5.如下程序的执行结果是 B 。 # include

main() { static int a[ ]={1,2,3,4,5,6}; int ﹡p; p=a;

﹡(p+3)+=2; printf(〞%d,%d\\n 〞,﹡p,﹡(p+3)); }

A)1,3 B)1,6 C)3,6 D)1,4 6.如下程序的执行结果是 C 。 # include

main( ) { static int a[ ][4]={1,3,5,7,9,11,13,15,17,19,21,23};

int (﹡p)[4], i=1,j=2; p=a;

printf(〞%d \\n 〞, ﹡(﹡(p+i)+j)); }

A)9 B)11 C)13 D)17

7.若有以下定义,则对a数组元素的正确引用是 D 。 int a[5], ﹡p=a;

A)﹡&a[5] B)a+2 C)﹡(p+5) D)﹡(a+2)

8.若有以下定义,则对a数组元素地址的正确引用是 D 。

int a[5], ﹡p=a;

A)p+5 B)﹡a+1 C)&a+1 D)&a[0]

9.若有定义: int a[2][3];则对a数组的第i行第j列(假设i,j已正确说明并赋值)元

33

素值的正确引用为 A 。

A)﹡(﹡(a +i) +j ) B)(a+i) [j] C)﹡(a+i+j) D)﹡(a +i)+j 11.设有下面的程序段: char s[ ]= 〞china 〞; char ﹡p; p=s; 则下列叙述正确的是 D 。

A)s和p完全相同 B)数组s中的内容和指针变量p中的内容相等 C)s数组长度和p所指向的字符串长度相等 D)﹡p与s[0]相等

12.若有语句:char s1[ ]= 〞string 〞, s2[8],﹡s3,﹡s4= 〞string2 〞;则对库函数strcpy的错误调用是 C 。

A)strcpy(s1, 〞string2 〞); B)strcpy(s4, 〞string1 〞); C)strcpy(s3, 〞string1 〞); D)strcpy(s1, s2);

13.若有定义:int a[5];则a数组中首元素的地址可以表示为 A 。

A)&a B)a+1 C)a D)&a[1] 14.以下与int ﹡q[5];等价的定义语句是 C 。

A)int q[5] B)int ﹡q C)int ﹡(q[5]); D)int (﹡q)[5];

15.若有int a[5], ﹡p=a;定义,则﹡(p+5)表示 C 。

A)元素a[5]的地址 B)元素a[5]的值 C)元素a[6]的地址 D)元素a[6]的值

16.若有定义:int ﹡p[4];则标识符p C 。

A)是一个指向整型变量的指针 B)是一个指针数组名

C)是一个指针,它指向一个含有四个整型元素的一维数组 D)说明不合法

17.若有语句int *point,a=4;和point=&a;下面均代表地址的一组选项是 D 。

A)a,point,*&a B) &*a,&a,*point C)*&point,*point,&a D) &a,&*point,point 18.若有说明:int *p,m=5,n;以下正确的程序段是 B 。

A)p=&n; scanf(“%d”,&p); B) p=&n; scanf(“%d”,*p); C) scanf(“%d”,&n); *p=n; D) p=&n; *p=m; 19.下面程序段的运行结果是 B 。

char str[ ]=“ABC”,*p=str; printf(“%s\\n”,*(p+1));

A) 66 B) BC C)字符?B?的地址 D)字符?B?

20.已有定义int k=2, *ptr1,*ptr2;且ptr1和ptr2均已指向同一个变量k,下面不正确执行的赋值语句是: B 。

A) k=*ptr1+*ptr2 ; B) ptr2=k; C) ptr1=ptr2; D)k=*ptr1*(*ptr2); 24.有以下程序 main()

{ char *s[]={\p=s[1];

printf(\}

执行后输出结果是 C 。

34

A) n,two B) t,one C) w,one D) o,two 25.有以下程序 main()

{ int x[8]={8,7,6,5,0,0},*s; s=x+3;

printf(\}

执行后输出结果是 B 。

A) 随机值 B) 0 C) 5 D) 6 26.有以下程序 main()

{ char str[]=\while(*ps) ps++;

for(ps--;ps-str>=0;ps--) puts(ps);} 执行后输出结果是 C 。

A) yz<回车>xyz B) z<回车>yz

C) z<回车>yz<回车>xyz D) x<回车>xy<回车>xyz 30.有如下程序段 int *p,a=10,b=1 p=&a; a=*p+b;

执行该程序段后,a的值为 B 。

A) 12 B) 11 C) 10 D) 编译出错

31.对于基类型相同的两个指针变量之间,不能进行的运算是 C 。

A)< B) = C) + D) –

32.以下函数返回a所指数组中最小的值所在的下标值。

fun(int *a, int n) { int i,j=0,p; p=j;

for(i=j;i在下划线处应填入的是 D 。

A) i=p B) a[p]=a[i] C) p=j D) p=i

33.有如下说明

int a[10]={1,2,3,4,5,6,7,8,9,10},*p=a; 则数值为9的表达式是 B 。

A) *p+9 B) *(p+8) C) *p+=9 D) p+8

36.执行以下程序后,a的值为 C 。 int *p, a = 10, b=1; p = &a; a = *p*b;

A) 12 B) 编译出错 C) 10 D) 1

37.以下各语句或语句组中,正确的操作是 C 。

A) char s[5]=\B) char *s; gets(s);

C) char *s; s=\ D) char s[5]; scanf(\

35

38.若已定义:int a[9],*p=a;并在以后的语句中未改变p的值,则不能表示a[1]地址的表达式是 C 。

A) p+1 B) a+1 C) a++ D) ++p

39.下列语句行中,哪些语句能正确进行字符串赋值操作 B 。

A) char st[4][5]

B) char s[5]={?A?, ?B?, ?C?, ?D?, ?E?} C) char *s; s = “ABCDE”; D) char *s; scanf(“%s”,s);

40.以下程序的输出结果是 D 。 #include void main(void)

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

printf(“%d”, *--p);

}

A) 非法 B) a[4]的地址 C) 3 D) 5

42.若有下列说明和语句:int a[4][5], (*p)[5]; p = a; 则对a数组元素的正确引用是 B 。

A) p+1 B) *(p+3) C) *(p+1)+3 D) *(*p+2)

44.若有以下定义和语句,则输出结果为 A 。

char *sp=”\\t\\b\\\\\\0English\\n”; printf(“%d”,strlen(sp));

A)12 B)3 C)17 D)13

47.设int x;,则经过 B 后,语句*px=0;可将x值置为0。

A) int * px; B)int * px=&x; C) float * px; D)float * px=&x;

48.若有说明:int i, j=2,*p=&i;,则能完成i=j赋值功能的语句是 B 。

A) i=*p; B) *p=*&j; C) i=&j; D) i=**p;

51. 若有以下定义:

int a[10],*p=a; 则*(p+3)表示的是 B 。

A)元素a[3]的地址 B)元素a[3]的值 C)元素a[4]的地址 D)元素a[4]的值 52. 若有如下语句: int *p1,*p2;则其中int所指的是 D 。

A)p1的类型 B)*p1和*p2的类型

C)p2的类型 D)p1和p2所能指向变量的类型 53. 有如下语句:

int a=5,b=8,*p1,*p2; p1=&a; p2=&b;

若有如下表达式: p1=p2; 则能正确表示该语句执行后变量在内存中的存储结构的图示为 D 。

A) B) p1 5 a p1 5 a p2 8 b p2 8 b

36

C) D) p1 5 a p1 5 a

p2 8 b p2 8 b

54. 有如下语句 int a=10,b=20,*p1,*p2; p1=&a; p2=&b; 如图1所示;若实现如图2所示的存储结构,可选用的赋值语句是: B 。

p1 p2 p1 p2

a b a b 10 20 10 20 图1 图2

A)*p1=*p2 B)p1=p2 C)p1=*p2 D)*p1=p2

55. 若有说明:int i, j , *p=&i ;则下面语句中与i =j;等价的语句是: A 。 A)*p=*&j ; B)i = *p C)i=&j ; D)i=**p 56. 以下程序的输出结果是 C 。 main()

{char *s=\int k=0,a=0,b=0; do {k++;

if (k%2==0) {a=a+s[k]-'0';continue;} b=b+s[k]-'0?; a=a+s[k]-'0'; }while(s[k+1]);

printf(\}

A)k=3 a=2 b=3 B)k=3 a=3 b=2 C)k=2 a=3 b=2 D)k=2 a=2 b=3 57. 设有以下定义:

int a[4][3]={1,2,3,4,5,6,7,8,9,10,11,12}; int(*ptr)[3]=a,*p=a[0];

则下列能正确表示数组元素a[1][2]的表达式是 C 。 A)*((*ptr+1)[2]) B)*(*(p+5))

C)(*ptr+1)+2 D)*(*(a+1)+2) 58. 执行以下程序后,y的值是 C 。 main()

{ int a[]={2,4,6,8,10}; int y=1,x,*p; p=&a[1];

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

y+=*(p+x); printf(\ }

A) 17 B) 18 C) 19 D) 20 59. 阅读程序

37

#include main()

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

printf(\ printf(\ }

该程序有两个printf语句,假设第一个printf语句输出的是194,则第二个printf语句输出结果是 。

A)203 B) 204 C) 1a4 D) 1a6

61.以下程序的输出结果是 C 。 #include fut(int * *s,int p[2][3]) {* *s=p[1][1];} main()

{int a[2][3]={1,3,5,7,9,11},*p; p=(int *)malloc(sizeof(int)); fut(&p,a);

printf(\ }

A) 1 B) 7 C) 9 D) 11

62. int a[10],*p;下列表达式正确的是 C 。

A) p=a; B) p=a[0]; C) *p=&a[0]; D) p=&a;

63. 执行以下程序段后y的值为 A 。 static int a[]={1,3,5,7,9}; int y,x,*ptr; y=1;

ptr=&a[1];

for(x=0;x<3;x++) y*=*(ptr+x);

A) 105 B) 15 C) 945 D) 无确定值 64.执行以下程序段后,m的值是 D 。 static int a[]={7,4,6,3,10}; int m,k,*ptr; m=10; ptr=&a[0];

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

m=(*(ptr+k)

A) 10 B) 7 C) 4 D)3 65.执行以下程序段后,m的值为 A 。 static int a[2][3]={1,2,3,4,5,6}; int m,*ptr; ptr=&a[0][0];

38

m=(*ptr)*(*(ptr+2))*(*(ptr+4));

A) 15 B)48 C) 24 D) 无定值

67.以下程序的输出结果是 A 。 Static int a[2][3]={1,2,3,4,5,6},(*p)[2],I; p=a;

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

printf(\

A) 输出不确定 B) 3 4 5 C) 2 3 4 D) 4 5 6

68.若有以下定义

int a[]={1,2,3,4,5,6,7,8,9,10},*p=a; 则值为3的表达式是 B 。

A) p+=2,*(p++) B) p+=2,*++p C) p+=3,*p++ D)p+=2,++*p

69.若有以下定义和语句

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

则不能表示a数组元素的表达式是 B 。

A) *p B) a[10] C) *a D) a[p-a] 四、读程序写结果题

1.以下程序的执行结果是 i=10,j=2 。 # include main ( )

{ int i, j; int ﹡p,﹡q; i=2; j=10; p=&i; q=&j; ﹡p=10; ﹡q=2; printf(〞i=%d, j=%d\\n 〞, i, j); } 2.以下程序的执行结果是 10 。 # include main ( )

{ int ﹡﹡p,﹡q,i; i=10; q=&i; p=&q; printf(〞%d\\n 〞, ﹡﹡p); } 4.以下程序的执行结果是 i=15 。 # include main ( )

{ int ﹡p, i; i=5; p=&i; i=﹡p+10; printf(〞i=%d\\n〞, i); } 5.以下程序的执行结果是 ch=15 。 # include main ( )

{ char s[ ]=”abcdefg”; char ﹡p; p=s; printf(〞ch=%c\\n〞,

﹡(p+5)); }

6.以下程序的执行结果是 s=24 。 # include

main ( )

{ int a[ ]={2,3,4}; int s, i,﹡p; s=1; p=a;

for (i=0; i<3; i++) s﹡=﹡(p+i); printf(〞s=%d\\n〞, s); } 7.以下程序的执行结果是 654321 。 # include

39

main ( )

{ int a[ ]={1,2,3,4,5,6},﹡p; for (p=&a[5];p>=a;p﹣﹣)

printf(〞%d〞, ﹡p); printf(〞\\n〞); } 8.以下程序的执行结果是 6385 。 # include main ( )

{ char ch[2][5]={”6934”,”8254”},﹡p[2]; int i, j, s=0;

for (i=0; i<2; i++) p[i]=ch[i]; for (i=0; i<2; i++)

for (j=0; p[i][j]>?\\0?&& p[i][j]<=?9?; j+=2)

s=10﹡s+p[i][j]-?0?; printf(〞%d\\n〞, s); }

9.以下程序的执行结果是 xyabcABC 。

# include main ( )

{ char ﹡p1,﹡p2, str[20]=”xyz”; p1=”abcd”; p2=”ABCD”; strcpy (str+1, strcat (p1+1,p2+1)); printf(〞%s〞, str); }

10.以下程序的执行结果是 10 。

#include

void main(void)

{char *s, *s1 = “here is”, *s2 = “key”;

s = s1;

while (*s1!=?\\0?) s1++; while (*s1++=*s2++); s2 = s;

while (*s2!=?\\0?) s2++; printf(“%d\\n”, s2-s);

}

11.以下程序的执行结果是 8 。

#include void main(void)

{static int a[] = {1, 3, 5, 7}; int *p[3] = {a+2, a+1, a}; int **q = p;

printf(“%d\\n”, *(p[0]+1) + **(q+2));

}

12.以下程序的执行结果是 9 。 #include

fut(int **s, int p[2][3]) { **s=p[1][1]; }

void main(void)

{ int a[2][3] = {1,3,5,7,9,11}, *p; p = (int *) malloc(sizeof(int)); fut(&p,a);

40

printf(\}

13.以下程序的执行结果是 CDG 。

#include void main(void)

{ static char a[]=\char *p1,*p2; int k;

p1=a; p2=b;

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

if (*(p1+k)==*(p2+k)) printf(\ printf(\

}

14.以下程序的执行结果是 56 。

#include

int fun(int x,int y,int *cp,int *dp) { *cp=x+y; *dp=x-y; }

void main(void) { int a, b, c, d; a=30; b=50; fun(a,b,&c,&d);

printf(\}

15.下列程序的输出结果 GFEDCB 。

#include main()

{char b[]=\char *chp=&b[7]; while(--chp>&b[0]) putchar(*chp); putchar('\\n'); }

16. 阅读程序

main()

{char str1[]=\,str2[10]; char *p1=str1,*p2=str2; scanf(\printf(\printf(\}

运行上面的程序,输入字符串PEOPLE AND COMPUTER,程序的输出结果是 。

17. 下列程序的运行结果是 1,2,3 。

41

main() { int i,*p;

static int a[4]={1,2,3,4}; p=a;

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

printf(\ }

18.以下程序的运行结果是 234 。 main() { int i,*p;

static int a[4]={1,2,3,4}; p=a;

for(i=0;i<3;i++) printf(\ }

第八

一、选择题

1.在说明一个结构体变量时系统分配给它的存储空间是 B 。

A) 该结构体中第一个成员所需存储空间 B) 该结构体中最后一个成员所需存储空间

C) 该结构体中占用最大存储空间的成员所需存储空间 D) 该结构体中所有成员所需存储空间的总和

2.若有以下说明和语句: struct worker

{ int no; char ﹡name; }work, ﹡p=&work; 则以下引用方式不正确的是 D 。

A) work.no B) (﹡p).no C) p->no D)work->no 3.有如下定义:

struct date { int year, month, day; };

struct worklist { char name[20]; char sex; struct date birthday; }person;

对结构体变量person的出生年份进行赋值时,下面正确的赋值语句是 C 。 A) year=1958 B) birthday.year=1958 C) person.birthday.year=1958 D) person.year=1958 4.以下对结构体类型变量的定义中不正确的是 C 。 A) #define STUDENT struct student B) struct student

STUDENT { int num; { int num; float age; float age; }std1; }std1;

C) struct D) struct { int num; { int num;

42

float age; float age; } student; }std1; struct student std1; 5.设有以下说明语句

struct stu

{ int a; float b; }stutype;

则下面的叙述不正确的是 B 。 A) struct是结构体类型的关键字

B) struct stu是用户定义的结构体类型 C) stutype是用户定义的结构体类型名 D) a和b都是结构体成员名

6.C语言结构体类型变量在程序执行期间 B 。 A) 所有成员一直驻留在内存中 B) 只有一个成员主留在内存中 C) 部分成员驻留在内存中 D) 没有成员驻留在内存中

7.以下程序的运行结果是 D 。 # include main( )

{ struct date

{ int year, month, day; }today; printf(“%d\\n”,sizeof(struct date)); }

A) 6 B) 8 C) 10 D)12 8.有如下定义

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

struct person class[10]={“Johu”, 17, “Paul”, 19 ,“Mary”, 18, “Adam “,16}; 根据上述定义,能输出字母M的语句是 D 。 A) printf(“%c\\n”,class[3].name); B) pfintf(“%c\\n”,class[3].name[1]); C) printf(“%c\\n”,class[2].name[1]); D) printf(“%c\\n”,class[2].name[0]); 9.设有如下定义

struct ss

{ char name[10]; int age; char sex;

} std[3],* p=std;

下面各输入语句中错误的是 A 。 A) scanf(\B) scanf(\C) scanf(\D) scanf(\

10.设有以下说明语句,则下面的叙述中不正确的是 D 。

struct ex {

int x ; float y; char z ;

43

} example;

A) struct结构体类型的关键字 B) example是结构体类型名 C) x,y,z都是结构体成员名 D) struct ex是结构体类型 14.以下程序的输出结果是 A 。

amovep(int *p, int a[3][3],int n) { int i, j;

for( i=0;i

for(j=0;j

main()

{ int *p,a[3][3]={{1,3,5},{2,4,6}}; p=(int *)malloc(100); amovep(p,a,3);

printf(\}

A) 56 B) 25 C) 34 D) 程序错误 15.以下程序的输出结果是 D 。

struct HAR

{ int x, y; struct HAR *p;} h[2]; main()

{ h[0].x=1;h[0].y=2; h[1].x=3;h[1].y=4; h[0].p=&h[1].x; h[1].p=&h[0].x;

printf(\}

A) 12 B) 23 C) 14 D) 32

四、读程序写结果题

1.以下程序的运行结果是 。 struct n {int x; char c; }; main( )

{ struct n a={10, ?x?}; func(a); printf ( “%d,%c”, a.x, a.c); } func(struct n b)

{b.x=20; b.c=?y?; }

2.以下程序的运行结果是 。 main( )

{ struct EXAMPLE { struct {int x; int y; }in int a; int b; }e;

e.a=1; e.b=2; e.in.x=e.a * e.b; e.in.y=e.a + e.b; printf(“%d,%d”, e.in.x, e.in.y); } 3.以下程序的运行结果是 。 main( )

{ static struct s1 {char c[4], *s; }s1={“abc”,”def”};

static struct s2 {char *cp; struct s1 ss1; }s2={“ghi”, {“jkl”, “mno”}}; printf(“%c,%c\\n”, s1.c[0], *s1.s); printf(“%s,%s\\n”, s1.c, s1.s);

44

printf(“%s,%s\\n”, s2.cp, s2.ss1.s); printf(“%s,%s\\n”, ++s2.cp, ++s2.ss1.s); }

4.以下程序的运行结果是 。 struct s{ int a; float b; char *c; } main( )

{static struct s x={19,83.5,”zhang”}; struct s *px=&x; printf(“%d %.1f %s\\n”, x.a, x.b,x.c);

printf(“%d %.1f %s\\n”, px->a, (*px).b,px->c); printf(“%c %s\\n”, *px->c-1, &px->c[1]); }

5.以下程序的运行结果是 10,x 。 struct stru {int x; char c; }; main( )

{ struct stru a={10, ?x?},*p=&a; func (p); printf ( “%d,%c”, a.x, a.c); } func (struct stru *b)

{b->x=20; b->c=?y?; }

6.以下程序的执行结果是 Zhao 。 #include

struct stu { int num;

char name[10]; int age; };

void fun(struct stu *p) {

printf(\ }

void main(void) {

struct stu students[3]={ {9801,\{9803,\ fun(students+2); }

{9802,\

第九

一、选择题

1.当已存在一个abc.txt文件时,执行函数fopen (“abc.txt”, “r+”)的功能是 D 。 A) 打开abc.txt文件,清除原有的内容 B) 打开abc.txt文件,只能写入新的内容

c)打开abc.txt文件,只能读取原有内容 d)打开abc.txt文件,可以读取和写入新的内容

45

2.若用fopen( )函数打开一个新的二进制文件,该文件可以读也可以写,则文件打开模式是 B 。

A)“ab+” B) “wb+” C)“rb+” D)“ab”

4.fread(buf,64,2,fp)的功能是 D 。

A) 从fp文件流中读出整数64,并存放在buf中;

B) 从fp文件流中读出整数64和2,并存放在buf中;

C) 从fp文件流中读出64个字节的字符,并存放在buf中; D)从fp文件流中读出2个64个字节的字符,并存放在buf中;

5.以下程序的功能是 C 。 main( )

{FILE *fp; char str[ ]=”HELLO”; fp=fopen(“PRN”,”w”);

fpus(str,fp);fclose(fp); }

A) 在屏幕上显示“HELLO” B) 把“HELLO”存入PRN文件中

C)在打印机上打印出“HELLO” d)以上都不对

6.若fp是指向某文件的指针,且已读到此文件末尾,则库函数feof(fp)的返回值是

C 。

A) EOF B) 0 C) 非零值 D) NULL 7.以下叙述中不正确的是 D 。

A) C语言中的文本文件以ASCII码形式存储数据 B) C语言中对二进制位的访问速度比文本文件快 C) C语言中,随机读写方式不使用于文本文件 D) C语言中,顺序读写方式不使用于二进制文件

8.以下程序企图把从终端输入的字符输出到名为abc.txt的文件中,直到从终端读入字符

#号时结束输入和输出操作,但程序有错。 #include main()

{ FILE *fout; char ch; fout=fopen('abc.txt','w'); ch=fgetc(stdin); while(ch!='#') { fputc(ch,fout); ch =fgetc(stdin); }

fclose(fout); }

出错的原因是 A 。

A) 函数fopen调用形式有误 B) 输入文件没有关闭

C) 函数fgetc调用形式有误 D) 文件指针stdin没有定义

9、若fp为文件指针,且文件已正确打开,i为long型变量,以下程序段的输出结果是

46

B 。

fseek(fp, 0, SEEK_END); i=ftell(fp);

printf(\

A) –1 B) fp所指文件的长度,以字节为单位 C) 0 D) 2

47

本文来源:https://www.bwwdw.com/article/rsqp.html

Top