实验6.docx

上传人:b****5 文档编号:3571264 上传时间:2022-11-24 格式:DOCX 页数:11 大小:68.51KB
下载 相关 举报
实验6.docx_第1页
第1页 / 共11页
实验6.docx_第2页
第2页 / 共11页
实验6.docx_第3页
第3页 / 共11页
实验6.docx_第4页
第4页 / 共11页
实验6.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

实验6.docx

《实验6.docx》由会员分享,可在线阅读,更多相关《实验6.docx(11页珍藏版)》请在冰豆网上搜索。

实验6.docx

实验6

实验6函数与预处理1

(2)

请将自己报告部分,文字和程序代码,加粗

认真阅读并操作,按实验指导书P171至P175的要求,完成下面实验内容和要求。

自测练习

3.设计一个打印年历的程序。

要求:

打印每个月的月历的功能有一个独立的函数完成,程序运行时,主程序通过若干次调用该函数完成年历的输出。

注意处理闰年问题。

如:

2015年月历(部分截屏)

 

提示:

⑴完成如下程序代码(根据被调函数声明和主函数中的调用,参考每个函数体内提示的功能完成被调函数定义):

#include

#include

usingnamespacestd;

voidprintmonth(intm);//5个被调函数声明

voidprintheed(intm);

intdaysofmonth(intm);

intisleep(inty);

intfirstday(inty);

intyear,weekday,h,d;//定义全局变量

intmain()

{

inti;

cout<<"输入年份:

";

cin>>year;

weekday=firstday(year);

cout<<"\n\n";

cout<

for(i=1;i<=12;i++)

{

printmonth(i);

cout<<"\n";

}

cout<<"\n\n";

return0;

}

voidprintmonth(intm)

{printheed(m);

/*功能:

1、调用printheed(m),输出月历首行形式并确定m月第1天的位置

2、从第1天输出改月其它天的日历,注意换行控制格式*/

}

voidprintheed(intm)

{inty=year;

intz=firstday(y);

intw=1;

intl;

intq=daysofmonth(m);

cout<

if(d==0)//只用来找到第一个月的第一天的位置,后面几个月不再做

h=z;/*功能:

1、输出月历首行形式:

m月日一二三四五六*/

for(l=1;l<=h+1;l++)

cout<<"";

for(w=1;w<=7-h;w++)

{

cout<

}

cout<

d++;

intb=0;

h=0;

for(inti=w;i<=q;i++)

{if(b%7==0)

cout<<"";

cout<

h++;

h=h%7;

b++;

if(b%7==0)

cout<

}

}

intdaysofmonth(intm)

{inty=isleep(year);

intq;

switch(m)

{case1:

case3:

case5:

case7:

case8:

case10:

case12:

q=31;break;

case4:

case6:

case9:

case11:

q=30;break;

case2:

if(y==1)

q=29;

elseq=28;

}

returnq;

/*功能:

判断m月多少天,返回值是m月的天数,注意闰年*/

}

intisleep(inty)

{intn=y;

intt=1;

if(n%400!

=0&&n%100==0||n%4!

=0)t=0;

returnt;

/*功能:

判断y是否为闰年,是返回1,否返回0,闰年判断表达式见上机指导P19二、填空题第5题*/

}

intfirstday(inty)

{intq;

intsum=0;

intz;

for(inti=0;i<=year-1;i++)

{q=isleep(i);

if(q==0)

sum=sum+365;

if(q==1)

sum=sum+366;

}

z=(sum+6)%7;

returnz;

/*功能:

判断该月的第一天是星期几?

思路:

这个问题需找一个参照点,如设2000年1月1日为参照点,这天是星期六,则可计算该月的第一天距离参照点有多少天,(注意闰年要多加1天)如2012年4月1日与2000年1月1日相差4474天,4474%7=1,所以2012年4月1日是星期日。

返回值是y月第1天是星期几*/

}

⑵运行结果截图

 

4.有一个8层灯塔,每层所点灯数都等于该层上一层的两倍,一共有765盏灯,求塔底的灯数。

思路:

采用的是一种穷举算法,即对塔顶的灯数从1盏开始,依次检验8层灯的总数是否为765盏,若是,则找到答案,若不是,则塔顶灯数加1进行下一次测试。

