计算机实践报告.docx

上传人:b****6 文档编号:6001423 上传时间:2023-01-02 格式:DOCX 页数:26 大小:165.18KB
下载 相关 举报
计算机实践报告.docx_第1页
第1页 / 共26页
计算机实践报告.docx_第2页
第2页 / 共26页
计算机实践报告.docx_第3页
第3页 / 共26页
计算机实践报告.docx_第4页
第4页 / 共26页
计算机实践报告.docx_第5页
第5页 / 共26页
点击查看更多>>
下载资源
资源描述

计算机实践报告.docx

《计算机实践报告.docx》由会员分享,可在线阅读,更多相关《计算机实践报告.docx(26页珍藏版)》请在冰豆网上搜索。

计算机实践报告.docx

计算机实践报告

中南大学

 

C++课程设计作业

 

院校:

班级:

学号:

姓名:

 

C++课程设计报告

使用菜单选择趣味程序

1.问题描述

设计一个含有多个菜单项的演示程序;每个菜单项都可以执行不同的功能。

菜单内容:

程序运行后,给出六个菜单项的内容和输出提示

1.FindNum

2.FindRoot

3.Detective

4.Bear

5.Curve

6.YearDay

7.Goodbye

(2)再为上述菜单项配上相应的功能。

2.基本要求

使用数字1-7来选择菜单项,其他输入不起作用。

菜单设计要求(6个编程题)

1.FindNum

有0、1、2、3、4、5、6、7、8、9十个数,填入下列算式中,每个数只用一次,首位数不能为零,输出时显示所有可能的组合并统计个数。

+?

=?

2.FindRoot

求方程

在区间[-8,8]内的全部实根。

3.Detective

有一辆汽车撞人后跑了,4个目击证人提供线索,牌照三,四位相同,牌号为:

31XXXX,牌照五,六位相同,三到六位是一个整数的平方。

4.Bear

有一只狗熊到玉米地吃玉米,第一天吃了一半,又拿走一个回去喂小熊。

第二天又吃了剩下的一半,走时仍带走一个给小熊。

以后每天都吃前一天剩下的一半,再拿走一个。

到第十天,地里只剩下一个玉米。

求地里一共有多少玉米?

5.Curve

6.YearDay

已知2000年1月1日为星期六,请输入任一年的年份后,打印该年的年历。

7.Goodbye!

这里除了输出一个信息外,还必须结束程序运行。

3.系统分析

根据系统功能要求,可以将问题解决分为以下步骤:

(1)应用系统分析,建立该系统的功能模块框图以及界面的组织和设计;

(2)分析系统中的各个实体及它们之间的关系;

(3)根据问题描述,设计系统的类层次;

(4)完成类层次中各个类的描述;

(5)完成类中各个成员函数的定义;

(6)完成系统的应用模块;

(7)功能调试;

(8)完成系统总结报告。

本程序运用switch……case语句实现了七个菜单项的演示程序,并分别定义了几个功能函数分别为上述菜单配上相应的功能,通过主函数调用各个函数而实现趣味菜单程序

4.测试数据及伪代码

#include

#include

#include

usingnamespacestd;

f1()

{

charx;

cout<<"有0.1.2.3.4.5.6.7.8.9十个数,按要求填入下面的计算式中,要求每个数只使用一次,首位不能为0,输入时显示所有可能的组合并统计个数"<

cout<<"(一个三位数)+(一个三位数)=(一个四位数)"<

cout<

cout<<"请仔细思考上题,输入“A”即可核对答案"<

cin>>x;

while(x!

='A')

{

cout<<"输入错误,请重新输入“A”核对答案"<

cin>>x;

}

inta,b,c,d[10],n,m,s=0,f=0;

for(a=234;a<=987;)

{

for(b=234;b<=987&&b!

=a;)

{

c=a+b;

d[0]=a%10;

d[1]=(a/10)%10;

d[2]=(a/100)%10;

d[3]=b%10;

d[4]=(b/10)%10;

d[5]=(b/100)%10;

d[6]=c%10;

d[7]=(c/10)%10;

d[8]=(c/100)%10;

d[9]=(c/1000)%10;

for(n=0;n<=9;n++)

{

for(m=n+1;m<=9;m++)

if(d[n]!

=d[m])

f++;

}

if(f==45&&c>1000)

{

s++;

cout<

}

b++;

f=0;

}

a++;

}

cout<<"所有可能的组合数为"<

return0;

}

