C++课程设计.docx

上传人:b****6 文档编号:7567897 上传时间:2023-01-25 格式:DOCX 页数:22 大小:113.77KB
下载 相关 举报
C++课程设计.docx_第1页
第1页 / 共22页
C++课程设计.docx_第2页
第2页 / 共22页
C++课程设计.docx_第3页
第3页 / 共22页
C++课程设计.docx_第4页
第4页 / 共22页
C++课程设计.docx_第5页
第5页 / 共22页
点击查看更多>>
下载资源
资源描述

C++课程设计.docx

《C++课程设计.docx》由会员分享,可在线阅读,更多相关《C++课程设计.docx(22页珍藏版)》请在冰豆网上搜索。

C++课程设计.docx

C++课程设计

 

《C++语言程序设计》课程设计

一、实习题目:

设计菜单选择程序

二、设计思想:

 

1、实现循环和功能选择:

编写一个菜单函数menu(),用whlie循环控制菜单的重复选择,用switch语句对应用户的选择,并且实现相应的功能。

2、设计各个选择的功能:

对于选择1,运用克莱姆法则求解线性方程组,用了多个循环和if判断语句,其中两个函数调用,其主要功能是求解行列式的数值;选择二,统计一篇英语文章的单词数,使用了函数getchar()和gets(str),用于输入英文文章。

三、程序代码:

#include

#include

usingnamespacestd;

#defineN10000

voidmenu();//菜单选项函数

voidequation();//求线性方程组

voidenglish();//统计英文文章的单词数

///////////////主函数的执行///////////////

intmain()

{

inta,t=1;

while(t)

{

menu();

cout<<"请选择1-3:

";

cin>>a;

cout<

switch(a)

{

case1:

equation();

break;

case2:

english();

break;

case3:

t=0;

break;

}

}

}

/////////////////菜单选项函数//////////////////

voidmenu()

{

cout<<"\n\t\t\t-----------菜单选择------------"<

cout<<"\t\t\t1.利用克莱姆法则求解线性方程组"<

cout<<"\t\t\t2.统计一篇英文文章的单词数"<

cout<<"\t\t\t3.退出程序"<

cout<<"\t\t\t-------------------------------"<

}

////////////利用克莱姆法则求解线性方程组/////////////

staticinta[N][N],b[N];

intdi[N],c[N];

doublex[N];

intterm(intn,intk[])

