C语言习题.docx
《C语言习题.docx》由会员分享,可在线阅读,更多相关《C语言习题.docx(68页珍藏版)》请在冰豆网上搜索。
C语言习题
第2章数据类型、运算符和表达式
重点和难点:
理解c语言中的各种数据类型以及变量的含义,掌握变量的定义;理解各种类型的运算符和表达式的含义及用法。
一、选择题
1、以下定义语句中正确的是()
A)doublea;b;B)doublea=b=7;
C)doublea=7,b=7;D)doublea,b;
2、以下合法的字符型常量是()
A)‘\x13’B)‘\081’
C)‘65’D)”\n”
3、以下选项中不合法的标识符是()
A)printB)FOR
C)&aD)_00
4、若变量均已正确定义并赋值,以下合法的c语言赋值语句是()
A)x=y==5B)x=n%3.2
C)x+n=4D)x=5=4+1
5、设有定义:
intk=0;,以下选项中的四个表达式中与其它三个表达式的值不同的是()
A)k++B)k+1
C)++kD)k+=1
6、以下选项中,当x为大于1的奇数时,值为0的表达式是()
A)x%2==1B)x/2
C)x%2!
=0D)x%2==0
7、下列定义变量的语句中错误的是()
A)int_int;B)doubleint;
C)charFor;D)floatUS$
8、设f为实型变量,下列表达式中不是逗号表达式的是()
A)f=3,5,4B)f=(3,2,1,0)
C)f>=3,f<2,0D)f=2,f=1
9、设有定义:
floata=2,b=4,h=3;,以下c语言表达式中与代数式(a+b)h/2计算结果不相符的是()
A)(a+b)*h/2B)(1/2)*(a+b)*h
C)(a+b)*h*1/2D)h/2*(a+b)
10、以下符合c语言语法的实型常量是()
A)1.2E0.5B)3.14159E
C).5E-3D)E15
11、若有表达式(w)?
(--x)(++y),以下与w等价的表达式是()
A)w==1B)w==0
C)w!
=1D)w!
=0
12、c语言中最基本的数据类型包括()
A)整型、实型、逻辑型B)整型、实型、字符型
C)整型、字符型、逻辑型D)实型、字符型、逻辑型
13、若变量已正确定义并赋值,以下符合c语言语法的表达式是()
A)a:
=b+1B)a=b=c+2
C)int18.5%3D)a=a+7=c+b
14、设有定义:
inta=2,b=3,c=4;,则以下选项中值为0的表达式是
A)(!
a==1)&&(!
b==0)B)(a
c||1
C)a&&bD)a||(b+b)&&(c-a)
15、已知字母A的ASCII码为十进制数65,且c2为字符型,则执行语句c2=‘A’+‘6’-‘3’后,c2中的值为()
A)d B)68 C)不确定的值 D)C
16、设有说明:
charw;intx;floaty;doublez;则表达式w*x+z-y值的数据类型为()
A)float B)char C)int D)double
17、设C语言中,一个shortint型数据在内存中占2个字节,则unsignedshortint型数据的取值范围为 () 。
A)0~255 B)0~32767 C)0~65535 D)0~2147483647
18、设以下变量均为int类型,则值不等于7的表达式是 ()
A)(x=y=6,x+y,x+1) B)(x=y=6,x+y,y+1)
C)(x=6,x+1,y=6,x+y) D)(y=6,y+1,x=y,x+1)
19、下列四组选项中,均是不合法的用户标识符的选项是 ()
A)W P_0 do
B)b-a goto int
C)float la0 _A
D)-123 abc TEMP
20、以下叙述正确的是 ()
A)在C程序中,每行只能写一条语句
B)若a是实型变量,C程序中允许赋值a=10,因此实型变量中允许存放整型数
C)在C程序中,%是只能用于整数运算的运算符
D)在C程序中,一行可以写一条语句也可以写多条语句。
21、若x和n均是int型变量,且x和n的初值均为5,则计算表达式x+=n++后,x和n的值为()
A)11,6 B)10,5
C)10,6 D)11,5
22、若有定义:
intx=3,y=2;floata=2.5,b=3.5;则表达式(x+y)%2+(int)a/(int)b的值为 ()
A)1.7 B)1
C)2 D)1.71
23、在C语言中,要求运算数必须是整型的运算符是()。
A)/B)++C)!
=D)%
第3章顺序结构程序设计
重点掌握输入函数scanf()、输出函数printf()的使用方法,以及程序编写的方法。
一、选择题
1、当用户要求输入的字符串中含有空格时,应使用的输入函数是()
A)scanf()B)getchar()
C)gets()D)puts()
2、有以下程序
#include”stdio.h”
voidmain()
{inta=0,b=0;
a=10;b=20;
printf(“a+b=%d\n”,a+b);
}
程序运行后的输出结果是()
A)a+b=10B)a+b=30
C)30D)出错
3、整型变量a、b、c的值分别为2、3、4,执行运算表达式“a*=16+(b++)-(++c)”后,a的值是()
A)31B)29
C)30D)28
4、有以下程序
#include”stdio.h”
voidmain()
{floatx=123.456;
printf(“%-5.2f\n”,x);
}
程序运行后的输出结果是()
A)123.4B)123.5
C)123.45D)123.46
5、设i为整型变量,f为float变量,用下面的语句给这两个变量输入值:
scanf(“i=%d,f=%f”,&i,&f);
为了把100和745.14分别赋给i和f,则正确的输入是()
A)100<空格>745.14<回车>B)i=100,f=745.14<回车>
C)100<回车>745.14<回车>D)x=100<回车>,y=745.14<回车>
6、若变量a,i已正确定义,且i已正确赋值,合法的语句是()
A)a==1;B)++i;
C)a=a++=5;D)a=int(i);
7、若运行时给变量x输入12,则以下程序的运行结果是()
#include”stdio.h”
voidmain()
{
intx,y;
scanf(“%d”,&x);
y=x>12?
x+10:
x-12;
printf(“%d\n”,y);
}
A)0B)22
C)12D)10
8、以下叙述不正确的是 ()
A)在C程序中,逗号运算符的优先级最低
B)在C程序中,MAX和max是两个不同的变量
C)若a和b类型相同,在计算了赋值表达式a=b后,b中的值将放入a中,而b中的值不变
D)当从键盘输入数据时,对于整型变量只能输入整型数值,对于实型变量只能输入实型数值
9、以下说法正确的是()。
A)输入项可以为一实型常量,如scanf("%f",3.5);
B)只有格式控制,没有输入项,也能进行正确输入,如scanf("a=%d,b=%d");
C)当输入一个实型数据时,格式控制部分应规定小数点后的位数,如scanf("%4.2f",&f);
D)当输入数据时,必须指明变量的地址,如scanf("%f",&f);
10、已有如下定义和输入语句,若要求a1,a2,c1,c2值分别为10,20,A和B,当从第一列开始输入数据时,正确的数据输入方式是()。
inta1,a2;charc1,c2;
scanf("%d%c%d%c",&a1,&c1,&a2,&c2);
A)10A20BB)10A20B
C)10A20D)10A20B。
11、在C语言中,char型数据在内存中的存储形式是()。
A)补码B)反码C)原码D)ASCII码
12、printf函数中用到格式符%5s,其中数字5表示输出的字符串占用5列。
如果字符串长度大于5,则输出按方式()。
A)从左起输出该字串,右补空格
B)按原字符长从左向右全部输出
C)右对齐输出该字串,左补空格
D)输出错误信息
13、有如下程序
#include”stdio.h”
voidmain()
{chara,b,c,d;
scanf("%c,%c,%d,%d",&a,&b,&c,&d);
printf("%c,%c,%c,%c\n",a,b,c,d);
}
若运行时从键盘上输入:
6,5,65,66<回车>,则输出结果是()
A)6,5,6,6B)6,5,A,B
C)6,5,65,66D)6,5,a,b
二、填空题
1、给定的程序的功能是:
从键盘输入两个整数,交换它们的值,并输出结果。
__1__
voidmain()
{
inta,b;
__2__
printf(“请输入两个整数:
a,b\n”);
scanf(“%d%d”,&a,&b);
printf(“交换前a,b的值为:
\n”);
printf(“a=%d,b=%d\n”,a,b);
__3__;a=b;b=t;
printf(“交换后a,b的值为:
\n”);
printf(“a=%d,b=%d\n”,a,b);
}
2、给定的程序的功能是:
从键盘输入一个四位的正整数,将其最高位移到个位,并输出结果。
例如:
输入1234,输出是2341。
#include"stdio.h"
voidmain__1__
{
inta,b;
intt;
printf("请输入一个四位正整数:
\n");
scanf(__2__,&a);
printf("移位前a的值为:
\n");
printf("a=%d\n",a);
__3__
b=a%1000*10+t;
a=b;
printf("移位后a的值为:
\n");
printf("a=%d\n",a);
}
三、改错题
1、给定的程序的功能是:
计算半径为5的圆的面积,并输出结果。
#include”stdio.h”
/**********found***********/
#definePI=3.14159
voidmain()
{
/**********found***********/
floatrs;
r=5.0;
s=PI*r*r;
/**********found***********/
printf(“%d\n”,s);
}
2、给定程序的功能是:
由键盘输入两个实数求和,并输出结果。
#include”stdio.h”
/**********found***********/
voidmain();
{
floata,b,sum;
scanf(“%f%f”,&a,&b);
/**********found***********/
sum=a+b
printf(“sum=%f\n”,sum);
/**********found***********/
四、编程题
1、从键盘输入一个实数保留该实数小数点后两位数,并对第三位进行四舍五入。
2、将a,b两个两位正整数合并形成一个新的整数放在c中。
合并的方式是:
将a中的十位和个位数依次放在变量c的百位和个位上,b中的十位和个位数依次放在变量c的千位和十位上。
例如:
当a=45,b=12时,c=1425。
3、从键盘输入一个小写字母,将其转换为大写字母,并输出。
例如:
输入a,输出为A。
第4章选择结构程序设计
本章学习内容主要包括:
关系运算符及关系表达式、逻辑运算符及逻辑表达式、分支结构的两条语句if语句和switch语句。
其中由关系运算符和逻辑运算符相结合组成的表达式、if语句格式的正确使用是本章的重点和难点。
一、选择题
1.逻辑运算符中,运算优先级按从高到低的顺序依次为()。
A.&&,!
,|| B.||,&&,!
C.&&,||,!
D.!
,&&,||
2.表达式!
x||a==b等价于()。
A.!
((x||a)==b) B.!
(x||y)==b
C.!
(x||(a==b)) D.(!
x)||(a==b)
3.表示关系x≤y≤z的c语言表达式为()。
A.(x<=y)&&(y<=z)B.(x<=y)AND(y<=z)
C.(x<=y<=z)D.(x<=y)&(y<=z)
4.能正确表示a≥10或a≤0的关系表达式是()。
A.a>=10ora<=0B.a>=10|a<=0
C.a>=10&&a<=0D.a>=10||a<=0
5.设整型变量m,n,a,b,c,d均为1,执行(m=a>b)&&(n=c>d)后,m,n的值是()。
A.0,0 B.0,1
C.1,0 D.1,1
6.intb=0,x=1;执行语句if(x++)b=x+1后,x,b的值依次为()。
A.2,3B.2,0
C.3,0D.3,2
7.根据题目描述,写出正确的if语句为()。
如果x>0,求x的平方根(x和y都是单精度类型的数据)。
(1)将结果放入变量y中;
(2)输出x的平方根y。
A.if(x>0)B.if(x>0)
{y=sqrt(x);{y=sqrt(x);}
printf("%f",y);printf("%f",y);
}
C.if(x>0)D.{if(x>0)
y=sqrt(x);y=sqrt(x);
printf("%f",y);printf("%f",y);}
8.阅读下面的程序,程序的运行结果为()。
#include
voidmain()
{
inta=2,b=-1,c=2;
if(a
if(b<0)c=0;
elsec+=1;
printf("%d\n",c);
}
A.2 B. 0
C.3 D.-1
9.阅读下面的程序,程序的运行结果为()。
#include
voidmain()
{
intx=20;
if(x>=0)
if(x<50)
printf("xisok\n");
else
printf("xisnotok\n");
}
A.xisnotok B. xisok
C.xisok\n D.无输出结果
10.阅读下面的程序,程序的运行结果为()。
#include
voidmain()
{
intx,a;
scanf("%d",&x);
a=x%10;
switch(a)
{
case0:
case2:
case4:
case6:
case8:
printf("even!
\n");break;
default:
printf("odd!
\n");
}
}
A.若给x输入奇数,则输出odd ;否则输出even
B.若给x输入奇数,则输出even ;否则输出odd
C.无论给x输入奇数或偶数,均输出odd
D.无输出结果
二、填空题
1.计算y的值。
x+5(x>=0)
y=
x-5(x<0)
#include
voidmain()
{
floatx,y;
scanf("%f",__1__);
__2__(x>=0)
y=x+5;
else
y=__3__;
printf("%f",y);
}
2.从键盘输入某一年份,判断该年是否为闰年。
#include
voidmain()
{
intyear;
scanf("__1__",&year);
__2__(year%4==0&&year%100!
=0||year%100==0__3__year%400==0)
printf("%d是闰年",year);
elseprintf("%d不是闰年",year);
}
3.从键盘输入一个整型数,判断它是否既能被3整除,又能被7整除。
#include
voidmain()
{
inty;
scanf("%d",__1__);
if(y__2__3==0&&y%7==0)
printf("%d能被3和7整除",y);
__3__
printf("%d不能被3和7整除",y);
}
三、改错题
1.从键盘上输入三个数,求出其中的最大值。
利用该程序的方法试求出四个数、五个数中的最大值。
#include
voidmain()
{
floata,b,c,max;
/**********found***********/
scanf("%f%f%f",&a,&b,c);
/**********found***********/
max=a
if(max<=b)max=b;
/**********found***********/
else(max<=c)max=c;
printf("%f",max);
}
2.用海伦公式求三角形的面积,三角形的三条边由键盘输入,求面积前须判断三角形的三条边能否构成三角形。
#include
#include
voidmain()
{
floata,b,c,h,s,area;
/**********found***********/
scanf("%d%d%d",&a,&b,&c);
/**********found***********/
else(a>0&&b>0&&c>0&&a+b>c&&b+c>a&&a+c>b)
{h=(a+b+c)/2;
s=h*(h-a)*(h-b)*(h-c);
/**********found***********/
area=fabs(s);
printf("%f",area);
}
else
printf("不能构成三角形");
}
3.从键盘上输入一个字符,判断它是大写字符、小写字符还是其它字符。
#include
voidmain()
{
charch;
/**********found***********/
scanf("%f",&ch);
if(ch>='a'&&ch<='z')
printf("是小写字符");
/**********found***********/
elseif(ch>='A'||ch<='Z')
printf("是大写字符");
/**********found***********/
elseif
printf("是其它字符");
}
四、编程题
1.判断两个数的大小关系。
2.从键盘输入某一学生的百分制成绩,给出相应的等级。
90分以上为“Excellent”;80~89分为“VeryGood”;70~79分为“Good!
”;60-69分为“Pass!
”;60分以下为“Fail”,试用switch语句和if语句分别来实现。
第5章循环结构程序设计
本章是C语言的重点章节,主要内容包括循环结构的三类语句while语句、do—while语句、for语句以及在三类语句中使用的break语句和continue语句。
本章的重点内容是三类循环语句的执行、应用过程和三类循环语句之间的相互嵌套。
必须熟练掌握三类循环语句及其嵌套语句的执行、应用过程,这是本章的难点,也是后续章节的编程基础。
在循环结构的三类语句中,不管使用哪一类循环语句编写程序,都要用到循环变量。
在一个程序中,通常情况下,和循环变量相关的有三个表达式:
初始值表达式、终止值表达式和增量表达式。
一、选择题
1.下面关于for循环的正确描述是()。
A.for循环只能用于循环次数已经确定的情况
B.for循环是先执行循环体语句,后判断终止条件
C.在for循环中,不能用break语句跳出循环体
D.在for循环的循环体语句中,可以包含多条语句,但必须用大括号括起来
2.对for(表达式1;;表达式3)可以理解为()。
A.for(表达式1;0;表达式3)
B.for(表达式1;1;表达式3)
C.for(表达式1;表达式1;表达式3)
D.for(表达式1;表达式3;表达式3)
3.若有“intm;”,则以下循环执行次数是()。
for(m=2;m==0;)
A.无限次B.0次C.1次D.2次
4.下面不是死循环的是()。
A.for(y=0,x=1;x>++y;x=i++)i=x;
B.n=0;
do{++n;}while(n>=0);
C.while
(1){x++;}
D.for(i=10;;i--)sum+=i;
5.下面程序段的运行结果是()。
for(i=0;i<5;i++)
{
if(i==2)continue;
printf("%d",i);
}
A.01B.0134C.01234D.无输出结果
6.下面程序段的运行结果是()。
intk=10;
while(k=0)k=k-1;
A.while循环执行10次B.循环是无限循环
C.循环体语句一次也不执行D.循环体语句执行一次
7.以下正确的描述是()。
A.continue语句的作用是结束整个循环的执行
B.只能在循环体内和switch语句