桂林电子科技大学C语言程序设计习题集及答案

更新时间:2024-04-06 10:57:01 阅读量: 综合文库 文档下载

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

一 单项选择题(每题2分,共44分) 1 以下叙述正确的是__C_。

A C程序基本组成单位是语句 B C程序每一行只能写一个语句 C 简单C语句必须以分号作为结束符 D 注释语句可以嵌套 2 一个C语言程序是从_B__开始执行的。

A 程序中第一个函数 B 名为main的函数 C 包含文件(头文件)的第一个函数 D 程序中的第一个语句 3 请选出合法的C语言赋值语句_B__。

A a=b=58 B i++; C a=58,b=58 D k=int(a+b); 4 下面标识符中,合法的用户标识符是 _B__。

A 1abc B include C a-b-c123 D char 5 以下所列的C语言整形常量中,正确的是_A__。

A 0x10 B 0976 C 076L D 01ff 6 C语言中下列运算符的操作数必须为整型的是_A__。

A % B ++ C / D = 7 设a和b均为int型变量,则执行以下语句后的输出为_B__。

int a=20; int b=3; printf(\%d\\n\,a+=(b%=2));

A 20 B 21 C 0 D 23 8 已知int i;,则执行语句 i=2.6;后,i的值为_A__。

A 2 B 3 C 2.6 D 不确定 9 以下合法的字符常量为_D__。

A 'ab' B '\\482' C '\\' D '\\xaf' 10 若y为int型变量,则执行以下语句后,y的值是 _C__。

y=8; y+=y-=y*y; 8*8=64 8-64=-56 -56-56=-112

A 64 B –56 C –112 D –48 11 以下合法的浮点型常量是_D__。

A e-3 B 1.5e+2.4 C 3.14e+2L D 3.14 e +5

12 设int数据占用两个字节,float数据占用四个字节,double数据占用8个字节,且已知float a=2;int b=3;则执行下列语句输出为__A_。

printf(\%d\,sizeof(a*b)+2/5); 通常转化为最大字节的

A 4 B 8 C 6 D 7

13 设int型占2个字节,且int i=-2;,则语句printf(\%u\,i);的输出结果为_C__。

A 0 B -2 C 65534 D 65535 14 若x、y、z均为整型常量,且a=100,则执行下列语句后的z值为_A_。

x=a++; y=--a; z=x+y-a--;

A 100 B 400 C 200 D 300 15 若有以下定义和语句:int u=010,v=0x10,w=10,printf(\%d,%d,%d\\n\,u,v,w);,则输出结果是_A__。八进制 十六进制 十进制

A 8,16,10 B 10,10,10 C 8,8,10 D 8,10,10 16 设x、y为int型变量,则执行下列语句后,y的值是__A _。 为什么?

x=5; y=x++*x++; y=--y*--y;

A 529 B 2401 C 1209 D 625

17 假设在程序中a,b,c 均被定义成整型,并且已赋大于1的值,则下列能正确表示代数式

1的表达式是__D__。 abc

转化为浮点型

A 1/a*b*c B 1/(a*b*c) C 1/a/b/(float)c D 1.0/a/b/c

18 若有定义:int a=8,b=5,c;char d='A';,则执行语句c=a/b+d%a+0.5;后c的值为_A__。

A 2 B 2.5

C 3 D 类型不一致,无法计算,编译出错 19 在有以下程序:

main()

{ int i=10,j=1; i=i+j++;

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

执行后输出结果是_C_。

A 12,3,11 B 12,2,11 C 11,3,11 D 12,3,12

20 已知int i=65;,则putchar(i);printf(\%d\,i);printf(\%c\,i);的输出结果为_A__。

A A,65,A B 65,65,A C A,A,65 D A,A,A

21 已知int y,a,i=1;则语句printf(\%d,%d\,-i++,(y=a=3.6*3));的输出结果为_A__。

A -1,10 B -2,1.8 C 0,3 D 1,18 22 有以下程序:

main()

{ char a,b,c,d;

a='\\'; b='\\xbc'; c='\\0xab'; d='\\023';

printf(\%c%c%c%c\\n\,a,b,c,d); }

编译时出现错误,以下叙述中正确的是_A__。

A 程序中只有a='\\';语句不正确 B b='\\xbc';语句不正确

C d='\\023';语句不正确 D a='\\';和c='\\0xab';语句都不正确

二 填空题(第1题2分,其余每题3分,共56分)

1 设x为int型变量,请写出描述“x是偶数”的表达式是_x%2==0__。

2 已知scanf(\a=%d,b=%d,c=%d\,&a,&b,&c);,若从键盘输入2、3、4三个数分别作为变量a、b、c的值则正确的输入形式是_a=2,b=3,c=4__。注意格式

3 设有语句int a=3;,则执行了语句 a+=a-=a*a后,变量a的值是_-12__。3-9=-6 4 以下程序的输出结果是_10 6__。

main()

{ int a=-10,b=-3;

printf(\%d\\n\,-a++);

printf(\%d\\n\,-a+b);-10+1+(-3) }

5 以下程序的输出结果是_242__。

main() { char c;

1

c=0362;

printf(\%d\n\,c);

}

6 以下程序段(n所赋的是八进制数)执行后输出结果是32767_32767__。

int m=32767,n=032767; printf(\%d,%o\\n\,m,n); 7 字符串\\\\\name\\\\\\101ddress\\b\\xaf\的长度为:_15__。 8 有以下程序段:

int m=0,n=0; char c='a'; scanf(\%d%c%d\,&m,&c,&n); printf(\%d,%c,%d\\n\,m,c,n);

若从键盘上输入:10A10<回车>,则输出结果是_10,A,10__。

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

main()

{ printf(\%d,%o,%x\\n\,10,10,10); printf(\%d,%d,%d\\n\,10,010,0x10); printf(\%d,%x\\n\,012,012); }

10 设a、b、c为整形变量,且a=2、b=3、c=4,则执行完语句 a*=16+(b++)-(++c);之后,

变量a的值为_28_。

11 以下程序的输出结果为__12_。

main()

{ int x=023;

printf(\%x\\n\,--x); }

12 以下程序的结果为_a=5 c=6

b=5 d=18__。

main()

{ int a=2,b=3,c,d; c=(a++)+(a++)+(a++); d=(++b)+(++b)+(++b);

printf(\a=%d c=%d\\n\,a,c); printf(\b=%d d=%d\\n\,a,d); } 13 以下程序

main()

{ char ch1,ch2,ch3;

scanf(\%c%c%c\,&ch1,&ch2,&ch3);

printf(\%c%c%c%c%c\,ch1,'#',ch2,'#',ch3);

2

}

当输入ABC时运行结果为 A#B#C【1】 ,当输入A BC时运行结果为 A# #B【2】 。 14 若有定义:float x;,以下程序段的输出结果是_5.169000__。 x=5.16894;

printf(\%f\\n\,(int)(x*1000+0.5)/(float)1000); 六位小数

15 以下程序的功能是:输入一个小写字母,输出对应的大写字母,将程序补充完整。

main()

{ char ch; 【1】scanf(\%c\,&ch); /* 从键盘输入一个小写字母 */

【2】 ch-=32; /* 将该字母转换为大写字母 */

【3】printf(\%c\\n\,ch); /* 输出转换后的结果 */ }

16 当运行以下程序时,在键盘上从第一列开始输入9876543210↙(此处↙代表回车),则

程序的输出结果是a=98,b=765.000000,c=4321.000000___。 main()

{ int a; float b,c;

scanf(\-?O\,&a,&b,&c);

printf(\\\na=%d,b=%f,c=%f\\n\,a,b,c); }

17 以下程序的运行结果是__123.12346 123.123457

00012345

abcdefgh_。 main()

{ printf(\.5f\\n\,123.1234567); printf(\f\\n\,123.1234567); printf(\.8d\\n\,12345);

printf(\.8s\\n\,\abcdefghij\); }

18 运行以下程序时,如从键盘上输入abcdefg↙,则输出结果是__abc_。

main()

{ char ch1,ch2,ch3;

ch1=getchar(); ch2=getchar(); ch3=getchar(); putchar(ch1); putchar(ch2); putchar(ch3); putchar('\\n'); }

19 运行以下程序时,如从键盘上输入:a=3,b=5↙35,35.12↙abc↙后,结果是___。 a=3,b=5,x=35.000000,y=35.119999,c1=a,c2=b

main()

{ int a,b; float x,y; char c1,c2; scanf(\a=%d,b=%d\,&a,&b); scanf(\%f,%e\,&x,&y);

scanf(\%c%c%c\,&c1,&c1,&c2);

printf(\a=%d,b=%d,x=%f,y=%f,c1=%c,c2=%c\\n\,a,b,x,y,c1,c2);

3

}

顺序、选择结构程序设计

一 单项选择题(每题2分,共40分)

1 以下程序运行后的输出结果是_B_。

main()

{ int a=0,b=0;

a=10; b=20; printf(\a+b=%d\\n\,a+b); }

A a+b=10 B a+b=30 C 30 D 出错 2 以下程序运行后的输出结果是_C__。 为什么不是

main()

{ double d=3.2; int x,y; x=1.2; y=(x+3.8)/5.0; printf(\%d\\n\,d*y); }

A 3 B 3.2 C 0 D 3.07 3 以下程序运行后的输出结果是__C_。

main()

{ double d; float f; long l; int i; i=f=l=d=20/3;

printf(\%d %ld %.1f %.1f\\n\,i,l,f,d); }

A 6 6 6.0 6.0 B 6 6 6.7 6.7 C 6 6 6.0 6.7 D 6 6 6.7 6.0 4 以下程序运行后的输出结果是_D__。

main()

{ int a=1,b=2;

a=a+b; b=a-b; a=a-b; printf(\%d,%d\\n\,a,b); }

A 1,2 B 1,1 C 2,2 D 2,1 5 以下程序运行后的输出结果是_A__。

main()

{ int x,y,z; x=y=2; z=3;

y=x++-1; printf(\%d %d \,x,y); y=++x-1; printf(\%d %d\\n\,x,y); y=z---1; printf(\%d %d \,z,x); y=--z-1; printf(\%d %d\\n\,z,x); }

A 3 1 4 3 B 3 1 3 3 C 3 1 4 3 D 2 1 3 2 2 4 1 4 2 4 2 2 2 4 1 2 1 3 1 2 6 以下程序运行后的输出结果是_D__。

4

main()

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

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

printf(\%d,%d,%d\\n\,x,y,z); }

