实验五嵌套结构1.docx
- 文档编号:7316888
- 上传时间:2023-01-22
- 格式:DOCX
- 页数:19
- 大小:75.21KB
实验五嵌套结构1.docx
《实验五嵌套结构1.docx》由会员分享,可在线阅读,更多相关《实验五嵌套结构1.docx(19页珍藏版)》请在冰豆网上搜索。
实验五嵌套结构1
实验五复合嵌套结构
(1)理解嵌套结构的形成方法,学习自顶向下,逐步细化的算法设计方法
(2)熟悉循环嵌套结构、复合嵌套结构
(3)学习嵌套结构的典型算法
任务一改错(error02_01.cpp)
打开程序error02_01.cpp改正程序中的错误,判断一个数是否是素数。
素数就是只能被1和自身整除的正整数,1不是素数,2是素数。
#include
#include
intmain(void)
{
intcount,i,m;
printf("number:
");
scanf("%d",&m);
for(i=2;i<=m;i++)
if(m%i==0)printf("%d不是素数\n",m);
elseprintf("%d是素数\n",m);
printf("\n");
return0;
}
改错后的源程序:
#include
#include
intmain(void)
{
intcount,i,m,n;
printf("number:
");
scanf("%d",&m);
n=sqrt(float(m));
for(i=2;i<=n;i++)
if(m%i==0)
break;
if(i<=n)
printf("%d不?
是º?
素?
数ºy\n",m);
else
printf("%d是º?
素?
数ºy\n",m);
printf("\n");
getchar();
getchar();
return0;
}
任务二 掌握使用if…else语句(ex5_1.cpp)
题目要求
打开程序文件ex02_01.cpp,修改下面程序中的4个子函数中的代码 ,能按每一部分的要求得出相应的输出。
修改只限于增加圆括号(是花括号吧?
),和代码的缩进方式。
当然代码的缩进方式对程序的执行没有影响,但可增加代码的可读性。
(也可能什么修改也不要做)。
#include
voidpaint_1(intx,inty);
voidpaint_2(intx,inty);
voidpaint_3(intx,inty);
voidpaint_4(intx,inty)
voidmain()
{
intx,y;
x=5,y=8;
paint_1(x,y);
paint_2(x,y);
paint_3(x,y);
y=7;
paint_4(x,y);
}
voidpaint_1(intx,inty)
{
printf("\nsection1:
\n");
if(y==8)
if(x==5)
printf("@@@@@\n");
else
printf("#####\n");
printf("$$$$$\n");
printf("&&&&&\n");
}
voidpaint_2(intx,inty)
{
printf("\nsection2:
\n");
if(y==8)
if(x==5)
printf("@@@@@\n");
else
printf("#####\n");
printf("$$$$$\n");
printf("&&&&&\n");
}
voidpaint_3(intx,inty)
{
printf("\nsection3:
\n");
if(y==8)
if(x==5)
printf("@@@@@\n");
else
printf("#####\n");
printf("$$$$$\n");
printf("&&&&&\n");
}
voidpaint_4(intx,inty)
{
printf("\nsection4:
\n");
if(y==8)
if(x==5)
printf("@@@@@\n");
else
printf("#####\n");
printf("$$$$$\n");
printf("&&&&&\n");
}
Section1:
假定x=5,y=8,输出为:
Section2:
假定x=5,y=8,输出为:
Section3:
假定x=5,y=8,输出为:
Section4:
假定x=5,y=7,输出为:
修改后的源程序:
voidpaint_3(intx,inty);
voidpaint_4(intx,inty);
voidmain()
{
intx,y;
x=5,y=8;
paint_1(x,y);
paint_2(x,y);
paint_3(x,y);
y=7;
paint_4(x,y);
getchar();
getchar();
}
voidpaint_1(intx,inty)
{
printf("\nsection1:
\n");
if(y==8)
{
if(x==5)
printf("@@@@@\n");
}
else
printf("#####\n");
printf("$$$$$\n");
printf("&&&&&\n");
}
voidpaint_2(intx,inty)
{
printf("\nsection2:
\n");
if(y==8)
{
if(x==5)
printf("@@@@@\n");
}
else
{
printf("#####\n");
printf("$$$$$\n");
printf("&&&&&\n");
}
}
voidpaint_3(intx,inty)
{
printf("\nsection3:
\n");
if(y==8)
{
if(x==5)
printf("@@@@@\n");
else
{
printf("#####\n");
printf("$$$$$\n");
}
}
printf("&&&&&\n");
}
voidpaint_4(intx,inty)
{
printf("\nsection4:
\n");
if(y==8)
{
if(x==5)
printf("@@@@@\n");
}
else
{
printf("#####\n");
printf("$$$$$\n");
printf("&&&&&\n");
}
}
任务三编程身高预测(ex5_2.cpp)
每个做父母的都关心自己孩子成人后的身高,据有关生理卫生知识与数理统计分析表明,影响小孩成人后的身高的因素包括遗传、饮食习惯与体育锻炼等。
小孩成人后的身高与其父母的身高和自身的性别密切相关。
设faHeight为其父身高,moHeight为其母身高,身高预测公式为
男性成人时身高=(faHeight+moHeight)×0.54cm
女性成人时身高=(faHeight×0.923+moHeight)/2cm
此外,如果喜爱体育锻炼,那么可增加身高2%;如果有良好的卫生饮食习惯,那么可增加身高1.5%。
编程从键盘输入用户的性别(用字符型变量sex存储,输入字符F表示女性,输入字符M表示男性)、父母身高(用实型变量存储,faHeight为其父身高,moHeight为其母身高)、是否喜爱体育锻炼(用字符型变量sports存储,输入字符Y表示喜爱,输入字符N表示不喜爱)、是否有良好的饮食习惯等条件(用字符型变量diet存储,输入字符Y表示良好,输入字符N表示不好),利用给定公式和身高预测方法对身高进行预测。
源程序清单:
#include
voidmain()
{
doublefaHeight,moHeight,height;
charsex,sports,diet;
printf("Pleaseenterthesex(ForM):
");
scanf("%c",&sex);
printf("Pleaseenterfather'sheight(cm):
");
scanf("%lf",&faHeight);
printf("Pleaseentermother'sheight(cm):
");
scanf("%lf",&moHeight);
printf("Whetheryoulikesportsornot(YorN):
");
getchar();
scanf("%c",&sports);
printf("Whetheryouhaveagoodeatinghabits(YorN):
");
getchar();
scanf("%c",&diet);
if(sex=='F')
height=(faHeight*0.923+moHeight)/2;
else
height=(faHeight+moHeight)*0.54;
if(sports=='Y')
height=height*1.02;
if(diet=='Y')
height=height*1.015;
printf("Thepredictionofyouradultheightis%.2f",height);
getchar();
getchar();
}
任务四编程打印表格ex5_3.cpp
创建程序文件ex02_03.cpp,完成下面功能,
Bunyan木材公司需要创建一个木材的工程特性表格。
木材的尺寸由底长和高(英寸)给出。
工程师需要知道木材的以下信息:
横截面积=底*高
惯性力矩=底*高3/12
截面系数=底*高2/6
所有者要求木材的底边尺寸为2、4、6、8和10英寸,高度为2、4、6、8、10和12英寸,制作一张具有表头的表格来显示这些值和计算出的工程属性。
表格的框架如下所示
木材尺寸横截面积惯性力矩截面系数
2*2
2*4
2*6
2*8
2*10
2*12
4*2
4*4
......
源程序清单:
#include
voidmain()
{
inti,j;
doublea,b,c;
printf("木材尺寸横截面积惯性力矩截面系数\n");
for(i=2;i<=10;i=i+2)
for(j=2;j<=12;j=j+2)
{
a=i*j;
b=i*j*j*j/12.0;
c=i*j*j/6.0;
printf("%2d*%2d%12.2f%10.2f%10.2f\n",i,j,a,b,c);
}
getchar();
getchar();
}
任务五编程天气统计ex5_4.cpp
创建程序文件ex02_05.cpp,编写一个程序处理一组日最高气温。
程序需要统计并打印出高温天数(最高温度为华氏85或更高),舒适天数(最高温度为华氏60~85),以及寒冷天数(最高温度小于华氏60),最后显示平均温度。
用下面数据测试你的程序:
5562687459454158606765788288919290938780787972686159
1.源程序清单:
#include
voidmain()
{
intday;//存放总的天数
inti;//控制循环
inttem;//存放温度
doubleavr=0;//存放平均温度
printf("请输入总的天数:
");
scanf("%d",&day);
inthotday=0,warmday=0,coldday=0;
//统计各个类型的天数
for(i=1;i<=day;i++)
{
scanf("%d",&tem);
if(tem>=85)hotday++;
elseif(tem>=60)warmday++;
elsecoldday++;
avr+=tem;
}
avr/=day;
//输出
printf("\n高温天数为:
%d,舒适天数为:
%d,寒冷天数为:
%d,平均温度为:
%.1f。
\n",hotday,warmday,coldday,avr);
}
2.运行结果
3。
实现算法(自然语言描述)
1、输入总天数day
2、循环i从1到day,步长1
(1)输入一个天气tem
(2)如果tem>=85则hotday++;
否则如果tem>=60则warmday++;
否则coldday++;
(3)累计天气到arv
3、计算平均温度:
arv/day
4、输出高温天数,舒适天数,寒冷天数,平均温度。
任务六编程穷举法ex5_5.cpp
创建程序文件ex02_04.cpp,使用穷举法求解下面问题:
鸡、兔同笼,共50个头,170只脚。
问鸡、兔各有多少只?
1.源程序清单:
#include
voidmain()
{
intche;//存鸡的只数
for(che=1;che<=50;che++)
{
if((che*2+(50-che)*4)==170)printf("鸡%d只,兔%d只\n",che,50-che);
}
}
2.运行结果
3。
实现算法(自然语言描述)
循环鸡的数量从1穷举到50,步长1
如果鸡*2+(50-鸡)*4等于170,则输出结果。
任务七补充选做编程构造数ex5_6.cpp
创建程序文件ex02_05.cpp,请写一个函数intsetbits(intx,intp,intn,inty),它求出把整数x从左端第p位开始的n个位用y的最右边的n个位替换,其它位都不变的那个整数。
例如x:
8458573p:
3n:
4y:
983284函数的结果应为8432843,
但n如果超出x的长度,取x的有效长度,
例如:
x:
8458573p:
5n:
4y:
983284函数的结果应为8458284,
p超出x长度视为无效数据,y不足需要替换的位数视为无效数据。
返回不同的错误编码,在调用时输出不同的错误提示。
1.源程序清单:
#include
intsetbits(intx,intp,intn,inty);
intreverse(intn);
voidmain()
{
intx,p,n,y;
intresult;
printf("请依次输入x,p,n,y:
");
scanf("%d%d%d%d",&x,&p,&n,&y);
result=setbits(x,p,n,y);
if(result==-1)
printf("无效数据,p超出x长度!
\n");
else
if(result==-2)
printf("无效数据,y不足需要替换的位数\n");
else
printf("结果为:
%d\n",result);
}
intsetbits(intx,intp,intn,inty)
{
intresultNum=0;//结果
intreplaceNum=0;//y最右n位数
inth=1;
inti=0,bit;
intn_x=0;
resultNum=x;
while(resultNum)
{resultNum/=10;
n_x++;
}
if(p>n_x)
{
return-1;//p超出x长度视为无效数据
}
//构造替代数:
y的最右n位数
for(i=1;i<=n;i++)
{replaceNum+=y%10*h;
y=y/10;h=h*10;
if(y==0)break;
}
if(i return-2;//y不足需要替换的位数,视为无效数据 //从右面取位,构造新数的倒置数例: x: 8458573p: 3n: 4y: 983284replaceNum=3284resultNum: 3482348 i=n_x; while(x) { if(i>p+n-1) {bit=x%10; } else if(i>=p) {bit=replaceNum%10; replaceNum/=10; } else {bit=x%10;} resultNum=resultNum*10+bit; i--; x=x/10; } returnreverse(resultNum);//返回resultNum的倒置数 } //倒置n: 123=>321 intreverse(intn) {intresult=0; while(n) {result=result*10+n%10; n/=10; } returnresult; } 2.运行结果 3。 实现算法(自然语言描述) intsetbits(intx,intp,intn,inty) 1.求x的位数n_x n_x=0;resultNum=x 循环当resultNum不为0 (1)n_x++; (2)resultNum整除10 2.如果p>n_x,替换的起始位大于x的位数出错返回-1 3.求替代数: y的最右n位数replaceNum replaceNum置0,权位置1 循环i从1到n (1)取y的最右一位数bit乘以权位累加到replaceNum (2)y整除10 (3)权位乘10 (4)如果y为0,所有位数都取完,跳出循环 4.如果y不足需要替换的位数(i 5.从后向前取位,得到新数的倒置数 i指向最后一位n_x 循环当x不为0 (1)如果取位位置i小于P或>p+n-1,则取x的最后一位bit 否则取replaceNum的最后一位bit,replaceNum整除10 (2)将bit构造到resultNum: resultNum=resultNum*10+bit (3)i— (4)x整除10 6.求倒置所求的结果: 调用函数reverse 参考程序2: #include #include intsetbits1(intx,intp,intn,inty);//方法一: 逐位生成 intsetbits2(intx,intp,intn,inty);//方法二: 分各部分生成 intgetRight(intx); intgetlen(intx); voidmain() { intx,y,des; //printf("inputtwonumbers"); //scanf("%d%d",&x,&y); des=setbits2(8458573,9,5,953284); if(des==-1) printf("p超出x长度\n"); elseif(des==-2) printf("y不足需要替换的位数\n"); else printf("newnum=%d",des); system("pause"); } intsetbits1(intx,intp,intn,inty) {intxl,yl,xr,newint,bit,newy; xl=getlen(x);//获取x的长度 yl=getlen(y);//获取y的长度 //无效数据检查 if(p>xl) return-1; if(n>yl) return-2; //替换长度n超出x的长度,调整替换长度到x的最后一位 if(p+n-1>xl) n=xl-p+1; //从y中取替换串的倒置串newy inti=1;newy=0; for(i=1;i<=n;i++) {bit=y%10; newy=newy*10+bit; y=y/10; } //构造新的整数 xr=getRight(getlen(x));//构造x的权位,例如: x: 8458573权位为: 1000000 newint=0; i=1; while(xr)//从前往后逐位取x的每一位数字 { if(i {bit=x/xr; } else if(i {bit=newy%10; newy/=10; } else//第p+n位到最后一位取x中的数字位 {bit=x/xr; } //将bit构造到newint中 newint=newint*10+bit; //修正x,权位xr,计数位i x=x%xr; xr=xr/10; i++; } returnnewint; } intsetbits2(intx,intp,intn,inty) {intxl,yl,r1,r2,r3,p1,p2,p3,newint,newy; xl=getlen(x); yl=getlen(y); if(p>xl) return-1; if(n>yl) return-2; if(p+n-1>xl) n=xl-p+1; //取x的第一位到第p-1位 r1=getRight(xl-p+2); p1=x/r1*r1; //取y的后n位 r2=getRight(n+1); r3=getRight(xl-p-n+2); p2=(y%r2)*r3; //取x的第p+n位到最后一位 p3=x%r3; //构造newint newint=p1+p2+p3; returnnewint; } intgetlen(intx) {intn=0; while(x) {n++;; x/=10; } returnn; } intgetRight(intn) {intright=1; for(inti=1;i<=n;i++) right=right*10; returnright/10; }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验 嵌套 结构