c++课程设计报告.docx

上传人:b****9 文档编号:23383575 上传时间:2023-05-16 格式:DOCX 页数:20 大小:74.49KB
下载 相关 举报
c++课程设计报告.docx_第1页
第1页 / 共20页
c++课程设计报告.docx_第2页
第2页 / 共20页
c++课程设计报告.docx_第3页
第3页 / 共20页
c++课程设计报告.docx_第4页
第4页 / 共20页
c++课程设计报告.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

c++课程设计报告.docx

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

c++课程设计报告.docx

c++课程设计报告

C++课程设计报告

实习题目一

【需求规格说明】

1、输入一个正整数,要求输出比这个正整数小的所有素数。

【算法设计】

(1)设计思想:

输入一个数m后,可以用一个bool变量prime来表示。

再循环开始时设prime为真,若m被一整数整除,就表示m不是素数,此时bool变量prime的值变为假。

最后根据prime是否为真,决定是否输出m。

(2)设计表示:

用for循环判断m是否为素数,用布尔变量prime记录并决定是否输出

【调试报告】

刚开始不知道素数的定义,不知道怎么下手。

到后来,通过资料逐渐了解。

【附录】

#include

#include

#include

usingnamespacestd;

intmain

{

inta,m,k,i,n=0;

boolprime;//定义布尔变量prime

cout<<"输入一个正整数a=";

cin>>a;

for(m=2;m

}

prime=true;//循环开始时设prime为真,即先认为m为素数

k=int(sqrt(m));//用k代表m^(1/2)

for(i=2;i<=k;i++)//此循环的作用是将m被2~m^(1/2)除,检查是否能整除

if(m%i==0)//如果能整除,表示m不是素数

{

prime=false;//使prime变为假

break;//终止执行此循环

}

if(prime=true)//如果m是素数

cout<

return0;

}

【运行结果】

输入一个正整数a=100

135711131719,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97

Pressanykeytocontinue

实习题目二

【需求规格说明】

2、实现复数的乘法法运算。

要求:

(1)使用结构体表示复数

(2)输入两个复数

(3)复数的乘法运算采用’*’操作符重载。

(4)输出结果的形式为:

(a1+b1*i)*(a2+b2*i)=(a+b*i)的形式。

【算法设计】

(1)设计思想:

先声明一个结构体类型,声明结构体变量fushu,输入复数进行运算。

【调试报告】

结构体的运用太生疏

【附录】

#include"stdafx.h"

#include

usingnamespacestd;

structplural

{

intreal;

intimag;

};

constplural&operator*(plurala,pluralb)/*将*符号重载,使之计算复数的乘法*/

{

pluraltemp;

temp.real=a.real*b.real-a.imag*b.imag;//复数实部

temp.imag=a.imag*b.real+a.real*b.imag;//负数虚部

returntemp;

}

intmain()

