实验五嵌套结构1.docx

上传人:b****6 文档编号:7316888 上传时间:2023-01-22 格式:DOCX 页数:19 大小:75.21KB
下载 相关 举报
实验五嵌套结构1.docx_第1页
第1页 / 共19页
实验五嵌套结构1.docx_第2页
第2页 / 共19页
实验五嵌套结构1.docx_第3页
第3页 / 共19页
实验五嵌套结构1.docx_第4页
第4页 / 共19页
实验五嵌套结构1.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

实验五嵌套结构1.docx

《实验五嵌套结构1.docx》由会员分享,可在线阅读,更多相关《实验五嵌套结构1.docx(19页珍藏版)》请在冰豆网上搜索。

实验五嵌套结构1.docx

实验五嵌套结构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;

}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 研究生入学考试

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1