C语言习题集.docx
《C语言习题集.docx》由会员分享,可在线阅读,更多相关《C语言习题集.docx(48页珍藏版)》请在冰豆网上搜索。
![C语言习题集.docx](https://file1.bdocx.com/fileroot1/2023-2/9/f4821cf2-49d3-4e98-86ba-af21748d6aa3/f4821cf2-49d3-4e98-86ba-af21748d6aa31.gif)
C语言习题集
习题一
一.填空题
1.i为int型变量,且初值是3,有表达式i++3,则
该表达式的值是,变量i的值是。
2.i为int型变量,且初值是2,有表达式++i3,则
该表达式的值是,变量i的值是。
3.i为int型变量,且初值是3,有表达式i=i+=i5,则
该表达式的值是,变量i的值是。
4.i为int型变量,且初值是3,有表达式i=(a=5,b=10)+(i+=b,b+=a),
则该表达式的值是,变量i,a,b的值分别是。
5.i为int型变量,且初值是3,有表达式i=(i+=i,i=i),i10,i%4,则
该表达式的值是,变量i的值是。
6.说明变量为双精度的关键字是。
7.在TurboC中,整型数据的表示形式有种。
二.选择题
1.若a,b,c,d都是int型变量且初值均为10,不正确的赋值语句是()。
A.a=b=c=d;B.a=b++;C.a+b++;D.d=(a=b=125)c++;
2.若a,b,c,d都是float型变量且初值为10.95,不正确的赋值语句是()。
A.a=b=15;B.d=int(a+c);C.a=(int)(b+1);D.++a;
3.若a,b,c均为int型变量且有值,要交换变量a和b的值,正确的语句组是()。
A.c=a,a=b,b=c;B.a=b;b=a;
C.c=a;a=b;b=c;D.c=a;b=a;a=c;
4.若a,b均为int型变量,x,y均为float型变量,正确的输入函数是()。
A.scanf("%d%f",&a,&b);B.scanf("%d%f",&a,&x);
C.scanf("%d%d",a,b);D.scanf("%f%f",x,y);
5.若x,y均为double型变量,正确的输入函数是()。
A.scanf("%f%f",&x,&y);B.scanf("%d%d",&x,&y);
C.scanf("%lf%lf",&x,&y);D.scanf("%lf%lf",x,y);
6.若x为char型变量,y为int型变量,x,y均有值,正确的输出函数是()。
A.printf("%c%c",x,y);B.printf("%c%s",x,y);
C.printf("%f%c",x,y);D.printf("%f%d",x,y);
7.若x,y均为int型变量且有值,要输出x,y的值,正确的输出函数是()。
A.printf("%d%d",&x,&y);B.printf("%f%f",x,y);
C.printf("%f%d",x,y);D.printf("%d%d",x,y);
8.x为int型变量,且值为2345,不正确的输出函数是()。
A.printf("%d",x);B.printf("%3d",x);
C.printf("%c",x);D.printf("%s",x);
习题二
一.写出下列程序的运行结果
1.下面程序的运行结果是()。
main()
{inta,b;
a=23;b=87;
printf("%d%d\n",a,b);
}
A.23B.23,87C.a=23D.2387
87b=87
2.下面程序的运行结果是()。
main()
{floatx,y;
x=12.34;y=0.00045;printf("%f,%f",x,y);
}
A.12.34,0.00045B.12.340000,0.000450
C.12.340.00045D.12.3400000.000450
3.下面程序的运行结果是()。
main()
{inth=34,k=56;
printf("h=%d\nk=%d\n",h,k);
}
A.h=34B.h=34k=56C.3456D.34
k=5656
4.下面程序的运行结果是()。
main()
{floatx=12.34567,y=345.2354;
printf("x=%5.3f,y=%5.3f",x,y);
}
A.12.346,345.235B.x=12.346,y=345.235
C.12.345670,345.235000D.x=12.34567,y=345.2354
5.下面程序的运行结果是()。
main()
{ints=3,w=5;
printf("%u,%u,%d,%d",s,w,s,w);
}
A.3,5,3,5 B.3535 C.65533,5,3,5 D.65533,65531,3,5
6.运行下面程序时若从键盘输入:
123456789输出结果是()。
main()
{inta,b,c;
scanf("%3d%3d%3d",&a,&b,&c);
printf("a=%d,b=%d,c=%d",a,b,c);
}
A.a=123,b=45,c=678B.a=123b=454c=678
C.123,45,678D.a=123,b=456,c=789
7.运行下面程序时若从键盘输入:
123456789输出结果是()。
main()
{inta,b,c;
scanf("%3d%3d%3d",&a,&b,&c);
printf("a=%d,b=%d,c=%d",a,b,c);
}
A.a=123,b=45,c=678B.a=123,b=456,c=789
C.123,456,789D.a=123b=456c=789
8.以下程序若a=12,b=45,c=3467,正确的数据输入方法是()。
main()
{inta,b,c;
scanf("a=%db=%dc=%d",&a,&b,&c);
printf("%d,%d,%d\n",a,b,c);
}
A.a=12b=45c=3467B.12453467
C.a=12b=45c=3467D.a=12b=45c=3467
二.填空题
1.C语句的最后用结束。
2.执行printf("%d",045);函数的结果是。
3.执行printf("%u\n",-0x2a);函数的结果是。
4.若x是整型,且x=1,执行printf("%o\n",x);函数的结果是。
5.若一个C程序包含若干个函数,程序的执行总是从函数开始。
习题三
1.设a=1,b=2,c=3,写出下列关系表达式的值
(1)(a
(2)(c(a(3)a+b==c。
(4)a+b>=c。
2.设a=1,b=2,c=3,d=4写出下列逻辑表达式的值
(1)a&&b&&c。
(2)a||!
b||!
c。
(3)++a||b++&&++c||d++。
(4)(!
(a+b)+c1)&&(b+c/2)。
(5)a!
=11&&b<4。
3.设x=y=z=1,则执行逻辑表达式++x||++y&&++z后,x,y,z的值分别为。
4.设x=y=z=1,执行逻辑表达式++x&&y||++z后,x,y,z的值分别为。
5.设a=1,b=2,c=3,d=4,x=1,y=1,则执行逻辑表达式(x=a>b)&&(y=c>d)后,x,y的值分别为。
6.在以下一组运算符中,优先级最高的运算符是()
A.<=B.=C.%D.&&
7.以下程序的运行结果是。
main()
{inta=1,b=4,k;
k=(++a<0)&&!
(b<=0);
printf("%d,%d,%d\n",k,a,b);
}
8.在C中,下列哪一个表达式能正确表示a10或a0()
A.a>=10ora<=0B.a>=10|a<=0
C.a>=10||a<=0D.a>=10&&a<=0
9.若a,b,c均为int型变量,则执行以下语句后,a,b,c的值分别为。
a=b=c=1;
++a||++b&&++c
10.给出下列程序的输出结果
(1)main()
{inta,b,c;
a='E';b='J';c='W';
if(a>b)
if(a>c)printf("%c\n",a);
elseprintf("%c\n",c);
elseif(b>c)printf("%c\n",b);
elseprintf("%c\n",c);
}
结果是:
(2)main()
{intx=100,a=10,b=20,OK1=5,OK2=0;
if(a
if(b!
=15)
if(!
OK1)x=1;
else
if(OK2)x=10;
x=1;
printf("%d\n",x);
}
结果是:
(3)运行两次下面的程序,如果分别从键盘上输入数值6和4,其运行结果分别为
main()
{intx;
scanf("%d",&x);
if(x++>5)printf("%d",x);
elseprintf("%d\n",x);
}
输入6时,结果是:
输入4时,结果是:
11.若有定义:
floatx;inta,b;再有下面4个switch语句
A.switch(x)
{case1.0:
printf("\n");
case2.0:
printf("\n");}
B.switch(x)
{case1,2:
printf("\n";)
case3:
printf("\n");}
C.switch(a+b);
{case1:
printf("\n");
case1+2:
printf("\n");}
D.switch(a+b)
{case1:
printf("\n");
case2:
printf("\n");}
正确的switch语句是(),其它switch语句错在什么地方?
习题四
1.下面程序若在运行时从键盘输入3.62.4,运行结果为()。
#include"math.h"
main()
{floatx,y,z;
scanf("%f%f",&x,&y);
z=x/y;
while
(1)
{if(fabs(z)>1.0){x=y;y=z;z=x/y;}
elsebreak;
}
printf("%f\n",y);
}
A.1.500000B.1.600000C.2.000000D.2.400000
2.下面程序的输出是()。
main()
{intx=3,y=6,a=0;
while(x++!
=(y=1))
{a+=1;
if(y}
printf("x=%d,y=%d,a=%d\n",x,y,a);
}
A.x=4,y=4,a=1B.x=5,y=5,a=1
C.x=5,y=4,a=3D.x=5,y=4,a=1
3.以下程序的功能是:
从键盘上输入若干个学生的成绩,统计并输出最高成绩和最低成绩,当输入负数时结束,请填空。
main()
{floatx,amax,amin;
scanf("%f",&x);
amax=x; amin=x;
while()
{if(x>amax)amax=x;
if()amin=x;
scanf("%f",&x);
}
printf("\namax=%f\namin=%f\n",amax,amin);
}
4.下面程序的输出是:
。
main()
{intx=2;
while(x);
printf("%d\n",x);
}
5.下面程序的运行结果为:
。
main()
{inti=0,sum=1;
do
{sum+=i++;}
while(i<6);
printf("%d\n",sum);
}
6.C语句中,下列说法中正确的是()。
A.不能使用do-while语句构成的循环;
B.do-while语句构成的循环必须用break语句才能退出;
C.do-while语句构成的循环,当while语句中的表达式值为非零时结束循环;
D.do-while语句构成的循环,当while语句中的表达式值为零时结束循环。
7.下面程序的输出结果是:
。
main()
{inty=9;
for(;y>0;y)
if(y%3==0)
{printf("%d",y);
continue;
}
}
8.若x是int型变量,且有下面的程序段,其运行结果为()。
for(x=3;x<6;x++)printf((x%2)?
("%d"):
("##%d\n"),x);
A.3B.##3C.##2D.3##4
##434##55
5##5
9.以下程序的运行结果是()。
main()
{inti;
for(i=1;i<=5;i++)
{if(i%2)printf("");
elsecontinue;
printf("#");
}
printf("$\n");
}
A.###$B.###$C.##$D.##$
10.下面程序的功能是根据以下的公式,返回满足精度eps要求下的值,请填空。
main()
{doubles=0.0,t=1.0;
intn;
floateps;
scanf("%f",&eps);
for(;t>eps;n++)
{s+=t;
t=nt/(2n+1);
}
printf("pi=%f\n",);
}
习题五
1.以下正确的叙述是()。
A.C语言的主函数是无参函数
B.C语言的主函数最多允许有1个参数
C.C语言的主函数最多允许有2个参数
D.C语言的主函数可以有2个以上的参数
2.C语言中函数返回值的类型是由()决定的。
A.return语句中的表达式类型
B.调用该函数的主调函数类型
C.调用函数时临时确定
D.定义函数时所指定的函数类型
3.以下不正确的描述是()。
A.调用函数时,实参可以是表达式
B.调用函数时,简单变量的实参与形参可以共用内存单元
C.调用函数时,将为形参分配内存单元
D.调用函数时,实参与形参的类型必须一致
4.若x为int型变量,则以下函数fun的返回值类型为()。
fun(x)
……
{printf("%d\n",x);}
A.返回值为void类型B.无法确定返回值
C.返回值为int类型D.没有返回值
5.C语言规定,调用一个函数时,实参变量与形参变量之间的数据传递是()
A.地址传递B.由实参传给形参,再由形参传回来给实参
C.值传递D.由用户指定传递方式
6.填空
①变量存储类别,从作用域的角度分为变量和变量。
②局部静态变量在时赋初值且只赋值一次。
7.判断以下说法的正误
一个源文件由一个或多个函数组成,C程序是以一个源文件为编译单位的。
()
局部静态变量在函数调用结束后仍存在,但其它函数不能引用它。
()
自动(auto)变量是由编译系统自动处理的,对自动变量分配存储空间后,就赋值为0,执行函数后自动释放。
()
由于全局变量的作用域增加了函数间数据联系的渠道,利用全局变量可以从函数得到一个以上的返回值,故建议在程序中尽量定义全局变量。
()
8.在一个C源程序文件中,若要定义一个只允许本源文件中所有函数使用的全局变量,则该变量的存储类应该是()。
A.externB.registerC.autoD.Static
9.以下不正确的描述为()
A.在函数之外定义的变量称为外部变量,外部变量是全局变量
B.在一个函数中既可以使用局部变量,又可以使用全局变量
C.外部变量定义和外部变量说明的含义不同
D.若在同一个源文件中,外部变量与局部变量同名,则在局部变量的作用范围内,外部变量不起作用。
10.以下不正确的描述为()
A.不同函数中可以使用相同名字的变量
B.形式参数是局部变量
C.在一个函数内部定义的变量只在本函数范围内有效
D.在一个函数内部的复合语句中定义的变量可以在本函数范围内有效
11.在C语言中,对于存储类型为()的变量,只有在使用它们时才
占用内存单元。
A.static和autoB.静态(static)
C.register和staticD.auto和register
12.C语言中形参的缺省存储类别是()
A.自动(auto)B.静态(static)
C.寄存器(register)D.外部(extern)
13.下列程序的运行结果是:
。
unsignedfun3(unsignednum)
{unsignedk=1;
do
{k=num%10;
num/=10;
}while(num);
return(k);
}
main()
{unsignedn=26;
printf("%d\n",fun3(n));
}
14.下列程序的运行结果是:
。
longfun4(intn)
{longs;
if((n==1)||(n==2))s=2;
elses=n+fun4(n1);
return(s);
}
main()
{longx;
x=fun4(4); printf("%ld\n",x);
}
15.下列程序的运行结果是:
。
#include"stdio.h"
main()
{intn=4,x=2,s;
s=fun(x,n);printf("s=%d\n",s);
}
fun(intx,intn)
{if(n==1)return(x);
elsereturn(xfun(x,n1));
}
16.下列程序的运行结果是:
。
intfun2(intx,inty)
{intm=5;
return(xym);
}
main()
{inta=7,b=5;
printf("%d\n",fun2(a,b));
}
17.下列程序的运行结果是:
。
fun(intp)
{intd=5;
d+=p++;
printf("%d",d);
}
main()
{intd=1,a=3;
fun(a);
d+=a++;printf("%d\n",d);
}
18.下列程序的运行结果是:
。
fun(intn)
{if(n==1)return(0);
elseif(n==2||n==3)return
(1);
elsereturn(fun(n1)+fun(n2)+fun(n3));
}
main()
{intx;
x=fun(10);printf("x=%d\n",x);
}
19.下面程序的执行结果是:
intx=3;
main()
{inti;
for(i=1;i<4;i++)
{++x;f();}
printf("%d\n",x);
}
f()
{staticinti;
intx=10;
x/=x++;printf("%d",x);
}
20.下列程序的运行结果是:
fun(intx)
{staticinta=3;
a+=x;
return(a);
}
main()
{intk=3,m=2,n;
n=fun(k);
printf("n=%d\n",n);
n=fun(m);
printf("n=%d\n",n);
}
21.下列程序的运行结果是:
#include"stdio.h"
f(inta)
{intb=0;
staticintc=3;
a=c++,b++;
return(a);
}
main()
{inta=2,i,k;
for(i=0;i<2;i++)k=f(a++);
printf("%d\n",k);
}
22.下列程序的运行结果是:
#include"stdio.h"
inti=2,j=2;
main()
{inti=2;
printf("i=%d,j=%d\n",i,j);
i=(i+++j)+(j+++i);
{inti=0;
printf("i=%d,j=%d\n",i,j);
}
printf("i=%d,j=%d\n",i,j);
}
习题六
一、选择题
1.在“文件包含”预处理语句的使用形式中,当#include后面的文件名用双引号(“”)括起时,寻找被包含文件的方式为()。
A.直接按系统设定的标准方式搜索目录
B.先在源程序所在目录搜索,再按系统设定的标准方式搜索
C.仅仅搜索源程序所在目录
D.仅仅搜索所在的当前目录
2.以下叙述中不正确的是()。
#defineIBM-PC
A.预处理命令行都必须以#号开始
B.在程序中凡是以#号开始都是预处理命令行
C.C程序在执行过程中对预处理命令行进行处理
D.以上定义是正确的宏定义
3.以下叙述中正确的是()。
#defineCR37.688
A.在程序的一行上可以出现多个预处理命令行
B.预处理行是C的合法语句
C.被包含的文件不一定以.h作为后缀
D.在以上定义中CR是称为“宏名”的标识符
4.以下有关宏替换的叙述中不正确的是()。
A.宏替换不占用运行时间B.宏名无类型
C.宏替换只是字符替换