c语言练习题.docx
- 文档编号:6476360
- 上传时间:2023-01-06
- 格式:DOCX
- 页数:47
- 大小:108.20KB
c语言练习题.docx
《c语言练习题.docx》由会员分享,可在线阅读,更多相关《c语言练习题.docx(47页珍藏版)》请在冰豆网上搜索。
c语言练习题
1、判断程序的对错与写出结果
#include
main()
{
printf("%d\n",123+456);
}
2.1下列变量名中哪些是合法的?
2aa#C$t3_varint
2.2选择填空
(1)C语言中用________表示逻辑值“真”。
A)trueB)整型值0C)非零整数值D)T
(2)下列合法的字符常量为________。
A)"a"B)'\n'C)'china'D)a
(3)设有语句charc='\72';则变量c________。
A)包含1个字符B)包含2个字符C)包含3个字符D)不合法
(4)字符常量"\t\"Name\\Address\n"的长度为________。
A)19B)15C)18D)不合法
(5)设a,b,c为int型变量,且a=3,b=4,c=5,下面表达式值为0的是________。
A)'a'&&'b'B)a<=b
C)a||b+c&&b-cD)!
((a
c||1)
(6)若有以下定义:
chara;intb;floatc;doubled;
则表达式a*b+d–c的值的类型为_____________
A)floatB)intC)charD)double
(7)设有语句inta=3;执行了语句a+=a-=a*a;后,变量a的值是________。
A)3B)0C)9D)-12
(8)设有语句inta=3;执行了语句printf("%d",-a++);后,输出的结果是________,变量a的值是________。
A)3B)4C)-3D)-2
2.3将下列数学表达式表示为合法的C语言表达式。
(1)
(2)
(3)
(4)
(5)
(6)
3.1C语句分为哪几类?
3.2选择填空
(1)下列可作为C语言赋值语句的是:
_____________。
A)x=3,y=5B)a=b=cC)i--;D)y=int(x);
(2)以下程序的输出结果为:
_____________。
main()
{
inta=2,c=5;
printf("a=%%d,b=%%d\n",a,c);
}
A)a=%2,b=%5B)a=2,b=5C)a=%%d,b=%%dD)a=%d,b=%d
3.3分析下面程序片断,指出程序错在哪里,错误的原因,并将其改正。
(1)inta,b;
scanf("%d,%d",a,b);
(2)floatf=2.39;
printf("%d",f);
(3)doublevar;
longa;
scanf("%f%d",&var,&a);
(4)inta,b;
scanf("%d,%d\n",a,b);
(5)floatf;
scanf("%5.2f",&f);
(6)
main()
{
inta,b;
scanf("a=%d,b=%d",&a,&b);
printf("a=%d,b=%d\n",a,b);
}
程序运行时输入:
6,2↙
3.4分析下列程序并写出程序运行结果:
(1)
main()
{
charc1='a',c2='b',c3='c';
printf("a%cb%cc%cabc\n",c1,c2,c3);
}
(2)
main()
{
intx=12,y=8;
printf("\n%5d%5d%5d",!
x,x||y,x&&y);
}
(3)
main()
{
intx,y;
scanf("%2d%*2s%2d",&x,&y);
printf("%d",x+y);
}
程序执行时从键盘输入:
1234567↙
(4)
main()
{
inta=2,b=3;
floatx=3.5,y=2.5;
printf("%f",(float)(a+b)/2+(int)x%(int)y);
}
(5)
main()
{
intx=12,y=8;
printf("%d%d\n",x++,++y);
printf("%d%d\n",x,y);
}
(6)
main()
{
intx=12,y=8,p,q;
p=x++;
q=++y;
printf("%d%d\n",p,q);
printf("%d%d\n",x,y);
}
3.5已知三角形的三边长a,b,c,计算求三角形面积的公式为:
=
area=
要求编写程序,从键盘输入a,b,c的值,计算并输出三角形的面积。
[提示:
程序运行时应保证输入的a,b,c值满足三角形成立的条件,这样计算得到的三角形面积才有意义。
另外,将面积计算的数学公式写成合法的C语言表达式如下:
area=sqrt(s*(s-a)*(s-b)*(s-c))
注意写成:
area=sqrt(s(s-a)(s-b)(s-c))
是不错误的。
将数学公式
=
写成如下C语言表达式:
s=0.5*(a+b+c)
或
s=1.0/2*(a+b+c)
都是正确的。
而写成
s=1/2*(a+b+c)
虽然是合法的,但结果是错误的,请读者思考为什么。
]
3.6编程从键盘输入圆的半径r,计算并输出圆的周长和面积。
[提示:
将计算园周长和面积公式中的
定义为符号常量。
.]
4.1简答题:
(1)什么是算法?
算法在程序设计中的重要作用是什么?
(2)什么是结构化程序设计?
其基本思想是什么?
(3)什么是“自顶向下、逐步求精”的程序设计方法?
4.2选择题:
(1)在下面的条件语句中,只有一个在功能上与其它三个语句不等价(其中s1和s2表示它是C语句),这个不等价的语句是:
。
A)if(a)s1;elses2;
B)if(!
a)s2;elses1;
C)if(a!
=0)s1;elses2;
D)if(a==0)s1;elses2;
(2)设有声明语句:
inta=1,b=0;则执行以下语句后输出为:
。
switch(a)
{
case1:
switch(b)
{
case0:
printf("**0**");break;
case1:
printf("**1**");break;
}
case2:
printf("**2**");break;
}
A)**0**B)**0****2**C)**0****1****2**D)有语法错误
(3)在while(x)语句中的x与下面条件表达式等价的是:
。
A)x==0B)x==1C)x!
=1D)x!
=0
(4)若intx;且有下面的程序片断,则输出结果为:
。
for(x=3;x<6;x++)
{
printf((x%2)?
"**%d":
"##%d\n",x);
}
A)**3B)##3C)##3D)**3##4
##4**4**4##5**5
**5##5
4.3写出下列程序的运行结果。
(1)下面程序运行结果为。
#include
main()
{
inta=2,b=3,c=1;
if(a>b)
if(a>c)
printf("%d\n",a);
else
printf("%d\n",b);
printf("over!
\n");
}
(2)若从终端上由第一列开始输入以下数据:
right?
↙
则程序运行结果为:
。
#include
main()
{
charc;
c=getchar();
while(c!
='?
')
{
putchar(c);
c=getchar();
}
}
(3)对下面程序,若输入数据同上,则程序运行结果为:
。
#include
main()
{
charc;
while((c=getchar())!
='?
')
{
putchar(c);
}
}
(4)对下面程序,若输入数据同上,则程序运行结果为:
。
#include
main()
{
charc;
while(putchar(getchar())!
='?
');
}
(5)请读者上机运行下面的程序,并仔细体会两个程序运行结果的不同。
程序1:
#include
main()
{
charc;
while((c=getchar())!
='\n')
{
putchar(c);
}
printf("End!
\n");
}
程序2:
#include
main()
{
charc;
while((c=getchar())!
='$')
{
putchar(c);
}
printf("End!
\n");
}
运行时输入abcdefg$abcdefg↙
则两个程序的运行结果分别为:
。
(6)下面程序运行结果为:
。
#include
main()
{
inti,j,k;
charspace='';
for(i=1;i<=4;i++)
{
for(j=1;j<=i;j++)
{
printf("%c",space);
}
for(k=1;k<=6;k++)
{
printf("*");
}
printf("\n");
}
}
(7)下面程序运行结果为:
。
#include
main()
{
intn;
for(n=1;n<=5;n++)
{
if(n%2)
{
printf("*");
}
else
{
continue;
}
printf("#");
}
printf("$\n");
}
4.4阅读程序,按要求,在空白处填写适当的表达式或语句,使程序完整,并符合题目要求。
(1)任意从键盘输入一个年号,判断它是否是闰年,若是闰年输出“Yes”,否则,输出“No”,已知符合下列条件之一者是闰年:
(a)能被4整除,但不能被100整除;
(b)能被400整除。
程序如下:
#include
main()
{
intyear,flag;
printf("Enteryear:
");
scanf("%d",&year);
if(①)
{
flag=1;/*如果year是闰年,则标志变量flag置1*/
}
else
{
flag=0;/*否则,标志变量flag置0*/
}
if(②)
{
printf("%disaleapyear!
\n",year);/*打印“是闰年”*/
}
else
{
printf("%disnotaleapyear!
\n",year);/*打印“不是闰年”*/
}
}
(2)通过键盘输入一个字符,编程判断该输入的字符是数字字符、大写字母、小写字母、空格还是其它字符。
#include
main()
{
charch;
ch=getchar();
if(①)
{
printf("ItisanEnglishcharacter!
\n");
}
elseif(②)
{
printf("Itisadigitcharacter!
\n");
}
elseif(③)
{
printf("Itisaspacecharacter!
\n");
}
else
{
printf("Itisothercharacter!
\n");
}
}
(3)华氏和摄氏温度的转换公式为:
C=5/9*(F-32),其中 C表示摄氏的温度,F表示华氏的温度。
要求从华氏0度到华氏300度,每隔20度输出一个华氏温度对应的摄氏温度值。
#include
main()
{
intupper,step;
floatfahr=0,celsius;
upper=300;
step=20;
while(① { ②; printf("4.0f\t%6.1f\n",fahr,celsius); ③; } } 4.5编程判断输入整数的正负性和奇偶性。 4.6编程计算分段函数: ,输入x,打印出y值。 4.7输入三角形的三条边a,b,c,判断它们能否构成三角形,若能则指出是何种三角形: 等腰三角形、直角三角形、一般三角形。 [提示: 构成三角形的条件是: 任意两边之和大于第三边。 注意等腰直角三角形既是等腰三角形,又是直角三角形。 参考例4.18,对实型数据是否相等进行测试。 按题意,对程序进行测试时,需要以下五种测试用例: 不能构成三角形、等腰三角形、直角三角形、等腰直角三角形、一般三角形。 ] 4.8在屏幕上显示一张如下所示的时间表: *****Time***** 1morning 2afternoon 3night Pleaseenteryourchoice: 操作人员根据提示进行选择,程序根据输入的时间序号显示相应的问候信息,选择1时显示"Goodmorning",选择2时显示"Goodafternoon",选择3时显示"Goodnight",对于其它选择显示"Selectionerror! ",用switch语句编程实现。 4.9读入一个年份和月份,打印出该月有多少天(考虑闰年),用switch语句编程。 [提示: 闰年的2月有29天,平年的2月有28天。 ] 4.10编程计算1+3+5+7+…..+99+101的值。 4.11编程计算1*2*3+3*4*5+99*100*101的值。 [提示: 用累加算法,通项公式为: term=i*(i+1)*(i+2);i=1,3,…,99.或者为: term=(i-1)*i*(i+1);i=2,4,…,100.步长为2。 ] 4.12编程计算1! +2! +3! +4! +….+10! 的值。 [提示: 用累加算法,累加项为term=term*i;i=1,2,…10.term初值为1。 ] 4.13编程计算a+aa+aaa+….+aa..a(n个a)的值,n和a的值由键盘输入。 [提示: 用累加算法,累加项为term=term*10+a;;i=1,2,…n.term初值为0。 ] 4.14利用 前100项之积计算π。 [提示: 用累乘算法,累乘项为term=n*n/((n-1)*(n+1));;n=2,4,…100.步长为2,或者,term=2*n*2*n/((2*n-1)*(2*n+1));;n=1,2,…50.步长为1。 ] 4.15利用泰勒级数计算 的近似值, ,当最后一项的绝对值小于10-5时认为达到精度要求,要求统计总共累加了多少项。 [提示: 采用累加算法: e=e+term;寻找累加项的构成规律: 利用前项计算后项比寻找统一的累加项表示形式要简单一些,由 可以发现前后项之间的关系是: termn=termn-1÷n,写成C语句便是: term=term/n;term初值为1.0,n初值也为1,n按n=n+1变化。 统计累加项数只要设置一个计数器变量即可,这里,计数器变量取名为count,初值为0,在循环体中每累加一项就加一次1。 ] 4.16计算1-1/2+1/3-1/4+…+1/99-1/100+…,直到最后一项的绝对值小于10-4为止。 [提示: 采用累加算法,累加项通式为: term=sign/n;分子sign=-sign;初值为1,分母n=n+1;初值为1。 ] 4.17利用泰勒级数计算sin(x) sin(x)≈x-x3/3! +x5/5! -x7/7! +x9/9! -… 要求最后一项的绝对值小于10-5,并统计出此时累加了多少项。 [提示: x由键盘输入,采用累加算法,sum=sum+term,sum初值为x,利用前项求后项的方法计算累加项: term=-term*x*x/((n+1)*(n+2));term初值为x,n初值为1,n=n+2。 ] 4.18打印所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数本身。 例如153是“水仙花数”,因为153=13+33+53。 [提示: 首先确定水仙花数n可能存在的范围,因为n是一个三位数,所以范围确定为n从100变化到999,分离出n的个位i、十位j、百位k后,只要判断n是否等于i*i*i+j*j*j+k*k*k即可知n是否是水仙花数。 分离各位数字的方法可参考例4.2。 ] 4.19从键盘任意输入一个四位数x,编程计算x的每一位数字相加之和(忽略整数前的正负号)。 例如,输入x为1234,则由1234分离出其个位1、十位2、百位3、千位4,然后1+2+3+4=10,于是输出10。 [提示: 只要对输入的整数取绝对值(绝对值函数为fabs()),即可实现忽略整数前的正负号。 分离各位数字的方法可参考例4.2。 ] 4.20韩信点兵。 韩信有一队兵,他想知道有多少人,便让士兵排队报数: 按从1至5报数,最末一个士兵报的数为1;按从1至6报数,最末一个士兵报的数为5;按从1至7报数,最末一个士兵报的数为4;最后再按从1至11报数,最末一个士兵报的数为10。 你知道韩信至少有多少兵吗? [提示: 设兵数为x,则按题意x应满足下述关系式: x%5==1&&x%6==5&&x%7==4&&x%11==10 采用穷举法对x从1开始实验,可得到韩信至少有多少兵。 ] 4.21爱因斯坦数学题。 爱因斯坦曾出过这样一道数学题: 有一条长阶梯,若每步跨2阶,则最后剩下1阶,若每步跨3阶,则最后剩下2阶,若每步跨5阶,则最后剩下4阶,若每步跨6阶,则最后剩下5阶,只有每步跨7阶,最后才正好1阶不剩。 请问,这条阶梯共有多少阶? [提示: 设阶梯数为x,则根据题意: 阶梯数满足下面的关系式: x%2==1&&x%3==2&&x%5==4&&x%6==5&&x%7==0 采用穷举法对x从1开始实验,可计算出这条阶梯共有多少阶。 ] 4.22三色球问题。 若一个口袋中放有12个球,其中有3个红色的,3个白色的,6个黑色的,从中任取8个球,问共有多少种不同的颜色搭配? [提示: 设任取的红球个数为i,白球个数为j,黑球个数为k,根据题意应有: i+j+k=8,0<=i<=3,0<=j<=3,0<=k<=6。 若红球和白球个数的取值范围是0~3,在红球和白球个数确定的条件下,黑球个数的取值范围应为k=8–i-j,只要满足k<=6,i,j,k的组合即为所求。 ] 4.23鸡兔同笼,共有98个头,386只脚,编程求鸡、兔个多少。 [提示: 设鸡数为x,兔数为y,据题意有: x+y=98,2x+4y=386。 采用穷举法,x从1变化到97,y取98-x,如果x,y同时满足条件2x+4y=386,则打印x,y的值。 ] 4.24我国古代的《张丘建算经》中有这样一道著名的百鸡问题: “鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一。 百钱买百鸡,问鸡翁、母、雏各几何? ”意为: 公鸡每只5元,母鸡每只3元,小鸡3只1元。 用100元买100只鸡,问公鸡、母鸡和小鸡各能买多少只? [提示: 设公鸡、母鸡、小鸡数量分别为x,y,z,依题意列出方程组: x+y+z=100,5x+3y+z/3=100,采用穷举法求解,因100元买公鸡最多可买20只,买母鸡最多可买33只,所以,x从0变化到20,y从0变化到33,则z=100–x-y,只要判断第二个条件是否满足即可。 ] 4.25用一元五角钱人民币兑换5分、2分和1分的硬币(每一种都要有)共100枚,问共有几种兑换方案? 每种方案各换多少枚? [提示: 设5分、2分和1分的硬币各换x,y,z枚,据题意有: x+y+z=100,5x+2y+z=150,由于每一种硬币都要有,故5分硬币最多可换28枚,2分硬币最多可换73枚,1分硬币可换100-x-y枚,x,y,z只需满足第二个方程即可打印,对每一组满足条件的x,y,z值用计数器计数即可得到兑换方案的数目。 ] 4.26编程输出如下上三角形式的乘法九九表。 4.27编程打印以下图案。 (1) (2)(3) 4.28按如下格式打印100以内整数的平方根表。 [提示: 表内第1行打印0~9的平方根,表内第2行打印10~19的平方根,表内第3行打印20~29的平方根,…,表内第10行打印90~99的平方根。 设表的行为x,表的列为y,则对应第x行第y列的表值为sqrt(x*10+y)。 ] 2.1合法的为: t3_var 2.2选择填空 (1)C (2)B (3)A (4)B (5)D (6)D (7)D (8)CB 2.3 (1)sqrt(a*a+b*b)/(2*c) 或sqrt(pow(a,2)+pow(b,2))/(2*c) (2)fabs((a+b)*(c+d)+2) (3)(log(x)+sin(y))/2(注: y应为弧度) 例: 若y值为30°,sin(y)应写成sin(3.14/180*30),不能直接写成s
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 练习题
![提示](https://static.bdocx.com/images/bang_tan.gif)