A) 1 B) 2 C) 3 D) 649.在执行以下程序时,为了使输出结果为t=4,则给a和b输入的值应满足的条件是( )。 main() {
int s, t, a, b;
scanf(“%d, %d”, &a, &b); s=1;t=1; if(a>0) s=s+1; if(a>b) t=s+t; else if(a==b) t=5; else t=2*s; printf(“t=%d\\n”, t); }
A) a>b B) aa>b 50.设int x=1, y=1;表达式(!x||y--)的值是( )。 A) 0 B) 1 C) 2 D) -1
51.若变量a、i已正确定义,且i已正确赋值,合法的语句是( )。 A) a==1 B) ++i; C) a=a++=5; D) a=int(i); 52.以下程序的输出结果为( )。 main() {
int a=2, b=-1, c=2; if(aA) 0 B) 1 C) 2 D) 3 二 填空题
1.若从键盘输入58,则以下程序输出的结果是 585858 。 main() { int a;
scanf(“%d”,&a);
if(a>50) printf(“%d”,a); if(a>40) printf(“%d”,a); if(a>30) printf(“%d”,a); }
2.下面程序的运行结果是 -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); }
3.以下程序实现:输入三个整数,按从大到小的顺序进行输出。请填空。 main() {
int x, y, z, c;
scanf(“%d %d %d”, &x, &y, &z); if( y>x ) { c=x; x=y; y=c;} if( z>x ) { c=x; x=z; z=c;} if( z>y ) { c=y; y=z; z=c;} printf(“ %d %d %d”, x, y, z); }
4.如果运行时输入字符Q,则下面程序的运行结果是 Q 。 main() {
char ch;
scanf(“%c”, &ch);
ch=(ch>=‘A’&& ch<=‘Z’)? (ch+32):ch; ch=(ch>=‘a’&& ch<=‘z’)? (ch-32):ch; printf(“%c”, ch); }
5.若x为int类型,请以最简单的形式写出与逻辑表达式!x等价的C语言关系表达式 x==0 。
6.表示“整数x的绝对值大于5”时值为“真”的C语言表达式是 x>5||x<-5 。 7.下列程序段的输出结果是 passwarn 。 int n='c'; switch(n++)
{ default: printf(\"error\");break;
case 'a':case 'A':case 'b':case 'B':printf(\"good\");break; case 'c':case 'C':printf(\"pass\"); case 'd':case 'D':printf(\"warn\"); }
8.以下程序将两个数从小到大输出。 main() {
float a, b, t ;
scanf( \"%f %f\" , &a, &b); if(a>b) { t=a;
a=b ; b=t; }
printf(“%5.2f, %5.2f\\n”, a, b); }
9.若输入82,以下程序的输出结果为 place=4,每位数字为:8,6,4,2 。 main() {
long int num;
int gw, sw, bw, qw, ww, place;
printf(“请输入一个0~99999之间的整数:”); scanf(“%ld”, &num); if(num>9999) place=5; else if(num>999) place=4; else if(num>99) place=3; else if(num>9) place=2; else place=1;
printf(“place=%d,”, place); printf(“每位数字为: ”); ww=num/10000;
qw=(num-ww*10000)/1000; bw=(num-ww*10000-qw*1000)/100; sw=(num-ww*10000-qw*1000-bw*100)/10; gw=num-ww*10000-qw*1000-bw*100-sw*10; switch(place)
{case 5: printf(“%d, %d, %d, %d, %d”, ww, qw, bw, sw, gw); break; case 4: printf(“%d, %d, %d, %d”, qw, bw, sw, gw); break; case 3: printf(“%d, %d, %d”, bw, sw, gw); break; case 2: printf(“%d, %d”, sw, gw); break; case 1: printf(“%d”, gw); break; } }
10.若输入1988,程序运行的结果为 1988年是闰年 ;若输入19,则结果为 19年不是闰年 。main() {int year, leap; scanf(“%d”, &year); if(year%4) leap=0; else if(year%100) leap=1; else if(year%400) leap=0; else leap=1;
if(leap) printf(“%d年是闰年。\\n”, year); else printf(“%d年不是闰年。\\n”, year); }
11.用以下程序把大写字母A~Z转换成对应的小写字母a ~ z,其他字符不转换。 main() {char ch;
scanf ( \"%c\ );
ch=( ch>='A'&&ch<='Z' )?ch+32:ch; printf(“char=%c\\n”, ch ); } 12
.
条
件
“
20或x<-100
”
的
C
语
言
表
达
式
是
x>20&&x<30||x<=-100 。
13.若已知a=10, b=20, 则表达式!a14.若已定义int a=25, b=14, c=19; 以下三目运算符(?:)所构成的语句的执行结果是 ###a=26,b=13,c=19 。
a++<=25&&b--<=2&&c++?printf(“***a=%d, b=%d, c=%d\\n”, a, b, c): printf(“###a=%d, b=%d, c=%d\\n”, a, b, c);
15.以下两条if语句可合并成一条if语句为 if(a>b){y=2;printf(\"****y=%d\\n\else {x=1;printf(\"####x=%d\\n\ 。 if(a<=b) x=1; else y=2;
if(a>b) printf(“**** y=%d\\n”, y); else printf(“#### x=%d\\n”, x);
第六章 循环控制
一 单项选择题
1.下面程序段的运行结果是( )。 int n=0; while(n++<=2); printf(“%d”,n);
A) 2 B) 3 C) 4 D) 有语法错 2.设有程序段: t=0;
while(printf(“*”)) {t++;
if(t<3) break; }
下面描述正确的是( )。 A) 其中循环控制表达式与0等价 B) 其中循环控制表达式与'0'等价 C) 其中循环控制表达式是不合法的 D) 以上说法都不对
3.下面程序的功能是将从键盘输入的一对数,由小到大排序输出,当输入一对相等数时结束循环,请选择填空( )。 #include main() {int a,b,t;scanf(“%d%d”,&a,&b); while( ___________ ) {if(a>b)
{t=a;a=b;b=t;}
printf(“%d,%d\\n”,a,b); scanf(\"%d%d\ } }
A) !a=b B) a!=b C) a==b D) a=b 4.C语言中,while和do-while循环的主要区别是( )。 A) do-while的循环体至少无条件执行一次
B) while的循环控制条件比do-while的循环控制条件更严格 C) do-while允许从外部转到循环体内 D) do-while的循环体不能是复合语句 5.对以下程序段描述正确的是( )。 x=-1; do {x=x*x;} while(!x);
A) 是死循环 B) 循环执行二次 C) 循环执行一次 D) 有语法错误 6.以下描述中正确的是( )。
A) do-while循环中循环体内不能使用复合语句
B) do-while循环由do开始,用while结束,在while(表达式)后面不能写分号 C) 在do-while循环体中,一定要有能使while后面表达式的值变为零(“假”)的操作 D) do-while循环中,根据情况可以省略while 7.若有如下语句 int x=3;
do{ printf(“%3d”,x-=2);} while(!(--x)); 则上面程序段( )。
A) 输出的是1 B) 输出的是1和-2 C) 输出的是3和0 D) 是死循环 8.下面有关for循环的正确描述是( )。 A) for循环只能用于循环次数已经确定的情况
B) for循环是先执行循环的循环体语句,后判断表达式 C) 在for循环中,不能用break语句跳出循环体
D) for循环的循环体语句中,可以包含多条语句,但必须用花括号括起来 9.对for(表达式1; ;表达式3)可理解为( )。
A) for(表达式1;0;表达式3) B) for(表达式1;1;表达式3) C) for(表达式1;表达式1;表达式3) D) for(表达式1;表达式3;表达式3) 10.若i为整型变量,则以下循环执行次数是( )。 for(i=2;i==0;) printf(“%d”,i--);
A) 无限次 B) 0次 C) 1次 D) 2次 11.以下不是无限循环的语句为( )。 A) for(y=0,x=1;x>++y;x=i++) i=x; B) for(;;x++=i); C) while(1){x++;}
D) for(i=10;;i--) sum+=i;
12.下面程序段的运行结果是( )。 for(y=1;y<10;) y=((x=3*y,x+1),x-1); printf(“x=%d,y=%d”,x,y);
A) x=27,y=27 B) x=12,y=13 C) x=15,y=14 D) x=y=27 13.执行语句for(i=1;i++<4;) ;后变量i的值是( )。 A) 3 B) 4 C) 5 D) 不定
14.有一堆零件(100到200之间),如果分成4个零件一组的若干组,则多2个零件;若分成7个零件一组,则多3个零件;若分成9个零件一组,则多5个零件。下面程序是求这堆零件总数,请选择填空( )。 #include main() {int i;for(i=100;i<200;i++) if((i-2)%4==0) if(!((i-3)%7)) if( ______ )
printf(“%d”,i); }
A) i%9=5 B) i%9!=5 C) (i-5)%9!=0 D) i%9==5
15.下面程序的功能是把316表示为两个加数的和,使两个加数分别能被13和11整除,请选择填空( )。 #include main()
{ int i=0,j,k;
do{i++;k=316-13*i;}while( _k%11______ ); j=k/11;
printf(“316=13*%d+11*%d”,i,j); }
A) k/11 B) k%11 C) k/11==0 D) k%11==0 16.下面程序的运行结果是( )。 #include main() {int y=10;do{y--;}while(--y); printf(“%d\\n”,y--); }
A) -1 B) 1 C) 8 D) 0
17.若运行以下程序时,从键盘输入ADescriptor(表示回车),则下面程序的运行结果是( )。 #include main() {char c;int v0=1,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); }
A) v0=7,v1=4,v2=7 B) v0=8,v1=4,v2=8 C) v0=11,v1=4,v2=11 D) v0=12,v1=4,v2=12 18.下面程序的运行结果是( )。 #include main(){int a=1,b=10; do
{b-=a;a++;}
while(b--<0);
printf(“a=%d,b=%d\\n”,a,b); }
A) a=3,b=11 B) a=2,b=8 C) a=1,b=-1 D) a=4,b=9 19.以下程序的输出结果是( )。 main() { int num=0; while(num<=2)
{ num++; printf(“%d\\n”,num);} }
A) 1 B) 1 C) 1 D) l 2 2 2 3 3 4
20.设有程序段 int k=10;
while(k=0) k=k-1;
则下面描述中正确的是( )。
A) while循环执行10次 B) 循环是无限循环 C) 循环体语句一次也不执行 D) 循环体语句执行一次 21.设有以下程序段 int x=0,s=0;
while(!x!=0) s+=++x; printf(\"%d\则( )。
A) 运行程序段后输出0 B) 运行程序段后输出1 C) 程序段中的控制表达式是非法的 D) 程序段执行无限次 22.语句while(!E);中的表达式!E等价于( )。
A) E==0 B) E!=1 C) E!=0 D) E==1 23.下面程序段的运行结果是( )。 a=1;b=2;c=2;
while(aA) 1,2,0 B) 2,1,0 C) 1,2,1 D) 2,1,1 24.下面程序段的运行结果是( )。 x=y=0;
while(x<15) y++,x+=++y;
printf(\"%d, %d\
A) 20,7 B) 6,12 C) 20,8 D) 8,20 25.以下程序段的执行结果是( )。 int a, y; a=10; y=0; do
{ a+=2; y+=a;
printf(\"a=%d y=%d\\n\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
26.t为int类型,进人下面的循环之前,t的值为0,则以下叙述中正确的是(while( t=l ) {……}
A) 循环控制表达式的值为0 B) 循环控制表达式的值为1 C) 循环控制表达式不合法 D) 以上说法都不对 27.有以下程序段 int k=0; while(k=1) k++;
while循环执行的次数是( )。
A) 无限次 B) 有语法错,不能执行 C) 一次也不执行 D) 执行1次 28.以下程序执行后sum的值是( )。 main() { int i , sum;
for(i=1;i<6;i++) sum+=i; printf(\"%d\\n\}
A) 15 B) 14 C) 不确定 D) 0 29.有以下程序段 int x=3; do
{ printf(\"%d\while (!(--x));
其输出结果是( )。
)。 A) 1 B) 3 0 C) 1 -2 D) 死循环 30.若输入12、8,以下程序的输出结果是( )。 main()
{int a,b,num1,num2,temp; scanf(“%d,%d”,&num1,&num2); if(num1>num2) {temp=num1; num1=num2; num2=temp; }
a=num1,b=num2; while(b!=0) {temp=a%b; a=b; b=temp; }
printf(“%d, %d”,a,num1*num2/a); }
A) 4,24 B) 3,24 C) 5,25 31.以下程序的输出结果是( )。 #include #include main() {int s=1; float n=1,pi=0; double t=1;while(fabs(t)>=2e-6) {pi+=t; n+=2; s=-s; t=s/n; } pi*=4;
printf(“pi=%.6f\\n”,pi); }
A) 3.141592 B) 1 C) 2e-6 32.以下程序的输出结果是( )。 main() {int i,f1,f2; f1=f2=1;
for(i=0;i<4;i++)
{printf(“%d %d ”,f1,f2); f1+=f2;
D) 4,25 D) 0 f2+=f1; } }
A) 1 2 3 4 5 6 7 8 B) 1 1 2 3 5 8 13 21 C) 1 1 3 5 7 9 11 13 D) 1 3 5 7 9 11 13 15 33.下列叙述中,正确的一条是( )。 A) 语句“goto 12;”是合法的 B) for(;;)语句相当于while(1)语句
C) if(表达式)语句中,表达式的类型只限于逻辑表达式 D) break语句可用于程序的任何地方,以终止程序的执行 34.以下程序的输出结果是( )。 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; }
printf(“%d\\n”,a); }
A) 7 B) 8 C) 9 D) 10 35.以下的for循环( )
for(x=0,y=0;(y!=123)&&(x<4);x++) ; A) 是无限循环 B) 循环次数不定 C) 执行4次 D) 执行3次 36.C语言中( )
A) 不能使用do-while语句构成的循环
B) do-while语句构成的循环必须用break语句才能退出
C) do-while语句构成的循环,当while语句中的表达式值为非零时结束循环 D) do-while语句构成的循环,当while语句中的表达式值为零时结束循环 37.以下程序的输出结果是( )。 main() {int i;
for(i=1;i<=5;i++) {if(i%2)
printf(“*”); else continue; printf(“#”); }
printf(“$\\n”); }
A) *#*#*#$ B) #*#*#*$ C) *#*#$ D) #*#*$
38.有以下程序,从第一列开始输入数据2473(代表一个回车符),则程序的输出结果为( )。 #include main() {int c;while((c=getchar())!=‟\\n‟) {switch(c-„2‟) {case 0:
case 1:putchar(c+4); case 2:putchar(c+4);break; case 3:putchar(c+3); default:putchar(c+2);break;
} }
printf(“\\n”); }
A) 6677 B) 6666 C) 6677877 D) 6688766 39.执行以下程序片段的结果是( )。 int x=23; do
{printf(“%d”, x--);} while(!x);
A) 打印出321 B) 打印出23 C) 不打印任何内容 D) 陷入死循环
40.若x是int型变量,则执行以下程序片段的结果是( )。 for(x=3;x<6;x++) printf((x%2)?(“**%d”) : (“##%d\\n”), x);
A) **3##4**5 B) ##3**4##5 C) ##3 D) **3##4
**4##5 **5
41.有以下程序,若运行时从键盘输入3.6 2.4(代表一个回车符),则程序的输出结果为( )。 #include #include main() {float x,y,z;scanf(“%f%f”,&x,&y); z=x/y; while(1)
{if(fabs(z)>1.0) {x=y;y=z;z=x/y;} else break;
}
printf(“%f\\n”, y); }
A) 1.500000 B) 1.600000 C) 2.000000 D) 2.400000 42.以下程序的输出结果是( )。 main()
{int x=10,y=10,i; for(i=0;x>8;y=++i)
printf(“%d %d ”,x--,y); }
A) 10 1 9 2 B) 9 8 7 6 C) 10 9 9 0 D) 10 10 9 1 43.以下程序的输出结果是( )。 main() {int n=4; while(n--)
printf(“%d ”,--n); }
A) 2 0 B) 3 1 C) 3 2 1 D) 2 1 0 44.以下程序的输出结果是( )。 main() {int i;
for(i=‟A‟;i<‟I‟;i++,i++) printf(“%c”,i+32); }
A) 编译通不过,无输出 B) aceg C) acegi D) abcdefghi 45.若i、j已定义为int型,则以下程序段中内循环体的总的执行次数是( )。 for(i=5;i;i--)
for(j=0;j<4;j++){ }
A) 20 B) 24 C) 25 D) 30
46.若j为int型变量,则以下for循环语句的执行结果是( )。 for(j=10;j>3;j--)
{if(j%3) j--;--j;--j;printf(“%d ”,j);}
A) 6 3 B) 7 4 C) 6 2 D) 7 3 47.以下程序的执行结果是( )。 main() {int i,x;
for(i=1;i<=50;i++) {x=i;
if(++x%2==0) if(x%3==0) if(x%7==0)
printf(“%d”,i);
} }
A) 28 B) 27 C) 42 D) 41 48.以下程序的执行结果是( )。 main() {int i,j;
for(j=10;j<11;j++) { for(i=9;iif(i>=j-1) printf(“%d”,j); } }A) 11 B) 10 C) 9 D) 10 11 49.在下列选项中,没有构成死循环的程序段是( )。 A) int i=100; B) for(;;); while(1) {i=i%100+1; if(i>100) break; }
C) int k=1000; D) int s=36; do{++k;} while(s);--s; while(k>=10000);
50.以下程序的输出结果是( )。 main() {int i,j,x=0; for(i=0;i<2;i++) { x++;
for(j=0;j<=3;j++) { if(j%2) continue; x++; } x++; }
printf(“x=%d\\n”,x); }
A) x=4 B) x=8 C) x=6 D) x=12
51.运行以下程序后,如果从键盘上输入65 14<回车>,则输出结果是(main() {int m,n;
scanf(“%d%d”,&m,&n); while(m!=n) {while(m>n) m-=n; while(n>m) n-=m; }
。 ) printf(“m=%d\\n”, m); }
A) m=3 B) m=2 C) m=1 D) m=0 52.以下程序的输出结果是( )。 main()
{int i,j,m=0,n=0; for(i=0;i<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 53.以下程序执行后sum的值是( )。 main() { int i , sum=0;
for(i=1;i<=3;sum++) sum+=i; printf(\"%d\\n\}
A) 6 B) 3 C) 死循环 D) 0 二 填空题
1.以下程序运行后的输出结果是 52 。 main() { int i=10, j=0; do { j=j+i; i--;} while(i>2); printf(\"%d\\n\}
2.设有以下程序: main() { int n1,n2; scanf(\"%d\while(n2!=0) { n1=n2%10; n2=n2/10; printf(\"%d\} }
程序运行后,如果从键盘上输入1298,则输出结果为 21 。
3.若输入字母b,程序输出结果为 b,B ;若输入字符*,程序将怎样 等待状态 。 #include main(){char c1, c2; c1=getchar(); while(c1<97||c1>122) c1=getchar(); c2=c1-32;
printf(\"%c, %c\\n\}
4.用以下程序计算1到100的整数的累加和。 main()
{ int i=1, sum= 0 ; for( ;i<=100; ) {sum+=i; i++; }
printf(\"sum=%d\\n\ sum ); }
5.以下程序的功能是:从键盘上输入若干个学生的成绩,统计并输出最高成绩和最低成绩,当输入负数时结束。请填空。 main()
{ float x, amax, amin; scanf(“%f”,&x); amax=x; amin=x;
while( x>=0 ) {if(x>amax) amax=x;
if( xprintf(\"amax=%f\\namin=%f\\n\}6.设i、j、k均为int型变量,则执行完下面的for循环后,k的值为 10 。 for(i=0, j=10;i<=j; i++, j--) k=i+j;
7.下面程序的功能是:计算1到10之间的奇数之和及偶数之和,请填空。 main() { int a, b, c, i; a=c=0;
for(i=0;i<=10;i+=2) {a+=i;
b=i+1 ; c+=b; }
printf(\"偶数之和=%d\\n\ printf(\"奇数之和=%d\\n\-11); }
8.下面程序的功能是:输出100以内能被3整除且个位数为6的所有整数,请填空。 main() { int i, j;
for(i=0; i<100 ; i++) {j=i*10+6;
if( j%3!=0 ) continue; printf(“%d”, j); } }
9.要使以下程序段输出10个整数,请填入一个整数。 for(i=0; i<= 18or19 ; printf(“%d\\n”, i+=2));
10.若输入字符串:abcde<回车>,则以下while循环体将执行 0 次。 while((ch=getchar())= =„e‟) printf(“*”);
第七章 数 组
一 单项选择题
1.下列描述中不正确的是( )。 A) 字符型数组中可以存放字符串 B) 可以对字符型数组进行整体输入、输出 C) 可以对整型数组进行整体输入、输出
D) 不能在赋值语句中通过赋值运算符\"=\"对字符型数组进行整体赋值 2.执行下面的程序段后,变量k中的值为( )。 int k=3, s[2]; s[0]=k; k=s[1]*10;
A) 不定值 B) 33 C) 30 D) 10
3.设有数组定义: char array[ ]=\"China\"; 则数组array所占的空间为( )。 A) 4个字节 B) 5个字节 C) 6个字节 D) 7个字节 4.下列程序执行后的输出结果是( )。 #include main(){ char arr[2][4];
strcpy(arr,\"you\"); strcpy(arr[1],\"me\"); arr[0][3]=‟&‟; printf(\"%s \\n\}
A) you&me B) you C) me D) err
5.执行下列程序时输入:123<空格>456<空格>7<回车>,输出结果是( )。 main() { char s[100]; int c, i;
scanf(\"%c\
scanf(\"%d\ scanf(\"%s\
printf(\"%c, %d, %s\\n\}
A) 123,456,7 B) 1,456,7 C) 1,23,456,7 D) 1,23,456
6.假定int类型变量占用两个字节,若有定义:int x[10]={0,2,4}; 则数组x在内存中所占字节数是( )。
A) 3 B) 6 C) 10 D) 20 7.以下程序的输出结果是( )。 main()
{int i, a[10];
for(i=9;i>=0;i--) a[i]=10-i; printf(\"%d%d%d\}
A) 258 B) 741 C) 852 D) 369 8.以下数组定义中不正确的是( )。
A) int a[2][3]; B) int b[][3]={0,1,2,3};
C) int c[100][100]={0}; D) int d[3][]={{1,2},{1,2,3},{1,2,3,4}}; 9.以下程序的输出结果是( )。 main()
{int a[4][4]={{1,3,5},{2,4,6},{3,5,7}};
printf(\"%d%d%d%d\\n\}
A) 0650 B) 1470 C) 5430 D) 输出值不定 10.以下程序的输出结果是( )。 #include main(){char st[20]=\"hello\\0\\\\\\\\";
printf(%d %d\\n\}
A) 9 9 B) 5 20 C) 9 20 D) 20 20 11.以下程序的输出结果是( )。 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\}
A) 20 B) 21 C) 22 D) 23 12.以下程序的输出结果是( )。 main()
{int i, x[3][3]={1,2,3,4,5,6,7,8,9}; for(i=0;i<3;i++) printf(\"%d\}
A) 159 B) 147 C) 357 D) 369 13.以下程序的输出结果是( )。 main()
{int a[3][3]={{1,2},{3,4},{5,6}}, i, j, s=0; for(i=1;i<3;i++)
for(j=0;j<=i;j++) s+=a[i][j]; printf(\"%d\\n\}
A) 18 B) 19 C) 20 D) 21 14.以下程序的输出结果是( )。 main()
{char w[ ][10]={\"ABCD\ for(k=1;k<3;k++) printf(\"%s\\n\}
A) ABCD B) ABCD C) EFG D) EFGH FGH EFG JK IJKL KL IJ O M
15.当执行下面的程序时,如果输入ABC,则输出结果是( )。 #include #include main(){char ss[10]=\"12345\";
gets(ss);strcat(ss,\"67\");printf(\"%s\\n\}
A) ABC67 B) ABC67 C) 12345ABC6 D) ABC4567 16.若要定义c为2×3×4的三维数组,正确的定义语句是( )。 A) float c[2][3][4] B) float c[2,3,4] C) float c(2,3,4) D) float c(2)(3)(4)
17.若定义int a[2][2]={1,2,3,4},则a数组的各数组元素值分别为( )。 A) a[0][0]=1,a[0][1]=2,a[1][0]=3,a[1][1]=4 B) a[0][0]=1,a[0][1]=3,a[1][0]=2,a[1][1]=4 C) a[0][0]=4,a[0][1]=3,a[1][0]=2,a[1][1]=1 D) a[0][0]=4,a[0][1]=2,a[1][0]=3,a[1][1]=1 18.在下列叙述中,正确的一条是( )。
A) 以下语句是正确的:char c[]=”ab”; B) 一维数组的定义可采用下列格式:int a(10); C) 下面的语句定义了一个二维数组:float a[3,4];
D) 以下两个语句中的a[3][4]的含义相同:int a[3][4]; a[3][4]=1; 19.当输入的数据为2、5时,以下程序的输出结果是( )。 #include main(){int f[100],i,j,k,m; scanf(“%d%d”,&k,&m); for(i=0;i<=m;i++) f[i]=0; f[k-1]=1;
for(i=k;i<=m;i++)
for(j=i-k;j<=i-1;j++) f[i]+=f[j]; printf(“%d%10d%10d\\n”,k,m,f[m]); }
A) 3 5 5 B) 3 5 7 C) 2 5 5 20.在下列语句中,正确的是( )。 A) char str[]=”China”; B) char str[];str=”China”;
C) char str1[5],str2[]={”China”};str1=str2;
D) char str1[],str2[];str2={”China”};strcpy(str1,str2); 21.下面语句中不正确的是( )。
A) int a[5]={1,2,3,4,5}; B) int a[5]={1,2,3}; C) int a[]={0,0,0,0,0}; D) int a[5]={0*5}; 22.若先后输入4、1、5、3、7,以下程序的输出结果为( )。#define MAX 100 main() {
int i,j,n,flag,t,a[MAX]; printf(“输入数据个数:”); scanf(“%d\\n”,&n);
for(i=1;i<=n;i++) scanf(“%d”,&a[i]); for(i=1;ifor(j=1;j<=n-i;j++) if(a[j]>a[j+1]) {flag=0; t=a[j]; a[j]=a[j+1]; a[j+1]=t; }if(flag) break;
D) 3 6 9 }
for(i=1;i<=n;i++) printf(“%-3d”,a[i]); printf(“\\n”); }
A) 2 4 6 7 B) 1 2 3 4 C) 1 5 4 7 D) 1 3 5 7 23.以下程序的输出结果是( )。 main() {int n,a[10]; for(n=0;n<=9;n++) a[n]=n;
for(n=9;n>=0;n--) printf(“%d”,a[n]); }
A) 1 2 3 4 5 6 7 8 9 10 B) 9 8 7 6 5 4 3 2 1 0 C) 10 9 8 7 6 5 4 3 2 1 D) 0 1 2 3 4 5 6 7 8 9 24.若输入aefjhi、c、adfjhijk,以下程序的输出结果为( )。 #include #include main() {int i;char string[20],str[3][20]; for(i=0;i<3;i++) gets(str[i]);
if(strcmp(str[0],str[1])>0) strcpy(string,str[0]); else strcpy(string,str[1]);
if(strcmp(str[2],string)>0) strcpy(string,str[2]); printf(“The largest string is\\n%s\\n”,string); }
A) adfjhi B) c C) aefjhijk D) aefjhi 25.以下程序的输出结果是( )。 #include #include main(){char str[12]={‟s‟,‟t‟,‟r‟,‟i‟,‟n‟,‟g‟}; printf(“%d\\n”,strlen(str)); }
A) 6 B) 7 C) 11 D) 12 26.有以下程序: #include #define N 6 main() {char c[N];int i=0;
for(;i输入以下三行,每行输入都是在第一列上开始,代表一个回车符: a b cdef程序的输出结果是( )。c[i]={'a','\\0','b','\\0','c','d'} A) abcdef B) a C) a D) a
b b b
c cd d d cdef e f
27.设有:char str[ ]=“Beijing”; 则执行:printf(“%d\\n”, strlen(strcpy(str, “China”)));后输出的结果为( )。\"china\"copy to str with '\\0',it will stop when the strlen meets with '\\0'. A) 5 B) 7 C) 12 D) 14 28.请选出以下程序的输出结果( )。 #include main(){char s1[10],s2[10],s3[10],s4[10]; scanf(“%s%s”,s1,s2);gets(s3);gets(s4); puts(s1);puts(s2);puts(s3);puts(s4); }
输入数据如下:(此处代表回车符) aaaa bbbb cccc ddddA) aaaa B) aaaa C) aaaa D) aaaa bbbb bbbb bbbb bbbb cccc cccc cccc dddd dddd cccc dddd dddd eeee 29.请读程序: main()
{int n[2],i,j,k;
for(i=0;i<2;i++) n[i]=0; k=2;
for(i=0;ifor(j=0;j上面程序的输出结果是( )。A) 不确定的值 B) 3 C) 2 D) 1
30.请读程序片段(字符串内没有空格字符):printf(“%d\\n”,strlen(“ATS\\n012\\1\\\\”));其输出结果应为( )。
A) 11 B) 10 C) 9 D) 12 31.下述对C语言字符数组的描述中错误的是( )。 A) 字符数组可以存放字符串
B) 字符数组中的字符串可以整体输入、输出
C) 可以在赋值语句中通过赋值运算符“=”对字符数组整体赋值 D) 不可以用关系运算符对字符数组中的字符串进行比较 32.阅读下列程序: main() {int n[3],i,j,k; for(i=0;i<3;i++) n[i]=0; k=2;
for(i=0;i上述程序运行后,输出的结果是( )。A) 2 B) 1 C) 0 D) 3 33.以下程序的输出结果是( )。 main() {int n[3][3], i, j; for(i=0;i<3;i++)
for(j=0;j<3;j++) n[i][j]=i+j; for(i=0;i<2;i++)
for(j=0;j<2;j++) n[i+1][j+1]+=n[i][j]; printf(“%d\\n”, n[i][j]); }
A) 14 B) 0 C) 6 D) 值不确定 34.以下语句的输出结果为( )。 printf(“%d\\n”, strlen(“\\\”\\065\\xff\\n”));
A) 5 B) 14 C) 8 D) 输出项不合法,无正常输出 35.合法的数组定义是( )。
A) int a[]=”string”; B) int a[5]={0,1,2,3,4,5}; C) char a=”string”; D) char a[]={0,1,2,3,4,5}; 36.以下程序的输出结果是( )。
main()
{char w[ ][10]={\"ABCD\ for(k=1;k<3;k++) printf(\"%s\\n\}
A) ABCD B) ABCD C) EFG D) FGH FGH EFG JK KL KL IJ O M
37.函数调用strcat( strcpy(str1,str2), str3 )的功能是( )。 A) 将串str1复制到串str2中后再连接到串str3之后 B) 将串str1连接到串str2之后再复制到串str3之后
C) 将串str2复制到串str1中后再将串str3连接到串str1之后 D) 将串str2连接到串str1之后再将串str1复制到串str3之后 38.有以下定义: char x[ ]=“abcdefg”;
char y[ ]={„a‟, „b‟, „c‟, „d‟, „e‟, „f‟, „g‟}; 则正确的叙述为( )。
A) 数组x和数组y等价 B) 数组x和数组y的长度相同 C) 数组x的长度大于数组y的长度 D) 数组x的长度小余数组y的长度 39.下面程序的运行结果是( )。 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\}
A) 12ba56 B) 6521 C) 6 D) 62 40.以下程序运行后,输出结果是( )。 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\printf(“\\n”); }
A) 10000 B) 10010 C) 00110 D) 10100 41.以下程序的输出结果是( )。 main()
{int n[5]={0,0,0}, i, k=2; for(i=0; iA) 不确定的值 B) 2 C) 1 D) 042.若有定义和语句:char s[10];s=”abcd”;printf(“%s\\n”,s);则输出结果是( )。 A) abcd B) a C) abc D) 编译通不过 二 填空题
1.下面程序的功能是:将字符数组a中下标值为偶数的元素从小到大排列,其它元素不变。请填空。
#include #include main(){char a[ ]=\"clanguage\ int i, j, k; k=strlen(a);
for(i=0; i<=k-2; i+=2)
for(j=i+2; ja[i] ) { t=a[i]; a[i]=a[j]; a[j]=t; } puts(a); printf(\"\\n\"); }2.若有定义语句:char s[100],d[100]; int j=0, i=0;,且s中已赋字符串,请填空以实现字符串拷贝。(注:不得使用逗号表达式) while(s[i]){ d[j]= s[i++] ;j++;} d[j]=0;
3.下列程序段的输出结果是 Hello 。 main()
{ char b[]=\"Hello,you\"; b[5]=0; printf(\"%s\\n\}
4.若想通过以下输入语句使a中存放字符串1234,b中存放字符5,则输入数据的形式应该是 a=1234 b=5 。 char a[10], b;
scanf(“a=%s b=%c”, a, &b);
5.以下程序可以把从键盘上输入的十进制数(long型)以二到十六进制数的形式输出,请填空。 main()
{int b[16]={„0‟, „1‟, „2‟, „3‟, „4‟, „5‟, „6‟, „7‟, „8‟, „9‟, „A‟, „B‟, „C‟, „D‟, „E‟, „F‟}; int c[], d, i=0, base; long n;
printf(“Enter a number:\\n”); scanf(“%ld”, &n); printf(“Enter new base:\\n”); scanf(“%d”, &base);
do
{c[i]= n%base ; i++; n=n/base; }while(n!=0);
printf(“Transmite new base:\\n”); for(--i;i>=0;--i) {d=c[i];
printf(\"%c\ ); } }
6.以下程序用来对从键盘上输入的两个字符串进行比较,然后输出两个字符串中的第一个不相同字符的ASCII码之差。例如:输入的两个字符串分别为abcdefg和abceef,则输出为-1。请填空。 main()
{char str1[100], str2[100], c; int i, s;
printf(“\\n Input string 1:\\n”); gets(str1); printf(“\\n Input string 2:\\n”); gets(str2); i=0;
while((str1[i]= =str2[i])&&(str1[i]!= ' \\0 ' )) i++;
s= str1[i]-str2[i] ; printf(\"%d\\n\}
7.以下语句的输出结果是 2 。 printf(“%d\\n”, strlen(“\\\”\\085\\xff\\n”)); 8.对数组中的元素值进行排序: main()
{int a[ ]={2,4,15,3,17,5,8,23,9,7,11,13}, i, j, k; for(k=0;k<12;k++) for(i=k;i<12;i++) if(a[i]> a[k] ) {j=a[i];
a[i]= a[k] ; a[k] =j; }
for(i=0;i<12;i++) printf(“%4d”, a[i]); }
9.由25人围坐成圆圈,先从任意一人出发用1到25顺时针依次编号,然后从1号开始顺时针报数(1、2、3、„„),凡报5的倍数者出圈,剩下者继续报数,求出最后出圈者的编号。 #includeVoid main() {int a[26], j, n, count; for(j=1;j<=25;j++) a[j]=j; j=1;count=0;n= 0 ; do {if(a[j]!=0) {n++; if(n%5= =0)
{ a[j]=0 ; if(count= =24) printf(“%d\\n”, j); count++; } } j++;
if(j>25) j=1; }
while( count<25 ); }
10.阅读下列程序: main()
{int i, j, row, column, m;
int array[3][3]={{100, 200, 300}, {28, 72, -30}, {-850, 2, 6}}; m=array[0][0]; for(i=0; i<3; i++) for(j=0; j<3; j++) if(array[i][j]{m=array[i][j]; row=i; column=j;} printf(\"%d, %d, %d\\n\}上述程序的输出结果是 -850,2,0 。
11.以下程序的功能是:从键盘上输入若干个学生的成绩,计算出平均成绩,并输出低于平均分的学生成绩,用输入负数结束输入。请填空。 main()
{float x[1000], sum=0.0, ave, a; int i, n=0;
printf(“Enter mark:\\n”); scanf(“%f”, &a); while(a>=0.0&&n<1000)
{sum+= a ; x[n]= a ; n++; scanf(“%f”, &a);} ave= sum/n ; printf(“Output:\\n”); printf(“ave=%f\\n”, ave); for(i=0;iif( ave>a[i] ) printf(“%f\\n”, x[i]); }第八章 函 数
一 单项选择题
1.以下程序的输出结果是( )。 int d=1; fun(int p) {static int d=5; d+=p;
printf(\"%d \",d); return(d); } main( )
{ int a=3; printf(\"%d\\n\",fun(a+fun(d)));}
A) 6 9 9 B) 6 6 9 C) 6 15 15 D) 6 6 15 2.下列程序执行后的输出结果是( )。 void func1(int i); void func2(int i); char st[ ]=\"hello,friend!\"; void func1(int i) {printf(\"%c\ if(i<3){i+=2;func2(i);} }
void func2(int i) {printf(\"%c\ if(i<3){i+=2;func1(i);} } main()
{int i=0; func1(i); printf(\"\\n\");}
A) hello B) hel C) hlo D) hlm
3.在调用函数时,如果实参是简单变量,它与对应形参之间的数据传递方式是(A) 地址传递 B) 单向值传递
C) 由实参传给形参,再由形参传回实参 D) 传递方式由用户指定 4.以下函数值的类型是( )。 fun( float x ) {float y; y=3*x-4; return y; }
A) int B) 不确定 C) void D) float 5.设有以下函数: f( int a)
)。 {int b=0; static int c=3; b++; c++; return(a+b+c); }
如果在下面的程序中调用该函数,则输出结果是( )。 main() {int a=2, i;
for(i=0;i<3;i++) printf(\"%d\\n\}
A) 7 B) 7 C) 7 D) 7 8 9 10 7 9 11 13 7 6.以下程序的输出结果是( )。 int a, b; void fun() {a=100; b=200;} main() {int a=5, b=7; fun();
printf(\"%d%d\\n\}
A) 100200 B) 57 C) 200100 D) 75 7.以下所列的各函数首部中,正确的是( )。 A) void play(var a: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) 8.以下程序的输出结果是( )。 fun(int x, int y, int z) {z=x*x+y*y; } main() {int a=31; fun(5, 2, a); printf(\"%d\}
A) 0 B) 29 C) 31 D) 无定值}
9.当调用函数时,实参是一个数组名,则实参向形参传递的是( A) 数组的长度 B) 数组的首地址 C) 数组每一个元素的地址 D) 数组每个元素中的值
。 ) 10.以下程序的输出结果是( )。 long fun( int n) {long s;
if(n= =1 || n= =2) s=2; else s=n-fun(n-1); return s; } main()
{printf(\"%ld\\n\
A) 1 B) 2 C) 3 D) 4 11.有如下函数调用语句: func(rec1, rec2+rec3, (rec4, rec5));
在该函数调用语句中,含有的实参个数是( )。
A) 3 B) 4 C) 5 D) 有语法错12.有如下程序: 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); }
该程序的输出的结果是( )。
A) 12 B) 13 C) 14 D) 15 13.以下程序的输出结果是( )。 long fib(int n)
{if(n>2) return(fib(n-1)+fib(n-2)); else return(2); } main( )
{printf(“%ld\\n”,fib(3));}
A) 2 B) 4 C) 6 D) 8 14.在C语言中,变量的隐含存储类别是( )。
A) auto B) static C) extern 15.在下列的函数调用中,不正确的是( )。 A) max(a,b); B) max(3,a+b); C) max(3,5); D) int max(a,b); 16.以下程序的输出结果是( )。 func(int x, int y) {int z;
D) 无存储类别 z=x+y; return z; } main( )
{int a=10, b=20, c=30, s; s=func((a--, b++, a+b), c--); printf(“%d\\n”, s); }
A) 30 B) 40 C) 60 D) 50 17.现有以下程序: #include inverse(char str[ ]) {char t; int i, j;for(i=0, j=strlen(str); i如果输入an anple,该程序的输出结果是( )。A) an anple B) elpna na C) an D) na 18.在下列叙述中,正确的一条是( )。 A) puts和gets函数只能输入或输出一个字符串 B) 在C语言中,函数可以递归调用或递归定义
C) 用scanf函数输入数据时可以规定精度,例如scanf(“%7.2f”,&a); D) 外部变量只限于本文件中使用 19.以下程序的输出结果是( )。 power(int x, int n) {int p;
if(n>0) p=power(x, n-1)*x; else p=1; return (p); } main( ) {int x=2, n=3;
printf(“%d\\n”, power(x, n)); }
A) 5 B) 6 C) 8 D) 9 20.在C语言的函数中( )。
A) 必须有形参 B) 形参必须是变量名 C) 可以有也可以没有形参 D) 数组名不能作形参 21.当输入a1b2c3d4e时,以下程序的输出结果为( )。 #include main( ) {char str[40];printf(“请输入含有四个数字字符的字符串:\\n”); scanf(“%s”,str); insert(str); }
insert(char str[ ]) {int i;
for(i=strlen(str);i>0;i--) {str[2*i]=str[i]; str[2*i-1]= „ ‟; }
printf(“\\n结果是:%s”, str); }
A) a 1 b 2 c 3 d 4 e B) 1 2 3 4
C) a 1 b 2 D) 因输入错误,程序出错 22.在下列叙述中,错误的一条是( )。
A) 主函数main中定义的变量在整个文件或程序中有效 B) 不同函数中,可以使用相同名字的变量 C) 函数中的形式参数是局部变量
D) 在一个函数内部,可在复合语句中定义变量,这些变量只在本复合语句中有效 23.以下程序的输出结果是( )。 #include main( ) {int i;for(i=0; i<2; i++) as ( ); } as( ) {int lv=0; static int sv=0;
printf(“lv=%d, sv=%d”, lv, sv); lv++;
sv++; }
A) lv=0,sv=0,lv=0,sv=1 B) lv=0,sv=0,lv=1,sv=1 C) lv=0,sv=0,lv=0,sv=0 D) lv=0,sv=1,lv=0,sv=1 24.在下列叙述中,错误的一条是( )。
A) 全局变量存放在静态存储区中,在程序开始执行时就给全局变量分配存储区,程序执行完才释放
B) 在有参函数中,形参在整个程序一开始执行时便分配内存单元
C) 用数组名作函数实参和形参时,应在主调函数和被调用函数中分别定义数组
D) 在同一个源文件中,全局变量与局部变量同名时,在局部变量的作用范围内,全局变量不起作用
25.在下列语句中,不正确的是( )。
A) c=2*max(a,b); B) m=max(a,max(b,c));
C) printf(“%d”,max(a,b)); D) int max(int x,int max(int y,int z)); 26.若输入1.5、2.5,以下程序的输出结果为( )。 main( )
{int max(float x, float y); float a, b; int c;
scanf(“%f, %f” , &a, &b); c=max(a, b); printf(“%d”, c); }
max(float x, float y) {float z; z=x>y ? x : y; return(z); }
A) 1 B) 2.5 C) 2 D) 3 27.下列程序结构中,正确的是( )。 A) main() {float a,b,c;
scanf(“%f,%f”,&a,&b); c=add(a,b); „ }
int add(float x,float y) { „ } B) main() {float a,b,c;
scanf(“%f,%f”,&a,&b);
c=add(a,b); „ }
float add(float x,float y) { „ } C) float add(); main() {float a,b,c;
scanf(“%f,%f”,&a,&b); c=add(a,b); „ }
float add(float x,float y) { „ }
D) float add(float x,float y) { „ } main() {float a,b,c;
scanf(“%f,%f”,&a,&b); c=add(a,b); „ }
28.在下列叙述中,错误的一条是( )。 A) scanf函数可以用来输入任何类型的多个数据 B) 数组名作函数参数时,也采用“值传递”方式 C) 如果形参发生改变,不会改变主调函数的实参值 D) 函数的实参与形参的类型应一致 29.以下程序的输出结果是( )。 main() {int i=1,j=3; printf(“%d”,i++); {int i=0; i+=j*2;
printf(“%d,%d”,i,j); }
printf(“%d,%d\\n”,i,j); }
A) 1,6,3,1,3 B) 1,6,3,2,3 C) 1,6,3,6,3 30.C语言中形参的缺省存储类别是( )。 A) 自动(auto) B) 静态(static) C) 寄存器(register) D) 外部(extern) 31.设有如下函数:
D) 1,7,3,2,3 ggg(float x)
{printf(“\\n%d”, x*x);} 则函数的类型为( )。
A) 与参数x的类型相同 B) void C) int D) 无法确定 32.C语言规定,程序中各函数之间( ) A) 既允许直接递归调用也允许间接递归调用 B) 不允许直接递归调用也不允许间接递归调用 C) 允许直接递归调用不允许间接递归调用 D) 不允许直接递归调用允许间接递归调用 33.下面程序的输出结果是( )。 main() {int i=2,p; p=f(i,i+1); printf(“%d”,p); }
int f(int a,int b) {int c; c=a;
if(a>b) c=1; else
if(a==b) c=0; else c=-1; return(c); }
A) -1 B) 0 C) 1 34.以下程序的输出结果为( )。 f(int b[ ], int n) {int i, r; r=1;
for(i=0; i<=n; i++) r=r*b[i]; return(r); } main()
{int x, a[ ]={2,3,4,5,6,7,8,9}; x=f(a, 3); printf(“%d\\n”, x); }
A) 720 B) 120 C) 24 35.下列程序执行后的输出结果是( )。 f(int a)
D) 2 D) 6 {int b=0; static c=3; a=c++, b++; return(a); } main( ) {int a=2, i, k; for(i=0;i<2;i++) k=f(a++); printf(“%d\\n”, k); }
A) 3 B) 0 C) 5 D) 4 36.下列程序执行后输出的结果是( )。 int d=1; fun(int p) {int d=5; d+=p++; printf(“%d”, d); } main( ) {int a=3; fun(a); d+=a++; printf(“%d\\n”, d); }
A) 84 B) 96 C) 94 D) 85 37.以下程序的输出结果是( )。 fun(int k) {if(k>0) fun(k-1); printf(“%d”, k); } main( ) {int w=5; fun(w); }
A) 54321 B) 012345 C) 12345 D) 543210 38.以下说法中正确的是( )。
A) C语言程序总是从第一个定义的函数开始执行
B) 在C语言程序中,被调用的函数必须在main()函数中定义 C) C语言程序总是从main()函数开始执行
D) C语言程序中的main()函数必须放在程序的开始部分
39.以下程序的输出结果是( )。 int abc(int u, int v); main()
{int a=24, b=16, c; c=abc (a, b); printf(“%d\\n”, c); }
int abc(int u, int v) {int w; while(v)
{w= u%v; u=v; v=w;} return u; }
A) 6 B) 7 C) 8 D) 9 二 填空题
1.下列程序的输出结果是 5 6 。 int t(int x, int y, int cp, int dp) {cp=x*x+y*y; dp=x*x-y*y; } main( )
{int a=4, b=3, c=5, d=6; t(a, b, c, d);
printf(\"%d %d\\n\; }
2.以下程序的运行结果是 8,17 。 #include main(){int k=4, m=1, p;
p=func(k, m); printf(\"%d,\ p=func(k, m); printf(\"%d\\n\}
func(int a, int b) {static int m=0, i=2; i+=m+1; m=i+a+b; return m; }
3.以下程序输出的最后一个值是 120 。 int ff(int n) {static int f=l; f=f*n;
return f; } main() {int i;
for(i=1;i<=5;i++) printf(\"%d\\n\}
4.以下函数的功能是:求x的y次方,请填空。 double fun(double x, int y) {int i; double z;
for(i=1, z=x; i5.若变量n中的值为24,则prnt函数共输出 5 行,最后一行有 4 个数。 void prnt(int n, int aa[ ]) {int i;for(i=1; i<=n; i++) {printf(\"%6d\ if(!(i%5)) printf(\"\\n\"); } printf(\"\\n\"); }
6.以下程序中,主函数调用了LineMax函数,实现在N行M列的二维数组中,找出每一行上的最大值。请填空。 #define N 3 #define M 4
void LineMax(int x[N][M]) {int i, j, p; for(i=0; ifor(j=1; jif(x[i][p]{int x[N][M]={1,5,7,4,2,6,4,3,8,2,3,1}; LineMax(x) }7.函数pi的功能是根据以下近似公式求π值: (π*π)/6=1+1/(2*2)+1/(3*3)+ „ +1/(n*n)
请在下面的函数中填空,完成求π的功能。 #include “math.h” double pi(long n) {double s=0.0; long i;
for(i=1;i<=n; i++) s=s+ 1.0/i*i ; return(sqrt(6*s)); }
8.设在主函数中有以下定义和函数调用语句,且fun函数为void类型;请写出fun函数的首部 void fun( double b[10][22]) 。要求形参名为b。 main()
{double s[10][22]; int n; „ fun(s); „ }
9.输入12时,程序输出结果为 12 is not prime number. ;若输入17,输出结果为 17 is prime number. 。 main() {int number;
scanf(“%d”, &number);
if(prime(number)) printf(“\\n%d is prime number.”, number); else printf(“\\n%d is not prime number.”, number); }
int prime(int number) {int flag=1, n;
for(n=2; n10.理解下面的程序,填空完善程序。 main() {int a, b, c;scanf(“%d %d”, &a,%b ); c= max (a, b); printf(“a=%d b=%d max=%d\\n”, a, b, c); }
int max(x, y) int x,int y ; {int z;
if(x>y) z=x; else z=y;
return z ; }
11.下面程序的输出结果是 2,5,1,2,3,-2 。 main()
{int a=3, b=2, c=1; c-=++b; b*=a+c; {int b=5, c=12; c/=b*2; a-=c;
printf(“%d, %d, %d,”, a, b, c); a+=--c; }
printf(“%d, %d, %d”, a, b, c); }
12.下面的findmax函数返回数组s中值为最大的元素的下标,数组中元素的个数由t传人,请填空。
findmax(int s[ ], int t) {int k, p;
for(p=0, k=p; ps[k]) p=k ; return k; }13.下面程序的输出结果是 7 。 fun(int x) {int p;
if(x= =0||x= =1) return(3); p=x-fun(x-2); return p; } main()
{printf(“%d\\n”, fun(9));}
14.函数fun的功能是:使一个字符串按逆序存放,请填空。 void fun(char str[ ]) {char m; int i, j;
for(i=0, j=strlen(str); i< strlen(str) ; i++, j--) {m=str[i];
str[i]= str[j-1] ; str[j-1]=m; }
printf(“%s\\n”, str); }
第九章 预处理命令
一 单项选择题
1.以下说法中正确的是( )。
A) #define和printf都是C语句 C) printf是C语句,但#define不是 2.以下程序的输出结果是( )。 #define f(x) x*x main( )
{int a=6, b=2, c; c=f(a)/f(b); printf(\"%d\\n\; }
A) 9 B) 6 C) 36 3.下列程序执行后的输出结果是( )。#define MA(x) x*(x-1) main()
{int a=1, b=2; printf(\"%d\\n\
A) 6 B) 8 C) 10 4.以下程序的输出结果是( )。 #define M(x, y, z) x*y+z main()
{int a=1, b=2, c=3;
printf(\"%d\\n\}
A) 19 B) 17 C) 15 5.以下程序的输出结果是( )。 #define SQR(X) X*X main()
{int a=16, k=2, m=1; a/=SQR(k+m)/SQR(k+m); printf(\"%d\\n\}
A) 16 B) 2 C) 9 6.有如下程序:
B) #define是C语句,而printf不是 D) #define和printf都不是C语句 D) 18 D) 12 D) 12 D) 1 #define N 2 #define M N+1 #define NUM 2*M+1 main() {int i;
for(i=1; i<=NUM; i++) printf(“%d\\n”, i); }《 M=3,NUM=6》
该程序中的for循环执行的次数是( )。
A) 5 B) 6 C) 7 D) 8 7.以下程序的输出结果是( )。 #include#define MIN(x, y) (x)< (y)?(x):(y) main() {int a, b, c; a=20;b=10; c=5*MIN(a, b); printf(“%d\\n”, c); }
A) 20 B) 200 C) 10 8.在下列叙述中,正确的是( )。 A) 下面的程序有一个整型输出值: main() {int a; a=pp();
printf(“%d”,a); }
void pp() { „ }
B) 以下程序的运行结果为1,3,5,7 main()
{static int a[4]={1,3,5,7}; printf(“%d,%d,%d,%d\\n”,a); }
C) 以下两个语句是等价的
for(;(c=getchar())!=„\\n‟;printf(“%c\\n”, c)); for(;(c=getchar())!=„\\n‟;) printf(“%c\\n”, c); D) 以下程序中的PRINT()是一个函数 #define PRINT(V) printf(“V=%d\”, V) main() {int a,b; a=1; b=2;
D) 50 PRINT(a); PRINT(b); }
9.在下列#include命令中,正确的一条是( )。 A) #include[string.h] B) #include{math.h} C) #include(stdio.h) D) #include10.宏定义#define PI 3.1415926的作用是:指定用标识符PI来代替一个( )。 A) 单精度数 B) 字符串 C) 双精度数 D) 整数
11.如果在用户的程序中要使用C库函数中的数学函数时,应在该源文件中使用的include命令是( )。
A) #include B) #include C) #include D) #include 12.若输入60和13,以下程序的输出结果是( )。 #define SURPLUS(a,b) ((a)%(b)) main() {int a,b;scanf(“%d,%d”,&a,&b); printf(“%d\\n”,SURPLUS(a,b)); }
A) 60 B) 13 C) 73 D) 8
13.如果文件1包含文件2,文件2中要用到文件3的内容,而文件3中要用到文件4的内容,则可在文件1中用三个#include命令分别包含文件2、文件3和文件4。在下列关于这几个文件包含顺序的叙述中,正确的一条是( )。
A) 文件4应出现在文件3之前,文件3应出现在文件2之前 B) 文件2应出现在文件3之前,文件3应出现在文件4之前 C) 文件3应出现在文件2之前,文件2应出现在文件4之前 D) 出现的先后顺序可以任意
14.在下面四个程序中,输出结果与其它三个不同的是( )。 A) #define MAX(a,b) ((a)>(b)?(a):(b)) main() {int a,b,c;
scanf(“%d,%d,%d”,&a,&b,&c); printf(“%d\\n”,MAX(MAX(a,b),c)); } B) main() {int a,b,c;
scanf(“%d,%d,%d”,&a,&b,&c); printf(“%d\\n”,max(a,b,c)); }
max(int x,int y,int z) {int t;
t=(x>y?x:y); return(t>z?t:z); } C) main()
{int a,b,c,max;
scanf(“%d,%d,%d”,&a,&b,&c); if(a>b>c) max=a; if(b>c>a) max=b; if(c>a>b) max=c; printf(“%d\\n”,max); } D) main()
{int a,b,c,max;
scanf(“%d,%d,%d”,&a,&b,&c); max=a>b?a:b; if(c>max) max=c; printf(“%d\\n”,max); }
15.以下for语句构成的循环执行了( )次。 #define N 2 #define M N+1
#define NUM (M+1)*M/2 main() {int i, n=0;
for(i=1; i<=NUM; i++) {n++;
printf(“%d”, n); }
printf(“\\n”); }
A) 4 B) 6 C) 8 D) 9 16.以下程序的输出结果是( )。 #include #define FUDGE(y) 2.84+y #define PR(a) printf(“%d”, (int)(a)) #define PRINT1(a) PR(a); putchar(„\\n‟) main() {int x=2;PRINT1(FUDGE(5)*x); }
A) 11 B) 12 C) 13 D) 15 17.以下程序的输出结果是( )。 #define SUB(x, y) (x)*y
main() {int a=3, b=4;
printf(“%d\\n”, SUB(a++, b++)); }
A) 12 B) 15 C) 16 D) 20 18.设有以下宏定义: #define N 3
#define Y(n) ((N+1)*n)
则执行语句:z=2*(N+Y(5+1));后,z的值为( )。 A) 出错 B) 42 C) 48 D) 54 二 填空题
1.以下程序的输出结果是 7 。 #define MAX(x, y) (x)>(y)?(x):(y) main()
{int a=5, b=2, c=3, d=3, t; t=MAX(a+b, c+d)*10; printf(“%d\\n”, t); }
2.以下程序的输出结果为 10.000000 。 #include #include#define POWER(x, y) pow(x, y)*y #define ONE 1
#define SELEVE_ADD(x) ++x main() {int x=2;
printf(“%f\\n”, POWER(SELEVE_ADD(x), ONE+1)); }
3.填空补充以下程序: #define PRICE 30 main()
{ int num ,total ; num=0;
total=num*PRICE;
printf(“total=%d, num=%d\\n”, total,num ); }
4.下面程序的输出结果是 5 。 #define CIR(r) r*r main() {int a=1, b=2, t; t=CIR(a+b); printf(“%d\\n”, t);
}
第十章 指 针
一 单项选择题
1.以下程序的输出结果是( )。 main( )
{char a[10]={'1','2','3','4','5','6','7','8','9',0},*p; int i; i=8; p=a+i;
printf(\"%s\\n\",p-3); }
A) 6 B) 67 C) ‘6’ D) 7 2.以下程序的运行结果是( )。 #include \"stdio.h\" main( )
{int a[ ]={1,2,3,4,5,6,7,8,9,10,11,12}; int *p=a+5,*q=NULL; *q=*(p+5);
printf(\"%d %d\\n\; }
A) 运行后报错 B) 6 6 C) 6 11 D) 5 5
3.若有以下的说明和语句,则在执行for语句后,*(*(pt+l)+2)表示的数组元素是( )。 int t[3][3],*pt[3],k;
for(k=0; k<3; k++) pt[k]=&t[k][0];
A) t[2][0] B) t[2][2] C) t[l][2] D) t[2][l]
4.下面程序把数组元素中的最大值放入a[0]中,则在if语句中的条件表达式应该是( )。 main( )
{int a[10]={6,7,2,9,1,10,5,8,4,3}, *p=a, i; for(i=0; i<10; i++, p++) if(________) *a=*p; printf(\"%d\",*a); }
A) p>a B) *p>a[0] C) *p>*a[0] D) *p[0]> *a[0] 5.以下程序的输出结果是( )。 #include #include main( ){char *a=\"abcdefghi\"; int k;
fun (a); puts(a);
}
fun(char *s) {int x, y; char c;
for(x=0, y=strlen(s)-1; xA) ihgfedcba B) abcdefghi C) abcdedeba D) ihgfefghi 6.以下程序的输出结果是( )。 main( ){char *s=\"12134211\";int v[4]={0,0,0,0},k,i; for(k=0;s[k];k++) {switch(s[k]) {case '1':i=0; case '2':i=1; case '3':i=2; case '4':i=3; } v[i]++; }
for(k=0;k<4;k++) printf(\"%d \",v[k]); }
A) 4 2 1 1 B) 0 0 0 8 C) 4 6 7 8 D) 8 8 8 8 7.以下程序的输出结果是( )。 #include main( ){char *p1,*p2,str[50]=\"ABCDEFG\"; p1=\"abcd\";p2=\"efgh\";
strcpy(str+1,p2+1);strcpy(str+3,p1+3);
printf(\"%s\",str);str+1表示数组第二个数据B,p2+1指向f,即把fgh复制到BCD的位置,同时复制‘\\0’ }
A) AfghdEFG B) Abfhd C) Afghd D) Afgd 8.若有以下定义和语句: double r=99,*p=&r; *p=r;
则以下正确的叙述是( )。
A) 以上两处的*p含义相同,都说明给指针变量p赋值
B) 在\"double r=99,*p=&r; \"中,把r的地址赋给了p所指的存储单元 C) 语句\"*p=r; \"把变量r的值赋给指针变量p D) 语句\"*p=r; \"取变量r的值放回r中 9.若已定义:
int a[ ]={0,1,2,3,4,5,6,7,8,9}, *p=a, i;
其中0≤ i ≤9, 则对a数组元素不正确的引用是( )。
A) a[p-a] B) *(&a[i]) C) p[i] D) *(*(a+i))=*a[i] 10.下列程序执行后的输出结果是( )。 void func(int *a, int b[ ]) {b[0]=*a+6;} main() {int a, b[5]; a=0; b[0]=3; func(&a, b); printf(\"%d\\n\}
A) 6 B) 3 C) 8 D) 9 11.下列程序执行后的输出结果是( )。 main()
{int a[3][3], *p, i; p=&a[0][0];
for(i=0; i<9; i++) p[i]=i+1; printf(\"%d\\n\}
A) 3 B) 6 C) 9 D) 随机数 12.请选出正确的程序段( )。
A) int *p; B) int *s, k; C) int *s, k; D) int *s, k; scanf(\"%d\ *s=100; char *p, c; char *p, c; s=&k; s=&k; p=&c; p=&c; *p='a'; s=p; *s=1; 13.已知指针p的指向如下图所示,则执行语句 *- -p; 后*p的值是( )。 a[0] a[1] a[2] a[3] a[4] 10 20 30 40 50 p A) 30 B) 20 C) 19 D) 29
14.设已有定义: char *st=\"how are you\";下列程序段中正确的是( )。 A) char a[11], *p; strcpy(p=a+1, &st[4]); B) char a[11]; strcpy(++a, st); C) char a[11]; strcpy(a, st); D) char a[ ], *p; strcpy(p=&a[1], st+2); 15.以下程序的输出结果是( )。 main( )
{int i, x[3][3]={9, 8, 7, 6, 5, 4, 3, 2, 1}, *p=&x[1][1];
for(i=0; i<4; i+=2) printf(\"%d \}
A) 5 2 B) 5 1 C) 5 3 D) 9 7
16.若有说明:int i, j=2,*p=&i;,则能完成i=j赋值功能的语句是( )。 A) i=*p; B) *p=*&j; C) i=&j; D) i=**p; 17.以下定义语句中,错误的是( )。 A) int a[ ]={1,2}; B) char *a[3]; C) char s[10]=\"test\"; D) int n=5,a[n]; 18.下列程序段的输出结果是( )。 void fun(int *x, int *y)
{printf(\"%d %d\main() {int x=1,y=2; fun(&y, &x); printf(\"%d %d\}
A) 2 1 4 3 B) 1 2 1 2 C) 1 2 3 4 19.下列程序的输出结果是( )。 main()
{char a[10]={9,8,7,6,5,4,3,2,1,0},*p=a+5; printf(\"%d\}
A) 非法 B) a[4]的地址 C) 5 20.下列程序的运行结果是( )。 void fun(int *a, int *b) {int *k; k=a; a=b; b=k; } main()
{int a=3, b=6, *x=&a, *y=&b; fun(x, y);
printf(\"%d %d\}
A) 6 3 B) 3 6 C) 编译出错 21.下面程序的输出结果是( )。 main()
{int a[ ]={1,2,3,4,5,6,7,8,9,0},*p; p=a;
printf(\"%d\\n\}
D) 2 1 1 2 D) 3 D) 0 0 A) 0 B) 1 C) 10 D) 9
22.假定以下程序经编译和连接后生成可执行文件PROG . EXE,如果在此可执行文件所在目录的DOS提示符下键入:PROG ABCD EFGH IJKL<回车>,则输出结果为( )。 main( int argc, char *argv[ ])
{while(--argc>0) printf(\"%s\ printf(\"\\n\"); }
A) ABCDEFGH B) IJHL C) ABCDEFGHIJKL D) IJKLEFGHABCD 23.对于基类型相同的两个指针变量之间,不能进行的运算是( )。 A) < B) = C) + D) - 24.有以下函数: char * fun (char *p) {return p;}
该函数的返回值是( )。
A) 无确切的值 B) 形参p中存放的地址值 C) 一个临时存储单元的地址 D) 形参p自身的地址值 25.若有以下说明和定义 fun(int *c){„} main()
{int (*a)()=fun,*b(),w[10],c; ┆ }
在必要的赋值之后,对fun函数的正确调用语句是( )。
A) a=a(w); B) (*a)(&c); C) b=*b(w); D) fun (b); 26.有如下说明
int a[10]={1,2,3,4,5,6,7,8,9,10},*p=a; 则数值为9的表达式是( )。
A) *p+9 B) *(p+8) C) *p+=9 D) p+8 27.有如下程序: main()
{char ch[2][5]={“6937”,“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’;j+=2) s=10*s+p[i][j]-‘0’; printf(“%d\\n”,s); }
该程序的输出结果是( )。
A) 69825 B 63825 C) 6385 D) 693825
28.若有以下定义和语句: char *s1=“12345”,*s2=“1234”; printf(“%d\\n”, strlen(strcpy (s1, s2))); 则输出结果是( )。
A) 4 B) 5 C) 9 D) 10 29.下面程序的输出结果是( )。 main( ) {char *s=“121”; 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(“k=%d a=%d b=%d\\n”, k, a, b); }
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 30.若有以下的定义:
int a[ ]={1, 2, 3, 4, 5, 6, 7, 8, 9, 10}, *p=a; 则值为3的表达式是( )。
A) p+=2,*(p++) B) p+=2,*++p C) p+=3,*p++ D) p+=2,++*p 31.以下程序的输出结果是( )。 #includesub1(char a, char b) {char c; c=a; a=b; b=c;} sub2(char *a, char b) {char c; c=*a; *a=b; b=c;} sub3(char *a, char *b) {char c; c=*a; *a=*b; *b=c;} main() {char a, b;
a=„A‟; b=„B‟; sub3 (&a, &b); putchar(a); putchar(b); a=„A‟; b=„B‟; sub2 (&a, b); putchar(a); putchar(b); a=„A‟; b=„B‟; sub1 (a, b); putchar(a); putchar(b); }
A) BABBAB B) ABBBBA C) BABABA D) BAABBA
32.设p1和p2是指向同一个int型一维数组的指针变量,k为int型变量,则不能正确执行的语句是( )。
A) k=*p1+*p2; B) p2=k; C) p1=p2; D) k=*p1*(*p2); 33.设有如下定义:
int arr[ ]={6, 7, 8, 9, 10}; int *ptr;
则下列程序段的输出结果是( )。 ptr=arr; *(ptr+2)+=2;
printf(“%d, %d\\n”, *ptr, *(ptr+2));
A) 8,10 B) 6,8 C) 7,9 D) 6,10 34.以下程序的输出结果是( )。 main()
{char a[ ]=“programming”, b[ ]= “language”; char *p1, *p2; int i; p1=a; p2=b; for(i=0; i<7; i++)
if(*(p1+i)= =*(p2+i)) printf(“%c”, *(p1+i)); }
A) gm B) rg C) or D) ga 35.以下程序运行后,输出结果是( )。 main()
{char *s=“abcde”; s+=2;
printf(“%ld\\n”, s); }
A) cde B) 字符c的ASCII码值 C) 字符c的地址 36.以下程序运行后,如果从键盘上输入ABCDE<回车>,则输出结果为(#include #include func(char str[ ]) {int num=0;while(*(str+num)!=’\\0’) num++; return(num); } main()
{char str[10], *p=str; gets (p);
printf(“%d\\n”, func (p)); }
A) 8 B) 7 C) 6 D) 5 37.以下程序执行后,a的值是( )。 main()
{int a, k=4, m=6, *p1=&k, *p2=&m;
a=p1= =&m;(等于运算符==优先级高于赋值运算符=,即为a=(p1==&m)) D) 出错。 )
printf(“%d\\n”, a); }
A) 4 B) 1 C) 0 D) 运行时出错,a无定值 38.以下程序运行后,如果从键盘上输入: book<回车> book<空格><回车> 则输出结果是( )。 #include main(){char a1[80], a2[80], *s1=a1, *s2=a2; gets(s1); gets(s2);
if(!strcmp(s1, s2)) printf(“*”); else printf(“#”);
printf(“%d\\n”, strlen(strcat(s1, s2))); }
A) *8 B) #9 C) #6 D) *9 39.若有以下调用语句,则不正确的fun函数的首部是( )。 main() { „ int a[50], n; „
fun (n, &a[9]); „ }
A) void fun(int m,int x[ ]) B) void fun(int s,int h[41]) C) void fun(int p,int *s) D) void fun(int n,int a)
40.假定下列程序的可执行文件名为prg . exe,则在该程序所在的子目录下输入命令行: prg hello good<回车>后,程序的输出结果是( )。 main(int argc, char *argv[ ]) {int i;
if(argc<=0) return;
for(i=1; iA) hello good B) hg C) hel D) hellogood 41.以下程序的输出结果是( )。 main( ){char s[ ]=”ABCD”, *p;
for(p=s+1; pA) ABCD BCD CD D B) A B C D
C) B C D D) BCD CD D
42.若已定义:int a[9], *p=a; 并在以后的语句中未改变p的值,不能表示a[1]地址的表达式是( )。
A) p+1 B) a+1 C) a++ D) ++p 43.执行以下程序后,y的值是( )。 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(“%d\\n”, y); }
A) 17 B) 18 C) 19 D) 20 44.下列程序的输出结果是( )。 main( )
{int a[5]={2, 4, 6, 8, 10}, *p, **k; p=a; k=&p;
printf(“%d ”, *(p++)); printf(“%d\\n”, **k); }
A) 4 4 B) 2 2 C) 2 4 D) 4 6 45.下列程序的输出结果是( )。 #include main( ){char *p1,*p2,str[50]=\"xyz\"; p1=\"abcd\";p2=\"ABCD\"; strcpy(str+2, strcat(p1+2,p2+1)); printf(\"%s\",str); }
A) xyabcAB B) abcABz C) ABabcz 46.设有以下定义:
int a[4][3]={1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12}; int (*prt)[3]=a, *p=a[0];
则下列能够正确表示数组元素a[1][2]的表达式是( )。 A) *((*prt+1)[2]) B) *(*(p+5)) C) (*prt+1)+2 D) *(*(a+1)+2) 47.阅读程序: main( )
D) xycdBCD {int a[10]={1, 2, 3, 4, 5, 6, 7, 8, 9, 0}, *p; p=a;
printf(\"%x\\n\",p); printf(\"%x\\n\",p+9); }
该程序有两个printf语句,如果第一个printf语句输出的是194,则第二个printf语句的输出结果是( )。
A) 203 B) 204 C) 1a4 D) 1a6 48.以下程序的输出结果是( )。 #include #include void fun(char *w, int m) {char s, *p1, *p2; p1=w; p2=w+m-1; while(p1{s=*p1++; *p1=*p2--; *p2=s;} } main( ){char a[ ]=\"ABCDEFG\"; fun(a, strlen(a)); puts(a); }
A) GEFDCBA B) AGADAGA C) AGAAGAG 49.以下程序的输出结果是( )。 #include void fun(int *s) {static int j=0; dos[j]+=s[j+1]; while (++j<2); } main( )
{int k, a[10]={1, 2, 3, 4, 5}; for(k=1; k<3; k++) fun (a);
for(k=0; k<5; k++) printf (“%d”, a[k]); }
A) 34756 B) 23445 C) 35745 50.请读程序: #include char fun(char *c){if(*c<=„Z‟&&*c>=„A‟) *c-=„A‟-„a‟; return *c; }
D) GAGGAGA D) 12345 main( )
{char s[81], *p=s; gets (s); while(*p)
{*p=fun(p); putchar(*p); p++;} putchar(„\\n‟); }
若运行时从键盘上输入OPEN THE DOOR<回车>,则上面程序的输出结果为( )。 A) oPEN tHE dOOR B) open the door C) OPEN THE DOOR D) Open The Door 51.以下程序的输出结果是( )。 #include main( ){char *s1=\"AbCdEf\",*s2=\"aB\"; s1++;s2++;
printf(\"%d\\n\",strcmp(s1, s2)); }
A) 正数 B) 负数 C) 零 D) 不确定的值 52.下面各语句行中,能正确进行赋字符串操作的语句行是( )。 A) char st[4][5]={“ABCDE”}; B) char s[5]={„A‟, „B‟, „C‟, „D‟, „E‟}; C) char *s; s= “ABCDE”; D) char *s; scanf(“%s”,s); 53.以下程序的输出结果是( )。 fun(int *s, int n1, int n2) {int i, j, t; i=n1; j=n2; while(i{t=*(s+i); *(s+i)=*(s+j); *(s+j)=t; i++; j--; } } main( ){int a[10]={1, 2, 3, 4, 5, 6, 7, 8, 9, 0}, i, *p=a; fun (p, 0, 3); fun (p, 4, 9); fun (p, 0, 9); for(i=0; i<10; i++) printf(\"%d \; printf(“\\n”); }
A) 0 9 8 7 6 5 4 3 2 1 B) 4 3 2 1 0 9 8 7 6 5 C) 5 6 7 8 9 0 1 2 3 4 D) 0 9 8 7 6 5 1 2 3 4 54.下面函数的功能是( )。
sss (char *s, char *t)
{while((*s)&&(*t)&&(*t= =*s)) s++, t++; return(*s-*t); }
A) 求字符串的长度 B) 比较两个字符串的大小 C) 将字符串s复制到字符串t中 D) 将字符串s连接到字符串t中 55.以下程序段给数组所有的元素输入数据,则以下正确答案为( )。 main() {int a[10], i=0;
while (i<10) scanf(“%d”, ); „ }
A) a+(i++) B) &a[i+1] C) a+i D) &a[++i] 56.在下列叙述中,正确的一条是( )。 A) 语句int *pt中的*pt是指针变量名 B) 语句int *p=a;等价于int *p; p=&a[0]; C) 运算符*和&都是取变量地址的运算符
D) 已知指针变量p指向变量a,则&a和*p值相同,都是变量a的值 57.下列语句执行后的结果是( )。 y=5; p=&y; x=*p++;
A) x=5,y=5 B) x=5,y=6 C) x=6, y=5 D) x=6, y=6
58.在下列语句中,其含义为“p为带回一个指针的函数,该指针指向整型数据”的定义语句是( )。
A) int *p(); B) int **p; C) int (*p)(); D) int *p; 59.在下面关于指针的说法中,错误的一条是( )。 A) 变量的指针就是变量的地址
B) 可以将一个整型量或任何其他非地址类型的数据赋给一个指针变量 C) 一个指针变量只能指向同一个类型的变量 D) 指针变量中只能存放地址
60.在下列程序中,输出结果与其它程序不同的是( )。 A) main() {int a[10]; int i;
for(i=0;i<10;i++) scanf(“%d”,&a[i]); printf(“\\n”);
for(i=0;i<10;i++) printf(“%d”,a[i]); } B) main() {int a[10]; int i;
for(i=0;i<10;i++) scanf(“%d”,&a[i]); printf(“\\n”);
for(i=0;i<10;i++) printf(“%d”,*(a+i)); } C) main() {int a[10]; int i, *p;
for(i=0;i<10;i++) scanf(“%d”,&a[i]); printf(“\\n”);
for(p=a;p<(a+10);p++) printf(“%d”,*p); } D) main() {int a[10]; int i, *p;
for(i=0;i<10;i++) scanf(“%d”,&a[i]); printf(“\\n”);
for(i=0;i<10;i++) printf(“%d”,*(p+i)); }
61.以下程序的输出结果是( )。 sub(int *s, int y) {static int t=3; y=s[t]; t--; } main()
{int a[ ]={1, 2, 3, 4}, n; int x=4;
for(n=0; n<4; n++) {sub(a, x); printf(“%d”, x); } printf(“\\n”); }
A) 1234 B) 3333 C) 4321 62.以下程序的输出结果为( )。 #idefine FORMAT “%u, %u” main()
{int a[3][4]={1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23}; printf(“\\n”);
printf(FORMAT, **a, *a[0]);
printf(FORMAT, *(a[0]+1), *&a[0][1]); printf(FORMAT, a[1][1], *(*(a+1)+1)); }
A) 3,3 5,5 9,9 B) 1,1 3,3 9,9 C) 1,1 3,3 5,5 D) 5,5 7,7 9,9
D) 4444 63.以下程序的输出结果为( )。 f(char *s) {char *p=s;
while(*p!=„\\0‟) p++; return(p-s); } main()
{ printf(“%d\\n”, f(“12345678”)); }
A) 12345678 B) 7 C) 1 D) 8 .以下程序的输出结果为( )。 move(int array[6], int n, int m) {int *p, array_end; array_end=*(array+n-1); for(p=array+n-1;p>array;p--) *p=*(p-1); *array=array_end; m--;
if(m>0) move (array, n, m); } main()
{static int number[6]={1, 2, 3, 4, 5, 6}; int m=4, j;
move(number, 6, m); for(j=0;j<5;j++) printf(“%d,”, number[i]); printf(“%d”, number[5]); }
A) 1,2,3,4,5,6 B) 6,5,4,3,2,1 C) 3,4,5,6,1,2 D) 6,1,2,3,4,5 65.在下列叙述中,正确的一条是( )。 A) 以下程序运行结果为Computer and c: main() {char str[4]; str=“Computer and c”; printf(“%s\\n”, str); }
B) 下面两种表示方式等价 (1) int fun(int x,int y) (2) int fun(x,y) int x,y;
C) 若输入1、2,以下程序的运行结果为12 main()
{int *p,i,a[2]; p=a;
for(i=0;i<2;i++) scanf(“%d”,p++); for(i=0;i<2;i++,p++) printf(“%d”,*p); }
D) 以下程序的运行结果为3 main()
{int *p,a[5]={1,3,4,5,6}; p=a;
printf(“%d”,*p++); }
66.以下程序的输出结果是( )。 point(char *pt); main()
{char b[4]={„a‟, „c‟, „s‟, „f‟}, *pt=b; point(pt);
printf(“%c\\n”, *pt); }
point(char *p) {p+=3; }
A) a B) c C) s 67.以下程序的输出结果为( )。 void move(int *pointer) {int i, j, t; for(i=0; i<3; i++) for(j=i; j<3; j++) {t=*(pointer+3*i+j);
*(pointer+3*i+j)=*(pointer+3*j+i); *(pointer+3*j+i)=t; } } main()
{int a[3][3]={1, 2, 3, 4, 5, 6, 7, 8, 9}, *p, i; p=&a[0][0]; move(p); for(i=0; i<3; i++)
printf(“%d%d%d”, a[i][0], a[i][1], a[i][2]); }
A) 147258369 B) 1234567 68.以下程序的输出结果是( )。 sub(int x, int y, int *z)
D) f C) 987654321 D) 127485639 {*z=y-x+2;} main() {int a, b, c;
sub(16, 7, &a); sub(9, a, &b); sub(a, b, &c); printf(“%d, %d, %d\\n”, a, b, c); }
A) –7,-14,-5 B) –7,-16,-9 C) –7,-12,-9 D) –9,-14,-5 69.变量p为指针变量,若p=&a,下列说法不正确的是( )。
A) &*p==&a B) *&a==a C) (*p)++==a++ D) *(p++)==a++ 70.若输入10,以下程序的输出结果是( )。 #define MAX 50 main()
{int i, k, m, n, num[MAX], *p; scanf(“%d”, &n); p=num; for(i=0; i{*(p+i)=0; k=0; m++;} i++;if(i= =n) i=0; }
while(*p= =0) p++; printf(“%d\\n”, *p); }
A) 10 B) 4 C) 50 D) 60 71.以下程序的输出结果是( )。 main()
{char *alpha[5]={“a”, “bc”, “def”, “1”, “23”}, **p; int i; p=alpha;
for(i=0; i<3; i++, p++) printf(“%s”, *p); printf(“\”); p=p-3;
for(i=0; i<3; i++, p++) printf(“%c\”,**p); }
A) abcdef d e f B) abcdef a b d C) abcdef 1 23 D) defabc 1 23 二 填空题
1.下列程序的输出结果是 GDABC 。 #include main( ){char b[30],*chp; strcpy(&b[0],\"GH\"); strcpy(&b[1],\"DEF\"); strcpy(&b[2],\"ABC\"); printf(\"%s\\n\",b); }
2.下列程序的字符串中各单词之间有一个空格,则程序的输出结果是 How does she 。 #include main( ){char strl[ ]=\"How do you do\",*p1=strl; strcpy (strl+strlen(strl)/2,\"es she\"); printf(\"%s\\n\",pl); }
3.若有如下图所示五个连续的int类型的存储单元并赋值如下图,a[0]的地址小于a[4]的地址。p和s是基类型为int的指针变量。请对以下问题进行填空。 a[0] a[1] a[2] a[3] a[4]
22 33 44 55 66 (1)若p已指向存储单元a[1]。通过指针p给s赋值,使s指向最后一个存储单元a[4]的语句是 s=p+3 。
(2)若指针s指向存储单元a[2],p指向存储单元a[0],表达式s-p的值是 2 。 4.以下程序的功能是:将无符号八进制数字构成的字符串转换为十进制整数。例如,输入的字符串为:556,则输出十进制整数366。请填空。 #include main() {char *p, s[6]; int n; p=s; gets (p); n=*p-'0';while( *(++p) !='\\0') n=n*8+*p-'0'; printf(\"%d\\n\}
5.设有以下程序: main()
{int a, b, k=4, m=6, *p1=&k, *p2=&m; a=(pl= =&m); b=(*p1)/(*p2)+7;
printf(\"a=%d\\n\printf(\"b=%d\\n\}
执行该程序后,a的值为 0 ,b的值为 7 。 6.下列程序的输出结果是 0 。 void fun(int *n) {while((*n)--); printf(\"%d\} main() {int a=100; fun (&a); }
7.以下程序的输出结果是 10 。 main()
{int arr[ ]={30, 25, 20, 15, 10, 5}, *p=arr; p++;
printf(\"%d\\n\}
8.若有以下定义,则不移动指针p,且通过指针p引用值为98的数组元素的表达式是 *(p+5) 。
int w[10]={23,54,10,33,47,98,72,80,61}, *p=w;
9.以下函数把b字符串连接到a字符串的后面,并返回a中新字符串的长度。请填空。 strlen (char a[ ], char b[ ]) {int num=0, n=0;
while (*(a+num)!= '\\0' ) num++;
while (b[n]){*(a+num)=b[n]; num++; n++ ;} return(num); }
10.函数void fun(float *sn,int n)的功能是:根据以下公式计算S,计算结果通过形参指针sn传回;n通过形参传入,n的值大于等于0。请填空。
1111
S13572n1void fun(float *sn, int n) {float s=0.0, w, f= -1.0; int i=0;
for(i=0; i<=n; i++) {f= -1 *f; w=f/ (2*i+1); s+=w; }
*sn = s; }
11.下面函数用来求出两个整数之和,并通过形参传回两数相加之和值,请填空。 int add(int x,int y, int * z) { *z =x+y;}
12.以下fun函数的功能是:累加数组元素中的值。n为数组中元素的个数。累加的和值放入x所指的存储单元中。请填空。 fun(int b[ ],int n,int *x) {int k,r=0;
for(k=0;k13.以下函数的功能是:把两个整型指针变量所指的存储单元中的内容进行交换。请填空。 exchange(int *x,int *y) {int t;t=*y; *y= *x ; *x= t ; }
14.以下程序的输出是 49 。 main()
{int a[10]={19,23,44,17,37,28,49,36},*p; p=a;
printf(“%d\\n”,(p+=3)[3]); }
15.下面程序的输出结果是 024 。 #define MAX 3 int a[MAX]; main()
{fun1();fun2(a);printf(“\\n”);} fun1() {int k,t=0;
for(k=0;kfun2(int b[]) {int k;for(k=0;k16.下面程序的输出结果是 ABCDCD 。 char b[]=“ABCD”; main() {char *chp;for(chp=b; *chp; chp+=2) printf(“%s”, chp);
printf(“\\n”); }
17.以下程序的功能是:从键盘上输入一行字符,存入一个字符数组中,然后输出该字符串,请填空。
#include main(){char str[81],*sptr; int i;
for(i=0;i<80;i++) {str[i]=getchar(); if(str[i]==„\\n‟) break; }
str[i]= '\\0' ; sptr=str;
while(*sptr) putchar( *sptr++ ); }
18.fun1函数的调用语句为:fun1(&a,&b,&c);它将三个整数按由大到小的顺序调整后依次放入a、b、c三个变量中,a中放最大数。请填空。 void fun2(int *x, int *y) {int t;
t=*x; *x=*y; *y=t; }
void fun1(int *pa,int *pb,int *pc) {if(*pc>*pb) fun2( pc,pb ); if(*pa<*pc) fun2( pa,pb ); if(*pa<*pb) fun2( pa,pc ); }
19.以下函数用来在w数组中插入数x,w数组中的数已按由小到大的顺序存放,n所指存储单元中存放数组中数据的个数,x插入后数组中的数仍有序。请填空。 void fun(char *w,char x,int *n) {int i,p; p=0; w[*n]=x;
while(x>w[p]) p++ ;
for(i=*n;i>p;i--) w[i]= w[i-1] ; w[p]=x; ++*n; }
20.阅读程序: main()
{char str1[]=“how do you do”, str2[10]; char *p1=str1, *p2=str2;
scanf(“%s”, p2); printf(“%s ”, p2); printf(“%s\\n”, p1); }
运行上面的程序,输入字符串HOW DO YOU DO,则程序的输出结果是 HOW how do you do 。
21.下面程序的输出结果是 SO 。 main()
{char *p[]={“BOOL”, “OPK”, “H”, “SP”}; int i;
for(i=3;i>=0;i--,i--) printf(“%c”,*p[i]); printf(“\\n”); }
22.下面程序的输出结果是 17 。 funa(int a,int b) {return a+b;} funb(int a,int b) {return a-b;}
sub(int(*t)(),int x,int y) {return((*t)(x,y));} main() {int x,(*p)(); p=funa; x=sub(p,9,3); x+=sub(funb,8,3); printf(“%d\\n”, x); }
23.下面程序的输出结果是 XYZA 。 #includevoid fun(char *a1,char *a2,int n) {int k;
for(k=0;ka2[k]=(a1[k]-„A‟-3+26)%26+„A‟; a2[n]=„\\0‟; } main(){char s1[5]=“ABCD”, s2[5]; fun (s1, s2, 4); puts(s2); }
24.下面程序的输出结果是 7 1 。 void as(int x,int y,int *cp,int *dp)
{*cp=x+y; *dp=x-y; } main()
{int a=4,b=3,c,d; as(a,b,&c,&d);
printf(“%d %d\\n”,c,d); }
25.下面程序的输出结果是 eybdooG 。 #include main(){static char b[]=“Goodbye”; char *chp=&b[7];
while(--chp>=&b[0]) putchar(*chp); putchar(„\\n‟); }
26.若输入:this test terminal,以下程序的输出结果为:terminal test this。填空补充以下程序。
#include #define MAXLINE 20 main() {int i;char *pstr[3],str[3][MAXLINE]; for(i=0;i<3;i++) pstr[i]=str[i]; for(i=0;i<3;i++) scanf(“%s”,pstr[i]); sort(pstr);
for(i=0;i<3;i++) printf(“%s\\n”,pstr[i]); }
sort( char *pstr [3] ) {int i,j; char *p;
for(i=0;i<3;i++) {for(j=i+1;j<3;j++)
{if(strcmp(*(pstr+i),*(pstr+j))>0) {p=*(pstr+i);
*(pstr+i)= *(patr+j) ; *(pstr+j)=p; } } } }
27.以下程序利用指针法将两个数按从小到大的顺序输出来。 main()
{int a,b, *p1,*p2 , p ; printf(“input a, b:”); scanf(“%d%d”, &a,&b); p1=&a ; p2=&b; if(a{p=p1; p1=p2; p2=p;} printf(“a=%d b=%d\\n”,a,b);
printf(“max=%d min=%d\\n”, *p1,*p2 ); }
28.以下程序的输出结果是 8 。 fun(int n,int *s) {int f1,f2;
if(n==1||n==2) *s=1; else
{fun(n-1,&f1); fun(n-2,&f2); *s=f1+f2; } } main() {int x; fun(6,&x); printf(“%d\\n”,x); }
29.下面的程序通过函数average计算数组中各元素的平均值,请填空。 float average(int *pa,int n) {int i;
float avg=0.0; for(i=0;iavg=avg+ *(pa+i) ; avg= avg/n ; return avg; } main(){int i,a[5]={2,4,6,8,10}; float mean; mean=average(a,5); printf(“mean=%f\\n”,mean); }
30.以下程序将字符串s1中的所有与字符串str1相同的子串替换成字符串str2,并将替换后的新串存于字符数组s2中。 #includevoid replace(char *s1,char *s2,char *str1,char *str2) {char *t0,*t1,*t2; while( *s1 )
{for(t0=s1,t1=str1;(*t1!=„\\0‟&& *t0=*t1 );t0++,t1++); if(*t1!=„\\0‟) *s2++ = *s1++ ; else
{for(t1=str2;*t1!=„\\0‟;) *s2++ = *t1++ ; s1=t0 ; } } *s2=„\\0‟; } main()
{static char s1[]=“abcef ababcd abab.”, s2[25]; replace (s1, s2, “abc”, “XYZ”); printf(“%s\\n”, s2); }
31.以下语句的输出结果是 hELLO! 。 char s[80],*sp=“HELLO!”; sp=strcpy (s, sp); s[0]=„h‟; puts(s);
第十一章 结构体与共用体
一 单项选择题
1.以下程序的输出结果是( )。 struct student {char name[20]; char sex; int age;
}stu[3]={“Li Lin”, „M‟, 18, “Zhang Fun”, „M‟, 19, “Wang Min”, „F‟, 20}; main()
{struct student *p; p=stu;
printf(“%s, %c, %d\\n”, p->name, p->sex, p->age); }
A) Wang Min,F,20 B) Zhang Fun,M,19 C) Li Lin,F,19 D) Li Lin,M,18 2.设有以下语句:
struct st{int n; struct st *next;};
static struct st a[3]={5, &a[1], 7, &a[2], 9, „\\0‟},*p; p=&a[0];
则表达式( )的值是6。
A) p++ ->n B) p->n++ C) (*p).n++ D) ++p->n 3.以下四个程序中,( )不能对两个整型变量的值进行交换。 A) #include main(){int a=10,b=20; swap(&a,&b);
printf(“%d %d\\n”,a,b); }
swap(int *p,int *q) {int *t;
t=(int *)malloc(sizeof(int)); *t=*p; *p=*q; *q=*t; } B) main()
{int a=10,b=20; swap(&a,&b);
printf(“%d %d\\n”,a,b); }
swap(int *p,int *q) {int t;
t=*p; *p=*q; *q=t; } C) main() {int *a,*b; *a=10; *b=20; swap(a,b);
printf(“%d %d\\n”,*a,*b); }
swap(int *p,int *q) {int t;
t=*p; *p=*q; *q=t; } D) main()
{int a=10,b=20; int *x=&a,*y=&b; swap(x,y);
printf(“%d %d\\n”,a,b); }
swap(int *p,int *q) {int t;
t=*p; *p=*q; *q=t; }
4.下面程序的输出结果是( )。 struct st {int x; int *y; }*p;
int dt[4]={10, 20, 30, 40};
struct st aa[4]={50, &dt[0], 60, &dt[1], 70, &dt[2], 80, &dt[3]}; main() {p=aa;
printf(“%d ”, ++p->x); printf(“%d ”, (++p)->x); printf(“%d\\n”, ++(*p->y)); }
A) 10 20 20 B) 50 60 21 C) 51 60 21 D) 60 70 31 5.若要用下面的程序片段使指针变量p指向一个存储整型数据的动态存储单元,则应填入( )。 int *p;
p= malloc(sizeof(int));
A) int B) int * C) (* int) D) (int *)
6.若已建立下面的链表结构,指针p、s分别指向图中所示的结点,则不能将s所指的结点插入到链表末尾的语句组是( )。
A) s->next=NULL; p=p->next; p->next=s; B) p=p->next; s->next=p->next; p->next=s; C) p=p->next; s->next=p; p->next=s;
D) p=(*p).next; (*s).next=(*p).next; (*p).next=s; 7.以下程序的输出结果是( )。 #includevoid fun(float *p1,float *p2, float *s) {s=(float *)calloc(1, sizeof(float)); *s=*p1+*(p2++);
data
head E next
F NULL p s G } main()
{float a[2]={1.1, 2.2}, b[2]={10.0, 20.0}, *s=a; fun (a, b, s); printf(“%f\\n”, *s); }
A) 11.100000 B) 12.100000 C) 21.100000 D) 1.100000 8.字符‘0’的ASCII码的十进制数为48,且数组的第0个元素在低位,则以下程序的输出结果是( )。 #include main() {union {int i[2]; long k; char c[4]; }r, *s=&r; s->i[0]=0x39; s->i[1]=0x38; printf(“%c\\n”, s->c[0]); }A) 39 B) 9 C) 38 D) 8
9.若有说明:long *p, a; 则不能通过scanf语句正确给输入项读入数据的程序段是(A) *p=&a; scanf(“%ld”,p);
B) p=(long *)malloc(8); scanf(“%ld”,p); C) scanf(“%ld”,p=&a); D) scanf(“%ld”,&a);
10.以下选项中,能定义s为合法的结构体变量的是( )。 A) typedef struct abc B) struct {double a; {double a; char b[10]; char b[10]; }s; }s;
C) struct ABC D) typedef ABC {double a; { double a; char b[10]; char b[10]; } } ABC s; ABC s;
11.设有以下定义和语句,则输出结果是(指针变量占2个字节)( )。 struct date
{long *cat;(2字节) struct date *next;(2字节) double dog;(8字节)
)。 }too;
printf(“%d”, sizeof(too));
A) 20 B) 16 C) 14 D) 12 12.以下程序的输出结果是( )。 #includeint a[3][3]={1, 2, 3, 4, 5, 6, 7, 8, 9}, *p; main()
{p=(int *)malloc(sizeof(int)); f(p, a);
printf(“%d\\n”,*p); }
f(int *s, int p[][3]) {*s=p[1][1];}
A) 1 B) 4 C) 7 D) 5 13.设有如下定义: struct sk
{int a; float b;} data, *p;
若有p=&data,则对data中的成员a的正确引用是( )。
A) (*p).data.a B) (*p).a C) p->data.a D) p.data.a 14.以下程序的输出结果是( )。 #include struct stu {int num; char name[10]; int age; };void fun(struct stu *p) {printf(“%s\\n”, (*p).name);} main()
{struct stu students[3]={{9801, “Zhang”, 20}, {9802, “Wang”, 19}, {9803, “Zhao”, 18}}; fun (students+2); }
A) Zhang B) Zhao C) Wang D) 18 15.以下程序运行后,输出结果是( )。 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(“%d\\n”, *p);
}
A) 1 B) 7 C) 9 D) 11 16.下列程序的输出结果是( )。 struct abc { int a, b, c; }; main()
{ struct abc s[2]={{1,2,3},{4,5,6}}; int t; t=s[0].a + s[1].b; printf(\"%d \\n\}
A) 5 B) 6 C) 7 D) 8
17.有以下结构体说明和变量的定义,且如下图所示指针p指向变量a,指针q指向变量b。则不能把结点b连接到结点a之后的语句是( )。 struct node {char data; struct node *next; } a, b, *p=&a,*q=&b;
data a
5 next b
data 9 next \\0 p q A) a.next=q; B) p.next=&b; C) p->next=&b; D) (*p).next=q; 18.变量a所占内存字节数是( )。 union U {char st[4]; int i; long l; }; struct A {int c; union U u; }a;
A) 4 B) 5 C) 6 D) 8 19.有如下定义:
struct person{char name[9]; int age;};
struct person class[10]={“Johu”, 17, “Paul”, 19 , “Mary”, 18, “Adam”, 16}; 根据上述定义,能输出字母M的语句是( )。
A) printf(“%c\\n”, class[3].name); B) printf(“%c\\n”, class[3].name[1]); C) printf(“%c\\n”, class[2].name[1]); D) printf(“%c\\n”, class[2].name[0]); 20.以下对结构体类型变量的定义中,不正确的是( )。 A) typedef struct aa B) #define AA struct aa {int n; AA{int n; float m; float m;
}AA; }td1; AA td1;
C) struct D) struct { int n; { int n; float m; float m; }aa; }td1; struct aa td1; 21.设有以下说明语句: struct ex
{int x; float y; char z;} example; 则下面的叙述中不正确的是( )。
A) struct是结构体类型的关键字 B) example是结构体类型名 C) x, y, z都是结构体成员名 D) struct ex是结构体类型名 22.以下程序的输出结果是( )。 union myun { struct
{ int x, y, z; } u; int k; } a; main()
{a.u.x=4; a.u.y=5; a.u.z=6; a.k=0;
printf(%d\\n\}
A) 4 B) 5 C) 6 D) 0 二 填空题
1.设有以下结构体类型说明和变量定义,则变量a在内存中所占的字节数是 22 ,变量p在内存中所占的字节数是 2 。 struct stud {char num[6]; int s[4]; double ave; }a, *p;
2.若有如下结构体说明: struct STRU
{int a, b ; char c; double d: struct STRU p1, p2; };
请填空,以完成对t数组的定义,t数组的每个元素为该结构体类型: struct STRU t[20];
3.以下程序段用于构成一个简单的单向链表,请填空。 struct STRU
{int x, y ; float rate;
struct STRU * p; } a, b;
a.x=0; a.y=0; a.rate=0; a.p=&b; b.x=0; b.y=0; b.rate=0; b.p=NULL;
4.建立并输出100个同学的通讯录,每个通讯录包括同学的姓名、地址、邮政编码。 #include #define N 100 struct communication {char name[20]; char address[80]; long int post_code; }commun[N]; main() {int i;for(i=0; i<100; i++) {set_record(commun+i); print_record(commun+i); } }
set_record(struct communication *p) {printf(“Set a communication record\\n”);
scanf(“%s %s %ld”, p->name , p->address, p->post-code ); }
print_record ( strut communication * p) {printf(“Print a communication record\\n”); printf(“Name: %s\\n”, p->name); printf(“Address: %s\\n”, p->address);
printf(“Post_code: %ld\\n”, p->post-code ); }
5.以下函数creatlist用来建立一个带头节点的单链表,新的结点总是插入在链表的末尾。链表的头指针作为函数值返回,链表最后一个节点的next成员中放入NULL,作为链表结束标志。读入时字符以#表示输入结束(#不存入链表)。请填空。 struct node {char data; struct node * next; };
struct node * creatlist( ) {struct node * h,* s,* r;char ch; h=(struct node *)malloc(sizeof(struct node)); r=h; ch=getchar( );
while(ch!= „#‟)
{s=(struct node *)malloc(sizeof(struct node)); s->data= ch ; r->next=s; r=s; ch=getchar( );}
r->next= NULL ; return h; }
6.有以下定义和语句,则sizeof(a)的值是 10 ,而sizeof(a.share)的值是 4 。 struct date {int day; int month; int year; union {int share1; float share2; }share; }a;
第十三章 文 件
一 单项选择题
1.若要“向文本文件尾增加数据”,在fopen函数中应使用的文件方式是( )。 A) “ab+” B) “a” C) “ab” D) “a+” 2.在C语言中,用于实现打开文件的库函数是( )。
A) fclose() B) fopen() C) fseek() D) rewind()
3.若要“为读/写建立一个新的二进制文件”,在fopen函数中应使用的文件方式是( )。 A) “w+” B) “rb+” C) “ab+” D) “wb+” 4.若在fopen函数中使用文件的方式是“ab”,该方式的含义是( )。 A) 为读/写打开一个文件 B) 向二进制文件尾增加数据 C) 为输出打开一个文本文件 D) 为读/写建立一个新的二进制文件 5.若在fopen函数中使用文件的方式是“r”,该方式的含义是( )。
A) 为输入(读)打开一个文本文件 B) 为输出(写)打开一个文本文件 C) 为读/写打开一个文本文件 D) 为读/写建立一个新的二进制文件 6.在C程序中,可把整型数以二进制形式存放到文件中的函数是( )。
A) fprintf函数 B) fread函数 C) fwrite函数 D) fputc函数 7.若fp是指向某文件的指针,且已读到此文件末尾,则库函数feof(fp)的返回值是( )。
A) EOF B) 0 C) 非零值 D) NULL 8.下面的程序执行后,文件test.t中的内容是( )。 #includevoid fun(char *fname., char *st) {FILE *myf; int i; myf=fopen(fname, \"w\");
for(i=0;i{fun(\"test.t\A) hello, B) new worldhello, C) new world D) hello, rld 二 填空题
1.下面程序把从终端读入的10个整数以二进制方式写到一个名为bi.dat的新文件中。请填空。 #include FILE *fp; {int i, j;if((fp=fopen ( bi.dat ,“wb”))= =NULL) exit(0); for(i=0; i<10; i++) {scanf(“%d”, &j);
fwrite(&j, sizeof(int), 1, fp ); } fclose(fp); }
2.以下程序的功能是:从键盘上输入一个字符串,把该字符串中的小写字母转换成大写字母,输出到文件test.txt中,然后从该文件读出字符串并显示出来。请填空。 #include main() {FILE *fp; char str[100]; int i=0;if((fp=fopen(“test.txt”, \" w \" ))= =NULL) {printf(“Can‟t open this file.\\n”); exit(0);} printf(“Input a string: \\n”); gets (str); while (str[i])
{if(str[i]>= „a‟&&str[i]<=„z‟) str[i]= str[i]-32 ; fputc(str[i], fp); i++; } fclose (fp);
fp=fopen(“test.txt”, \"r\" ); fgets(str, 100, fp);
printf(“%s\\n”, str); fclose (fp); }
3.用以下程序把从键盘输入的字符存放到一个文件中,用字符#作为结束符,请按题意要求填空完善程序。 #include main() {FILE *fp; char ch, fname[10];printf(“Input the name of file:\\n”); gets (fname);
if((fp=fopen( fname,\"w\" ))= =NULL) {printf(“can‟t open file\\n”); exist(0) ; }
while((ch=getchar())!=„#‟) fputc ( ch,fp ); fclose (fp); }
4.下面程序用来统计文件中字符的个数,请填空。 #include main() {FILE *fp; long num=0;if((fp=fopen(“fname.dat”, “r”))= =NULL) {printf(“can‟t open file\\n”); exit(0); }
while (!feof(fp)) {fgetc (fp); num++;} printf(“num=%d\\n”, num); fclose (fp); }
5.以下程序中用户由键盘输入一个文件名,然后输入一串字符(用#结束输入)存放到此文件中,形成文本文件,并将字符的个数写到文件尾部。请填空。 #include main( ) {FILE *fp;char ch,fname[32]; int count=0;
printf(\"Input the filename :\"); scanf(\"%s\",fname); if((fp=fopen( fname ,\"w+\"))==NULL) {printf(\"Can't open file:%s\\n\",fname); exit(0);} printf(\"Enter data:\\n\");
while((ch=getchar())!=\"#\") {fputc(ch,fp); count++;} fprintf( fp ,\"\\n%d\\n\",count); fclose(fp);