2.将下列条件写成C语言的逻辑表达式。
(1)a或b中有一个大于零:__________。
(2)x大于零,并且x小于等于10:__________。 (3)a、b和c同时等于1.5:__________。 (4)p小于a或p小于b或p小于c:__________。
3.写出下列各逻辑表达式的值,设int a=3,b=6,c=8。
(1)a+b>c &&b==c:__________。 (2)a||b+c && bc:__________。 (3)!(a>b)&& ! c||1:__________。 (4)!(x=a)&&(y=b)&& 1:__________。 (5)!(a+b)c && b+c/2:__________。
4.将变量a、b、c中的较大者赋给变量max的条件表达式为__________。
5.下列程序执行后的输出结果是__________。
#include \"stdio.h\" main( )
{ int n=0,m=1,x=2; if(!n) x-=1; if(m) x-=2; if(x) x-=3;
printf(\"%d\\n\
6.以下程序执行后的输出结果是__________。
#include \"stdio.h\" main( ) { int p,a=5; if(p=a!=0)
printf(\"%d\\n\ else
printf(\"%d\\n\
7.以下程序执行后的输出结果是__________。
#include \"stdio.h\" main( )
{ int a=4,b=3,c=5,t=0; if(aprintf(\"%d,%d,%d\\n\
14
8.下列程序用于计算一元二次方程ax2+bx+c=0的根,程序中有不完整的地方,请在下划线处填写适当的语句或表达式以实现程序的功能。 #include \"stdio.h\" #include \"math.h\" main( ) { double a,b,c,t,disc,twoa,root1,root2; printf(\"Enter a,b,c:\"); scanf(\"%lf,%lf,%lf\ if [1] if [2] printf(\"No answer because of input error\\n\"); else printf(\"The single root is %f\\n\ else { disc=b*b-4*a*c; twoa=2*a;
root1=-b/twoa;
t=abs(disc);
root2=sqrt(t)/twoa;
if [3]
printf(\"Complex roots\\n real part=%f
image part=%f\\n\
else
printf(\"Real roots\\n root1=%f
root2=%f\\n\ } } 9. 下列程序段执行后,变量k、x、y、z的值依次为 int k,x,y,z; x=y=z=0;
k=x++&&y++||++z;
10. 以下程序运行后的输出结果是 main()
{ int a,b,c; a=10; b=20; c=(a%b<1)||(a/b>1); printf(\"%d %d %d\\n\ } 11. 以下程序运行后的输出结果是 。
main()
{ int a=1,b=3,c=5;
if (c=a+b) printf(\"yes\\n\");
else printf(\"no\\n\"); } 12. 若x为int类型,请以最简单的形式写出与逻辑表达式!x等价的C语言关系表达式 。
13. 以下程序段的运行结果是 。(1级) int x=1,y=0; switch(x) {case 1:
switch(y) { case 0:printf(\"x=1 y=0\\n\");break; case 1:printf(\"y=1\\n\");break;
} case 2:printf(\"x=2\\n\");
} 14. 输入一个字符,如果是大写字母,则把其变成小写字母;如果是小写字母,
则变成大写字母;其它字符不变。请在()内填入缺省的内容。(03试题) main( ) { char ch; scanf(“%c”,&ch); if (___(1)____) ch=ch+32; else if(ch>=‟a‟&&ch<=„z‟) (__(2)___); printf(”%c\\n”,ch); } 15. 以下程序的运行结果是:_________。(03试题) 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 ) ; } 16. mian() {int x,y,z;
x=3;,y=z=4; printf(\"%d\printf(\"%d\}
15
运行结果为 。
第5章
5.1 单选题
1.下面程序循环体的执行次数是( )。
#include \"stdio.h\"
main()
{int i,j;
for(i=0,j=1;i<=j+1;i+=2,j)printf(\"%d
\\n\
}
A.3 B.2 C.1 D.0
2.以下叙述中正确的是( )。 A.do-while语句构成的循环不能用其他语句构成的循环来代替。
B.do-while语句构成的循环只能用break语句退出。
C.用do-while语句构成的循环,在while后的表达式为非零时结束循环。
D.用do-while语句构成的循环,在while后的表达式为零时结束循环。
3.执行下列语句后,s的值是( )。
int n=5,s=0; while(n)s+=n; A.15 B.0 C.10 D.5 4.下面的程序运行后,输出的是( )。 main( ) { int x=3; do { printf (\"%d\\n\=2);
} while (!(x));}
A.1 B.1和2 C.3和0
D.死循环
5. 以下程序执行后的输出结果是
( )。
#include \"stdio.h\" main( )
{int i=0,s=0; do {
if(i%2) {i++;continue;} i++; s+=i;
}while(i<7);
printf(\"%d\\n\ A.16 B.12 C.28 D.21 6.以下程序执行后的输出结果是( )。
#include \"stdio.h”
main( )
{int i;
for (i=0;i<3;i++) switch(i)
{ case 1:printf(\"%d\ case 2: printf(\"%d\ default: printf(\"%d\; } }
A.011122 B.012 C.012020
D.120
7.以下程序执行后的输出结果是( )。
#include \"stdio.h\"
main( ) { int x=0,y=5,z=3;
while(z-->0&&++x<5) y=y-1;
printf(\"%d,%d,%d\\n\
A.3,2,0 B.3,2,1 C.4,3,1 D.5,2,5 8.以下程序执行后的输出结果是
( )。 #include \"stdio.h\" main( )
{ int i,s=0; for(i=1;i<10;i+=2) s+=i+1; printf(\"%d\\n\ A.自然数1~9的累加和
16
B.自然数1~10的累加和
C.自然数1~9中的奇数之和 { if(i==3||i==5) continue;
if (i==6) break;
D.自然数1~10中的偶数之和 9.以下程序执行后的输出结果是( )。
#include \"stdio.h\"
main( )
{ int i,n=0;
for(i=2;i<5;i++) { do
{ if(i%3) continue; n++; } while(!i); n++; }
printf(\"n=%d\\n\
A.n=5 B.n=2 C.n=3 D.n=4
10.下面程序的功能是输出以下形式的
金字塔图案,应在下划线处填入的是
( )。
*
***
*****
*******
#include \"stdio.h\"
main( )
{ int i,j;
for(i=1;i<=4;i++)
{ for(j=1;j<=4-i;j++) printf(\" \");
for(j=1;j<= ;j++) printf(\"*\");
printf(\"\\n\"); }
}
A.i B.2*i1 C.2*i+1 D.i+2 11.以下程序运行后的输出结果是( )。 #include \"stdio.h\" main( ) { int i=0,s=0; for ( ; ; )
i++; s+=i; };
printf(\"%d\\n\
A.10 B.13 C.21 D.程序进入死循环
12.以下程序的输出结果是( )。
main( ) { int i;
for(i='A';i<'I';i++,i++) printf(\"%
c\
printf(\" \\n\"); }
A.编译不通过,无输出B.aceg
C.acegi D.abcdefgh
13.运行以下程序后,如果从键盘上输入“65 ,14”,则输出结果为( )。main( ) { int m, n;printf(\"Enter m,n;\");
scanf(\"%d,%d\ while (m!=n) { while (m>n)m=n; while (n>m)n=m; } printf(\"m=%d\\n\} A.m=3 B.m=2 C.m=1 D.m=0
14.若变量已正确定义,要求程序段完成求5!的计算,不能完成此操作的程序段是( )。 A.for(i=1,p=1;i<=5;i++) p*=i; B.for(i=1;i<=5;i++){ p=1; p*=i;}
C.i=1;p=1;while(i<=5){p*=i; i++;} D.i=1;p=1;do{p*=i;
i++; }while(i<=5); 15. 设x和y均为int型变量,则执行以下的循环后,y值为( )。 for(y=1,x=1;y<=50;y++)
17
{ if(x==10) break;
if(x%2==1)
{ x+=5; continue;}
x-=3;}
A. 4 B. 5 C. 6 D. 7 16. 假定a和b为int型变量,则执行以下语句后b的值为( )。 a=1; b=10; do { b-=a; a++; } while (b--<0); A. 9 B. -2 C. -1 D. 8 17. 设j为int型变量,则下面for循环语句的执行结果是( )。 for( j=10;j>3;j--) { if(j%3) j--; --j; --j;
printf(\"%d \
}
A. 6 3 B. 7 4 C. 6 2 D. 7 3
18. 有以下程序:
main( )
{ char k; int i;
for(i=1;i<3;i++)
{ scanf(\"%c\
switch(k)
{ case '0': printf(\"another\\n\"); case '1': printf(\"number\\n\"); } } } 程序运行时,从键盘输入:01<回车>,程序执行后的输出结果是( )。
A. Another B. Another C. Another
D. number
number number number
number
another number
19. 若变量已正确定义,要求程序段完
成求5!的计算,不能完成此操作的
程序段是( )。
A. for(i=1,p=1;i<=5;i++) p*=i; B. for(i=1;i<=5;i++){ p=1; p*=i;} C. i=1;p=1;while(i<=5){p*=i;
i++;}
D. i=1;p=1;do{p*=i; i++; }while(i<=5);
20. 有以下程序 main()
{ int a=1,b; for(b=1;b<=3; b++) { if(a%2==1){a+=3;continue; } a-=2; } printf(\"%d\\n\
程序运行后的输出结果是( )。
A.3 B.4 C.0 D.2 21. 有以下程序段
int n,t=1,s=0;
scanf(\"%d\
do{ s=s+t; t=t-2; }while (t!=n);
为使此程序段不陷入死循环,从键盘输
入的数据应该是( )。 A. 任意正奇数 B. 任意负偶数 C. 任意正偶数 D. 任意负奇数 5.2 填空题 1.以下程序的输出结果是 。 #include \"stdio.h\"
main( )
{ int n=4; while(n--) printf(\"%d\
2.下列程序的输出结果是 。 main( )
{ int k,x,t;
x=3; t=x;
for(k=1;k<3;k++)
t=t*10+x;
printf(\"%d\3.下面程序的功能是,输出100以内能被3整除且个位数为6的所有整数,请填空。
18
#include main( ) { int i, j;for(i=0; [1] ; i++) { j=i*10+6;
if( [2] ) continue; printf(\"%d\ } }
4.下面程序的功能是输入1个正整数n,计算并输出s的前n项的和。请在下划线处填写适当的内容。
s=1/22/3+3/44/5+„
+(1)n1n/(n+1)
main( )
{ int k, flag=1,n; float s=0;
scanf(\"%d\ for(k=1;k[2] ; } printf(\"sum=%f\\n\5.下列程序的功能是输入以1结束的一批整数,输出其中的最大值。程序中有不完整的地方,请在程序的下划线处填写适当的表达式将程序完善。 例如,输入“3 8 10 1”后,输出
“max=10”。
#include main( ){ int max, x;
scanf(\"%d\
if(x!=1) [1] ; while( [2] ) {
if(maxprintf(\"max=%d\\n\} 6. 有以下程序:main( )
{ int t=1,i=5;
for(;i>=0;i--) t*=i;
printf(\"%d\\n\
}
执行后的输出结果
是 。
7. 以下程序运行后的输出结果是 。
main()
{ int p=11,i=0 , j=0;
while(i<7 && p%2==1)
{ j+=p;i++;p=p*i;}
printf(\"%d\\n\
8.以下程序的功能是计算:s=1+12+123+1234+12345。请填空。
main()
{ int t=0,s=0,i;
for( i=1; i<=5; i++)
{ t=i+ ; s=s+t; } printf(\"s=%d\\n\ }
习题6
1.下列各函数首部中,正确的是( )。
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) 2.在C语言中,函数值类型的定义可以是默认类型,此时函数值的默认类型是( )。
A.void B.int C.float D.double
3.在调用函数时,如果实参是简单变量,它与对应形参之间的数据传递方式是( )。
A.地址传递 B.单向值传递 C.由实参传给形参,再由形参传回实参
D.传递方式由用户指定
4.对C语言函数的有关描述中,正确的是( )。
A.在调用函数时,只能把实参的值
19
传递给形参,形参的值不能传递给实参
B.C语言函数既可以嵌套定义又可以嵌套调用
C.函数必须有返回值,否则不能使用函数
D.C语言程序中有调用关系的所有函数必须放在一个源文件中
5.以下叙述中不正确的是( )。 A.在不同的函数中可以使用相同名字的变量
B.函数中的形式参数是局部变量
C.在一个函数内定义的变量只在本函数范围内有效
D.在一个函数内的复合语句中定义的变量在本函数范围内有效
6.下列叙述中正确的是( )。 A.C语言编译时不检查语法
B.C语言的子程序有过程和函数两种
C.C语言的函数可以嵌套定义 D.C语言所有函数都是外部函数 7.以下叙述中正确的是( )。 A.全局变量的作用域一定比局部变量的作用域范围大
B.静态(static)类别变量的生存期贯穿于整个程序的运行期间
C.函数的形参都属于全局变量
D.未在定义语句中赋初值的auto变量和static变量的初值都是随机值
8.以下程序的运行结果是( )。
#include \"stdio.h\" int abc(int u, int v); main( )
{ int a=24,b=16,c; c=abc(a,b);
printf(\"%d\\n\ }
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
9.以下程序的运行结果是( )。
int f1(int x, int y)
{ return x>y? x : y; } int f2(int x, int y)
{ return x>y? y :x ; } main( )
{ int a=4,b=3,c=5,d,e,f; d=f1(a,b); d=f1(d,c); e=f2(a,b); e=f2(e,c); f=a+b+cde;
printf(\"%d,%d,%d\\n\ A.3,4,5 B.5,3,4
C.5,4,3 D.3,5,4 10.以下程序的运行结果是( )。
void f(int x,int y) { int t;
if(x{ int a=4,b=3,c=5; f(a,b); f(a,c); f(b,c);printf(\"%d,%d,%d\\n\ A.3,4,5 B.5,3,4
C.5,4,3 D.4,3,5 11.以下程序的运行结果是( )。
int f( )
{ static int i=0; int s=1; s+=i; i++; return s; } main( ) { int i,a=0;
for(i=0;i<5;i++) a+=f( ); printf(\"%d\\n\ } A.20 B.24 C.25
D.15
12.以下程序的运行结果是( )。
int func(int a,int b) { return(a+b);}
20
main( )
{ int x=2,y=5,z=7,r; r=func(func(x,y),z); printf(\"%d\\n\; }
A.12 B.13 C.14 D.15
13.以下程序的运行结果是( )。
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
14.以下程序的运行结果是( )。 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
15.以下程序的运行结果是( )。
int x=3;
main( )
{ int i; for(i=1;ix*=x+1;printf(\"%d\
A.3 3 B.2 2 C.2 6
D.2 5
16. 有如下函数调用语句
func(recl,rec2+rec3,(rec4,rec5));
该函数调用语句中,含有的实参个数是( )。
A. 3 B. 4 C. 5 D. 有语法错误
17. 有如下程序
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. 15 C. 14 D. 13
18. 以 下关于函数的叙述中正确的是( ) A. 每个函数都可以被其它函数调用(包
括main函数) B.每个函数都可以被单独编译
C.每个函数都可以单独运 D.在一个函数内部可以定义另一个函数 19. 在C语言程序中,有关函数的叙述正确
的有( )。 A.函数的定义可以嵌套,但函数的调用不可以嵌套 B.函数的定义不可以嵌套,
但函数的调用可以嵌套 C.函数的定义和调用均不可以嵌套 D.函数的定义和调用均可以嵌套 20. 以下程序的输出结果是( )。 long fib(int n) {if (n>2) return(fib(n-1)+fib(n-2)); else return(2); }
main()
{ printf(“%d\\n”,fib(3));}
21
A.2 B.6 C.4 D.8 25. 以下函数值的类型是()。 21. 下列各函数首部定义正确的是( )。 fun ( float x )
{ float y; A. void play(var:ineger,var
y=3*x-4; b:integer)
return y;}
B. double play(int a,b)
A. int B. 不确定 C. void C. float play(int a,int b)
D. sub play(a as integer,b as D. float
26. 以下函数定义正确的是: 。 integer)
A) double fun(int x, int y) 22. 以下程序运行后的输出结果是( )。
#define N 20
fun(int a[], int n, int m)
{ int i, j;
for(i=m; i>=n; i--)
a[i+1]=a[i];}
main()
{ int i,
a[N]={1,2,3,4,5,6,7,8,9,10};
fun(a,2,9);
for(i=0; i<5; i++)
printf(\"%d\
A. 10234 B. 12344 C. 12334
D. 12234
23. 在调用函数时,如果实参是简单变量,
它与对应形参之间的数据传递方式是()。
A. 地址传递 B. 单向值传递
C. 由实参传给形参,再由形参传回实
参
D. 传递方式由用户指定 24. 设有以下函数: 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,\A. 7,8,9, B. 7,9,11, C. 7,10,13, D. 7,7,7,
B) double fun(int x; int y) C) double fun(int x, int y) ;
D) double fun(int x , y)
27.C语言规定,简单变量作实参,它与对
应形参之间的数据传递方式
是: 。
A)地址传递; B)单向值
传递;
C)双向值传递; D)由用户
指定传递方式
28.以下关于C语言程序中函数的说法正确
的 。
A)函数的定义可以嵌套,但函数的调
用不可以嵌套;
B)函数的定义不可以嵌套,但函数的
调用可以嵌套; C)函数的定义和调用均不可以嵌套;
D)函数的定义和点用都可以嵌套。
29.以下正确的函数形式是: 。
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;} 30.以下说法不正确的是: 。 C 语言规定 A)实参可以是常量、变量或表达式 B)形参可以是常量、变量或表达式 C)实参可以是任意类型
22
D)形参应与其对应的实参类型一致 37. 有如下程序
int runc(int a,int b) 31.C语言允许函数值类型缺省定义,此时
{ return(a+b);} 该函数值隐含的类型是 。
A) float型 B) int 型 C)long 型 main( )
{ int x=2,y=5,z=8,r;
D)double 型
r=func(func(x,y),z);
32.以下错误的描述是 。 printf(“%\\d\\n”,r);
函数调用可以 } A)出现在执行语句中 B)出现在一该程序的输出的结果是 。 个表达式中 A) 12 B) 13 C) 14
C)做为一个函数的实参 D)做为一个函数的形参
33.若用数组名作为函数调用的实参,传递
给形参的是 。
A)数组的首地址 B)数组第一个
元素的值
C)数组中全部元素的值 D)数组元
素的个数
34. 以下不正确的说法为 。 A)在不同函数中可以使用相同名字的变量 B)形式参数是局部变量 C)在函数内定义的变量只在本函数范围内有效 D)在函数内的复合语句中定义的变量在本函数范围内有效 35. 下面程序的正确运行结果是: 。 main( ) {int a=2, i;
for(i=0;i<3;i++)
printf(“%4d”,f(a) ); }
f( int a)
{ int b=0; static int c=3;
b++; c++;
return (a+b+c);}
A)7 7 7 B)7 10 13 C)7 9 11 D)7 8 9
36. 有如下函数调用语句
func(rec1,rec2+rec3,(rec4,rec5);
该函数调用语句中,含有的实参个数
是 。
A) 3 B) 4 C) 5 D) 有语法错
D) 15
38. 有以下程序 main() { char s[]=\"\\n123\\\\\"; printf(\"%d,%d\\n\执行后输出结果是 。 A) 赋初值的字符串有错 B) 6,7
C) 5,6 D)
6,6 39. 以下对C语言函数的有关描述中,正确的是 。
A) 在C中,调用函数时,只能把实参的值传送给形参,形参的值不能传送给实参 B) C函数既可以嵌套定义又可以递归调用 C) 函数必须有返回值,否则不能使用函数
D) C程序中有调用关系的所有函数必须放在同一个源程序文件中
40. 以下函数值的类型是 。 fun ( float x ) { float y; y= 3*x-4; return y; } A ) int B) 不确定 C) void D) float 41. 下面程序的输出结果是: 。 int m=13; int fun( int x, int y) { int m=3;
return( x*y-m); }
main( ) {int a=7,b=5;
23
void fun(int x,int y) { x=x+y;y=xy;x=xy;
10 printf(\"%d,%d,\
main( ) 42. 若有说明语句:static int
{ int x=2,y=3; a[3][4]={0};
fun(x,y); 则下面叙述正确的是: 。
printf(\"%d,%d\\n\A)只有a[0][0]元素可得到初值0;
4.以下函数的功能是计算B)数组a中每个元素均可得到初值0。
printf(“%d\\n”, fun(a,b)/m); }
A)1 B)2 C)7 D)
C)数组a中各元素都可得到初值,但
值不一定为0;
D)此说明语句不正确
43. 以下程序的运行结果是: 。
main( )
{ int a=2, i ;
for(i=0;i<3;i++)
printf(“%4d”,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
6.2 填空题 1.以下程序输出的最后一个值是 。 int ff(int n)
{ static int f=1;
f=f*n;
return f;
}
main( )
{ int i;
for(i=1;i<=5;i++) printf(\"%
4d\
2.以下函数的功能是求x的y次方,请填空。 double fun( double x, int y) { int i; double z; for(i=1, z=x; is=1+1/2!+1/3!+„+1/n!,请填空。 double fun(int n) { double s=0.0,fac=1.0;int i; for(i=1;i<=n;i++){ fac= ;
s=s+fac; }
return s; }
5.以下程序的运行结果是 。 #include int fun(int x, int y) { static int m=0,i=2; i+=m+1; m=i+x+y;return m;
} main( ) { int j=4,m=1,k; k=fun(j,m); printf(\"%d,\
k=fun(j,m); printf(\"%d\\n\6.以下程序的运行结果是 。 float fun(int x,int y) { return(x+y); } main( ) { int a=2,b=5,c=8; printf(\"%3.0f\\n\c)); } 7.函数pi的功能是根据以下近似公式求值: ()/6=1+1/(22)+1/(33)+„+1/(nn)
现在请你在下面的函数中填空,完成求的功能。 #include \"math.h\" double pi(long n)
{ double s=0.0; long i;
for(i=1;i<=n;i++)s=s+ ;
24
return(sqrt(6*s));}
8.以下程序的运行结果是 。
}
main()
void fun(int x, int y, int z)
{ printf(\"funin:%d,%d,%
d\\n\
y=x+5; z=x*y; x=zy;
printf(\"funend:%d, %d, %
d\\n\
main( )
{ int x=10,y=20,z=30; fun(z,y,x);
printf(\"%d,%d,%d\\n\
9.以下程序的运行结果是 。
main( ) { int a=5; fun(a);
printf(\"\\n\"); }
fun(int k)
{ if(k>0) fun(k1); printf(\"%d\
10.以下程序的运行结果是 。
int a=1; fun(int b)
{ static int a=5; a+=b;
printf(\"%d\ return(a) ; } main( ) { int d=3;
printf(\"%d\\n\*fun(a+d))) ; }
11. 以下程序的功能是调用函数fun计算:m=1-2+3-4+„+9-10,并输出结果。请填空。
int fun( int n) { int m=0, f=1, i; for(i=1; i<=n; i++) { m + = i * f; f= ; }
return m;
{ printf(\"m=%d\\n\12. 以下程序运行后的输出结果是 【12】 。
fun(int a)
{ int b=0; static int c=3; b++;c++;
return(a+b+c);} main()
{ int i,a=5; for(i=0;i<3;i++)
printf(\"%d %d\
printf(\"\\n\");}
13. 以下程序运行后的输出结果是 【11】
void swap(int x,int y) { int t;
t=x; x=y; y=t;
printf(\"%d %d \main() { int a=3, b=4;
swap(a , b);
printf(\"%d %d\}
14. 以下函数的功能是:求x的y次方,请填空。
double fun( double x, int y) { int i;
double z;
for(i=1, z=x; i15. 设在主函数中有以下定义和函数调用语句,且fun函数为void类型;请写出fun函数的首部 。要求形参名为b。 main(){ double s[10]; int n; ┆ ┆ fun(s); ┆ }
25
void increment(void) 16. 函数fun的功能是:使字符串str按逆
{ static int x = 8; 序存放。(2级)
x ++; void fun (char str[])
printf(\"x = %d\\n\{ 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(\"%s\\n\
17. 以下程序的运行结果是 。
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); }
18. 以下程序的输出结果是 。
void fun()
{ static int a=0;
a+=2; printf(“%d”,a); }
main()
{ int cc; for(cc=1;cc<4;cc++) fun() printf(“\\n”); } 19. 以下程序的输出结果是 。 #include void f(int c)
{ int a=0;
static int b=0;
a++;
b++;
printf(\"%d: a=%d, b=%d\\n\void main()
{ int i;
for (i=1; i<=2; i++) f( i );}
20. 以下程序的输出结果是 。
#include void increment(void);
void main(void)
{ increment();
increment();}
21 若有以下程序,执行后输出结果是 。 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(\"%d\\n\22. 下面程序的运行结果是: 。 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)); } 第7章 7.1 单选题 1.以下说法中正确的是( )。 A.#define和printf都是C语言语句 B.#define是C语言语句,而printf不是
C.printf是C语言语句,但#define
不是 D.#define和printf都不是C语言语句 2.以下程序中的for循环执行的次数是( )。 #define N 2 #define M N+1 #define NUM 2*M+1
main( ) { int i; for(i=1;i<=NUM;i++)printf(\"%d\\n\ A.5 B.6 C.7 26
D.8
3.设有以下宏定义:
#define N 3
#define Y(n) ( (N+1)*n)
#define M1 N*3
以下程序编译后运行的输出结果是( )。
#include \"type1.h\"
#define M2 N*2 则执行语句:“z=2 * (N+Y(5+1));”后,
main( ) z的值为( )。
{ int i;
A.出错 B.42 C.48
D. 4.以下程序的输出结果是( )。 #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
D.18 5.下列程序执行后的输出结果是( )。 #define MA(x) x* (x1) main( ) { int a=1,b=2; printf(\"%d \\n\ A.6 B.8 C.10 D.12
6.以下程序的输出结果是( )。
#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
D.1
7.以下程序的输出结果是( )。 #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
D.12
8.程序中头文件type1.h的内容是:
#define N 5
i=M1+M2;
printf(\"%d\\n\
A.10 B.20 C.25
D.30
9. 有以下程序:
#define f(x) x*x
main( )
{ int i;
i=f(4+4)/f(2+2);
printf(\"%d\\n\
执行后的输出结果是( )。 A. 28 B. 22 C. 16 D. 4 10. 以下叙述中正确的是______。 A.预处理命令行必须位于源文件
的开头
B.在源文件的一行上可以有多条预处理命令 C.宏名必须用大写字母表示 D.宏替换不占用程序的运行时间
7.2 填空题
1.设有以下宏定义: #define MYSWAP(z,x,y) {z=x; x=y;
y=z;}
以下程序段通过宏调用实现变量a、b内容交换,请填空。
float a=5,b=16,c;
MYSWAP( ,a,b);
2.以下程序的运行结果是 。
#define MAX(x,y) (x)>(y)?(x):(y) main( )
{ int a=2,b=2,c=3,d=3,t; t=MAX(a+b,c+d) *10;
27
printf(\"%d\\n\
3.以下程序的运行结果是 。
#define N 10 #define s(x) x*x #define f(x) (x*x) main() { int i1,i2;
i1=1000/s(N);i2=1000/f(N); printf(\"%d %d\\n\
4.以下程序的运行结果是 。
#define MCRA(m) 2*m #define MCRB(n,m) 2*MCRA(n)+m
main( )
{ int i=2,j=3;
printf(\"%d\\n\ }
5. 以下程序运行后的输出结果是 。
#define S(x) 4*x*x+1 main()
{ int i=6,j=8;
printf(\"%d\\n\}
6. 以下程序运行后的输出结果是 。
# define f(x) (x)*(x) main() { int i1, i2; i1=f(10)/f(5) ; i2=f(6+6)/f(3+3) ; printf(\"%d, %d\\n\ } 习题8
1.定义如下变量和数组:
int i;
int x[3][3]={1,2,3,4,5,6,7,8,9};
则下面语句的输出结果是( )。for(i=0;i<3;i++) printf(\"%d\i]); A.1 5 9 B.1 4 7 C.3 5 7 D.3 6 9
2.执行下面的程序段后,变量k中的
值为( )。
int k=3, s[2];
s[0]=k; k=s[1] *10;
A.不定值 B.33 C.30 D.10
3.以下程序的输出结果是( )。
#include \"stdio.h\" main( )
{ int n[5]={0},i,k=2;
for(i=0;iA.不确定的值 B.2 C.1 D.04.以下程序的输出结果是( )。
#include \"stdio.h\" 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
5.以下程序段中,不能正确赋值为字符串(编译时系统会提示错误)的是( )。
A.char s[10]=\"abcdefg\"; B.char s[ ]=\"abcdefg\";
C.char s[10]; s=\"abcdefg\"; D.char s[10]; strcpy(s,\"abcdefg\");
6.以下程序执行后的输出结果是( )。
main( ) { char a[]=\"abcdefg\
b[10]=\"abcdefg\";
printf(\"%d%d\\n\sizeof(a) ,
sizeof(b));}
A.7 7 B.8 8 C.8 10
D.10 10
7.给出以下定义:
char x[ ]=\"abcdefg\";
char y[ ]={'a','b','c','d','e','f','g'};
则正确的叙述为( )
。 A.数组x和数组y等价 B.数组x和数组y的长度相同 C.数组x的长度大于数组y的长度28
D.数组x的长度小于数组y的长度 8.函数调用“strcat(strcpy(str1,str2),str3)”的功能是( )。
A.将串str1复制到串str2中后再连接到串str3之后
B.将串str1连接到串str2之后再复制到printf(\"\\n\"); }
A.a B.a C.ab D.abcdef
b b c
c c d
d d 串str3之后 C.将串str2连接到串str1之后再将串str1复制到串str3中 D.将串str2复制到串str1中后再将串str3连接到串str1之后
9.当执行下面的程序且输入ABC时,输出的结果是( )。
#include #include main( ){ char ss[10]=\"1234567\"; gets(ss); printf(\"%s\\n\A.ABC B.ABC9 C.123456ABC D.ABC4567
10.以下程序执行后的输出结果是( )。
#include \"stdio.h\"
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.2ba56 B.6 C.6521 D.62
11.运行下面的程序,如果从键盘上输入:
ab<回车>
c <回车>
def<回车>
则输出结果为( )。
#include #define N 6
main( )
{ char c[N]; int i=0;
for( ;ifor( i=0;ie f12.以下程序运行的输出结果是( )。
#include \"stdio.h\"
main( )
{ char ch[2][5]={\"693\ int i,j,s=0;
for(i=0;i<2;i++) for(j=0;j<1;j++)
s=10*s+ch[i][j]'0'; printf(\"%d\\n\ }
A.6385 B.68 C.6982 D.693825 13.以下程序执行后的输出结果是( )。 #include \"stdio.h\" void swap (int c0,int c1)
{ int t; t=c0;c0=c1;c1=t;} main( )
{ int b[2]={3,5}; swap(b[0],b[1]); printf(\"%d %d\\n\ A.5 3 B.3 5 C.3 3 D.5 5 14.以下程序执行后的输出结果是( )。 #include \"stdio.h\" void func1(int i); void func2(int i); char st[]=\"hello,friend!\"; void func1(int i) 29
D.11 11
17. 不能把字符串Hello!赋给数组b的语句是( )。
A. char b[10]={'H' , 'e' , 'l' , 'l' , 'o' , '!'};
B. char b[10];b=\"Hello!\";
C. char b[10];strcpy(b,\"Hello!\");
D. char b[10]=\"Hello!\";
A.hello B.hel C.hlo 18. 执行下面的程序段后,变量k中的值为{ 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\");}
D.hlm 15.以下程序段的输出结果是( )。 #include main( ) { char s1[10], s2[10], s3[10], s4[10];scanf(\"%s%s\gets(s3);
gets(s4);
puts(s1); puts(s2); puts(s3); puts(s4);
}
输入数据如下:(此处< Enter >代表
回车符) aaaa bbbb cccc dddd< Enter > A.aaaa B.aaaa C.aaaa D.aaaabbbb bbbb bbbb bbbb
cccc cccc dddd
cccc dddd dddd cccc dddd
16. 以下程序程序运行后的输出结果是
( )。 #include \"stdio.h\" main() {char p[20]={ 'a', 'b', 'c', 'd'},q[]={\"abc\"}
char r[]=\"abcde\";
strcpy(p+strlen(q), r);
strcat(p , q);
printf(“%d %d\\n”,sizeof(p),strl
en(p));}
A.20 9 B.9 9 C.20 11
()。
int k=3, s[2];
s[0]=k; k=s[1]*10; A. 不定值 B. 33 C.30 D. 10
19. 以下程序执行后输出结果是()。
main()
{ int x[8]={8, 7, 6, 5, 4, 3}, *s;
s=x+3;
printf(\"%d\\n\
A. 随机值 B. 3 C. 5 D. 6 20. 以下程序的输出结果是()。
A. 18 B. 19 C. 20 D)21
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\
}
21. 以下程序的输出结果是()。
main() { char w[][10]={ \"ABCD\\"MNOP\
for(k=1; k<3; k++) printf(\"%s\\n\} A. ABCD B. ABCD FGH EFG KL IJ
M
C. EFG D. EFGH
JK IJKL
30
O 29. 下列定义正确的是 。 22. 以下不能正确进行字符串赋初值的语A) static int a[]={1,2,3,4,5} B) 句是() int b[1]={2,5}
C) int a(10) D) A. char str[5]=\"good!\"; B. char
str[]=\"good!\"; C. char *str=\"good!\"; int 4e[4]
D.char str[5]={'g', 'o', 'o', 'd'};
23. 给出以下定义:
char x[]=\"abcdefg\";
char y[]={'a','b','c','d','e','f','g'};
则正确的叙述为
A)数组X和数组Y等价 B)数组x和数组
Y的长度相同
C)数组X的长度大于数组Y的长度 D)数组X的长度小于数组Y的长度 24. 若有以下说明: int a[12]={1,2,3,4,5,6,7,8,9,10,11,12}; char c='a',d,g; 则数值为4的表达式是 A)a[g-c] B)a[4] C)a['d'-'c'] D)a['d'-c] 25. 执行下面的程序段后,变量k中的值为 int k=3, s[2]; s[0]=k; k=s[1]*10; A) 不定值 B) 33 C) 30 D) 10 26. 在C语言中,引用数组元素时,其数组下标的数据类型允许是 。 A)整型常量 B)整型常量或整型表达式 C)整型表达式 D)任何类型的表达式 27.以下对一维整型数组a的正确说明是 。(0级) 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];
28、以下能对一维数组a进行正确初始化的
语句是 。
A)int a[10]=(0,0,0,0,0); B)int a[10]={ };
C)int a[ ]={0}; D)int
a[10]={10*1};
30. 设有char str[10],下列语句正确的是 。 A) scanf(\"%s\ B) printf(\"%c\ C) printf(\"%s\ D) printf(\"%s\
31. 假设array是一个有10个元素的整型数
组,则下列写法中正确的是 。
A) array[0]=10 B) array=0 C) array[10]=0
D) array[-1]=0 32. 分析下列程序 main() {int n[3],i,j,k; for(i=0;i<3;i++) n[i]=0; k=2; for(i=0;iD)3 33. 若有如下定义:int a[3][3]={1,2,3,4,5,6,7,8,9},i ; 则下列语句的输出结果是: 。 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 34.下列字符串赋值语句中,不能正确把字符串C program赋给数组的语句
是: 。 A)char 31
{ a[i]=y%2; i++; a[]={„C‟,„ ‟,„p‟,„r‟,„o‟,„g‟,„r‟,„a‟,„m‟ ,„\\0‟};
y=y/2; B)char a[10]; strcpy(a2, “C
}while(y>=1); program”);
for(j=i-1;j>=0;j--) C)char a[10]; a= “C program”;
printf(\"%d\
D)char a[10]={ “C program”};
printf(\"\\n\");
35. 下面程序的运行结果是 。 }
char c[5]={‘a’,‘b’,‘\\0’,‘c’,‘\\0’}; 运行结果为: 。
printf(“%s”,c); }
(3)#includeA)‘a’‘b’ B)ab\\0c\\0 C)ab c #include D)ab 36. 若有如下定义和语句: char s[12]= “a book!”; printf(“%d”,strlen(s) ); 则输出结果是: 。 A)12 B)10 C)7 D)637. 若有说明:int a[3][4] = {0};则下面正
确的叙述是: 。
A)只有元素a[0][0]可以得到初值0
B)此说明语句不正确 C)数组a中每个元素均可得到初值0 D)数组a每个元素均可得到初值,但值不一定为0 8.2 填空题 1.阅读下面的程序,写出运行结果。 (1)#include \"stdio.h\"
main( )
{int i=0,n=3,j,k=3; int a[4]={2,4,5}; do i++; while(i<=n && k>a[i]); for(j=n-1;j>=i;j-- ) a[j+1]=a[j]; a[i]=k; for(i=0;i<=n;i++) printf(\"%3d\ 运行结果为: 。
(2)#include \"stdio.h\"
main( )
{ int y=18,i=0,j,a[8]; do
main( ) {
int i; char str[10],temp[10]; gets(temp);
for (i=0; i<4; i++) { gets(str); if (strcmp(temp,str)<0) strcpy(temp,str); }
printf(\"%s\\n\
} 从键盘上输入(在此代表回车符): C++ BASICQuickC AdaPascal 运行结果为: 。 (4)#include main( ) { int a[6][6],i,j; for(i=1;i<6;i++) for(j=1;j<6;j++) a[i][j]=(i/j) * (j/i); for(i=1;i<6;i++) { for(j=1;j<6;j++) printf(\"%2d\printf(\"\\n\"); } } 运行结果为: 。
2.下面程序的功能是:将字符数组a中下标值为偶数的元素从小到大排列,其
32
他元素不变。请在程序的下划线处填空。
#include #include main( ){ char a[]=\"clanguage\ int i, j, k; k=strlen(a);
for(i=0; i<=k2; i+=2)
for(j=i+2; j<=k; (1) ) if( (2) )
{ t=a[i]; a[i]=a[j]; a[j]=t; } puts(a);
printf(\"\\n\"); }
3.以下fun( )函数的功能是:累加数组元数中的值,n为数组中元素的个数,累加的和
值放入x所指的存储单元中,请填空。
fun(int b[ ],int n, int *x) { int k, r=0;
for(k=0;k4. 以下程序运行后的输出结果是【15】 main(){ int i,n[]={0,0,0,0,0}; for(i=1;i<=4;i++) { n[i]=n[i-1]*2+1;
printf(\"%d \ } 5. 以下程序从终端读入数据到数组中,统计其中正数的个数,并计算它们之和。请填空。 main()
{ int i,a[20],sum,count; sum=count=0;
for(i=0; i<20; i++) scanf(\"%d\ ); for(i=0; i<20; i++) { if(a[i]>0)
{ count++; sum += ;} }
printf(\"sum=%d,count=%d\\n\sum, count);}
6. 对与数组a[m][n]来说,使用数组的某个元素时,行下标的最大值是 ,列
下标的最大值是 。
7. 下面程序中的数组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;____ (1) ___; i++) b[i]=____ (2)_____; for(i=1;i<10;i++) { printf(“%3d”,b[i]); if (___(3)___) printf(“\\n”); } }
8. 以下程序是求矩阵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] = ___(1)____ ; for ( i=0; i<3; i++ ) { for ( j=0; j<4; j++ )
printf ( “%3d”, c[i][j] ) ; ____(2)___ ; } }
9. 下列程序的运行结果是 。 main()
{int a[]={1,2,3,4},i,j,s=0; j=1;
for(i=3;i<=0;i--) {s=s+a[i]*j; j=j*10; }
printf(“s=%d\\n”,s);
第9章
33
int fun(int x,int y,int *cp,int *dp) 9.1 单选题
{ *cp=x+y; *dp=xy; } 1.以下程序段执行后,变量b的值是
main( ) ( )。
{ int a, b, c, d; int
a=30; b=50; a[10]={1,2,3,4,5,6,7,8,9,10},*p=&a[3], b;
fun(a,b,&c,&d); b=p[5];
printf(\"%d,%d\\n\ A.5 B.6 C.8
D.9
2.设有以下定义:
int
a[4][3]={1,2,3,4,5,6,7,8,9,10,11,12};
int (*prt)[3]=a, *p=&a[0][0];
则下列能够正确表示数组元素a[1][2]的表
达式是( )。
A.* ((*prt+1) [2]) B.* (* (p+5))
C.(*prt+1)+2 D.* (* (a+1)+2) 3.下列选项中不正确的赋值或赋初值的方式是( )。 A.char str[10]; str=\"string\"; B.char str[ ]=\"string\";
C.char *p=\"string\"; D.char *p; p=\"string\"; 4.对于变量定义: int p[5],*a[5]; 表达式( )是正确的。
A.p=a B.p[0]=a C.* (a+1)=p
D.a[0]=2
5.设P1和P2是指向同一个int型一维数
组的指针变量,k为int型变量,则不能正
确执行的语句是( )。
A.k=*P1+*P2; B.P2=k;
C.P1=P2; D.k=*P1 * (*P2);
6.执行以下程序段后,m的值为( )。
int a[2][3]={ {1,2,3},{4,5,6} };
int m, *p;
p=&a[0][0];
m=(*p) * (* (p+2)) * (* (p+4));
A.15 B.14 C.13 D.12 7.以下程序输出结果是( )。 #include \"stdio.h\"
A.50,30 B.30,50 C. 80,20 D. 80,20 8.以下程序的输出结果是( )。 #include \"stdio.h\" void swap1(int c[ ]) { int t; t=c[0];c[0]=c[1]; c[1]=t; } void swap2(int c0, int c1)
{ int t;
t=c0;c0=c1;c1=t;}
main( ) { int a[2]={3,5},b[2]={3,5}; swap1(a); swap2(b[0],b[1]);
printf(\"%d %d %d %
d\\n\ } A.5 3 5 3 B.5 3 3 5 C.3 5 3 5 D.3 5 5 3 9.以下程序的输出结果是( )。
#include \"stdio.h\"
void sum(int *a) { a[0]=a[1]; } main( ) { int aa[10]={1,2,3,4,5,6,7,8,9,10},i; for(i=2;i>=0;i) sum(&aa[i]);
printf(\"%d\\n\
A.4 B.3 C.2
D.1
10.以下程序执行后的输出结果是
( )。
#include \"stdio.h\"
int f(int b[][4])
{ int i,j,s=0;
for(j=0;j<4;j++)
{ i=j; if(i>2) i=3-j; s+=b[i][j]; }
return s; } 34
main( ) {int
a[4][4]={{1,2,3,4},{0,2,4,5},{3,6,9,12},{3,2,1,0}};
printf(\"%d\\n\
A.12 B.11 C.18 D.16
11.以下程序执行后的输出结果是( )。
#include \"stdio.h\" void sort(int a[], int n) { int i,j,t;
for(i=0;imain( ){ int aa[10]={1,2,3,4,5,6,7,8,9,10},i; sort(aa,10);
for(i=0;i<10;i++) printf(\"%d, \
printf(\"\\n\");}
A.1,2,3,4,5,6,7,8,9,10,
B.10,9,8,7,6,5,4,3,2,1,
C.9,2,7,4,5,6,3,8,1,10,
D.1,10,3,8,5,6,7,4,9,2,
12.以下程序经编译链接后生成的可执
行文件是ex.exe,若运行时输入以下带参数的命令行
ex abcd efg h3 k44 执行后的输出结果是( )。 #include main(int argc ,char *argv[ ]) { int i,len=0;
for(i=1;ilen+=strlen(argv[i]);printf(\"5d\\n\
A.14 B.12 C.8 D.6
13.以下程序执行后的输出结果是( )。
#include \"stdio.h\"
void f(int a[ ],int i,int j) { int t;
if(i{ t=a[i]; a[i]=a[j];a[j]=t; f(a,i+1,j-1);} } main( ){ int i,aa[5]={1,2,3,4,5}; f(aa,0,4);
for(i=0;i<5;i++) printf(\"%d,\printf(\"\\n\"); }
A.5,4,3,2,1, B.5,2,3,4,1,
C.1,2,3,4,5, D.1,2,3,4,5,
14.若有以下说明和定义:
#include \"stdio.h\" fun(int *c){ } main( )
{ int (*a)( )=fun, *b( ),w[10],c; „„ } 在必要的赋值之后,对fun( )函数的正确调用语句是( )。
A.c=a(w); B.c=(*a)(&c); C.c=*a(w); D.c=fun (b); 15.下列程序的输出结果是( )。
#include \"stdio.h\" main( )
{ int a[5]={2,4,6,8,10},*p, **k; p=a; k=&p; printf(\"%d\(p++)); printf(\"%d\\n\
A.4 4 B.2 2 C.2 4 D.4 6
16. 设有如下定义:
int arr[]={6,7,8,9,10}; int *ptr;
则下列程序段的输出结果为( )。
35
a[]=\"abcdefg\ ptr=arr;
*(ptr+2)+=2;
printf(\"%d %d\\n\
A. 7 7 B. 8 8 C. 8 10
printf(\"%d,%d\\n\
D. 10 10
A. 8,10 B. 6,8 C. 7,9
D. 6,10
17. 执行以下程序段后,m的值为( )。 int a[2][3]={ {1,2,3},{4,5,6} }; int m,*p;
p=&a[0][0];
m=(*p)*(*(p+2))*(*(p+4));
A. 15 B. 14 C. 13
D. 12
18. 有以下程序段
char arr[]=\"ABCDE\"; char *ptr; for(ptr=arr;ptrD. ABCDEB D
BCDE
C C
CDE
D B DE E A E 19. 设有定义:int a,*pa=&a; 以下
scanf语句中能正确为变量a读入数据的是
( )。
A. scanf(\"%d\ B.
scanf(\"%d\
C. scanf(\"%d\; D. scanf(\"%d\
20. 以下程序执行后输出结果是
( )。
main( )
{ char
21. 以下程序执行后的输出结果
是( )。
void sum(int *a) { a[0]=a[1];}
main( ) { int aa[10]={1,2,3,4,5,6,7,8,9,10},i;
for(i=2;i>=0;i--) sum(&aa[i]); printf(\"%d\\n\ A. 4 B. 3 C. 2 D. 1
22. 以下程序段中,不能正确赋字符串
(编译时系统会提示错误)的是( )。
A. char s[10]=\"abcdefg\";
B. char t[]=\"abcdefg\ C. char s[10];s=\"abcdefg\"; D. char s[10];strcpy(s,\"abcdefg\"); 23. 设有定义语句
int x[6]={2,4,6,8,5,7},*p=x,i;
要求依次输出x数组6个元素中的值,不能完成此操作的语句是( )。 A. for(i=0;i<6;i++) printf(\"%2d\ B. for(i=0;i<6;i++) printf(\"%2d\
C. for(i=0;i<6;i++)
printf(\"%2d\ D. for(i=0;i<6;i++)
printf(\"%2d\ 24. 有以下程序
#include main() {int a[]={1,2,3,4,5,6,7,8,9,10,11,12,},*p=a+5,*q=NULL; *q=*(p+5); printf(\"%d %d\\n\ } 程序运行后的输出结果是
( )。 A. 运行后报错 B. 6 6 C. 6 11 36
D. 5 10 B.char s[10];s=\"right!\";
25. 有以下程序 C.char s[10];*s=\"right!\"; main() D.char *sp=\"right!\"; { char 29. 以下程序运行后的输出结果是str[]=\"ChinaBeijing\
( )。
printf(\"%s\\n\ }
main()
程序运行后的输出结果是( )。
{ char s[]=\"159\A. China B. Bejing C. ng
D. ing
26. 有以下程序
void f(int *x,int *y)
{ int t;
t=*x;*x=*y;*y=t;}
main()
{ int a[8]={1,2,3,4,5,6,7,8},i,*p,*q;
p=a;q=&a[7];
while(p{ f(p,q);p++;
q--; }
for(i=0;i<8;i++)
printf(\"%d,\
程序运行后的输出结果是
( )。
A. 8,2,3,4,5,6,7,1,
B. 5,6,7,8,1,2,3,4,
C. 1,2,3,4,5,6,7,8,
D. 8,7,6,5,4,3,2,1,
27. 有以下程序
main()
{ int a[3][3],*p,i;
p=&a[0][0];
for(i=0;i<9;i++) p[i]=i;
for(i=0;i<3;i++)
printf(\"%d\程序运行后的输出结果是( )。 A.012 B.123 C.234 D.345 28. 以下语句或语句组中,能正确进
行字符串赋值的是______。
A.char *sp;*sp=\"right!\";
p=s; printf(\"%c\printf(\"%c\A.15 B.16 C.12 D.59 30. 以下程序运行后的输出结果是( )
point(char *p){p+=3;} main() { char b[4]={'a','b','c','d'},*p=b; point(p);printf(\"%c\\n\;} A.a B.b C.c D.d 31. 设有定义:int n1=0,n2,*p=&n2,*q=&n1;,以下赋值语句中与n2=n1;语句等价的是( )。 A. *p=*q; B. p=q; C. *p=&n1; D. p=*q;
32. 若有定义:int x=0, *p=&x;,则语
句printf(\"%d\\n\的输出结果是( )。
A. 随机值 B. 0 C. x的地址 D. p的地址
33. 以下程序运行后的输出结果是
( )。
main()
{ int a=7,b=8,*p,*q,*r;
p=&a;q=&b; r=p; p=q;q=r;
printf(\"%d,%d,%d,%d\\n\ } A. 8,7,8,7 B. 7,8,7,8 C. 8,7,7,8 D. 7,8,8,7 37
9.2 填空题
1. 下列程序段的输出结果: 。
int k=1,j=2, *p, *q, *t; p=&k; q=&j; t=p; p=q; q=t;
printf(\"%d,%d\*p, *q); 2. 下列程序段的输出结果: 。
int c[ ]={10,30,5}, *pc;
for(pc=c; pcd#\ *pc);3. 下列程序段的输出结果: 。
char
*st[ ]={\"ONE\
printf(\"%s,%c\\n\* (st+2),
**st+1);
4. 设有以下定义的语句:
int a[3][2]={10,20,30,40,50,60},
(*p)[2];
p=a;
则* (* (p+2)+1)值为 。 5. 下列程序的运行结果: 。
#include \"stdio.h\" main( ) { int a[10]={19,23,44,17,37,28,49,36}, *p;
p=a;
printf(\"%d\\n\6. 下列程序的运行结果: 。
#include \"stdio.h\"
main( ) {char
*p[10]={\"abc\cd\
printf(\"%d\\n\
7. 下列程序的运行结果: 。
#include \"stdio.h\" main( )
{ int x[]={1,2,3,4};
int *p,i,a,b; p=&x[1]; a=10;
for(i=2;i>=0;i--) b=(*(p+i)printf(\"%d\\n\8. 下列程序的运行结果: 。#include \"stdio.h\" int a[ ]={9,7,5,3,1}; main( )
{ int i, *p=a;
void f1(int *x, int y, int z ); f1(p,0,1); f1(p,1,2); f1(p,2,3); f1(p,3,4); for(i=0; i<5;i++) printf(\"%5d\
printf(\"\\n\");}
void f1(int *x, int y, int z ) { int c;
while(y*(x+y)= *(x+z); *(x+z)=c; y++; z--; } } 9. 下列程序的运行结果: 。#include \"stdio.h\" main( ) { int n;
char *p1, *p2;
int fun(char *s1,char *s2 ); p1=\"abcxyz\"; p2=\"abcijk\"; n=fun(p1,p2); printf(\"%d\\n\int fun(char *s1,char *s2 )
{ while(*s1&&*s2&&*s2++==*s1++);
return(*s1-*s2);} 10.下列程序的运行结果: 。
#include \"stdio.h\"
int a[2][2]={1,2,3,4},*p[]={a[0],a[1]}, **pp=p;
38
main( )
{ int (*s)[2]=a,*q=&a[0][0]; int i,j;
for(i=0;i<2;i++) for(j=0;j<1;j++)
printf(\"%d,%d,%d,%d,%d \\n\2*i+j), * (*s+2*i+j));} 11.下列程序的运行结果: 。
#include \"stdio.h\" int a[5][5]={0}; main( )
{ int i,j, *p[5];
for(i=0;i<5;i++) *(p+i)=&a[i][0]; for(i=0;i<5;i++) { * (p[i]+i)=1;
* (p[i]+5-i-1)=1; } for(i=0;i<5;i++) { for(j=0;j<5;j++) printf(\"%4d\
printf(\"\\n\"); } }
12. 以下函数的功能是,把两个整数
指针所指的存储单元中的内容进行交换。请在下划线处填空。
exchange(int *x, int *y) { int t;
t=*y; *y= (1) ; *x= (2) ;} 13.以下函数把b字符串连接到a字符串的后面,并返回a中新字符串的长度。请填空。
strcen(char a[ ], char b[ ]) { int num=0,n=0;
while(* (a+num)!= (1) )
num++;
while(b[n]) { * (a+num)=b[n];
num++; (2) ;} return(num);}
14.下面程序输出的结果是 。
#include \"stdio.h\" #define MAX 3 int a[MAX]; main( )
{ void fun1( );void fun2(int b[ ]); fun1( ); fun2(a); printf(\"\\n\");} void fun1( ) { int k, t=0;
for (k=0; kvoid fun2(int b[ ]) { int k;for(k=0; k习题1010.1 单选题
1.以下各选项试图说明一种新的类型名,其中正确的是( )。
A.typedef v1 int; B.typedef v2=int;
C.typedef int v3; D.typedef v4: int;
2.若要说明一个类型名STP,使得定义语句“STP s;”等价于“char *s;”,以下选项
中正确的是( )。
A.typedef STP char *s; B.typedef *char STP;
C.typedef STP *char; D.typedef char* STP ;
3.若有以下说明和定义:
typedef int *INTEGER INTEGER p, *q;
以下叙述中正确的是( )。 A.p是int型变量
B.p是基类型为int的指针变量
C.q是基类型为int的指针变量 D.程序中可用INTEGER代替int类型名
4.在以下选项中,能定义s为合法的结构体变量的是( )。
A.typedef struct abc B.struct { double a; { double a; char b[10]; 39
char b[10]; B.scanf(\"%s\ } s; } s; C.scanf(\"%c\ C.struct ABC D . scanf(\"%c\ >sex)); D.typedef ABC 8.设有以下定义: { double a; struct sk
{ int a; float b;} data, *p; { double a;
char b[10];
若有“p=&data;”,则对data中的a域的正
char b[10];
} }
ABC s; ABC s;
5.设有以下定义语句:
struct ex
{ int x ; float y; char z ;} example;
则下面的叙述中不正确的是
( )。
A.struct是结构体类型的关键字
B.example是结构体类型名
C.x、y、z都是结构体成员名
D.struct ex是结构体类型
6.设有以下定义语句:
typedef struct
{ int n;
char ch[8];
}PER;
则下面叙述中正确的是( )。 A.PER 是结构体变量名 B.PER是结构体类型名 C.typedef struct 是结构体类型
D.struct 是结构体类型名
7.设有以下定义:
struct ss
{ char name[10];
int age;
char sex;
} std[3], * p=std;
下面各输入语句中错误的是( )。
A.scanf(\"%d\*p).age);
确引用是( )。 A.(*p).data.a B.(*p).a C.p >data.a D.P.data.a
9.设有以下定义语句:
typedef struct { int n; char c; double x;} STD;
则以下选项中,能正确定义结构体数组并
赋初值的语句是( )。
A.STD tt[2]={{1,'A',62},{2,'B',75}}; B.STD tt[2]={1,\"A\}; C.struct tt[2]={{1,'A'},{2,'B'}}; D.struct tt[2]={{1,\"A\},{2,\"B\}}; 10.设有以下定义语句:
struct person{char name[9]; int age;}; strict person class[10]={\"Johu\\"Paul\\"Mary\
\"Adam\ 则以下选项中,能输出字母M的语句是( )。
A.printf(\"%c\\n\",class[3].mane); B.printf(\"%c\\n\",class[3].name[1]);
C.printf(\"%c\\n\",class[2].name[1]);
D.printf(\"%c\\n\",class[2].name[0]);
11.以下程序的运行结果是( )。 struct st { int x; int *y;} *p; int dt[3]={ 10,20,30 }; struct st a[3]={ 50, &dt[0], 60, &dt[0], 70,
&dt[0]};
main( ) { p=a; 40
printf(\"%c\\n\ printf(\"%d\\n\>x));}
A.10 B.11 C.51 A.产生语法错误 B.随机值 C.A
D.60
12.设有如下定义:
struct sk { int a; float b; }data; int *p;
若要使p指向data中的a域,正确的赋值语句是( )。
A.p=&a; B.p=data.a;C.p=&data.a;D.*p=data.a
13.以下程序的运行结果是( )。
struct STU
{ char num[10]; float score[3];}; main( ) { struct STU
s[3]={{\"20021\
{\"20022\
{\"20023\*p=s;
int i; float sum=0; for(i=0;i<3;i++)
sum=sum+p>score[i]; printf(\"%6.2f\\n\
A.260.00 B.270.00 C.280.00 D.285.00
14.变量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 15.以下程序的运行结果是( )。
main( )
{ union{ unsigned int n; unsigned char c; }ul; ul.c='A';
D.65 16. 以下选项中不能正确把cl定义成结构体变量的是( ) A.typedef struct B.struct color cl { int red; { int red; int green; int green; int blue; int blue;
} COLOR; }; COLOR cl; C.struct color D.struct
{ int red; { int red; int green; int
green;
int blue; int blue; } cl; } cl; 17. 如下定义的变量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 18. 下列程序段执行后的结果为( ) main() {union
{ char c[2]; int k; }r;
r.c[0]= '4'; r.c[1]= '5'; r.k=34;
printf(\"%d,%d,%d\\n\]);
}
A. 34,3,4 B. 45,4,5 C. 34,34,0 D. 34,34,34
19. 设有以下定义:
41
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
(1级) A) work.no B) (﹡p).no C) p->no D)work->no
24.有如下定义:
struct date { int year, month, day; };
struct worklist { char name[20];
20. 下列程序的输出结果是() char sex; A. 5 B. 6 C. 7 struct date birthday; }person;
D. 8
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\ }
21. 设有如下定义: struct sk { int a;
float b;
} data;
int *p;
若要使p指向data中的a域,正确的赋
值语句是()
A. p=&a; B. p=data.a;
C. p=&data.a;
D. *p=data.a
22. 在说明一个结构体变量时系统分配给
它的存储空间是 。
A) 该结构体中第一个成员所需存储空间 B) 该结构体中最后一个成员所需存储空间 C) 该结构体中占用最大存储空间的成员
所需存储空间
D) 该结构体中所有成员所需存储空间的
总和
23.若有以下说明和语句:
struct worker
{ int no; char ﹡name; }work, ﹡p=&work; 则以下引用方式不正确的是 。
对结构体变量person的出生年份进行赋值时,下面正确的赋值语句是 。 A) year=1958 B) birthday.year=1958 C) person.birthday.year=1958 D)
person.year=1958 25.设有以下说明语句 struct stu
{ int a; float b; }stutype;
则下面的叙述不正确的是 。 A) struct是结构体类型的关键字
B) struct stu是用户定义的结构体类型 C) stutype是用户定义的结构体类型名 D) a和b都是结构体成员名 26. 以下程序的运行结果是 。 # include main( ) { struct date{ int year, month,
day; }today; printf(“%d\\n”,sizeof(struct date)); }
A) 6 B) 8 C) 10 D)12 27..有如下定义 struct person{char name[9]; int age;}; struct person class[10]={“Johu”,
17,
“Paul”, 19
“Mary”, 18, “Adam 16,}; 根据上述定义,能输出字母M的语句
42
是 。 (4) ;若要使psa指向sa,则正确的赋A) prinft(“%c\\n”,class[3].mane); 值语句为 (5) 。 B) pfintf(“%c\\n”,class[3].name[1]);
C) prinft(“%c\\n”,class[2].name[1]); D) printf(“%^c\\n”,class[2].name[0]); 28..设有如下定义 struct ss { char name[10]; int age; char sex; } std[3],* p=std; 下面各输入语句中错误的是 。 A) scanf(\"%d\ B) scanf(\"%s\
C) scanf(\"%c\ D)
scanf(\"%c\
29.设有以下说明语句,则下面的叙述中
不正确的是 。
struct ex {
int x ; float y; char z ;
} example;
A) struct结构体类型的关键字 B) example是结构体类型名 C) x,y,z都是结构体成员名 D) struct ex是结构体类型 10.2 填空题
1.当定义一个结构体变量时系统分配
给该变量的内存大小为 。
2.当定义一个共用体变量时系统分配
给该变量的内存大小为 。
3.设有以下定义:
struct satype { char c;
int a;
float x;
}sa, *psa;
则sa为 (1) 类型的变量,它有 (2) 个成员;对成员a的引用方式为 (3) ;表达式sizeof(sa)的值为
4.以下程序的运行结果是 。 typedef union student
{ char name[10]; long sno; char sex; float score[4];
}STU; main( ) { STU a[5]; printf(\"%d\\n\ } 5.以下定义的结构体类型拟包含两个成员,其中成员变量info用来存入整型数据,成员变量link是指向自身结构体的指针。请将定义补充完整。
struct node
{ int info;
*link; }
6.以下程序的运行结果是 。
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\7. 有如下定义: struct {int x; int y; }s[2]={{1,2},{3,4}}, ﹡p=s; 则:表达式 ++p->x 的结果是 。
表达式 ++p->x 的结果是 。
8. 设有以下结构类型说明和变量定义,则变量a内存所占字节数是 。
Struct stud { char num[6]; int s[4];
double ave;
43
} a,*p
9. 以下程序的运行结果是 。
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‟; }
习题12
12.1 单选题
1.若要打开A盘上user子目录下名为abc.txt的文本文件进行读/写操作,下面符合此要求的函数调用是( )。
A.fopen(\"A:\\abc.txt\ B.fopen(\"A:\\\\\\abc.txt\ C.fopen(\"A:\\abc.txt\ D.fopen(\"A:\\\\\\abc.txt\2.若fp是指向某文件的指针,且已读到此文件末尾,则库函数feof(fp)的返回值是( )。
A.EOF B.0 C.非零值D.NULL
3.以下叙述中不正确的是( )。
A.C语言中的文本文件以ASCII码形式存储数据
B.C语言中,对二进制位的访问速度比文本文件快
C.C语言中,随机读/写方式不适用于文本文件
D.C语言中,顺序读/写方式不适用于二进制文件
4.在C语言程序中,可以把整型数以二进制形式存放到文件中的函数是( )。
A.fprintf函数 B.fread函数 C.fwrite函数 D.fputc函数 5.下面的程序执行后,文件test.txt中的内容是( )。
#include void fun(char *fname,char *st)
{ FILE *myf; int i;
myf=fopen(fname, \"w\" ); for(i=0;ifputc(st[i],myf);fclose(myf); } main( )
{ fun(\"test.txt\ fun(\"test.txt\
A.hello, B.new worldhello, C.new world D.hello, rld 6.以下程序的输出结果是( )。
#include main( ){ FILE *fp; int i=20,j=30,k,n; fp=fopen(\"d1.dat\
fprintf(fp, \"%d\\n\\"%
d\\n\
fclose(fp);
fp=fopen(\"d1.dat\
fscanf(fp, \"%d%d\printf(\"%d %d\\n\
fclose(fp); } A.20 30 B.20 50 C.30 50 D.30 20
7.以下叙述中错误的是( )。 A.二进制文件打开后可以先读文件的末尾,而顺序文件不可以
B.在程序结束时,应当用fclose函数关闭已打开的文件
C.利用fread函数从二进制文件中读
数据,可以用数组名给数组中所有元素读入数据
D.不可以用FILE定义指向二进制文件的文件指针
8.以下程序试图把从终端输入的字符输出到名为abc.txt的文件中,直到从终端读入字符#号时结束输入和输出操作,但程序有错。出错的是( )。
#include main( ){ FILE *fout; char ch; fout=fopen('abc.txt','w');
44
ch=fgetc(stdin);
while(ch!= '#') { fputc(ch,fout); ch=fgetc(stdin); } fclose(fout); }
A.函数fopen调用形式错误 B.输入文件没有关闭 C.函数fgetc调用形式错误 D.文件指针stdin没有定义 9. 下述关于C语言文件的操作的结论中,正确的是( )。 A. 对文件操作必须先关闭文件 B. 对文件操作必须先打开文件
C. 对文件操作顺序无要求 D. 对文件操作前必须先测文件是否存
在,然后再打开文件。 10. 若fp是指向某文件的指针,且已读到此文件末尾,则库函数feof(fp)的返回值是( ) A.EOF B.0 C.非零值D.NULL 11. 如果要打开一个已经存在的非空文件\"FILE\"进行修改,正确的打开语句是( )。 A. fp=fopen(\"FILE\ B. fp=fopen(\"FILE\ C. fp=fopen(\"FILE\ D. fp=fopen(\"FILE\12. 当已存在一个abc.txt文件时,执行函数fopen (“abc.txt”, “r++”)的功能是 。 A) 打开abc.txt文件,清除原有的内容B) 打开abc.txt文件,只能写入新的内
容
C) 打开abc.txt文件,只能读取原有内
容
D) 打开abc.txt文件,可以读取和写入
新的内容
13. 以下叙述中不正确的是 。
A) C语言中的文本文件以ASCII码形式存
储数据
B) C语言中对二进制位的访问速度比文本文件快
C) C语言中,随机读写方式不使用于文本文件
D) C语言中,顺序读写方式不使用于二进制文件
14. 以下程序企图把从终端输入的字符输出到名为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) 函数fopen调用形式有误
B) 输入文件没有关闭 C) 函数fgetc调用形式有误 D) 文件指针stdin没有定义 12.2 填空题 1.在对文件进行操作的过程中,若要求文件的位置指针回到文件的开头,应当调用的函数是 函数。 2.若fp已正确定义为一个文件指针,d1.dat为二进制文件,请填空,以便为读而打 开此文件:
fp=fopen( ); 3.系统的标准输入文件指针是 。 4.在C语言中,数据可以用 和 两种形式存放。 5.以下程序的功能是,从键盘上输入一个字符串,把该字符串中的小写字母转换为大写字母,输出到文件test.txt中,然后从该文件读出字符串并显示出来。请填45
空。
#include main( ) { FILE *fp;char str[100]; int i=0; if((fp=fopen(\"test.txt\
(1) ))==NULL)
{ printf(\"can't open this
file.\\n\");exit(0);}
printf(\"input astring:\\n\"); gets(str); while (str[i])
{ if(str[i]>='a'&&str[i]<='z') str[i]= (2) ; fputc(str[i],fp); i++; }
fclose(fp);
fp=fopen(\"test.txt\ (3) ); fgets(str,100,fp); printf(\"%s\\n\ fclose(fp); } 6.以下程序段打开文件后,先利用fseek函数将文件位置指针定位在文件末尾,然后调用ftell函数返回当前文件位置指针的具体位置,从而确定文件长度,请填空。
FILE *myf; long f1;
myf= (\"test.t\fseek(myf,0,SEEKEND);
f1=ftell(myf);
fclose(myf);
printf(\"%d\\n\7.已有文本文件test.txt,其中的内容为“Hello,everyone!。”以下程序中,文件test.txt已正确为读而打开,由此文件指针fr指向文件,则程序的输出结果是 。
#include main( ){ FILE *fr; char str[40]; „„
fgets(str,5,fr); printf(\"%s\\n\ fclose(fr); }
8.下面程序用time统计文件file.dat中字符的个数,请在括号内填入正确内容
#include main( ){ FILE *fp; long time=0;
if((fp=fopen(\"file.dat\ (1) ))==NULL)
{ printf(\"can not open file\\n\"); exit(0); } while(!feof(fp)) { ( (2) ); ( (3) ); }
printf(\"time=%ld\\n\ fclose(fp); }
9. C语言中根据数据的组织形式,把文件分为 和 两种。
10. feof(fp)函数用来判断文件是否结束,如果遇到文件结束,函数值为 ,否则为 。
46