A 2,3,3 B 2,3,2 C 2,3,1 D 2,2,1 7 以下程序运行后的输出结果是_D__。

main()

{ int x=4,y=7; x-=y; y+=x;

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

A 4 7 B -3 -3 C -3 11 D -3 4

8 以下程序运行后的输出结果是__C_。

main()

{ unsigned short a=65536; int b; printf(\%d\\n\,b=a); }

A 65536 B 0 C 1 D -1 9 以下程序:

#include main()

{ char c1,c2,c3,c4,c5,c6;

scanf(\%c%c%c%c\,&c1,&c2,&c3,&c4); c5=getchar(); c6=getchar(); putchar(c1); putchar(c2); printf(\%c%c\\n\,c5,c6); }

程序运行后,若从键盘输入(从第1列开始) 123<回车> 45678<回车>

则输出结果是__B_。 为什么?

A 1267 B 1256 C 1278 D 1245

10 设a、b和c都是int型变量,且a=3,b=0,c=5,则以下值为0的表达式是__C_。

A 'a'&&'b' B a&&b||c C a&&b&&c D a||b&&c 11 在嵌套使用if语句时,C语言规定else总是_C__。

A 和之前与其具有相同缩进位置的if配对 B 和之前与其最近的if配对

C 和之前与其最近不带else的if配对 D 和之前的第一个if配对

12 若要求在if后一对圆括号中表示a不等于0的关系,则能正确表示这一关系的表达式为

_D__。

A a<>0 B !a C a=0 D a

5

13 以下程序运行后的输出结果是__C_。

main()

{ int a=2,b=-1,c=2; if(a

if(b<0) c=0; else c++;

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

A 0 B 1 C 2 D 3 14 若k是int型变量,下面的程序段的输出结果是 C 。

k=-3;

if(k<=0) printf(\####\) else printf(\&&&&\);

A #### B &&&&

C ####&&&& D 有语法错误,无输出 15 以下程序运行后的输出结果是_A__。

main()

{ int a=0,b=0,c=0,d=0; if(a=1) b=1;c=2; else d=3;

printf(\%d,%d,%d,%d\\n\,a,b,c,d); }

A 0,1,2,0 B 0,0,0,3 C 1,1,2,0 D 编译有错 16 以下程序运行后的输出结果是_A__。

main()

{ int x1=1,x2=0,x3=0;

if(x1=x2+x3) printf(\****\); else printf(\####\); }

A **** B 有语法错误 C #### D 无输出结果 17 当a=1,b=3,c=5,d=4时,执行下面一行程序后,x的值是_B__。

if(a

if(c

if(b

A 1 B 2 C 3 D 6 18 下列叙述中正确的是_D__。

A break语句只能用于switch语句 B 在switch语句中必须使用default

C break语句必须与switch语句中的case配对使用 D 在switch语句中不一定使用break语句

19 若有定义:float x=1.5; int a=1,b=3,c=2; 则正确的switch语句是__C_。

6

A switch(x) B switch((int)x);

{ case 1.0:printf(\*\\n\); { case 1:printf(\*\\n\); case 2.0:printf(\**\\n\); } case 2:printf(\**\\n\); } C switch(a+b) D switch(a+b)

{ case 1:printf(\*\\n\); { case 1:printf(\*\\n\); case 2+1:printf(\**\\n\); } case c:printf(\**\\n\); }

20 以下程序运行后的输出结果是__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 D a=2,b=2

二 填空题(每题3分,共30分)

1 以下程序运行后的输出结果是_9,10__。

#include main()

{ int i=010 , j=10; i是八进制 printf(\%d,%d\\n\,++i,j--); }

2 以下程序运行后的输出结果是_000__。

#include main()

{ printf(\%d%d%d\\n\,'\\0','\\0','\\0'); }

3 以下程序运行后的输出结果是_i= 11 j= 15

k= 33__。

main()

{ int i=5,j,k; j=i+++i+++i++;

k=(++i)+(++i)+(++i);

printf(\i=] j=]\\nk=]\\n\,i,j,k); }

4 下面的程序运行时从键盘上输入9876543210<回车>,a=98,b=76.0,c=54__。

main()

{ int a; float b,c;

7

程序的输出结果是_

scanf(\-//\,&a,&b,&c);

printf(\a=%d,b=%.1f,c=%.0f\,a,b,c);

}

5 下面程序的输出结果是_67,D__。

main()

{ char ch1,ch2;

ch1='A'+'5'-'3'; ch2='A'+'6'-'3'; printf(\%d,%c\\n\,ch1,ch2); }

6 执行下面的语句:printf(\%d\\n\,(a=3*5,a*4,a+5));,输出是_20__。3*5+5=20 7 以下程序运行后的输出结果是_8,9__。

main()

{ int x=10; printf(\%d,%d\\n\,--x,--x); }

8 为表示关系x≥y≥z,应使用C语言表达式_(x>=y)&&(y>=z)__。 9 下面的程序段的输出结果是_**3__。

int x=3;

if((x%2)?printf(\**%d\,x):printf(\##%d\\n\,x)); ?先执行前一条语句 10 以下程序运行后的输出结果是_14__。

main()

{ int m=5; switch(m/2) { case 1: m++; case 2: m+=3;

case 5: m+=6;break; default: m-=7; }

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

三 程序填空(每空5分,共30分) 1 下列程序的输出结果是16.00,请填空。

main()

{ int a=9,b=2; float x= 【1】6.6 ,y=1.1,z; z=a/2+b*x/y+1/2; printf(\

}

2 完成以下程序,输入变量a,b,c的值,判断a,b,c能否组成三角形,计算三角形面积。

a?b?cs?p(p?a)(p?b)(p?c)其中p?(公式为: )。

2#include 【2】#include ; main()

{ int a,b,c;

8

【3】 float s,p;

printf(\please input the value of a,b,c\) scanf(\ 【4】&a,&b,&c ); if( 【5】a+b>c && b+c>a && c+a>b && a>0 && b>0 && c>0 )

{ 【6】p=(a+b+c)/2.0; s=sqrt(p*(p-a)*(p-b)*(p-c));

printf(\Yes,this is a triangle!\\n the area is %.2f.\\n\,s); }

else printf(\No,this is not a triangle!\\n\) }

循环结构程序设计

一 单项选择题(每题2分,共40分)

1 以下程序中,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 死循环 2 以下程序的执行结果是_B__。

main()

{ int n=9;

while(n>6) { n--; printf(\%d\,n); } }

该程序的输出结果是

A 987 B 876 C 8765 D 9876 3 以下程序段,while循环执行的次数是_A__。

int k=0;

while(k=1) k++;

A 无限次 B 有语法错 C 一次也不执行 D 执行1次 4 以下叙述正确的是__D_。

A do-while语句构成的循环不能用其它语句构成的循环来代替 B do-while语句构成的循环只能用break语句退出

C 用do-while语句构成的循环,在while后的表达式为非零时结束循环 D 用do-while语句构成的循环,在while后的表达式为零时结束循环 5 以下程序的执行结果是_B__。

main()

{ int a,y;

9

a=10; y=0; do{ a+=2; y+=a;

printf(\a=%d y=%d\\n\,a,y); if(y>20) break; }while(a=14);

}

A a=12 y=12 B a=12 y=12 a=14 y=16 a=16 y=28 a=16 y=20 a=18 y=24

C a=12 y=12 D a=12 y=12

a=14 y=26 a=14 y=44

6 以下程序的执行结果是__B_。

main()

{ int x=23;

do{ printf(\%d\,x--); }while(!x); }

A 321 B 23 C 不输出任何内容 D 陷入死循环 7 有以下程序段,输出结果是_C__。

int x=3;

do { printf(\%d \,x-=2); }while(!(- -x)); 从左到右顺序 A 1 B 3 0 C 1 -2 D 死循环 8 以下程序的输出结果是_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(\%d\\n\,a); }

A 31 B 13 C 10 D 20 9 以下程序的输出结果是__B_。

main()

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

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

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

10

}

A 21 B 32 C 33 D 11 10 以下循环体的执行次数是_C__。

main()

{ int i,j;

for(i=0,j=1;i<=j+1;i+=2,j--) printf(\%d \\n\,i); }

A 3 B 2 C 1 D 0 11 下列程序的输出结果是__C_。

main()

{ int i,j,m=0,n=0; for(i=0; <2;i++) for(j=0;j<2;j++) if(j>=i) m=1;n++; printf(\%d\\n\,n);

}

A 4 B 2 C 1 D 0 12 下列程序的输出结果是_C__。

main()

{ int i,sum;

for(i=1;i<=3;sum++) sum+=i; printf(\%d\\n\,sum); }

A 6 B 3 C 死循环 D 0 13 以下程序执行后sum的值是_C__。

main()

{ int i,sum;

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

printf(\%d\\n\,sum); 没有初始化 }

A 15 B 14 C 不确定 D 0 14以下程序执行后的输出结果是_D__。

main()

{ int i,n=0;

for(i=2;i<5;i++)

{ do{ if(i%3) continue; n++; } while(!i); n++; 不执行 }

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

A n=5 B n=2 C n=3 D n=4 15 下列语句中,能正确输出26个英文字母的是_C__。

A for(a='a';a<='z';printf(\%c\,++a)); B for(a='a';a<='z';) printf(\%c\,a); C for(a='a';a<='z';printf(\%c\,a++)); D for(a='a';a<='z';printf(\%c\,a)); 16 以下程序执行后的输出结果是__A_。

main()

11

{ int x=1,y=1; while(y<=5)

{ if(x>=10) break; if(x%2==0)

{ x+=5; continue; } x-=3; y++; }

printf(\%d,%d\,x,y); }

A 6,6 B 7,6 C 10,3 D 7,3 17 以下程序执行后的输出结果是_A__。

main()

{ int a=5;

while(!(a-->5)) { switch(a)

{ case 1:a++; case 4:a+=4;

case 5:a+=5;break; default:a-=5; } }

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

A 12 B 7 C 5 D 13 18 对于下面的for循环语句,可以断定它执行_C__次循环。

for(x=0,y=0;(y!=67)&&(x<5);x++) printf(\----\);

A无限 B 不定 C 5次 D 4次 19 在执行以下程序时,如果从键盘上输入:ABCdef,则输出结果为_B__。

#include \stdio.h\ main()

{ char ch;

while((ch=getchar())!='\\n')

{ if(ch>='A' && ch<='Z') ch=ch+32;

else if(ch>='a' && ch<='z') ch=ch-32; printf(\%c\,ch); }

printf(\\\n\); }

A ABCdef B abcDEF C abc D DEF 20 当执行以下程序时,_A__。

int a=1;

do{ a=a*a; }while(!a);

A 循环体将执行1次 B 循环体将执行2次 C 循环体将执行无限次 D 系统将提示有语法错误

二 填空题(每空3分,共33分)

12

1 若输入字符串:abcde<回车>,则以下while循环体将执行_0__次。

while((ch=getchar())=='e') printf(\*\); 2 以下while循环执行的次数是_无限多次__。

k=0; while(k=10) k=k+1;

3 下列程序的输出结果是_3,2,-1__。执行三次循环直到不满足条件

main()

{ int x=0,y=5,z=3;

while(z-->0 && ++x<5) y=y-1; printf(\%d,%d,%d\\n\,x,y,z); }

4 下面程序的功能是:计算1到10之间的奇数之和及偶数之和,请填空。

main()

{ int a,b,c,i; a=c=0;

for(i=0;i<=10;i+=2) { a+=i;

_ 【1】b=i+1 ; c+=b; 关键 }

printf(\偶数之和=%d\\n奇数之和=%d\\n\,a, 【2】c-11 ); }

5 下面程序的功能是:输出100以内能被3整除且个位数为6的所有整数,请填空。

main()

{ int i,j;

for(i=0; _ 【1】i<10 ; i++) { j=i*10+6;

if(_ 【2】j%3 )continue; printf(\%d\\n\,j); } }

6 以下程序的输出结果是_5__。1+2+2

main()

{ int s,i;

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

7 要使以下程序段输出10个整数,请填入一个整数。

for(i=0;i<=_18或19__;printf(\%d \\n\,i+=2)) ; 8 程序的功能是根据以下近似公式求π值:

?2111

?1?????62?23?3n?n

请填空完成求π的功能。

#include \math.h\ main()

{ int n=30000; double s=0.0; long i; for(i=1;i<=n;i++) s=s+_ 【1】 1.0/(i*i) ; printf(\pi=%f\\n\,_ 【2】sqrt(6*s) );

13

}

三 程序填空题(每空3分,共27分)

1111 下列程序是求 的值。 1?????2450#include \stdio.h\ main()

{ int i=2; float sum=1;; while( 【1】i<=50 )

{ sum=sum+1.0/i; 【2】i=i+2 ; } printf(\sum=%f\\n\, 【3】sum ); }

2 以下程序的功能是从键盘输入若干个学生的成绩,统计最高成绩和最低成绩,当输入为负数时,结束输入。 main()

{ float x,max,min; scanf(\%f\,&x);

max=min= 【1】x ; do{ if(x>max) max=x;

if(x

} while( 【3】x>=0 );

printf(\%f,%f\,max,min); }

3 下面的程序用来求出所有的水仙花数。所谓水仙花数是指一个3位数,它的各位数字的立方和恰好等于它本身。 main()

{ int n,i,j,k; for(n=100; 【1】n<=999;n++ ) /* 判断3位数n是否是水仙花数 */ { i=n/100; /* i是n的百位上的数字 */

j= 【2】n/10 ; /* j是n的十位上的数字 */ k=n; /* k是n的个位上的数字 */ if( 【3】n==i*i*i+j*j*j+k*k*k ) printf(\} }

数组

一 单项选择题(每题2分,共40分)

1 以下对一维整型数组a的正确定义(说明)的是_D__。

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];

2 若有定义(说明)int a[10];,则对数组a的元素正确引用的是_D__。

14

A a[10] B a[3.5] C a(5) D a[10-10] 3 执行下面程序段后,变量k 的值是__A_。

int k=3,s[2];

s[0]=k; k=s[1]*10;

A 不定值 B 33 C 30 D 10 4 以下程序的输出结果是__B_。

main()

{ int i,k,a[10],p[3]; k=5;

for(i=0;i<10;i++) a[i]=i;

for(i=0;i<3;i++) p[i]=a[i*(i+1)]; for(i=0;i<3;i++) k+=p[i]*2;

printf(\%d\\n\,k); 21=1+2*(3*3+1) }

A 20 B 21 C 22 D 23 5 以下对一维整型数组a初始化的语句中正确的是_D__。 A int a[10]=(0,0,0,0,0); B int a[10]=(); C int x=2,a[10]={10*x}; D int a[10]={0}; 6 若有以下说明,则数值为4的表达式是_D__。

int a[12]={1,2,3,4,5,6,7,8,9,10,11,12}; char c='a',d,g;

A a[g-c] B a[4] C a['d'-'c'] D a['d'-c] 7 下列程序运行后的输出结果是_B__。

#define MAX 10 void main()

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

for(i=0;i

A sum=55 B sum=-54 C sum=-55 D sum=54 8 以下程序的输出结果是__B_。

main()

{ int y=18,i=0,j,a[8];

do{ a[i]=y%2; i++; y=y/2; }while(y>=1);

for(j=i-1;j>0;j--) printf(\%d\,a[j]); 执行四次循环 }

A 1000 B 1001 C 1010 D 1100 9 以下对二维数组a的正确定义(说明)的是__C_。

A int a[3][]; B float a(3,4); Cdouble a[1][4]; D float a(3)(4); 10 若有定义(说明)int a[3][4];,则对数组a的元素的引用非法的是_D__。

A a[2][2*1] B a[1][3] C a[4-2][0] D a[0][4] 11 以下不能对二维数组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}; 12 下列数组定义语句中,正确的是__C_。

15

A char a[][]={'a','b','c','d','e','f'}; B char a[2][3]='a','b';

C char a[][3]={'a','b','c','d','e','f'}; D char a[][]={{'a','b','c','d','e','f'}}; 13 下列程序运行后的输出结果是_C__。

main()

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

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

{ k=a[i][j]; a[i][j]=a[j][i]; a[j][i]=k; } for(i=0;i<4;i++) { printf(\\\n\);

for(j=0;j<4;j++) printf(\M\,a[i][j]); } }

A 0 -1 -2 -3 B 0 1 2 3

1 0 -1 -2 -1 0 1 2 2 1 0 -1 -2 -1 0 1 3 2 1 0 -3 -2 -1 0 C 0 -1 -2 -3 D 0 1 2 3

1 0 1 2 -1 0 -1 -2 2 -1 0 1 -2 1 0 -2 3 -2 -1 0 -3 2 1 0

14 以下程序的输出结果是_A__。

main()

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

printf(\%d%d%d%d\\n\,a[0][3],a[1][2],a[2][1],a[3][0]); }

A 0650 B 1470 C 5430 D 输出值不定 15 有以下程序:

main()

{ int x[3][2]={0},i;

for(i=0;i<3;i++) scanf(\%d\,x[i]);

printf(\===\\n\,x[0][0],x[0][1],x[1][0]); }

若运行时输入:2 4 6<回车>,则输出结果是__B_。

A 2 0 0 B 2 0 4 C 2 4 0 D 2 4 6 16 下列描述不正确的是_C__。

A 字符型数组中可以存放字符串

B 可以对字符型数组进行整体输入和输出 C 可以对整型数组进行整体输入和输出

D 不能在赋值语句中通过赋值运算符“=”对字符型数组进行整体赋值 17 对于以下定义,叙述正确的是_C__。

char x[]=\bcdef\

char x[]={'a','b' 'c','d','e','f'};

A 数组x和数组y等价 B 数组x和数组y的长度相等

16

C 数组x的长度大于数组y的长度 D 数组x的长度小于数组y的长度 18 以下选项中,不能正确赋值的是_A__。

A char s1[10];s1=\Ctest\; B char s2[]={'C','t','e','s','t'};

C char s3[20]=\Ctest\; D char s4[30];strcpy(s4,\Ctest\); 19 若有定义和语句:char s=[10];s=\abcd\;printf(\%s\\n\,s);,则输出结果是_D__。

(以下□表示空格)

A abcd B a C abcd□□□□□ D 编译不通过 20 当执行下面程序时,如果输入ABC,则输出结果是__A_。

#include #include main()

{ char ss[10]=\12345\;

gets(ss); strcat(ss, \6789\; printf(\%s\\n\,ss); }

A ABC6789 B ABC67 C 12345ABC6 D ABC45678

二 填空题(每空3分,共24分)

1 若int类型变量占两个字节,定义int x[10]={0,2,4};,则数组x在内存中所占的字节数是_20__。

2 若有定义char a[]=\\\\\141\\141abc\\t\;,则数组a在内存中所占的字节数是_10__。 3 下列程序的输出结果是__852_。

main()

{ int i,a[10];

for(i=9;i>=0;i--) a[i]=10-i;

printf(\%d%d%d\\n\,a[2],a[5],a[8]); }

4 下列程序运行的结果是__6_。

main()

{ char ch[7]=\65ab21\; int i,s=0;

for(i=0;ch[i]>='0' && ch[i]<='9';i+=2) s=10*s+ch[i]-'0'; printf(\%d\\n\,s); }

5 有定义语句:char s[100],d[100];int j=0,i=0;且s中已赋字符串,请填空以实现字符串复制。(注意:不得使用逗号表达式) while(s[i])

{ d[j]=_s[i++]__; j++ ; } d[j]=0;

6 下面程序运行的结果是_abc__。

main()

{ char s[]=\abcdef\; s[3]='\\0';

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

17

7 以下程序的输出结果是__\BBB\_。

main()

{ char ch[3][5]={\AAAA\,\BBB\,\CC\}; printf(\\\\%s\\\\\n\,ch[1]); }

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

main()

{ char ch[]=\abc\,x[3][4]; int i; for(i=0;i<3;i++) strcpy(x[i],ch);

for(i=0;i<3;i++) printf(\%s\,&x[i][i]); printf(\\\n\); }

三 程序填空题(每空3分,共36分)

1 以下程序的功能是:从键盘上输入若干个学生的成绩(用输入负数结束输入),统计出平均成绩,并输出低于平均分的学生成绩。请填空。 #include \stdio.h\ main()

{ int n=0,i; float x[1000],sum=0.0,ave,a; printf(\Enter mark:\\n\); scanf(\%f\,&a); while(a>=0.0 && n<1000)

{ sum+= 【1】a ; x[n]= 【2】a ; n++; scanf(\%f\,&a); }

ave= 【3】sum/n ; print(\Output:\\n\); printf(\ave=%f\\n\,ave);

for(i=0;i2 以下程序的功能是求出矩阵x的上三角元素之积。其中矩阵x的行列数和元素的值均由键盘输入。请填空。 #define M 10 main()

{ int x[M][M]; int n,i,j; long s=1; printf(\Enter a integer(<=10):\\n\); scanf(\%d\,&n);

printf(\Enter %d data on each line for the array x\\n\,n); for( 【1】i=0;i

for(j=0;j

for( 【2】j=i;j

18

3 以下程序,数组a中存放一个递增数列。输入一个整数,并将它插入到数组a中,使之仍为一个递增数列。请填空。 main() { int a[ 【1】11或者大于11的任何数]={1,10,20,30,40,50,60,70,80,90},x,i,p; scanf(\%d\,&x);

for(i=0,p=10;i<10;i++)

if(x=p;i--) a[i+1]=a[i]; 【3】a[p]=x或者a[i+1]=x ;

for(i=0;i<=10;i++) printf(\]\\n\,a[i]); printf(\\\n\); }

4 以下程序的功能是:将t数组的内容连接到s数组内容的后面,使s数组保存连接后的新字符串。 main()

{ static char s[30]=\abcdefg\,t[]=\abcd\; int i=0,j=0; while(s[i]!='\\0') 【1】i++ ;

while(t[j]!='\\0') { s[i+j]=t[j]; j++; } 【2】 s[i+j]='\\0' ; printf(\%s\\n\,s); }

函数

一 单项选择题(每题2分,共40分) 1 以下正确的函数定义是_D__。

A double fun(int x,int y) B double 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; } return z; }

2 以下正确的说法是_D__。

A 实参和与其对应的形参各占用独立的存储单元 B 实参和与其对应的形参共占用一个存储单元

C 有当实参和与其对应的形参同名时才共占用相同的存储单元 D 形参是虚拟的,不占用存储单元

3 若调用一个函数,且此函数中没有return语句,则正确的说法是_A__。 A 该函数没有返回值 B 该函数返回若干个系统默认值 C 能返回一个用户所希望的函数值 D 返回一个不确定的值 4 以下正确的描述是__B_。

A 函数的定义可以嵌套,但函数的调用不可以嵌套 B 函数的定义不可以嵌套,但函数的调用可以嵌套 C 函数的定义和函数的调用均不可以嵌套 D 函数的定义和函数的调用均可以嵌套

19

5 若用数组名作为函数调用的实参,传递给形参的是__A_。

A 数组的首地址 B 数组中第一个元素的值 C 数组中的全部元素的值 D 数组元素的个数 6 以下不正确的说法是_D__。

A 在不同函数中可以使用相同名字的变量 B 形式参数是局部变量

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

D 在函数内的复合语句中定义的变量在本函数范围内有定义 7 已知一个函数的定义如下:

double fun(int x, double y) { …… } 则该函数正确的函数原型声明为_C__。

A double fun(int x,double y) B fun(int x,double y) C double fun(int,double); D fun(x,y); 8 关于函数声明,以下不正确的说法是__C_。

A 如果函数定义出现在函数调用之前,可以不必加函数原型声明 B 如果在所有函数定义之前,在函数外部已做了声明,则各个主调函数不必再做函数原型声明

C 函数在调用之前,一定要声明函数原型,保证编译系统进行全面的调用检查 D 标准库不需要函数原型声明

9 调用函数的实参与被调用函数的形参应有如下关系_D个数 顺序 数据类型__。 A 只要求实参与形参个数相等 B 只要求实参与形参顺序相同 C 只要求实参与形参数据类型相同 D 上述三点均需具备 10 凡在函数中未指定存储类别的变量,其隐含的存储类别是__A_。

A 自动 B 静态 C 外部 D 寄存器 11 在源程序的一个文件中定义的全局变量的作用域是_D__。

A 在本文件的全部范围 B 该程序的全部范围

C 一个函数的范围 D 从定义该变量的位置开始至该文件的结束 12 下列程序运行后的输出的数据是__C_。

int sum(int n) { int p=1,s=0,i;

for(i=1;i<=n;i++) s+=(p*=i); return s; }

main()

{ printf(\sum(5)=%d\\n\,sum(5)); }

A sum(5)=151 B sum(5)=152 C sum(5)=153 D sum(5)=155 13 下列程序运行后的输出结果是_A__。

int c=1; main()

{ static int a=5;int b=6;

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

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

20

}

func()

{ static int a=4;int b=10; a+=2;c+=10;b+=c;

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

A a=5,b=6,c=1 B a=5,b=6,c=11 C a=5,b=6,c=1 D a=5,b=6,c=1 a=6,b=21,c=11 a=5,b=21,c=11 a=5,b=21,c=11 a=6,b=21,c=11 a=5,b=6,c=11 a=5,b=6,c=11 a=5,b=6,c=11 a=5,b=6,c=11 a=8,b=31,c=21 a=8,b=31,c=21 a=8,b=31,c=21 a=5,b=31,c=21 14 运行下面的程序后,其输出结果是_A__。

main()

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

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

int f(int x) { int y; y=x++*x++;

return y; 6*6=36/(2+2)=9 }

A 9 B 6 C 36 D 18 15 下列程序输出结果是_D__。

#include my()

{ static int x=3; x++;

return(x); }

main()

{ int i,x;

for(i=0;i<=2;i++) x=my(); printf(\%d\\n\,x); }

A 3 B 4 C 5 D 6 16 下列程序的输出结果是_A__。

#include int abc(int u,int v) { int w;

while(v) { w=u%v; u=v; v=w; } return u; }

main()

{ int a=24,b=16,c;

21

c=abc(a,b);

printf(\%d\\n\,c);

}

A 8 B 6 C 5 D 4 17 下列程序运行后的输出结果是_B__。

main()

{ static char s[]=\abcdefgca\; p(s); printf(\s[]=%s\\n\,s); }

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

for(i=j=0;s[i]!= '\\0';i++) if(s[i]!='a'+2) s[j++]=s[i]; s[j]= '\\0'; 即是去掉c }

A s[]=abcdefgca B s[]=abdefga C s[]=bcdefgc D 程序有错 18 下列程序运行后的输出结果是_C__。

void main()

{ int m=4,n=2,k;

k=fun(m,n); printf(\%d\\n\,k); k=fun(m,n); printf(\%d\\n\,k); }

int fun(int x,int y) { static int n=3,i=2; i+=n+1; n=i+x+y; return(n); }

A 12 B 12 C 12 D 12 12 23 25 16 19 下列程序运行后的输出结果是_D__。

int x=1; main()

{ int i=5; fun(i);

printf(\%d,%d\\n\,i,x); }

fun(m) int m; { m+=x; x+=m;

{ char x='A'; printf(\%d\\n\,x); } printf(\%d,%d\\n\,m,x); }

A 65 B A C A D 65 6,1 6,1 6,7 6,7

22

6,1 6,1 6,7 5,7 20 下列程序运行后,若从键盘输入ABC!四个字符后,程序输出是_C__。

#include main()

{ void receiv(); receiv(); }

void receiv() { char c;

c=getchar(); putchar(c);

if(c!='!') receiv(); putchar(c); }

A ABC!! B ABC!ABC! C ABC!!CBA D ABCABC

二 填空题(每空3分,共30分)

1 函数调用语句:fun((a,b),(c,d,e));,实参个数为__2_。

2 凡在函数中未指定存储类别的局部变量,其默认的存储类别为_自动__。

3 在一个C程序中,若要定义一个只允许本源程序文件中所有函数使用的全局变量,则该变量需要定义的存储类别为_静态外部变量__。

4 C语言规定,调用一个函数时,实参变量和形参变量之间的数据传递方式是_值传递__。

5 运行下面程序,其输出结果是_15,35__。

#include int x,y; one()

{ int a,b; a=25,b=10; x=a-b;y=a+b; }

main()

{ int a,b; a=9,b=5; x=a+b;y=a-b; one();

printf(\%d,%d\\n\,x,y): 正确区分要打印的值 }

6 运行下面程序,其输出结果是_321__。

#include main()

{ void printd() int n=123; printd(n);

23

}

void printd(int n) { int i;

if(n<0) { n=-n; putchar('-'); } putchar(n+'0');

if((i=n/10)!=0) printd(i); 倒过来 }

7 运行下面程序,从键盘输入四个字符xyz#,其输出是_xyz##zyx__。

#include main()

{ void recursion(); recursion(); }

void recursion() { char c;

c=getchar(); putchar(c);

if(c!='#') recursion(); putchar(c); }

8 以下程序的输出结果是_1 3__。

#include void fun(int x)

{ if(x/2>0) fun(x/2); printf(\%d \,x); } main()

{ fun(3); printf(\\\n\); }

9 以下程序运行结果是__14_。 为什么???

int a=1; int f(int c)

{ static int a=2; c=c+1;

return (a++)+c; }

main()

{ int i,k=0;

for(i=0;i<2;i++){ int a=3; k+=f(a); } k+=a;

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

10.以下程序的运行结果是_m=4

k=4 i=5 k=5__。

int k=0;

void fun(int m)

{ m+=k; k+=m; printf(\m=%d\\n k=%d \,m,k++); }

24

main()

{ int i=4;

fun(i++); printf(\i=%d k=%d\\n\,i,k); }

三 程序填空题(每空3分,共30分)

1 一个整数称为完全平方数,是指它的值是另一个整数的平方。例如81是个完全平方数,因为它是9的平方。下列程序是在三位的正整数中寻找符合下列条件的整数:它既是完全平方数,且三位数字中又有两位数字相同:例如144(12*12)、676(26*26)等,程序找出并输出所有满足上述条件的三全数。 程序如下: main()

{ int n,k,a,b,c; for(k=1;;k++)

{ 【1】n=k*k;

if(n<100) 【2】continue ; if(n>999) 【3】break ; a=n/100;

b= 【4】n/10 ; c=n;

if(flag(a,b,c)) printf(\n=%d=%d*%d\\n\,n,k,k); } }

flag 【5】int x,int y,iny z

{ return(!((x-y)*(x-z)*(y-z))); }

x

2 以下程序的功能是应用近似公式计算e的值。其中,函数f1计算每项分子的值,函数f2计算每项分母的值。共取nmax项之和作为e的近似值。

x2x3xnxmax?1e?1?x???????

2!3!n!(max?1)2!xfloat f2(int n)

{ if(n==1) return 1;

else return 【6】n*f2(n-1) ; }

float f1(float x, int n) { int i; float j= 【7】1 ;

for(i=1; 【8】i<=n ;i++) j=j*x; return j; }

#define nmax 20 main()

{ float x,exp=1.0; int n; printf(\Input x value:\); scanf(\%f\,&x);

25

for(n=1;n

指针

一 单项选择题(每题2分,共40分) 1 以下叙述中错误的是__B_。

A 在程序中凡是以“#”开始的语句行都是预处理命令行 B 预处理命令行的最后不能以分号表示结束 C #define MAX是合法的宏定义命令行

D C程序对预处理命令行的处理是在程序执行的过程中进行的

2 若程序中有宏定义行:#define N 100 ,则以下叙述中正确的是_B__。 A 宏定义行中定义了标识符N的值为整数100

B 在编译程序对C源程序进行预处理时用100替换标识符N C 对C源程序进行编译时用100替换标识符N D 在运行时用100替换标识符 3 若有如下宏定义:

#define N 2

#define y(n) ((N+1)*n)

则执行下列语句:z=4*(N+y(5));后的结果是_B__。 4*(2+(3*5))

A 语句有错误 B z值为68 C z值为60 D z值为180 4 以下程序运行后的输出结果是_A__。

#define F(X,Y) (X)*(Y) main()

{ int a=3,b=4;

printf(\%d\\n\,F(a++,b++)); }

A 12 B 15 C 16 D 20 5 以下程序运行后的输出结果是_C__。

#define f(x) (x*x) main()

{ int i1,i2;

i1=f(8)/f(4); i2=f(4+4)/f(2+2); printf(\%d,%d\\n\,i1,i2); }

A 64,28 B 4,4 C 4,3 D 64,64 6 若已定义a为int型变量,则__D_是对指针变量p的正确说明和初始化。 A int p=&a; B int *p=a; C int *p=*a; D int *p=&a; 7 已知下列说明语句:

static int a[]={2,4,6,8}

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

26

则表达式**(q+2)的值是__A_。

A 6 B 2 C 4 D 8

8 下面是一个初始化指针的语句:int *px=&a;,其中指针变量的名字应该_C__。 A *px B a C px D &a 9 若指针px为空指针,则_B__。。

A px指向不定 B px的值为零 C px的目标为零 D px的地址为零 10 对下语句int *px[10];,下面正确的说法是_B__。

A px是一个指针,指向一个数组,数组的元素是整数型。 B px是一个数组,其数组的每一个元素是指向整数的指针。 C A和B均错,但它是C语言的正确语句。 D C语言不允许这样的语句。

11 具有相同基类型的指针变量p和数组y,下列写法中不合法的是__D_。

A p=y B *p=y[i] C p=&y[i] D p=&y 12 已知static int a[]={5,4,3,2,1},*p[]={a+3,a+2,a+1,a},**q=p; , 则表达式 *(p[0]+1)+**(q+2) 的值是_A__。

A 5 B 4 C 6 D 7 13 说明语句int *(*p)();的含义为_D__。

A p是一个指向int型数组的指针 B p是指针变量,它构成了指针数组

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

D p是一个指向函数的指针,该函数的返回值是一个指向整型的指针 14 设有如下程序段

char s[20]=\Beijing\,*p; p=s;

则执行p=s;语句后,以下叙述正确的是_A__。 A 可以用*p表示s[0]

B s数组中元素个数和p所指字符串长度相等 C s和p都是指针变量

D 数组s中的内容和指针变量p中的内容相同 15 设int型变量i、n均已定义,指针变量s1、s2各指向一个字符串。在for(i=0;i

A *s1++=*s2++; B s1[n-1]=s2[n-1]; C *(s1+n-1)=*(s2+n-1); D *(++s1)=*(++s2); 16 给出下列程序的运行结果__B_。

#include void main()

{ static char a[]=\language\,b[]=\program\; char *ptr1=a,*ptr2=b; int k;

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

if(*(ptr1+k)==*(ptr2+k)) printf(\%c\,*(ptr1+k)); } 求出相同的字符

A gae B ga C language D 有语法错误 17 以下程序执行后的输出结果是_A__。

void fun1(char *p)

27

{ char *q; q=p;

while(*q!='\\0'){ (*q)++; q++; } }

main()

{ char a[]={\Program\},*p;

p=&a[3]; fun1(p); printf(\%s\\n\,a); }

A Prohsbn B Prphsbn C Progsbn D Program 18 以下程序执行后的输出结果是_C__。

void swap(char *x,char *y) { char t;

t=*x; *x=*y; *y=t; 交换 }

main()

{ char *s1=\abc\,*s2=\123\;

swap(s1,s2); printf(\%s,%s\\n\,s1,s2); }

A 123,abc B abc,123 C 1bc,a23 D 321,cba 19 以下程序执行后的输出结果是_C__。 为什么?????

main()

{ char *p[]={\3697\,\2584\}; int i,j; long num=0; for(i=0;i<2;i++) { j=0;

while(p[i][j]!='\\0')

{ if((p[i][j]-'0')%2) num=10*num+p[i][j]-'0'; j+=2; } }

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

A 35 B 37 C 39 D 3975 20 下列程序运行后的输出结果是__A_。

void main()

{ char str[]=\The_Microsoft\; int n=4; sub(str,0,n-1);

sub(str,0,strlen(str)-1); printf(\%s\\n\,str); }

sub(str,n1,n2) char *str; int n1,n2; { char c,*p; p=str+n2; str=str+n1; while(str

{ c=*str; *str=*p; *p=c; 倒置第二个单词 str++; p--;

28

}

}

A tfosorciMThe_ B. ehT_Microsoft C tfosorciM_ehT D. Microsoft_The

二 填空题(每空3分,共30分)

1 以下程序的定义语句中,x[1]的初值是 ①2 ,程序运行后输出的内容是 ②2468 。

main()

{ int x[]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16},*p[4],i; for(i=0; i<4; i++)

{ p[i]=&x[2*i+1]; printf(\%d\, p[i][0]); } printf(\\\n\); }

2 以下程序的输出结果是 ③ 2 5 。

void swap(int *a, int *b) { int *t;

t=a; a=b; b=t; }

main()

{ int i=2,j=5,*p=&i,*q=&j;

swap(p,q); printf(\%d %d\\n\,*p,*q) }

3 以下程序的输出结果是 ④ 4 。

main()

{ int a[5]={2,4,6,8,10}, *p; p=a; p++;

printf(\%d\, *p); }

4 以下程序的输出结果是__⑤55__。

#define M 5 #define N M+M main() { int k;

k=N*N*5; printf(\%d\\n\,k); }

5 若有定义语句:int a[4]={0,1,2,3},*p;p=&a[1];则++(*p)的值是 ⑥ 2 。 6 若有定义:int a[2][3]={2,4,6,8,10,12};则*(&a[0][0]+2*2+1)的值是 ⑦12 ,*(a[1]+2)的值是 ⑧12 。 7 若有程序段:

int *p[3],a[6],i;

for(i=0;i<3;i++) p[i]=&a[2*i] ;

则*p[0]引用的是a数组元素 ⑨a[0] ,*(p[1]+1)引用的是a数组元素 ⑩a[3] 。

三 程序填空题(每空3分,共30分)

1 下面函数的功能是从输入的十个字符串中找出最长的那个串,请填空使程序完整。

void fun(char str[10][81],char **sp) { int i;

*sp = 【1】str[0] ;

29

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

if(strlen(*sp)

}

2 下面函数的功能是将一个整数字符串转换为一个整数,例如:\1234\转换为1234,请填空使程序完整。

int chnum(char *p) { int num=0,k,len,j; len=strlen(p);

for( ; 【3】*p ; p++)

{ k= 【4】*p-'0' ; j=(--len); while( 【5】j-- ) k=k*10; num=num+k; }

return (num); }

3 下面函数的功能使统计子串substr在母串str中出现的次数,请填空使程序完整。

int count(char *str, char *substr) { int i,j,k,num=0;

for(i=0; 【6】str[i] ;i++)

for( 【7】j=i ,k=0;substr[k]==str[j];k++,j++) if(substr [ 【8】k+1 ]==’\\0’) { num++ ; break ; } return (num); }

4 下面函数的功能是用递归法将一个整数存放到一个字符数组中,存放时按逆序存放,如483存放成“384”,请填空使程序完整。

void convert(char *a, int n) { int i;

if((i=n/10)!=0) convert( 【9】a+1 ,i); else *(a+1)=0;

*a= 【10】n+'0' ; }

结构体 文件

单项选择题(1~8题每题5分,9~18题每题6分,共100分) 1 有以下说明语句,对结构变量中成员age的正确引用是_A__。

struct student

{ int age; int sex; }stud1,*p;

A p->age B student.age C *p.age D stud1.student.age 2 说明语句如下,则正确的叙述是_D__。

union data { int x; char y; float z; }a; A data和a均是共用体类型变量

B a所占内存长度等于其成员x、y、z各在内存所占长度之和 C 任何情况下,均不能对a作整体赋值

30

D a的地址和它的各成员地址都是同一地址 3 共用体成员的数据类型__B_。

A 相同 B 可以不同也可以相同 C 长度一样 D 是结构体变量 4 由系统分配和控制的标准输出文件为_D__。

A 键盘 B 磁盘 C 打印机 D 显示器 5 下列关于C语言数据文件的叙述中正确的是 C 。 A C语言只能读写文本文件 B C语言只能读写二进制文件

C 文件由字符序列组成,可按数据的存放形式分为二进制文件和文本文件 D 文件由二进制数据序列组成

6 若要用fopen函数建一个新的二进制文件,该文件要既能读也能写,则文件方式字符串应该为_B__。

A \ab+\ B \wb+\ C \rb+\ D \ab\ 7 下列程序运行后的输出结果是_A__。 为什么?????

struct s { int n; char *c; }*p; char d[]={'a','b','c','d','e'};

struct s a[]={10,&d[0],20,&d[1],30,&d[2],40,&d[3],50,&d[4]}; #include main() { p=a;

printf(\%d\\n\,++p->n); printf(\%d\\n\,(++p)->n); printf(\%c\\n\,++(*p->c)); }

A 11 B 11 C 10 D 10 20 20 20 20 c b c b 8 已知

struct student

{ char *name; int student_no; char grade; }; struct student temp,*p=&temp; temp.name=\chou\;

则下面不正确的是__B_。

表达式 值 A p->name chou B (*p)->name+2 h C *p->name+2 e D *(p->name+2) o 9 下面程序运行后,其输出结果是_B__。

#include struct tree

{ int x; char *s; }t; func(struct tree t)

31

{ t.x=10; t.s=\computer\; return 0; } main()

{ t.x=1; t.s=\minicomputer\;

func(t); printf(\%d,%s\\n\,t.x,t.s); }

A 10,computer B 1,minicomputer C 1,computer D 10,minicomputer 10 下列程序的输出结果是__B_。

#include main() { union

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

printf(\%lx \,s->k); printf(\%c\\n\,s->c[0]); }

A 390038 39 B 380039 9 C 3938 38 D 3839 8 11 若已定义了如下的共用体类型变量x,则x所占用的内存字节数为_C__。

union data { int i; char cha; double f; }x;

A 7 B 11 C 8 D 10 12 如下说明语句:

enum A {A0=1,A1=3,A2,A3,A4,A5}; enum A B;

执行 B=A3; printf(\%d\\n\,B); 输出是_A__。

A 5 B 3 C 2 D 编译时出错 13 有以下说明语句,则结构变量s的成员num的不正确引用是_B__。

struct student { int num; int age; }s,*p;

A s.num B *p.num C p->num D (*p).num 14 以下各选项试图说明一种新的类型名,其中正确的是 C 。

A typedef integer int; B typedef integer=int; C typedef int integer; D typedef int=integer; 15 运行下面程序,其输出结果是_C__。

#include struct sample

{ int a,b; char *ch; }; main()

{ struct sample arg;

arg.a=1000;arg.b=100;arg.ch=\abcd\; f1(arg);

32

}

f1(struct sample param) { param.a+=param.b; param.ch[2]='x';

printf(\%d\\n\,param.a); printf(\%s\\n\,param.ch); }

A 1000 B 1100 C 1100 D 100 abcd abcd abxd abcd 16 fwrite函数的一般调用形式是__D_。

A fwrite(buffer,count,size,fp); B fwrite(fp,size,count,buffer); C fwrite(fp,count,size,buffer); D fwrite(buffer,size,count,fp); 17 C语言文件操作函数fread(buffer,size,n,fp)的功能是_B__。

A 从文件fp中读n个字节存入buffer

B 从文件fp中读n个大小为size字节的数据项存入buffer中

C 从文件fp中读入n个字节放入大小为size字节的缓冲区buffer中 D 从文件fp中读入n个字符数据放入buffer中 18 若有如下定义:

struct data

{ int i; char ch; float f; }b;

则结构体变量b占用内存的字节数是 A 。

A 7 B 4 C 1 D 2

基础知识作业答题纸

习题集答案

基础知识

一 单项选择题(每题2分,共44分)

A B A D C C B B B C 1-5 6-10 11-15 16-22 A D A C A A D C B C A A 二 填空题(第1题2分,其余每题3分,共56分) 1 x%2==0 2 a=2,b=3,c=4↙ 11 12 12 a=5 c=6 33

3 -12 4 10 13 b=5 d=18 【1】A#B#C 【2】A# #B 5 -14 14 5.169000 【1】scanf(\%c\,&ch); 15 【2】ch-=32; 【3】printf(\%c\\n\,ch); 16 a=98,b=765.000000,c=4321.000000 123.12346 123.123457 00012345 abcdefgh 6 32767,32767 7 15 8 10,A,10 17 10,12,a 9 10,8,16 10,a 10 28

18 abc 19 a=3,b=5,x=35.000000,y=35.119999,c1=a,c2=b 顺序、选择结构程序设计

一 单项选择题(每题2分,共40分)

C D B D C B C A D A 1-5 6-10 11-15 16-20 C B D C A C D C D D

二 填空题(每空3分,共30分) 1 9,10 2 000 3 6 20 7 8,9 8 (x>=y)&&(y>=z) 9 **3 10 14 i= 11 j= 15 k= 33 4 a=98,b=76.0,c=54 5 67,D

三 程序填空题(每空5分,共30分)

34

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

Top