{

pluralplu1,plu2,plu3;

cout<<"Pleaseinputthefirstplural";

cin>>plu1.real;

cin>>plu1.imag;

if(plu1.real!

=0)

{

cout<

}

cout<

cout<<"Pleasetinputthesecondplural";

cin>>plu2.real;

cin>>plu2.imag;

if(plu2.real!

=0)

{

cout<

}

cout<

plu3=plu1*plu2;

cout<<"Theansweris";

if(plu3.real!

=0)

{

cout<

}

cout<

【运行结果】

Pleaseinputthefirstplural3+2i

Pleaseinputthesecondplural1+4i

Theansweris-5+14i

Pressanykeytocontinue

实习题目三

【需求规格说明】

3、编写程序,输出两个正整数,要求计算并输出这两个数的最大公约数和最小公倍数。

【算法设计】

(1)设计思想:

求解两个数x,y的最小公倍数思路为若x能够被y整除则x就是这两个数的最小公倍数,否则判断x的整数倍是否能被y整除,直到x的某个倍数可以被y整除,则该数即为这两个数的最小公倍数最大公约数思路为用两个数中较大的数作为被除数,较小的数作为除数,如果能够整除则较小的数就是这两个数的最大公约数,否则,将较小的数作为新的被除数,将两个数的模作为除数,重复以上工作直到模为0,则这个除数就是x和y的最大公约数。

【调试报告】

编程时不熟练,技巧性不强

#include"stdafx.h"

#include

usingnamespacestd;

intmain()

{

inti,x,y,c,z;//定义变量i,x,y,c,z

cout<<"请输入两个数"<

cin>>x>>y;

x>y?

z=y:

z=x//求两者之中的最小值

for(i=z;i>0;i--);//将i赋初值x,自减量为1

{

if(x%i==0)//计算最大公约数

{

If(y%i==0)

{

cout<<"最大公约数"<

break;//结束循环

}

}

}

c=y*(x/i);//辗转相除法

cout<<"最小公倍数为"<

return0;

}

【运行结果】

请输入两个整数:

10

16

10和16的最大公约数为:

2

10和16的最小公倍数为:

80

实习题目四

【需求规格说明】

求解一元二次方程。

一元二次方程的定义为:

ax2+bx+c=0

(1)如果b2-4ac>0,方程有两个不同的实根,分别是:

(2)如果b2-4ac<0,方程没有实根,但有虚根;

(3)如果b2-4ac=0,方程有一个实根。

请你编写一个程序,使其能求出多个二次方程的根。

该程序要询问用户是否想继续解下一个方程。

程序要求用户输入a,b和c,然后根据前面的条件计算,并输出答案。

要求:

使用类实现。

分析:

对于该题首要的就是依据题目的意思编写一个抽象类fangcheng,在该过程中要注意确定public和private,然后就是在主函数中定义一个对象访问类中的成员解决实际问题。

【算法设计】

(1)设计思想:

首先编写抽象类fangcheng,包含计算根的成员函数doublex1();

doublex2();在类fangcheng中另增加私有成员doublea,doubleb,doublec,

(2)设计表示:

【调试报告】

通过类实现了值的输出,过程更明了,更简化。

【附录】

#if!

defined(AFX_FANGCHENG_H__028ED53E_68A4_497A_8190_726704CCE047__INCLUDED_)

#defineAFX_FANGCHENG_H__028ED53E_68A4_497A_8190_726704CCE047__INCLUDED_

#if_MSC_VER>1000

#pragmaonce

#endif//_MSC_VER>1000

classfangcheng//定义一个方程类

{

public:

fangcheng(doublea,doubleb,doublec);

virtual~fangcheng();

doublex1();

doublex2();

private:

doublem_a;

doublem_b;

doublem_c;

};

#include"stdafx.h"

#include"fangcheng.h"

#include

fangcheng:

:

fangcheng(doublea,doubleb,doublec)

{

m_a=a;

m_b=b;

m_c=c;

}

fangcheng:

:

~fangcheng()

{

}

doublefangcheng:

:

x1()

{

doublem_x1;

m_x1=(-m_b+sqrt(m_b*m_b-4*m_a*m_c))/(2*m_a);//方程解的求解公式

returnm_x1;

}

doublefangcheng:

:

x2()

{

doublem_x2;

m_x2=(-m_b-sqrt(m_b*m_b-4*m_a*m_c))/(2*m_a);

returnm_x2;

}

#include"stdafx.h"

#include

#include"fangcheng.h"

usingnamespacestd;

intmain()

{

inta,b,c;

cout<<"請輸入abc的值"<

cin>>a;//输入参数

cin>>b;

cin>>c;

if(b*b-4*a*c>=0)//有实数解

{

fangchengzhi(a,b,c);//定义一个类,并将参数值传入函数当中

cout<<“.x1=”<

cout<<“.x2=”<

}

if(b*b-4*a*c<0)//无实数解

{

fangchengzhi(a,b,c);

cout<

cout<

}

return0;

}

 

#endif//!

defined(AFX_FANGCHENG_H__028ED53E_68A4_49

【运行结果】

请输入a,b,c的值

121

X1=-1

X2=-2

实习题目五

【需求规格说明】

设计程序,完成两个矩阵的乘法运算。

问题描述:

要实现矩阵的乘法,其关键就在于矩阵的内存的开辟以及乘法运算的实现

问题分析:

利用malloc函数或者new实现。

【算法设计】

(1)设计思想

利用两个双指针分别申请两个二维数组的空间,代表需要计算的两个矩阵,然后用户分别输入第一个矩阵的行和列,第二个矩阵的列数(其行数等于第一个矩阵的列数);然后利用for循环逐个输入第一第二个矩阵的数据,再构造一个双指针代表结果的矩阵,根据矩阵乘法的运算规律,求出结果并输出。

(2)设计表示:

(<五号,宋体>,具体内容:

子模块(过程或函数)的规格说明、关系图(描述类与类之间的关系图、各功能模块之间的关系图等)。

【调试报告】

问题的关键在于申请内存的操作,这里有两种方法可实现这个问题,一种是利用new,通过new数组的行数和列数所占的内存来实现。

另一种是利用malloc函数,其大致用法和new差不多。

【附录】

源程序(利用malloc函数):

#include

#include/*malloc函数的函数头*/

#include

usingnamespacestd;

intmain()

{

intm,n,g;

inti,j,k;

cout<<"请输入第一个矩阵的行数和列数"<

cin>>m>>n;

cout<<"请输入第二个矩阵的列数(其行数和第一个矩阵的列数相等)"<

cin>>g;

double**a;

a=(double**)malloc(m*sizeof(double*));/*这句是动态定义二维数组的行数。

*/

for(i=0;i

{

a[i]=(double*)malloc(g*sizeof(double));/*这句是动态定义二维数组的列数。

*/

}

cout<<"请输入第一个矩阵的元素"<

for(i=0;i

{

for(j=0;j

{

cin>>a[i][j];

}

}

double**b;

b=(double**)malloc(g*sizeof(double*));/*同上*/

for(i=0;i

{

b[i]=(double*)malloc(n*sizeof(double));/*同上*/

}

cout<<"请输入第二个矩阵的元素"<

for(i=0;i

{

for(j=0;j

{

cin>>b[i][j];

}

}

double**result;/*存放计算结果的二维数组*/

result=(double**)malloc(m*sizeof(double*));

for(i=0;i

{

result[i]=(double*)malloc(n*sizeof(double));

}

for(i=0;i

{

for(j=0;j

{

result[i][j]=0;/*初始化为0*/

}

}

for(i=0;i

{

for(j=0;j

{

for(k=0;k

{

result[i][j]+=a[i][k]*b[k][j];

}

}

}

cout<<"结果是"<

for(i=0;i

{

for(j=0;j

{

cout<

if(j==n-1)

cout<

}

}

return0;

}

源程序(利用new):

#include

usingnamespacestd;

intmain()

{

intm,n,g;

inti,j,k;

cout<<"请输入第一个矩阵的行数和列数";

cin>>m>>n;

cout<<"请输入第二个矩阵的列数(其行数和第一个矩阵的列数相等)";

cin>>g;

 

double**a;

a=newdouble*[m];

for(i=0;i

{

a[i]=newdouble[n];

}

 

double**b;

b=newdouble*[n];

for(i=0;i

{

b[i]=newdouble[g];

}

cout<<"请输入第一个矩阵的元素"<

for(i=0;i

{

for(j=0;j

{

cin>>a[i][j];

}

}

cout<<"请输入第二个矩阵的元素"<

for(i=0;i

{

for(j=0;j

{

cin>>b[i][j];

}

}

double**result;

result=newdouble*[m];

for(i=0;i

{

result[i]=newdouble[m];

}

for(i=0;i

{

for(j=0;j

{

result[i][j]=0;

}

}

for(i=0;i

{

for(j=0;j

{

for(k=0;k

{

result[i][j]+=a[i][k]*b[k][j];

}

}

}

for(i=0;i

{

for(j=0;j

{

cout<

if(j==g-1)

cout<

}

}

return0;

}

【运行结果】

请输入第一个矩阵的行数和列数2

2

请输入第二个矩阵的列数

2

请输入第一个矩阵的元素

1

2

3

4

请输入第二个矩阵的元素

9

6

5

1

198

4722

Pressanykeytocontinue

总结

首先,第一个求素数的程序,我学会了利用sqrt()来判断素数,对for循环语句的使用与理解更近一层;其次,第三个程序就是辗转相除法:

设两个数m,n,假设m>=n,用m除以n,求得余数q。

若q为0,则m为最大公约数;若q不等于0,则进行如下迭代:

m=n,n=q,即原除数变为新的被除数,原余数变为新的除数重复算法,直到余数为0为止。

余数为0时的除数n,即为原始m、n的最大公约数。

学会了这个方法。

第三个学会了利用结构体输出和操作符重载。

要实现操作符重载就要使用操作符重载函数,操作符重载函数用关键字operator实现,其形式为:

返回类型operator操作符(参数列表){}。

操作符重载函数是一个函数,只不过这个函数的函数名为operator再加上后面要重载的操作符而已,比如要重载+号。

第四个就是学会了类的使用在主函数中从新定义一类,并把参数值赋进去,输出结果。

通过本次课程设计,我对本学期面向对象的程序设计C++中的部分内容有了更深刻的理解。

同时将理论知识也转化为实践。

在上机实习的过程中,我深刻理解了多实践的重要性,很多似懂非懂的东西也在实习过程中搞清楚了,这个过程让我受益匪浅。

我的收获主要是了解了函数的调用,参数的传递。

以及算法上的优化。

我收获很多同时也发现由于自己的概念不清,导致在调试中出现了很多错误。

但通过该进,有所纠正。

希望在以后学习计算机高级语言的路上能更顺利!

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

当前位置:首页 > 求职职场 > 笔试

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

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