C++实验教程实验25答案.docx
《C++实验教程实验25答案.docx》由会员分享,可在线阅读,更多相关《C++实验教程实验25答案.docx(31页珍藏版)》请在冰豆网上搜索。
C++实验教程实验25答案
实验二、 选择结构
【上机内容】
1.修改下列程序,使之满足当x为10时输出“==”,否则输出“!
=”的条件。
#include"stdio.h"
main()
{intx;
scanf("%d",&x);
if(x==10)printf("==\n");
elseprintf("!
=\n");
}
2.修改下列程序,使之实现以下功能:
#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=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(x<1)
y=2x–1(1≤x<10)
3x–11(x≥10)
编写程序输入x,输出y值。
参考答案:
#include"stdio.h"
main()
{intx,y;
scanf("%d",&x);
if(x<1)
y=x;
elseif(x<10)
y=2*x-1;
else
y=3*x-11;
printf("%d",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.熟练掌握switch语句;
2.掌握break语句在switch中的应用。
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)y=0;
elseif(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()
{intx1,x2;
floaty;
scanf("%d",&x1);
x2=x1;
switch(x1>0)
{case0:
y=0;break;
case1:
switch(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=%d,y=%f",x1,y);
}
}5.假设奖金税率如下(ma代表奖金,tr代表税率),利用switch语句编写程序对输入的一个奖金数,输出税率和应交税款以及实得奖金数(扣除奖金税后),
ma<1000tr=0%
1000≤ma<2000tr=5%
2000≤ma<4000tr=8%
4000≤matr=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));
}
实验三、 循环结构实验
(1)
任务1while语句程序设计
【目的与要求】
1.熟练掌握while语句
2.能用while语句实现各种算法
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的近似值(使误差小于给定的数值)的程序。
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.不进入循环;>=1
b.只循环一次;无此条件
c.只循环两次;==1
d.进入死循环(程序将永远循环下去)。
<=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.熟练掌握do-while语句
2.能用do-while语句实现各种算法
2.掌握while语句和do-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
3.下列程序中,do_while循环的循环次数为__无限次______
#include
main()
{inti=0;
do{if(i==6)continue;
i=i+2;
}while(i<10);
printf(“%d\n”,i);
}
4.运行下列程序,输出结果为_______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);
}
实验四、 循环结构实验
(2)
任务1for语句程序设计
【目的与要求】
1.熟练掌握for语句
2.能用for语句实现各种算法
3.掌握for语句的嵌套使用
【上机内容】
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.运行下列程序,输出结果为_________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.运行下列程序,输出结果为_______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.运行下列程序,输出结果为________6_________
#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.程序填空。
求出1000以内能被13整除的最大数。
#include"stdio.h"
voidmain()
{inti;
for(i=1000;i>0;i--)
if(i%13==0)
break;
printf("\n%d",i);
}
7、程序填空。
求Fibonacci数列:
1,1,2,3,5,8,···的前40个数,即:
F1=1(n=1)
F2=1(n=2)
Fn=Fn-1+Fn-2(n>=3)
要求每一行输出8个数。
参考答案:
#include
main()
{longf1,f2;
inti;
f1=1;f2=1;
for(i=1;i<=20;i++)
{printf("%10ld%10ld",f1,f2);
if(i%4==0)printf("\n");
f1=f1+f2;
f2=f2+f1;
}
}
8.程序填空。
从键盘输入10个不为0的整型数,统计其中负数的个数,
并求出所有正数的平均值。
参考答案:
#include
main()
{inti,x,count=0;
floatave=0;
for(i=0;i<10;i++)
{scanf("%d",&x);
if(x>0)
ave+=x;
else
count++;
}
if(count!
=10)
ave/=10-count;
printf("count:
%d,Average:
%f\n",count,ave);
}
9.帕多瓦数列:
1,1,1,2,2,3,4,5,7,9,12,16,21,…求出这个数列的前20项之和。
参考答案:
方法1《一次一项》
#include"stdio.h"
voidmain()
{intf1=1,f2=1,f3=1,f,sum=3,i;
printf("%d%d%d",f1,f2,f3);
for(i=4;i<=20;i++)
{f=f1+f2;
printf("%d",f);
sum=sum+f;
f1=f2;
f2=f3;
f3=f;
}
printf("\nsum=%d",sum);
}
方法2《一次3项》
#include"stdio.h"
voidmain()
{intf1=1,f2=1,f3=1,sum=0,i;
for(i=1;i<=7;i++)
{printf("%d%d%d",f1,f2,f3);
sum=sum+f1+f2+f3;
f1=f1+f2;
f2=f2+f3;
f3=f3+f1;
}
printf("\nsum=%d",sum-f3+f1);
}
例:
有一数列:
2/1,3/2,5/3,8/5,…求出这个数列的前20项之和。
#include
main()
{inti=1,n=20;
floatt,m,x=1,y=2,sum=0;
while(i<=n)
{m=y/x;
sum=sum+m;
t=y;
y=y+x;
x=t;
i++;
}
printf("Theresultis:
%10.4f\n",sum);
}
10.统计能被4整除而且个位数为6的4位数的个数及和。
参考答案:
#include"stdio.h"
main()
{inti,sum=0,count=0;
for(i=1000;i<=9999;i++)
if(i%10==6&&i%4==0)
{count++;
sum=sum+i;
}
printf("个数为:
%8d,总和为:
%8d\n",count,sum);
}
11.求1~100之间所有素数的个数及和。
参考答案:
#include
#include
main()
{intm,n,i,j,k,sum=0;
n=0;
for(m=2;m<=100;m++)
{k=(int)sqrt(m);
i=2;
while(m%i!
=0&&i<=k)
i++;
if(i==k+1)
{n++;sum=sum+m;}
}
printf("共有%8d个素数,总和为%8d\n",n,sum);
}
12.编写程序输出下面的数字金字塔。
1
121
12321
1234321
123454321
参考答案:
#include
main()
{
intn=5,i,j;
for(i=1;i<=5;i++)
{
for(j=1;j<=5-i;j++)
printf("");
for(j=1;j<=i;j++)
printf("%d",j);
for(j=i-1;j>=1;j--)
printf("%d",j);
printf("\n");
}
}
实验5函数定义、声明与调用
任务1函数的定义和声明
【目的与要求】
(1)掌握C语言函数定义与调用的规则;
(2)熟悉C语言函数声明的形式与位置;
(3)掌握C语言函数定义、声明与调用之间的关系。
【上机内容】
1.预测下面程序的输出,并上机运行验证结果。
(结果:
21)
#include
func(inta,intb)
{
intc;
c=a+b;
returnc;
}
main( )
{
intx=6,y=7,z=8,r;
r=func((x--,y++,x+y),z--);
printf("%d\n",r);
}
2.分析推测下面程序的输出,并上机运行验证结果。
(结果:
12)
#include
unsignedfun26(unsignednum)
{
unsignedk=1;
do
{k*=num%10;num/=10;}
while(num);
returnk;
}
main( )
{
unsignedn=26;
printf("%d\n",fun26(n));
}
3.求出以下程序的运行结果,并描述程序所完成的功能。
(求x的n次幂即2的4次幂。
结果:
16)
#include
main( )
{
intpower(intx,intn);
intx=2,n=4;
printf("\ns=%d",power(x,n));
}
intpower(intx,intn)
{
inti,p=1;
for(i=1;i<=n;i++)
p=p*x;
return(