floathanshu(floatx)

{

return(x*x*x-3*x-1);

}

floatdaoshu(floatx)

{

return(3*x*x-3);

}

introot(floata[],intn)

{

floatx1,x2,x,c,b;

inti=0;

intflag;

intcount=0;

for(;i

{

flag=1;

x=a[i];

do{

x1=x;

c=daoshu(x1);

b=hanshu(x1);

x2=x1-b/c;

x=x2;

}while(fabs(x2-x1)>=1e-6);

count++;

if(flag==1)

cout<<"第"<

"<

}

return0;

}

f2()

{

chari;

cout<<"求方程x*x*x-3x-1=0在区间【-8,8】内的全部实根"<

cout<

cout<<"请仔细思考上题,输入“A”即可核对答案"<

cin>>i;

while(i!

='A')

{

cout<<"输入错误,请重新输入“A”核对答案"<

cin>>i;

}

floata[3]={-8.0,0,8.0};

root(a,3);

return0;

}

f3()

{

charK;

cout<<"这是一个侦探题,有一辆汽车撞人以后逃走,4个目击证人提供如下线索:

"<

cout<<"牌照三,四位相同;牌号为31xxxx,牌照的五,六位相同,三到六位是一个整数的平方"<

cout<

cout<<"请仔细思考上题,输入“A”即可核对答案"<

cin>>K;

while(K!

='A')

{

cout<<"输入错误,请重新输入“A”核对答案"<

cin>>K;

}

inti,j;

longintx,y,z;

for(i=0;i<=9;)

{

for(j=0;j<=9;)

{

x=1000*i+100*i+10*j+j;

y=sqrt(x);

if(y*y==x&&x!

=0)

{

z=310000+x;

cout<<"车牌号为:

"<

}

j++;

}

i++;

}

return0;

}

f4()

{

chark;

cout<<"有一只狗熊到玉米地里吃玉米,一边掰一边吃。

第一天吃了一半,又拿走一个去喂小熊,第二天又吃了剩下的一半,走的时候又带走了一个去喂小熊。

以后每天都吃以前剩下的一半并拿走一个,到了第十天,地里只剩下一个玉米。

求地里一共有多少个玉米?

"<

cout<

cout<<"请仔细思考上题,输入“A”即可核对答案"<

cin>>k;

while(k!

='A')

{

cout<<"输入错误,请重新输入“A”核对答案"<

cin>>k;

}

inti,a[11]={1};

a[0]=1;

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

a[i]=(a[i-1]+1)*2;

cout<

return0;

}

intcha(intx)

{

intm,n;

if(x>2000)

{

if((x-2000)%4==0)

m=(x-2000)/4;

elsem=(x-2000)/4+1;

n=365*(x-2000)+m;

}else

{

m=(x-2000)/4;

n=365*(x-2000)+m;

}

returnn;

}

intprint(intx)

{

switch(x%7)

{

case1:

return7;break;

case2:

return1;break;

case3:

return2;break;

case4:

return3;break;

case5:

return4;break;

case6:

return5;break;

case0:

return6;break;

case-1:

return5;break;

case-2:

return4;break;

case-3:

return3;break;

case-4:

return2;break;

case-5:

return1;break;

case-6:

return7;break;

}}

f6()

{

chari;

cout<<"已知2000年1月1日为星期六,请输入任意的年份后,求取该年的年历:

"<

cout<

cout<

cin>>i;

while(i!

='A')

{

cout<<"输入错误,请重新输入“A”核对答案"<

cin>>i;

}

intyear,t;

cout<<"请输入年份"<

cin>>year;

cout<

if((year-2000)%4==0)

{

t=cha(year);

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

{

{cout<

cout<<'\t'<<"一"<<'\t'<<"二"<<'\t'<<"三"<<'\t'<<"四"<<'\t'<<"五"<<'\t'<<"六"<<'\t'<<"日"<

for(intj=1;j<=31;j++)

{

switch(i)

{

case1:

case3:

case5:

case7:

case8:

case10:

case12:

if(j==1)cout<<'\t'<

if(j>1)cout<<'\t'<

if(j==31)cout<

if(print(t)==7)cout<

t++;break;

case2:

if(j<=29)

{

if(j==1)cout<<'\t'<

if(j>1)cout<<'\t'<

if(j==29)cout<

if(print(t)==7)cout<

t++;

}break;

case4:

case6:

case9:

case11:

if(j<=30)

{

if(j==1)cout<<'\t'<

if(j>1)cout<<'\t'<

if(j==30)cout<

if(print(t)==7)cout<

t++;

}break;

}

}

}

}else

{t=cha(year);

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

{

{cout<

cout<<'\t'<<"一"<<'\t'<<"二"<<'\t'<<"三"<<'\t'<<"四"<<'\t'<<"五"<<'\t'<<"六"<<'\t'<<"日"<

for(intj=1;j<=31;j++)

{

switch(i)

{

case1:

case3:

case5:

case7:

case8:

case10:

case12:

if(j==1)cout<<'\t'<

if(j>1)cout<<'\t'<

if(j==31)cout<

if(print(t)==7)cout<

t++;break;

case2:

if(j<=28)

{

if(j==1)cout<<'\t'<

if(j>1)cout<<'\t'<

if(j==28)cout<

if(print(t)==7)cout<

t++;

}break;

case4:

case6:

case9:

case11:

if(j<=30)

{

if(j==1)cout<<'\t'<

if(j>1)cout<<'\t'<

if(j==30)cout<

if(print(t)==7)cout<

t++;

}break;

}

}

}}

}

f7()

{

cout<<"游戏结束,请关闭程序。

"<

}

voidmain()

{

inti;

doublej;

cout<<"这是一个趣味游戏,请严格按照提示操作:

"<

while

(1)

{

cout<

"<

cout<<"请输入1至7的任意一个数字;"<

cin>>i;

if(i!

=7)

{

if(i<1||i>7)cout<<"输入错误,请重新运行程序"<

else

{

switch(i)

{

case1:

f1();cout<>j;break;

case2:

f2();cout<>j;break;

case3:

f3();cout<>j;break;

case4:

f4();cout<>j;break;

case5:

cout<>j;break;

case6:

f6();cout<>j;break;

}

}

}

elsebreak;

}

}}

5.运行结果

6.流程图

7.小结

我们小组通力合作完成了这个程序的设计。

我抽签抽到了第一个FINDNUM,开始觉得有些无从下手,但仔细想想,想到了用循环的方式解决,但是有10个数字,想到可能要用10个for循环,在每个for循环中还要进行一轮判断,这样过于繁琐,我也没心情把程序写下去。

于是我想到了在前面只用一个双重for循环,把所有可能的3位数的加法循环过去,用最后的for循环通过一定的条件限制剔除不符合要求的。

这样果然奏效,没有很多繁琐的for循环。

不过我开始的判断语句是:

if(d!

=e&&d!

=f&&d!

=g&&d!

=h&&d!

=i&&d!

=j&&d!

=k&&d!

=l&&d!

=m&&e!

=f&&e!

=g&&e!

=h&&e!

=i&&e!

=j&&e!

=k&&e!

=l&&e!

=m&&f!

=g&&f!

=h&&f!

=i&&f!

=j&&f!

=k&&f!

=l&&f!

=m&&g!

=h&&g!

=i&&g!

=j&&g!

=k&&g!

=l&&g!

=m&&h!

=i&&h!

=j&&h!

=k&&h!

=l&&h!

=m&&i!

=j&&i!

=k&&i!

=l&&i!

=m&&j!

=k&&j!

=l&&j!

=m&&k!

=l&&k!

=m&&l!

=m&&c>1000),这个语句足够繁琐,不符合通用性和可扩充性,我自己觉得很别扭。

于是我一直想用个数组来代替那些d,e,f…….于是我就尝试着编写数组d[10],通过如上正确程序中的循环方法来达到剔除不符合要求的答案。

但是令我苦恼的是,我竟然试了很多次都没有成功,输出结果不是0就是无穷多。

我知道这个循环中一定出了问题,我试着多次进行优化,不断改变循环语句,结果还是不如人意。

最后我发现,那个用来判断的if(f==45&&c>1000)语句后面的语句一次都没有被执行,想到那个f的值可能存在问题,于是猛然发现原来每次循环f都需要归零才行,这样终于大功告成。

完善了自己的程序真的有一点小小的成就感。

通过这次编程,我了解了循环语句的运用,知道了要用数组来简化程序,并且知道了要充分注意细节,把自己全部的思想都融入到程序中去。

我的伙伴刘萍同学抽到了第二个求解的,她开始很得意,以为自己抽到了最简单的一个,只要用一个循环很快就能得出结果。

结果虽然程序没错误,但每次的输出都是无解,这显然是错误的。

大家都认为程序没有问题,输不出正解感觉很纠结。

后来我无意中想到程序中用的“==”是有问题的,一个只要求一定精确度的解是不可能满足“==”的,所以输不出正解是理所当然的。

后来她应用牛顿迭代法总算求出了正解。

第三题很简单,只需一点点的条件判断就能得出结果,关键在于数学函数sqrt的应用。

第四题也一样,只要一点点逻辑思维加上运用一点点循环就可以了。

第六题,有一定的难度,关键在于一个闰年的问题,还有大小月的问题,这些可以通过switch语句以及判断语句来解决,我认为程序设计者在这方面做得相当不错。

另外,我们的程序运行出来显示的年历按月分布得很有条理,这也归功于设计者对于判断语句的充分运用与精巧构思.

另外值得一提的是整个程序的整合,通过巧妙地用switch语句以及main函数等,把6个程序融为一体并且运用了友好的界面,相当精巧,非常不错。

通过设计这个程序,小组成员共同努力,默契配合,让我们体会到了团队的力量。

元素周期表

1.问题描述

编写一段程序,对元素周期表进行输出,查询。

2.基本要求

*输出一份元素周期表;

*要求有原子序数和元素符号;

*在输入原子序数或元素符号时,能相应的输出元素符号或原子序数。

3.系统分析

本题主要是对大型数的输出,采用数组的方法可以使问题显得容易一些。

将各元素放入数组中,由于其原子序数与其数组的序号存在一定的关系,只需利用数组序号代替原子序号。

另外,可以采用结构体的存放方式,对元素周期表进行有序的管理。

在输出时,为了对其进行进一步的管理,可以采用了for语句,这样可以自如的对数据进行进一步输出管理。

并且运用了一定的判断语句,优化了程序的输出界面,使其更为直观实用,接近于我们平时见到的周期表。

4.测试数据及伪代码

include

#include

#include

usingnamespacestd;

voidchazhao(chars,char*b[]);

voidmain()

{

cout<<"元素周期表"<

cout<

char*b[113]={"H","He","Li","Be","B","C","N","O","F","Ne",

"Na","Mg","Al","Si","P","S","Cl","Ar","K","Ca",

"Sc","Ti","V","Cr","Mn","Fe","Co","Ni","Cu","Zn",

"Ga","Ge","As","Se","Br","Kr","Rb","Sr","Y","Zr",

"Nb","Mo","Tc","Ru","Rh","Pd","Ag","Cd","In","Sn"

"Sb","Te","I","Xe","Cs","Ba","La","Ce","Pr","Nd",

"Pm","Sm","Eu","Gd","Tb","Dy","Ho","Er","Tm","Yb",

"Lu","Hf","Ta","W","Re","Os","Ir","Pt","Au","Hg",

"Tl","Pb","Bi","Po","At","Rn","Fr","Ra","Ac","Th","Pa","U","Np","Pu","Am","Cm","Bk","Cf","Es","Fm","Md","No","Lr","Rf","Db","Sg","Bh","Hs","Mt","Uun",

"Uub","Uub"};

inti,j,flag1=1,flag2=1;

chars;

for(i=0;i<7;i++)

{

for(j=0;j<18&&flag1<113;j++)

{

if(((i==0)&&(j>0&&j<17))||((i>0&&i<3)&&(j>1&&j<12)))

cout<<"";

else

{

if(i==5&&j==2)

{cout<

else

{

if(i==6&&j==2)

{cout<

else

cout<

}

}

}

cout<

for(j=0;j<18&&flag2<113;j++)

{

if(((i==0)&&(j>0&&j<17))||((i>0&&i<3)&&(j>1&&j<12)))

cout<<"";

else

{

if(i==5&&j==2)

{cout<

else

{

if(i==6&&j==2)

{cout<

else

cout<

}

}

}

cout<

}

cout<<"镧";

for(i=57;i<72;i++)

cout<

cout<

cout<<"系";

for(i=56;i<71;i++)

cout<

cout<

cout<<"錒"

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

当前位置:首页 > 自然科学

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

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