⑴阅读给出的程序代码,分析算法的循环实现过程,为循环体内的每条语句加注释,说明功能)

#include

#include

usingnamespacestd;

intmain()

{

intn=1;//设n为最顶层灯数

intsum=0;

while(n)

{

for(intj=0;j<8;j++)//从顶层到底层循环

sum+=pow(2,j)*n;//累加求和

if(sum==765)//判断是否为765

break;//是,则跳出循环

else{

sum=0;

n++;//不是,则调整顶层灯数加一

}

}

cout<<"最底层灯数是:

"<<128*n<

return0;

}

⑵要求:

设计一个函数计算塔顶灯数为n盏时,8层灯的总灯数,并在主函数中调用。

Ø修改后的代码如下:

#include

#include

usingnamespacestd;

ints(intn);

intsum=0;

intmain()

{

intn;

cout<<"输入顶层灯数:

"<

cin>>n;

cout<<"最底层灯数是:

"<

s(n);

return0;

}

ints(intn)

{

for(intj=0;j<8;j++)

sum+=pow(2,j)*n;

cout<

return0;

}

Ø运行结果截图

5.数字反射(此题为新增内容)

编写一个函数,接收一个整数值,返回这个数中数字逆序后的结果值。

例如:

给定数7631,函数返回1367.

思路:

通过%10运算与循环的结合,可依次获得给定数的每位数字。

例如:

7631%10=1,获得了个位数;7631/10=763,即丢掉了个位数字。

继续下去,可依次得到数字1、3、6、7.

边循环边将每次得到的数字添加到需返回的数值中。

例如:

0*10+1=1;1*10+3=13;13*10+6=136;136*110+7=1367.

⑴程序代码如下(重要语句请加注释提高程序的可读性):

#include

#include

usingnamespacestd;

intmain()

{

inta,i;

cout<<"输入数字:

"<

cin>>a;

for(;a!

=0;)

{i=a%10;

cout<

a=a/10;}

cout<

return0;

}

⑵运行结果截图

 

6.猜数字游戏(此题为新增内容)

编写一个程序,可以玩“猜数字”的游戏。

具体描述如下:

程序在1~1000之间的整数中随机选择需要猜的数。

然后显示:

Ihaveanumberbetween1and1000.

Canyouguessmynumber?

Pleasetypeyourfirstguess.

玩家于是输入猜想的第一个数。

程序会做出如下响应之一:

ExcellentYouguessedthenumber!

Wouldyouliketoplayagain(yorn)?

Toolow.Tryagain.

Toohigh.Tryagain.

如果玩家的猜测是不正确的,程序应继续循环,直到玩家最终猜对为止。

此过程中程序要一直提醒玩家是猜大了(Toolhigh)还是猜小了(Toollow),这样帮助玩家尽快获得正确的答案。

提示:

①思路:

通过rand()函数产生随机数。

关于rand()的介绍和使用方法,请参考教材P112例5-4说明:

②。

②程序流程介绍如下:

Ø产生一个让玩家猜想的介于1~1000的数,并显示提示。

Ø通过循环检测玩家猜想是否正确。

Ø如正确,输出相应提示并退出循环;如不正确,输出相应提示,继续循环。

③本题中关于函数的使用不做具体限制,可使用函数,也可不使用函数。

若使用函数,可将本程序按功能进行分解,每一个子功能应用函数。

⑴程序代码如下(重要语句请加注释提高程序的可读性):

#include

#include

usingnamespacestd;

intmain()

{

intx,a,b;

charm='y';

x=rand();

cout<<"Ihaveanumberbetween1and1000."<

cout<<"Canyouguessmynumber?

"<

cout<<"Pleasetypeyourfirstguess."<

while(m!

='n')

{

cout<<"Pleasetypeyourguess."<

cin>>a;

b=a-x;

if(b>0)cout<<"Toohigh.Tryagain."<

if(b<0)cout<<"Toolow.Tryagain."<

if(b==0){cout<<"ExcellentYouguessedthenumber!

";break;}

else

cout<<"Wouldyouliketoplayagain(yorn)?

";

cin>>m;

}

cout<

cout<<"随机数是:

"<

return0;

}

 

⑵运行结果截图

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

当前位置:首页 > 人文社科 > 广告传媒

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

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