大学C语言程序设计实验教程实验答案版.docx
《大学C语言程序设计实验教程实验答案版.docx》由会员分享,可在线阅读,更多相关《大学C语言程序设计实验教程实验答案版.docx(61页珍藏版)》请在冰豆网上搜索。
大学C语言程序设计实验教程实验答案版
实验1基本程序示例
任务1熟悉C语言程序的编辑、编译、连接和运行过程
【上机内容】
1.输入并运行下面程序,写出运行结果。
#include"stdio.h"
main( )
{
charc1,c2;
c1=97;c2=98;
printf("%c,%c",c1,c2);
}
在此基础上,完成以下3项任务:
(1)在c1=97;c2=98;语句后加入如下语句,并运行。
printf("%d,%d",c1,c2);
运行结果:
a,b97,98
(2)将charc1,c2;改为如下语句,再运行。
intc1,c2;
运行结果:
a,b
(3)将c1=97;c2=98;改为如下语句,再运行,并分析其运行结果。
c1=300;c2=400;
运行结果:
,,怭(或,,?
)
2.分析下面程序,写出运行结果,再输入计算机中运行,将得到的结果与分析得到的结果比较对照。
#include"stdio.h"
main( )
{
charc1='a',c2='b',c3='c',c4='\101',c5='\116';
printf("a%cb%c\tabc%c\n",c1,c2,c3);
printf("\t\b%c%c",c4,c5);
}
运行结果:
aabbabcc
AN
3.分析下面程序,写出运行结果,再输入计算机中运行,将得到的结果与分析得到的结果比较对照。
#include"stdio.h"
main( )
{
inti,j,m,n;
i=8;j=10;
m=++i;n=j++;
printf("%d,%d,%d,%d",i,j,m,n);
}
运行结果:
9,11,9,10
分别进行以下改动后,先分析结果,再运行对照。
(1)将m=++i;n=j++;改为如下:
m=i++;n=++j;
运行结果:
9,11,8,11
(2)程序改为如下:
#include"stdio.h"
main( )
{
inti,j;
i=8;j=10;
printf("%d,%d",i++,j++);
}
运行结果:
8,10
(3)程序改为如下:
#include"stdio.h"
main( )
{
inti,j;
i=8;j=10;
printf("%d,%d",++i,++j);
}
运行结果:
9,11
(4)程序改为如下:
#include"stdio.h"
main( )
{
inti,j;
i=8;j=10;
printf("%d,%d,%d,%d",i,j,i++,j++);
}
运行结果:
8,10,8,10
(5)程序改为如下:
#include"stdio.h"
main( )
{
inti,j,m=0,n=0;
i=8;j=10;
m+=i++;n-=--j;
printf("i=%d,j=%d,m=%d,n=%d",i,j,m,n);
}
运行结果:
i=9,j=9,m=8,n=-9
任务2简单的C语言程序设计
1.按格式要求输入、输出数据。
程序请单如下:
#include"stdio.h"
main( )
{
inta,b;
flostx,y;
charc1,c2;
scanf("a=%d,b=%d",&a,&b);
scanf("%f,%e",&x,&y);
scanf("%c%c",&c1,&c2);/*录入时%c与%c之间有个空格*/
printf("a=%d,b=%d,x=%f,y=%f,c1=%c,c2=%c\n",a,b,x,y,c1,c2);
}
运行该程序,必须按如下方式在键盘上输入数据:
a=3,b=7↙
8.5,71.82aA↙(注解:
a与A之间输入一个空格,且a紧跟71.82后写,不要空格)
请写出输出结果。
运行结果:
a=7,b=3,x=8.500000,y=71.820000,c1=a,c2=A
2.输入三角形的三条边长,求三角形面积。
程序清单如下:
#include"stdio.h"
#include"math.h"
main( )
{
floata,b,c,s,area;
scanf("%f,%f,%f",&a,&b,&c);
s=1.0/2*(a+b+c);
area=sqrt(s*(s-a)*(s-b)*(s-c));
printf("area=%f",area);
}
运行结果:
(具体情况根据自己输入的数据而定)
如在键盘上输入:
3,4,5↙
则运行结果为:
area=6.000000
3.已知圆半径、圆柱高、求圆周长、圆柱体积。
程序清单如下:
#include"stdio.h"
main( )
{
floatr,h,l,v,pi;
pi=3.1415926;
scanf("%f,%f",&r,&h);
l=2*pi*r;
v=pi*r*r*h;
printf("圆周长为:
%6.2f\n",l);
printf("%圆柱体积为:
6.2f",v);
}
运行结果:
(具体情况根据自己输入的数据而定)
如在键盘上输入:
5,6↙
则运行结果为:
圆周长为:
31.42
圆柱体积为:
471.24
4.输入一个摄氏温度,要求输出华氏温度,公式为f=5/9·c+32。
程序清单如下:
#include"stdio.h"
main( )
{
floatc,f;
scanf("%f",&c);
f=5.0/9*c+32;
printf("%5.2f\n",c);
}
运行结果:
(具体情况根据自己输入的数据而定)
如在键盘上输入:
37↙
则运行结果为:
52.56
实验2 选择结构
任务1if语句程序设计
1.修改下列程序,使之满足输入10时输出“==”,否则输出“!
=”的条件。
#include"stdio.h"
main()
{intx;
scanf("%d",&x);
if(x==10)printf("==\n");
elseprintf("!
=\n");
}
2.修改下列程序,使之实现以下功能:
①当a==b并且b==c时,输出“a==b==c”;②当a!
=b时,输出“a!
=b”。
#include“stdio.h”
main()
{inta,b,c;
scanf(“%d%d%d”,&a,&b,&c);
if(a==b)
{if(b==c)
printf(“a==b==c”);
}
else
printf(“a!
=b”);
}
3.程序填空。
从键盘输入任意一个大写字母,将其转换成相应小写字母输出。
#include
main()
{charc;
scanf("%c",&c);
if(c>='A'&&c<='Z')或(c>=65&&c<=90)
c=c+32;
printf("\n%c",c);
}
4.有以下程序,执行后输出结果为_______4_______。
#include“stdio.h”
main()
{inta=1,b=2,c=3,d=4;
if(a
elseif((c-b)==a)printf(“%d\n”,2*d);
elseprintf(“%d\n”,4*d);
}
5.有以下程序,执行后输出结果为______970_____。
#include"stdio.h"
main()
{inta=8,b=7,c=9,t=0;
if(a
if(aif(bprintf("%5d%5d%5d\n",a,b,c);
}
6.有以下程序,执行后输出结果为_____987_____。
#include"stdio.h"
main()
{inta=8,b=7,c=9,t=0;
if(a
if(aif(bprintf("%5d%5d%5d\n",a,b,c);
}
7.x、y有如下函数关系,编写程序输入x,输出y值。
x(x<1)
y=2x–1(1≤x<10)
3x–11(x≥10)
参考答案:
#include"stdio.h"
main()
{doublex,y;
scanf("%lf",&x);
if(x<1)
y=x;
elseif(x<10)
y=2*x-1;
else
y=3*x-11;
printf("y=%lf",y);
}
8.输入一个百分制分数,要求输出对应的成绩等级:
90~100为‘A’,80~89为‘B’,70~79为‘C’,60~69为‘D’,不及格为‘E’。
参考答案:
#include
main( )
{floatscore;
printf("inputsocre:
");
scanf("%f",&score);
if(score>=90)
printf("A\n");
elseif(score>=80)
printf("B\n");
elseif(score>=70)
printf("C\n");
elseif(score>=60)
printf("D\n");
else
printf("E\n");
}
9.给一个不多于3位的正整数,编写程序完成以下要求:
(1)求出它是几位数;
(2)分别输出每一位数字;
(3)按逆序输出各位数字,例如,原数为321,应输出123。
参考答案:
#include"stdio.h"
voidmain()
{inta,b,c,x,n;
scanf("%d",&x);
a=x/100;
b=(x-a*100)/10;
c=x%10;
if(a!
=0)
printf("%d为3位数,原数为%d,逆序数为%d\n",x,x,c*100+b*10+a);
elseif(b!
=0)
printf("%d为2位数,原数为%d,逆序数为%d\n",x,x,c*10+b);
else
printf("%d为1位数,原数为%d,逆序数为%d\n",x,x,c);
}
任务2switch语句程序设计
1.有如下程序,执行后输出结果为______14______。
#include“stdio.h”
main()
{inti=5;
switch(i)
{case4:
i+=1;
case5:
i+=2;
case6:
i+=3;
default:
i+=4;
}
printf("%d\n",i);
}
2.有如下程序段,若grade的值为'C',则输出结果是_____Medium!
____
Pass!
______。
switch(grade)
{case'A':
printf("Excellent!
\n");
case'B':
printf("Fine!
\n");break;
case'C':
printf("Medium!
\n");
case'D':
printf("Pass!
\n");break;
default:
printf("Fail!
\n");
}
3.有以下程序,执行后输出结果为_______a=3,b=5__________
#include"stdio.h"
main()
{intx=0,y=1,a=2,b=3;
switch(x)
{case0:
switch(y)
{case0:
a++;
case1:
b++;break;
}
case1:
a++;b++;break;
case2:
a++;b++;
}
printf("\na=%d,b=%d",a,b);
}
4.将下列的程序段改用switch语句来实现,使它完成相同的功能。
if(x>=0&&x<10)y=x;
elseif(x<20)y=x+3;
elseif(x<40)y=-0.5*x+10;
elsey=2*x-5;
参考答案:
#include"stdio.h"
main()
{floatx1,x2;
floaty;
scanf("%f",&x1);
x2=x1;
switch(x1>0)
{case0:
y=0;break;
case1:
switch((int)x2/10)
{case0:
y=x2;break;
case1:
y=x2+3;break;
case2:
case3:
y=-0.5*x2+10;break;
default:
y=2*x2-5;break;
}
}
printf("x=%f,y=%f",x1,y);
}
5.以下程序计算某年某月有几天,闰年与平年的二月份天数不同。
判别闰年的条件是:
能被4整除但不能被100整除的年是闰年,或者能被400整除的年也是闰年。
请分析程序填空。
#include"stdio.h"
#include"stdio.h"
main()
{intyy,mm,days;
printf("inputyearandmonth:
");
scanf("%d%d",&yy,&mm);
switch(mm)
{case1:
case3:
case5:
case7:
case8:
case10:
case12:
days=31;break;
case4:
case6:
case9:
case11:
days=30;break;
case2:
if(yy%4==0&&yy%100!
=0||yy%400==0)days=29;
elsedays=28;
break;
default:
printf("inputerror");break;
}
printf("thedaysof%d%dis%d\n",yy,mm,days);
}
6.假设奖金税率如下(ma代表奖金,tr代表税率),利用switch语句编写程序对输入的一个奖金数,输出税率和应交税款以及实得奖金数(扣除奖金税后),
①ma<1000时,tr=0%;
②1000≤ma<2000时,tr=5%;
③2000≤ma<4000时,tr=8%;
④4000≤ma时,tr=10%。
参考答案:
#include"stdio.h"
main()
{floatma,tr,ma_tr;
scanf("%f",&ma);
printf("奖金数为%8.2f",ma);
switch(ma>=1000)
{case0:
tr=0;break;
case1:
switch((int)ma/1000)
{case1:
tr=0.05;break;
case2:
case3:
tr=0.08;break;
default:
tr=0.1;break;
}
}
printf("税率为=%.2f,应交税款为=%.2f,实得奖金数为=%.2f\n",tr,ma*tr,ma*(1-tr));
}
实验3 循环结构实验
(1)
任务1while语句程序设计
1.分析并修改下面的程序,使该程序能正常结束运行。
#include
main()
{intx,y;
x=2;y=0;
while(!
y--)
printf(“%d,%d\n”,x,y);
}
2.下列程序中,while循环的循环次数为___6次___。
#include
main()
{inti=0;
while(i<10)
{if(i==5)break;
i++;
}
printf(“%d\n”,i);
}
3.下面是一个计算e的近似值(使误差小于给定的数值)的程序。
#include
main()
{doublee=1.0,x=1.0,y,detax;
inti=1;
printf("pleaseinputenter:
\n");
scanf("%lf",&detax);
y=1/x;
while(y>=detax)
{
x=x*i;
y=1/x;
e=e+y;
++i;
}
printf("%12.10f",e);
}
参考答案:
实验要求:
(1)阅读上面的程序,写出程序所依据的计算公式。
e=1+1/1!
+1/2!
+1/3!
+....+1/n!
(2)当输入的detax各是什么值时,能分别使程序按下面的要求运行:
a.不进入循环;detax>1.0
b.只循环两次;detax>0.5&&detax<=1.0
c.进入死循环(程序将永远循环下去)。
<=0
(3)原程序中while语句中的y>=detax,分别换成y>detax,y=detax,y4.编写程序。
对输入的任意的一个正整数按反序输出。
例如,输入147,输出741。
参考答案:
#include"stdio.h"
voidmain()
{
intx,i;
scanf("%d",&x);
while(x!
=0)
{i=x%10;
x=x/10;
printf("%d",i);
}
}
任务2do-while语句程序设计
1.分析并修改下面的程序,使该程序能正常结束运行。
#include
main()
{intx=0;
do{
x++;
}while(x==2);
printf(“%d\n”,x);
}
2.有以下两段程序,比较输出结果并分析原因。
(一)
main()
{intx=0;
while(x<0)x++;
printf(“%d\n”,x);
}
结果为:
0
(二)
main()
{intx=0;
do{x++;
}while(x<0);
printf(“%d\n”,x);
}
结果为:
1
两段程序结果不同,是因为x的初始值为0,从而使循环条件不成立。
当循环条件不成立一次都不成立时,do……while循环会比while循环多执行一次循环体。
3.下列程序中,do_while循环的循环次数为__无限次____。
#include
main()
{inti=0;
do{if(i==6)continue;
i=i+2;
}while(i<10);
printf("%d\n",i);
}
4.运行下列程序,输出结果为_______sum=4000_______。
#include"stdio.h"
#defineN100
main()
{intx=0,sum=0;
do{if(x==(x/5*5))
continue;
sum=sum+x;
}while(++xprintf("sum=%d\n",sum);
}
5.求1!
+2!
+3!
+4!
+5!
+6!
+7!
+8!
+9!
+10!
请填空将下面的程序补充完整:
答案:
4037913
#include
main()
{intj,m,p,s;
s=0;
m=1;
do
{p=1;
j=1;
while(j<=m)
{p*=j;
j++;
}
s=s+p;
m++;
}while(m<=10);
printf("s=%d\n",s);
}
6.编写程序。
每个苹果0.8元,第一天买2个苹果,第二天开始,每天买前一天的2倍,直至购买的苹果总个数到不超过100的最大值,求每天平均花多少钱?
答案:
9.92
参考答案:
#include"stdio.h"
voidmain()
{
intx,sum,day;
doubleave=0;
x=2;
day=1;
sum=2;
do
{x=2*x;
sum=sum+x;
day++;
}while(sum<=100);
ave=(sum-x)*0.8/(day-1);
printf("%lf",ave);
}
实验4 循环结构实验
(2)
任务1for语句程序设计
1.分析并修改下面的程序,使该程序能正常结束运行。
#include
main()
{inti;
for(i=1;i<10;i++)
printf("%d\n",i);
}
2.分析并修改下面的程序,使sum的值为1+2+……+10的和。
#include
main()
{inti=1,sum=0;
for(;i<=10;i++)
sum=sum+i;
printf("sum=%d\n",sum);
}
3.运行下列程序,输出结果为_________sum=15________。
#include
main()
{inti,sum=0;
for(i=0;i<=10;i++)
{sum=sum+i;
if(i==5)break;
}
printf("sum=%d\n",sum);
}
4.运行下列程序,输出结果为_______sum=4000________。
#include
main()
{inti,sum=0;
for(i=0;i<=100;i++)
{if((i%5)==0)
continue;
sum=sum+i;
}
printf("sum=%d\n",sum);
}
5.运行下列程序,输出结果为_______sum=60________。
#include
main()
{inti,j,sum=0;
for(i=0;i<=3;i++)
for(j=0;j<=5;j++)
sum=sum+j;
printf("sum=%d\n",sum);
}
6.程序填空。
求出1