《C语言程序设计》习题
1. 选择题
1.以下关于运算符优先顺序的描述中正确的是( )。
A.关系运算符< 算术运算符< 赋值运算符< 逻辑与运算符
B.逻辑 运算符< 关系运算符< 算术运算符< 赋值运算符
C.赋值运算符< 逻辑与运算符< 关系运算符< 算术运算符
D.算术运算符< 关系运算符< 赋值运算符< 逻辑与运算符
2.下列选项中合法的变量名是_________
A. #define B. int C. a594_3 D. abs(x)
3.以下正确的描述是( )。
A. break语句的作用是结束整个循环的执行
B.在C程序中,注释说明只能位于一条语句的后面
C. 在循环体内使用break语句或continue语句的作用相同
D. 从多层循环嵌套中退出时, 只能使用goto语句
4.以下说法正确的是( )
A.#define 和 printf 都是 C 语句。
B.#define 是C语句,而printf不是。
C.若程序中要调用数学函数,必须在文件开头输入语句 #include “math.h”
D. #define 和 printf 都不是 C 语句。
5.下面的函数定义正确的是______________
A) float fun (float x ; float y) {return x*y;}
B) float fun (float x,y) {return x*y;}
C) float fun (x,y) {int x,y;return x*y;}
D) int fun (int x, int y) {return x*y;}
6.执行下面语句后的输出为( )
int i=-1;
if (i<=0) printf(“****\n”)
else printf(“%%%%\n”)
A). **** B). %%%%
C). %%%%c D). 有语法错误,不能正确执行
7.以下程序的输出结果是( )
void main( )
{int k=17;
printf("%d, %o, %x \n ", k, k, k );
}
A). 17, 21, 11 B). 17, 17, 17
C). 17, 0x11, 021 D). 17, 21, 1
8.以下不正确的叙述是 ( )
A)#define是宏定义命令
B)宏定义只是做简单的置换,不做正确性检查
C)宏定义是C语句,必须在行末加分号
D)printf是C语句,但#define不是。
9.一个C语言程序是由( )
A) 一个主程序和若干子程序组成 B)若干子程序组成
C) 若干过程组成 D) 函数组成
10.C语言规定,在一个源程序中,main()函数的位置( )。
A.必须在最开始 B.必须在最后
C.可以任意 D.必须在系统调用的库函数的后面
11.以下对二维数组a的正确说明是( )。
A) int a[3][]; B) floatf a(3,4);
C) char a[1][3]; D) float a(3)(5);
12.若有说明: int a[3][2]={10};则下面正确的叙述是( )
A)只有元素a[0][0]可得到初值10 。
B)此说明语句不正确:。
C)数组a中各元素都可得到初值,但其值不一定为0。
D)数组a中每个元素均可得到初值10
13.以下叙述不正确的是( )。
A) 一个C源程序可由一个或多个函数组成
B) 一个C源程序必须包含一个main函数
C) C程序的基本组成单位是语句
D) 只能在循环体内和switch语句体内使用break语句
14.为了避免在嵌套的条件语句If一else中产生二义性,C语言规定else子句总是与( )配对。
A) 缩排位置相同的if B) 其之前最近的未配对的if
C) 之后最近的if D) 同一行上的if
15. 能正确表示a和b同时为正或同时为负的逻辑表达式是( )
A)(a>=0||b>=0)&&(a<0||b<0)
B)(a>0&&b>0)||(a<0&&b<0)
C)(a+b>0)&&(a+b<=0)
D) (a-b>0)&&(a-b<=0)
16.已知x =5,ch='A',y=0,则表达式(x > = y && ch<'a'&&!y) 的值是 ( )
A) 0 B) 语法错 C) 1 D) "假"
17. 下列关于单目运算符++、--的叙述中正确的是( )
A) 它们的运算对象可以是任何变量和常量
B) 它们的运算对象可以是char型变量和int型变量,但不能是float型变量
C) 它们的运算对象可以是int型变量,但不能是double型变量和float型变量
D) 它们的运算对象可以是char型变量、int型变量和float型变量
18.下面的程序( )
void main()
{ int x=3;
do {
printf(“%d\n”,x-=2);
} while(!(--x));
}
A). 输出的是1 B). 输出的是1和-2
C). 输出的是3和0 D). 是死循环
19.如下程序:
void main( )
{ int a=6; printf(“%d\n”,(a+=3,2*a)); }
执行后,输出结果是( )
A) 9
B) 6
C) 2
D) 18
20.若有以下说明和语句,请选出哪个是对C数组元素的正确引用( )
int c[4][5], (*cp)[5]; cp=c;
A). cp+1 B). *(cp+3) C). *(cp+1)+3 D). *(*cp+2)
21.下面程序的输出是( )
main()
{ int x=023;
printf("%d\n", --x); }
A). 17 B). 18 C). 23 D). 24
22.执行下列程序的结果是( )
main()
{ float x=1,y; y=++x*++x; printf(“%f\n”,y); }
A). 9.000000 B). 6.000000
C). 1.000000 D). 程序有错误
23.下面程序的输出是( )
int main()
{ int a[10]={1,2,3,4,5,6,7,8,9,10}, *p=a;
printf("%d\n", *(p+2) ); }
A). 3 B). 4 C). 1 D). 2
24.执行下面程序中的输出语句后,a的值是( )
main()
{ int a;
printf("%d\n", (a=3*5,a*4,a+5) ); }
A). 65 B). 20 C). 15 D). 10
25.下面程序的输出是( )
main()
{ int a=-1, b=4, k;
k=(a++<=0)&&(!(b--<=0));
printf("%d %d %d \n", k, a, b ); }
A). 0 0 3 B). 0 1 2 C). 1 0 3 D). 1 1 2
26.设有如下的程序段:
char str[]="Hello"; char *ptr; ptr=str;
执行完上面的程序段后,*(ptr+5)的值为( )
A). '0' B). '\0' C). 不确定的值 D). '0'的地址
27.在宏定义# define PI 3.14159中,用宏名PI代替一个( )
A).单精度数 B).双精度数 C).常量 D).字符串
28.若i是整型变量,pb是基本型为整型的指针变量,则正确的赋值表达式是( )
A). pb=&i B). pb=i C). *pb=&i D). *pb=*i
29. 有以下程序段
int m=0,n=0;
char c=’d’;
scanf("%d%c%d",&m,&c,&n);
printf("%d,%c,%d\n",m,c,n);
若从键盘上输入:6D6<回车>,则输出结果是( )
A) 0,d,6
B) 6,d,6
C) 6,D,6
D) 6,D,0
30.printf()函数中用到格式符%-7s ,其中数字7表示输出的字符串占用7列。如果字符串长度小于7,则输出按方式 ( )
A) 从左起输出该字串,右补空格
B) 按原字符长从左向右全部输出
C) 右对齐输出该字串,左补空格
D) 输出错误信息
31.以下能正确地定义整型变量a,b和c 并为其赋初值3的语句是( )
A) int a=3,b=3, c= 3; B) int a,b, c= 3;
C) a= 3,b=3,c=3; D) a= b= c=3;
32. 以下程序的输出结果是( )
void main( )
{int x=6,y=6,i;
for(i=2;x>4;y=++i)
printf("%d,%d ",x--,y);
}
A) 5,5 5,3 B) 6,6 2,3 C) 6,5 5,2 D) 6,6 5,3
33.以下程序的输出结果是( )
void main( )
{int w=4;
int fun(int k);
fun(w);
printf("\n");
}
fun(int k)
{if(k>0) fun(k-1);
printf("%d ",k); }
A) 4 3 2 1 B) 0 1 2 3 4
C) 1 2 3 4 D) 4 3 2 1 0
34.下面程序的输出是( )
main()
{ int x=023;
printf("%d\n", --x); }
A). 17 B). 18 C). 23 D). 24
35.以下程序的输出结果是( )
main()
{ char ch[3][4]={ "123","456","78"},*p[3]; int i;
for(i=0;i<3;i++) p[i]=ch[i];
for(i=0;i<3;i++) printf("%s",p[i]);
}
A). 123456780 B). 123 456 780
C). 12345678 D). 147
*36.下面程序的输出结果为( )
char *alpha[6]={"ABCD","EFGH","IJKL",
"MNOP","QRST","UVWX"};
char **p;
年吨void main( )
{int i;
p=alpha;
for(i=0;i<4;i++)
printf("%c",(*p)[i]);
printf("\n");
}
A). EIMC B). ABCD C). EFGH D). AEIM
37.定义如下变量:float i=9.0 ;int j=3 ;则i%j的值是( )
A.0 B. 3.0 C. 3 D. 语法有错
38. 有以下程序
void main( )
{
int
p[7]={11,13,14,15,16,17,18},i=0,k=0;
while(i<7&&p[i]%2) {k=k+p[i]; i++;}
printf("%d\n",k);
}
执行后输出结果是( )
A) 58
B) 56
C) 45
D) 24
39. 以下程序的输出结果是( )
void main( )
{ int i,x[3][3]={9,8,7,6,5,4,3,2,1},*p;
p=&x[1][1];
for(i=0;i<6;i+=3)
printf("%d ",p[i]);
}
A) 5 2 B) 5 1 C) 5 3 D) 9 7
40.以下程序的输出结果是( )
# include
int main( )
{ char *a=”abcdefghi”;
void fun( char *s );
fun(a);
puts(a); return 0;
}
void fun(char *s )
{ int x,y;
char c;
for(x=0,y=strlen(s)-1;xname
49.下面的程序输出是( )
int m=13;
int fun2(int x,int y)
{int m=3;
return(x*y-m);
}
main()
{int a=7,b=5;printf("%d\n",fun2(a,b)/m);}
A). 1 B). 2 C). 7 D). 10
50.下面的程序输出是( )
main()
{ int x=100,a=10,b=20,ok1=5,ok2=0;
if(a=1) && (x<=10) &&(x> =50) && (x<=60)
B) (x>=1) || (x<=10) || (x>=50) || (x<=50)
C) (x>=1) && (x<=10) || (x>= 50) && (x<=60)
D) (x > =1)|| (x< =10) && (x> =50) || (x<=60)
*61.以下程序的输出结果是( )
# 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);
}
A). AfghdEFG B). Abfhd C). Afghd D). Afgd
62.以下程序的输出结果是( )
main()
{int i;
for(i=1;i<6;i++)
{ if(i%2) {printf("#");continue;}
printf("*");
}
printf("\n");
}
A). #*#*# B). ##### C). ***** D). *#*#*
63.能表示10≤a≤15 的关系表达式是( )
A.a>=10 or a<=15
B.a>=10||a<=15
C.a>=10&&a<=15 D.a>=10 & a<=15
64. 以下程序段中与语句k=a>b?(b>c?1:0):0;功能等价的是
A. if((a>b) &&(b>c) ) k=1;
B. if((a>b) ||(b>c) ) k=1
else k=0;
C. if(a<=b) k=0;
D. if(a>B) k=1;
else if(b<=c) k=1; else if(b>C) k=1;
else k=0;
65.设int x[]={2,4,6,8},y,*p=&x[1];则执行语句 y=(*--p)++;后数组元素x[0]的值为( ).
A. 2 B. 3 C. 4 D. 5
66.在下面关于函数的描述中错误的是( )
A.在一个源文件中,如果函数定义在先,调用在后,则不必声明该函数
B.如果一个函数在一个源文件里定义,而调用在另一个源文件中,则必须在调用之前声明该函数
C.函数的声明应使用函数原型
D.在一个源文件中,如果自定义函数调用在先,定义在后,则不必声明该函数
67. 若有int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12}; int (*q)[3]=a;*q=a[0];则能够正确表示数组元素a[1][2]的表达式是( )。
A. *((*q+1)[2] B. *(*(q+5)) C. *(*(q+1)+2) D. (*q+1)+2
68.设int x[]={1,3,5,7,9,11,13},*p=x;则不能正确引用数组元素的表达式是( )
A.*(p--) B. *(--p) C.*(p++) D.*(++p)
*69. 有以下函数
char *fun(char *p)
{
return p;
}
该函数的返回值是( )
A. 无确切的值
B. 形参p中存放的地址值
C. 形参p自身的地址值
D. 编译有错
*70. 在下面的引用定义中,正确的是( )。
A. int x,&y; y=x;
B. int x,&y=x ;
C. int &y=x,x;
D. float z; int x,y=&z;
71.执行下面程序段后,a的值为( )。
int a,b;
for(b=1,a=1;b<=20;b++)
{
if(a>=10) break;
if (a%2==1)
{ a+=5; continue;}
a-=3;
}
A. 2
B. 6
C. 10
D. 8
72. 执行下列程序段后,变量i的值为( )。
#define MA(x,y) ((x)*(y))
int i=5;
i=MA(i,i+1)-7;
A. 30
B. 23 C. 19
D. 1
*73.若有以下的说明:
struct person
{char name[20];
int age;
char sex;
}a={"li ning",20,'m'},*p=&a;
则对字符串li ning的引用方式不可以是( )
A. (*p).name B. p.name C. a.name D. p->name
74. 若程序中定义了以下函数
double myadd(double a,double b)
{ return (a+b) ;}
并将其放在调用语句之后,则在调用之前应该对该函数进行说明,以下选项中错误的说明是
A. double myadd(double a,b) ;
B. double myadd(double,double);
C. double myadd(double b,double a) ;
D. double myadd(double x,double y);
75.若有以下的说明和语句,则在执行for语句后,*(*(pt+1)+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[1][2] D. t[2][1]
76.在C语言中,080是( )
A.八进制数 B.十进制数 C.十六进制数 D.非法数
77. 整型变量i定义后赋初值的结果是( )。
int i=2.8*6 ;
A.12 B.16 C.17 D.18
78.for(i=0,x=0; !x&&i<=3;i++)循环的次数为( )
A.4 B.5 C.1 D. 无限循环
79.若有如下程序段:
{ int a=2,b=-1,c=2;
if (a0; D. i++ ;
82.以下不能对二维数组a 进行正确初始化的语句是( )
A.int a[2][3]={0};
B.int a[ ][3]={{1,2},{0}};
C.int a[2][3]={{1,2},{3,4},{5,6}};
D.int a[ ][3]={1,2,3,4,5,6};
83.以下合法的if语句是( )。
A. if(a=b) c++;
C. if(a=>b) c++; D. if(a==b) c++;
84.字符串常量“I love china”在内存中存在需要( )字节。注:每个单词之间有一个空格。
A.10 B.12 C. 13 D. 14
85. 以下for循环的执行次数是( )
for (x=0,y=0; (y=1)&&(x=2); x++)
A.执行1次 B.执行2次 C.执行3次 D. 无限次
86. 用逻辑表达式表示“A,B两人至少有一人得奖的逻辑表达式”是( )
A.A=1||B=1 B.A=1&&B=0 C.A=0&&B=1 D.A=1&&B=1
87. 执行下列程序段后,变量K的值为( )
for(k=0,m=1;m<4;m++)
{
for(n=1;n<5;n++)
if (m*n%3==0) continue;
k++;
}
A.1 B. 3 C.6 D.12
88. 设int a=4,b=8;则++a*++b的结果是( )
A.32 B.40 C.45 D.36
89. 有如下程序
main()
{
int x=23;
do
printf(“%d”,x--);
while (!x);
}
则程序的结果是( )
A. 321 B. 22 C. 死循环 D. 23
90. 若变量a、i 已正确定义,且i已正确赋值,下列语句合法的是( )。
A. a==1; B. ++i; C. a=a+==5; D. a==int(i);
91.以下符合C语言语法的赋值表达式是( )
A.d=9+e+f=d+9
B.d=9+e, f=d+9
C.d=(9+e,e++, d+9)
D.d=9+e++=d+7
92.已知字母A的ASCii码为十进制数65,且c2为字符型,则执行语句c2='A'+'6'-'3';后,c2中的值为( )
A.D B.68 C.不确定的值 D.C
93.在C语言中,要求运算数必须是整型的运算符是( )
A./ B.++ C.!= D.%
94.若以下变量均是整型,且num=sum=7;则计算表达式sum=num++,sum++,++num后sum值为( )
A.7 B.8 C.9 D.10
95.若有说明语句:char c='\72';则变量c( )
A.包含1个字符 B.包含2个字符 C.包含3个字符 D.说明不合法,c的值不确定
96.若有定义:int a=7;float x=2.5,y=4.7;则表达式x+a%3*(int)(x+y)%2/4的值是( )
A.2.500000 B.2.750000 C.3.500000 D.0.000000
97.设变量a是整型,f是实型,i是双精度型,则表达式10+'a'+i*f值的数据类型为( )
A.int B.float C.double D.不确定
98. 若有以下定义,则能使值为3的表达式是( ) int k=7,x=12;
A.x%=(k%=5) B.x%=(k-k%5) C.x%=k-k%5 D.(x%=k)-(k%=5)
99. putchar函数可以向终端输出一个( )
A.整型变量表达式值 B.实型变量值 C.字符串 D.字符或字符变量值
100. 有输入语句:scanf(“a=%d,b=%d,c=%d",&a,&b,&c);为使变量a的值为1,b为3,c为2,从键盘输入数据的正确形式应是( )
A.132 B.1,3,2 C.a=1□b=3□c=2 D.a=1,b=2,c=3
101.下面程序的功能是在输入的一批正整数中求出最大者,输入0时结束,请选择填空
main( )
{int a,max=0; scanf(“%d”,&a);
while(____)
{if(max2 C.123 D.1234
表示回车
103.若运行以下程序时,从键盘输入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);
case 4:putchar(c+2);break;}
printf(“\n”);}
A.66877 B.668966 C.66778777 D.6688766
104.对for(表达式1;; 表达式3)可理解为( )
A.for(表达式1;0; 表达式3)
B.for(表达式1;1;表达式3)
C.for(表达式1;表达式1;表达式3)
D.for(表达式1;表达式3;表达式3)
105.下面程序的运行结果是( )
main()
{int x,i;
for(i=1; i<100;i++)
{x=i;
if(++x%2==0)
if(++x%3==0)
if(++x%7==0)
ptintf(“%d ”,x);}}
A.39 81 B.42 84 C.26 68 D.28 70
106.下面程序的运行结果是( )
main()
{int i,b,k=0;
for(i=1;i<=5;i++)
{b=i%2;
while(b-->=0) k++;}
printf(“%d,%d”,k,b);}
A.3,-1 B.8-1 C.3,0 D.8,-2
107.以下程序的正确运行结果是( )
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
2. 填空题
1.C语言源程序的扩展名为.c,可执行文件的扩展名为_______________。.exe
2.数组 int a[3][5];共定义了______个数组元素。15
3.C程序由函数构成,C程序总是从_______开始执行.main()
4. C语言中,用__________ 关键字来包含如stdio.h之类的头文件。 include
5.函数的返回值是通过函数中的________________语句来获得的。return
6.至少执行一次循环体的循环语句是 。do—while 语句
7.对于不带返回值的函数,应当用关键字______________定义函数。void
8.多分支结构的程序,通常选用_________语句来实现。 switch
9.若char ch[]="25yi6"有以下语句,则编译后分配给数组ch的内存占用的字节数为________。6
10.下面运算符 < , ++ = 按照优先级从高到低排列顺序为__ _。++ < = ,
11.若char str[8]={“tony”};int k=strlen(str);则k的值为____________。4
12.______________是声明结构体类型的关键字。struct
13.int a[3][4]={{7,5},{5,8},{0,6,9,3}};则编译后a[1][2]= __________。0
14.静态局部变量应该用关键字____________来进行声明。static
15.用数组名作为函数调用的实参,则传递给形参的是____ _。数组的首地址
16.若有说明:int a[][3]={1,2,3,4,5,6,7};则a数组第一维的大小是________。3
17.C语言提供三种逻辑运算符,按优先级高低它们分别是 。! > && > ||
18.getchar( ) 函数的功能是 。从标准输入设备读取下一个字符
19.写出下面表达式的值
6*4/7+8%3 _______ 5 x=5 ; y=2; (x++)+y _________ 7
8-4>=5+3 ________ 0 6>4-2 ? 4%2: 3 ____ _ __ 0
x=2,y=2; x||!y ______ 1 x=3 ; x+=x-=2 ______ _ 2
20.下面invert函数的功能是将一个字符串str的内容颠倒过来,请填空。
# include
void invert(char str[ ] )
{ int i, j, ; k
for(i=0,j=strlen(str) ; i
int main()
{ int fun(int);
printf(”%d”,fun(5)*10) ;
return 0;
}
int fun( ) int k
{
if(k==0)
return 3;
else
return fun(k-1)*k;
}
22. 表达式45/2+(int)3.14159/2的值是 ;23
23. 若有int a=10,b=9,c;则在计算表达式c=(a%11)+(b=3),c+=2后,变量c的值为__15____.
24.若有int x=1,y=1,z=1,t;则在表达式t=++x||++y&&++z后,t的值为____1____。
25. 将-10<x≤8用C语言写成相应的逻辑表达式 【1】 。(x>-10 && x<=8)
26. C语言中用 【2】 表示逻辑真值, 【3】 表示逻辑假值。
27.设int a=10,b=4,执行语句a%=(b%=3);后,a的值是 【4】0 ,b的值是 【5】 1 。
28.表达式7>=3+4||6<4&&2<5的结果为 【5】1 或真
29.’\n’表示 【6】 字符。换行
30. 设a的初值为3,则表达式 (int)(a+6.5)%2+(a=b=5) 的值是 6 。
31. int a[10],则数组下标的上限是 。9
32.C语言规定,可执行程序的开始执行点是_____________
33.在C语言中,一个函数一般由两个部分组成,它们是_____________和_____________
34.若a是int 型变量,则下面表达式的值为( )(a=4*5,a*2),a+6
35.若a是int型变量,且a的初值为6,则计算表达式后a的值为( )。 a+=a-=a*a
3. 程序阅读题
1.以下程序的运行结果是 _________________1
#include
void main()
{int m=3;
if(--m<3) printf(" %d\n",--m);
else printf("%d\n",++m);
}
2.执行下面程序段后, 输出结果是________________ i=6 j=3 m=7
#include
int i=2;
int fun(int x)
{ int k,j=1;
i=x*2; k=i+j;
return k;
}
void main( )
{ int m,j=3; m=fun(j);
printf(“i=%d j=%d m=%d\n”,i,j,m);
}
3.下面程序的输出是_____________ 12
void main( )
{int arr[10],i,k=0;
for(i=0;i<10;i++)
arr[i]=i;
for(i=1;i<4;i++)
k+=arr[i]+i;
printf("%d\n",k);
}
4.下面程序的输出结果是________________234567
#include
#include
#define MAX_COUNT 6
void fun() ;
void main( )
{int count;
for(count=1;count<=MAX_COUNT;count++)
fun();
}
void fun()
{static int i;
i+=2;
printf("%d",i--);
}
5.下面程序的输出是________6
void main()
{int a[ ]={2,4,6}, *ptr=&a[0];
int x=8, y, z;
for(y=0;y<3;y++)
z=(*(ptr+y)
本文档为【C复习参考题 (1)】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。