{

intp,q,t=1;

for(p=1;p

for(q=0;q

if(k[q]>k[p])

t=-t;

for(p=0;p

t*=a[p][k[p]];

return(t);

}

intdet(intn)

{

intj0,j1,j2,j3,j4,j5,d=0,k[N];

for(j0=0;j0

{

if(a[0][j0]==0)continue;

k[0]=j0;

for(j1=0;j1

{

if(j1==j0)continue;

if(a[1][j1]==0)continue;

k[1]=j1;

if(n==2)

d+=term(n,k);

for(j2=0;j2

{

if(j2==j0)continue;

if(j2==j1)continue;

if(a[2][j2]==0)continue;

k[2]=j2;

if(n==3)

d+=term(n,k);

for(j3=0;j3

{

if(j3==j0)continue;

if(j3==j1)continue;

if(j3==j2)continue;

if(a[3][j3]==0)continue;

k[3]=j3;

if(n==4)

d+=term(n,k);

for(j4=0;j4

{

if(j4==j0)continue;

if(j4==j1)continue;

if(j4==j2)continue;

if(j4==j3)continue;

if(a[4][j4]==0)continue;

k[4]=j4;

if(n==5)

d+=term(n,k);

for(j5=0;j5

{

if(j5==j0)continue;

if(j5==j1)continue;

if(j5==j2)continue;

if(j5==j3)continue;

if(j5==j4)continue;

if(a[5][j5]==0)continue;

k[5]=j5;

}

}

}

}

}

}

return(d);

}

voidequation()

{

inti,j,n,d;

charch;

A:

cout<<"请输入线性方程组的未知数个数(n<=6)n=";

cin>>n;

cout<<"请输入线性方程组的增广矩阵(即未知数的系数与常数项组合成的矩阵,为n*(n+1)阶矩阵):

"<

for(i=0;i

{

for(j=0;j

{

cin>>a[i][j];

}

cin>>b[i];

}

d=det(n);

for(j=0;j

{

for(i=0;i

{

c[i]=a[i][j];

a[i][j]=b[i];

}

di[j]=det(n);

for(i=0;i

a[i][j]=c[i];

}

cout<<"最后求得线性方程组的解为:

"<

for(i=0;i

{

x[i]=(di[i])/d;

cout<<"x("<

}

B:

cout<<"您是否要继续(Y/N)?

"<

cin>>ch;

if(ch=='y'||ch=='Y')

gotoA;

elseif(ch=='n'||ch=='N')

gotoC;

else

gotoB;

C:

system("pause");

}

/////////统计英文文章的单词数////////////////

voidenglish()

{

charstr[N],c;

inti,word=0,num=0;

cout<<"\n请输入需要统计单词数的英文文章:

"<

getchar();/*输入英文文章*/

gets(str);

for(i=0;(c=str[i])!

='\0';i++)

{

if((c>0&&c<65)||(c>90&&c<97)||c>122&&c<255)word=0;/*用空格区分新单词的产生*/

else

{

if(word==0)

{

word=1;/*新单词产生*/

num++;

}

}

}

cout<<"这篇文章共有"<

}

四、测试用例及测试结果

1.解线性方程组:

2.统计英文文章的单词数:

五、程序不足及升级方向

这个程序只能解未知数的个数n<=6时的恰定方程组,实用性受到限制,还需要以后再完善。

六、参考文献

[1]姚全珠.C++面向对象程序设计[M].北京:

电子工业出版社,2010.

[2]郑莉.C++语言程序设计[M].北京:

清华大学出版社,2007.

一、实习题目:

职工信息表设计

二、设计思想:

 1、类的结构:

这里把worker作为基类,由它派生类list和simplelist。

2、多态性:

将worker的display()成员函数设计为虚函数,printer()函数使用基类worker对象的引用作为参数,即可实现多态性。

3、设计主函数:

要求编写最多输入10000个职工的信息表,并且可以随时停止。

运用循环,增强程序的灵活性。

三、程序代码:

#include

#include

#defineMAX10000

usingnamespacestd;

classworker//信息表基类

{

public:

stringnum;

stringname;

charsex;//性别用F(女)和M(男)表示。

intage;

virtualvoiddisplay(){}

};

classlist:

publicworker//完整信息表类

{

public:

virtualvoiddisplay();

};

classsimplelist:

publicworker//信息简表类

{

public:

virtualvoiddisplay();

};

intnemu();//菜单选择函数

voidadd(lista[],int&n);//增加职工记录

floatcreat(listy[],simplelistx[],int&n);//生成信息简表

floatprinter(worker*p,int&n);//显示完整信息简表

/////////////////主函数的执行//////////////////

intmain()

{

simplelistc[MAX];//定义简表数组

listd[MAX];//定义信息表数组

intlastnum=0,t=1;

boolexit=false;

do

{

switch(nemu())

{

case1:

//1.增加职工记录

add(d,lastnum);

break;

case2:

//2.显示原始记录

printer(d,lastnum);

cout<

"<

break;

case3:

//3.显示简表记录

creat(d,c,lastnum);

printer(c,lastnum);

cout<

"<

break;

case4:

//4.结束程序运行

exit=true;

break;

}

}

while(exit==false);

cout<<"\n程序结束!

\n"<

return0;

}

/////////////菜单选择函数/////////////

intnemu()

{

intcn=5;

do

{

cout<<"\t\t\t-----------------------------"<

cout<<"\t\t\t-----------------------------"<

cout<<"\t\t\t1.增加职工信息\n";

cout<<"\t\t\t2.显示完整信息\n";

cout<<"\t\t\t3.显示信息简表\n";

cout<<"\t\t\t4.结束程序运行\n";

cout<<"\t\t\t-----------------------------"<

cout<<"\t\t\t-----------------------------"<

cout<<"\n选择1-4:

";

cin>>cn;

}

while(cn<1||cn>4);

returncn;

}

//////////////显示职工信息的完整记录///////////////

voidlist:

:

display()

{

cout<<"编号:

"<

cout<<"姓名:

"<

cout<<"性别:

"<

cout<<"年龄:

"<

}

//////////////显示信息简表////////////////

voidsimplelist:

:

display()

{

cout<<"姓名:

"<

cout<<"年龄:

"<

}

///////////////1.增加职工信息//////////////

voidadd(lista[],int&n)

{

cout<<"您选择的是:

1.增加职工记录\n"<

cout<<"注意:

当编号为0时,返回主菜单:

\n"<

for(n=0;n

{

cout<<"输入编号:

";

cin>>a[n].num;

if(a[n].num=="0")

break;//结束输入

for(intk=0;k

{

if(a[n].num==a[k].num)

cout<<"输入编号重复!

"<

}

cout<<"输入姓名:

";

cin>>a[n].name;

for(k=0;k

{

if(a[n].name==a[k].name)

cout<<"输入姓名重复!

"<

}

cout<<"请输入性别(f为女,m为男):

";

cin>>a[n].sex;

if(a[n].sex!

='f'&&a[n].sex!

='m')

{

cout<<"性别输入错误";

cout<<"请输入性别(f为女,m为男):

";

cin>>a[n].sex;

}

cout<<"请输入年龄:

";

cin>>a[n].age;

}

}

/////////////////2.生成信息简表//////////////////

floatcreat(listy[],simplelistx[],int&n)

{

if(n

{

for(inti=0;i<=n;i++)

{

x[i].name=y[i].name;

x[i].age=y[i].age;

}

return1;

}

else

return0;

}

////////////////3.信息输出函数//////////////////

floatprinter(worker*p,int&n)

{

for(inti=0;i

{

cout<<"********************"<

(p+i)->display();

}

cout<<"********************"<

return0;

}

四、测试用例及测试结果

1.增加职工信息

2.显示完整信息:

3.显示信息简表:

4.结束程序运行:

五、程序不足及升级方向

虽然这个程序的运行结果比较理想,但不是很美观,故有待完善。

六、参考文献

[1]姚全珠.C++面向对象程序设计[M].北京:

电子工业出版社,2010.

[2]郑莉.C++语言程序设计[M].北京:

清华大学出版社,2007.

一、实习题目:

有理数的四则运算

二、设计思想:

本程序中主要用到了一下这几个函数:

1、构造函数:

Rational(intx1=0,inty1=1){x=x1;y=y1;}

2、重载”+”、”-”、”*”、”/”四个运算符:

Rationaloperator+(Rationalr);//重载加法运算符

Rationaloperator-(Rationalr);//重载减法运算符

Rationaloperator*(Rationalr);//重载乘法运算符

Rationaloperator/(Rationalr);//重载除法运算符

3、重载流运算符:

friendistream&operator>>(istream&in,Rational&r);

friendostream&operator<<(ostream&out,Rational&r);

输入输出就是按格式构造输出,输入流需要保证正确的格式,要保证分母不等于零。

三、程序代码:

#include

usingnamespacestd;

classRational//有理数类

{

public:

intx;

inty;

Rational(intx1=0,inty1=1){x=x1;y=y1;}

Rationaloperator+(Rationalr);//重载加法运算符

Rationaloperator-(Rationalr);//重载减法运算符

Rationaloperator*(Rationalr);//重载乘法运算符

Rationaloperator/(Rationalr);//重载除法运算符

friendistream&operator>>(istream&in,Rational&r);//重载输入运算符

friendostream&operator<<(ostream&out,Rational&r);//重载输出运算符

};

///////////主函数的执行/////////////

intmain()

{

charch;

RationalA,B,C;

A:

cout<<"请输入A的值"<

cin>>A;

cout<<"请输入B的值"<

cin>>B;

cout<

cout<<"--------------------\n"<

C=A+B;

cout<<"两数之和为A+B="<

C=A-B;

cout<<"两数之差为A-B="<

C=A*B;

cout<<"两数之积为A*B="<

C=A/B;

cout<<"两数之商为A/B="<

cout<<"--------------------"<

B:

cout<<"您是否要继续(Y/N)?

"<

cin>>ch;

cout<

if(ch=='y'||ch=='Y')

gotoA;

elseif(ch=='n'||ch=='N')

gotoC;

else

gotoB;

C:

system("pause");

return0;

}

//////////////////////////////////////////////

istream&operator>>(istream&in,Rational&r)

{

in>>r.x>>r.y;

if(r.y==0)

{

cout<<"分母不能为0\n";

}

returnin;

}

ostream&operator<<(ostream&out,Rational&r)

{

inti;

floatm,n;

if(r.x

{

for(i=r.x;i>1;i--)

{

if(r.x%i==0&&r.y%i==0)

{

m=r.x/i;

n=r.y/i;

r.x=m;

r.y=n;

}

}

}

else//当x>=y,且x,y有公约数时,进行约分

{

for(i=r.y;i>1;i--)

{

if(r.x%i==0&&r.y%i==0)

{

m=r.x/i;

n=r.y/i;

r.x=m;

r.y=n;

}

}

}

out<

returnout;

}

RationalRational:

:

operator+(Rationalr)

{

returnRational(x*r.y+y*r.x,y*r.y);

}

RationalRational:

:

operator-(Rationalr)

{

returnRational(x*r.y-y*r.x,y*r.y);

}

RationalRational:

:

operator*(Rationalr)

{

returnRational(x*r.x,y*r.y);

}

RationalRational:

:

operator/(Rationalr)

{

returnRational(x*r.y,y*r.x);

}

四、测试用例及测试结果

 

五、程序不足及升级方向

本程序中还有一些不足的地方,比如,在分式与小数的转换方面,暂时还不能实现,所以,还需以后再加考虑,完善。

六、参考文献

[1]姚全珠.C++面向对象程序设计[M].北京:

电子工业出版社,2010.

[2]郑莉.C++语言程序设计[M].北京:

清华大学出版社,2007.

 

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

当前位置:首页 > PPT模板 > 其它模板

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

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