您好,欢迎来到爱go旅游网。
搜索
您的当前位置:首页c++实习报告

c++实习报告

来源:爱go旅游网


C++课程设计报告

课程名称: C++课程设计 院 系: 信息工程学院 专 业: 信息工程 班 级: 116102 学 号: 20101003509 学生姓名: 杨少雷

指导教师: 陈亮 张发勇

2011 年 01 月 10 日

实习题目A-1

1.输出1至100之间每位数的乘积大于每位数的和的数,例如对于数字12,有1*2<1+2, 故不输出该数;对于27,有2*7>2+7,故输出该数。 题目分析:

该题目要求验证并输出1到100之间满足条件的数,故要用for循环来实现依次验证并输出。

算法设计:

利用for循环语句,依次进验证,并输出结果。利用count控制每行输出10个数。 for(i=1;i<100;i++)

{

if(((i/10)*(i%10))>((i/10)+(i%10))) { }

cout<count++;

if(count == 10)//每输出十个数换行 { cout<调试报告: 由于开始未设置每输出10个数换行,有些数在换行后被拆开,影

响了结果的可读性。 附录:

#include \"stdafx.h\" #include \"iostream.h\"

int main(int argc, char* argv[]) { cout<<\"输出1至100之间每位数的乘积大于每位数的和的数:\"<int i;

int count=0; for(i=1;i<100;i++) {

if(((i/10)*(i%10))>((i/10)+(i%10))) { }

cout<count++;

if(count == 10)//每输出十个数换行 {

cout<count=0; }

}

cout<运行结果:

实习题目A-2

1. 编写一个程序,求出所有的“水仙花数”。所谓水仙花数,是指一个三位数,其各位数

字的立方和恰好等于该数本身。例如153=1*1*1+5*5*5+3*3*3,所以153是水仙花数。 题目分析:

此题目要求验证并输出满足条件的三位数,故用for循环依次验证并输出。 算法设计:

依次提取三位数的各位数字(百,十,个),利用for循环依次进行验证并输出。

提取各位数字: 百位:a=n/100;

十位:b=(n-a*100)/10; 个位:c=n-a*100-b*10. 调试报告:

由于误将“=”用为“==”,导致运行出错误结果。 附录:

#include \"stdafx.h\" #include \"iostream.h\"

int main(int argc, char* argv[]) {

cout<<\"输出水仙花数:\"<int a,b,c;

for(i=100;i<1000;i++)

}

{

a=i/100;

b=(i%100)/10; c=(i%100)%10;

if(i==(a*a*a+b*b*b+c*c*c)) cout<}

cout<运行结果:

实习题目B-1

4. 对两个有序数组进行合并:设有如下数组A、B,并假设两个数组的元素都已经有序(从

大到小降序排列)。编程序,合并A、B数组形成一个新的数组C,并使C的元素仍有序(从大到小降序排列)。

int A[10]={123,88,86,86,33,15,7,0,-1,-3}; int B[10]={86,69,51,50,27,19,15,12,5,2}; 题目分析:

该题目要求合并两个已经有序的数组,所以要充分利用数组有序这一特点。用指针分别指向两个数组的排头,取出两个数组的排头元素进行比较,较大者赋给另外一个数组,同时排头元素较大者的数组,指针后移,再将两指针指定的元素进行比较,依次循环下去。 算法设计:

1. 声明三个指针,两个指向已经给定的两个数组的排头,另一个指向新数组。 2. 取出两个数组的排头元素进行比较,较大者赋给新数组,同时排头较大者的指针后

移,再将指针所指的元素取出进行比较。按同样的方法循环下去。 3. 当一个数组的元素完全转入新数组后,另一个数组直接接到新数组后面。 调试报告:

由于a.b的范围错定为9,导致编译时B[10]中的最后一个数2被忽略。

附录:#include \"stdafx.h\" #include using namespace std; void main() {

int A[10]={123,88,86,86,33,15,7,0,-1,-3}; int B[10]={86,69,51,50,27,19,15,12,5,2}; int C[20]; int a=0;

int b=0;

int *X=A,*Y=B,*Z=C;//指针 cout<<\"C[20]={\"; while (a<10&&b<=10) {

if (*X>=*Y||b==10) //b==10表示此时B[10]中的数全部大于A[10]中剩余的数,只{ }

需将A[10]中剩余的数输出

*Z=*X;

*X++;//指针后移 a++;

else if (*X<=*Y||a==9) //a==9表示此时A[10]中的数全部大于B[10]中剩余的数,只

需将B[10]中剩余的数输出,此题可以不要a==9

{

}

cout<<*Z<<\" \";

*Z=*Y;

*Y++;//指针后移 b++;

*Z++; }

cout<<\

}

运行结果:

实习题目C-1

7.编写一个程序计算两个给定长方形的面积,其中在设计类成员函数addarea()(用于计算两个长方形的总面积)时使用对象作为参数。 题目分析:

题目要求用对象作为参数,所以设计了类的组合的程序。 算法设计:

先申明一个矩形类(class juxing),x,y作为类的私有成员分别表示矩形的长和宽。 class juxing

{

public: juxing(double a,double b);

~juxing(){};

double Area(); private: double x,y; }

再申明一个求矩形和的类。 class retangle {

public:

retangle(juxing a,juxing b);//类的组合 ~retangle(){};

double Addarea();

private: juxing m; };

juxing n;

调试报告:

略。 附录:

#include \"stdafx.h\" #include using namespace std; class juxing {

public: juxing(double a,double b); ~juxing(){}; double Area(); private: };

class retangle {

public: retangle(juxing a,juxing b);//类的组合

~retangle(){}; double Addarea(); double x,y;

private: juxing m; juxing n;

};

juxing::juxing(double a,double b) { x=a; y=b; }

//计算面积

double juxing::Area() { }

retangle::retangle(juxing a,juxing b):m(a),n(b)//组合类赋初值 { }

double retangle::Addarea() {

return m.Area()+n.Area(); }

void main() {

cout<<\"请分别输入两个矩形的长和宽:\"; double x,y,m,n; cin>>x>>y>>m>>n; juxing A(x,y);

juxing B(m,n);

cout<<\"两个矩形的面积分别为:\"; cout<cout<<\"两个矩形的面积和为:\"; cout<}

运行结果:

实习题目C-2

8.以面向对象的概念设计一个类,此类包含3个私有数据:unlead(无铅汽油)、lead(有铅汽油)以及total(当天总收入)。无铅汽油的价格是17元/公升,有铅汽油的价格是16元/公升。请以构造函数方式建立此值。试输入某天所加的汽油量,本程序将列出加油站当天的总收入。 题目分析:

该题目是要求用类来实现对汽油收入的相关计算,故要申明一个收入类(class income),包含三个私有成员:unlead(无铅汽油)、lead(有铅汽油)以及total(当天总收入)。由于要以构造函数方式建立汽油价格的值,所以将汽油的单价列为常量。 算法设计:

//定义常量

const int unleaddanjia=17;

const int leaddanjia=16;

class income

{

public:

income(double a,double b); double Gettotal(); ~income(){}; private: double unlead; double lead; double total; };

调试报告: 略。 附录:

#include \"stdafx.h\" #include using namespace std; //定义常量

const int unleaddanjia=17; const int leaddanjia=16;

class income {

public:

income(double a,double b); double Gettotal(); ~income(){}; private: }; { }

double income::Gettotal() { total=unlead*unleaddanjia+lead*leaddanjia; }

void main() { cout<<\"已知无铅汽油的单价为17元/公升,有铅汽油单价为16元/公升\"<double a,b; cin>>a>>b;

income oneday(a,b);

cout<<\"这天的总收入为: \"; return total; double unlead; double lead; double total;

income::income(double a,double b)

unlead=a; lead=b; total=0;

cout<运行结果:

课程设计中期设计题目

11. 求解一元二次方程。一元二次方程的定义为:

ax2+bx+c=0

2

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

2

(2)如果b -4ac< 0,方程没有实根,但有虚根; (3)如果b2 -4ac= 0,方程有一个实根。

请你编写一个程序,使其能求出多个二次方程的根。该程序要询问用户是否想继续解下一个方程。用户输入1来继续,输入其它数字,则终止程序。程序要求用户输入a,b和c,然后根据前面的条件计算,并输出答案。 要求:使用类实现

(1) a,b,c为该类的私有成员变量;

(2) 求根的实现为该类的成员函数,形式为:

//函数返回值:实根的个数;

//参数:x- 用以返回实根值的数组;

long CalResult(float x[]);

(3) 该类还包含有参构造函数、析构函数。 (4) 使用MFC工程实现,可酌情加分。

题目分析:

题目要求使用类来实现求解一元二次方程,所以要定义一个解方程的类,用方程的系数作类的私有数据成员,用类的成员函数得到方程的解,方程的解储存在数组中。

由于要能持续输入并求解,则需要建立一个大循环。 算法设计:

由于用用到求平方根的函数,故要用到头文件

//定义一个方程的类 class fangcheng {

public:

fangcheng(double x,double y,double z); void panduan(); float Calresult(); private: double a,b,c; float X[2];

};

调试报告:

由于将求平方根的函数sqrt()写成sqr(),编译时报错。

附录:

#include \"stdafx.h\" #include #include using namespace std; //定义一个方程的类 class fangcheng {

public:

fangcheng(double x,double y,double z); void panduan(); float Calresult();

private: double a,b,c; };

float X[2];

fangcheng::fangcheng(double x,double y,double z) { a=x;

b=y; c=z;

}

//对方程的根进行判断

void fangcheng::panduan() {

if ((b*b-4*a*c)>0)

cout<<\"方程有两个实根:\"<else if ((b*b-4*a*c)<0)

cout<<\"方程没有实根!\"<float fangcheng::Calresult() {

if ((b*b-4*a*c)>=0) { for (int i=0;i<2;i++)

float x,y;

x = ((-b)+sqrt(b*b-4*a*c))/(2*a);

y = ((-b)-sqrt(b*b-4*a*c))/(2*a);

float X[2] = {x,y};

}

{

cout<cout<else if ((b*b-4*a*c)<0) }

{ }

return X[2];

return 0;

int main() {

cout<<\"已知方程ax2+bx+c=0\"<>a>>b>>c; fangcheng A1(a,b,c); A1.panduan();

A1.Calresult();

cout<<\"如要继续求解则输入1,否则输入其他结束!\"<while (i=1) {

cin>>i; if (i==1) {

cout<<\"已知方程ax2+bx+c=0\"<cout<<\"请输入a,b,c的值:\"; double a,b,c; cin>>a>>b>>c; fangcheng A1(a,b,c); A1.panduan(); A1.Calresult();

} else

return 0;

cout<<\"如要继续求解则输入1,否则输入其他结束!\"<}

return 0; }

运行结果:

实习感想

还记得刚开始的时候,什么都不懂,c++就根本没听说过,只知道编程蛮难,而我的数学成绩又不是特别好,所以一直很害怕编程。不过我一直没感到失去信心,我始终相信自己能学好,只要努力就能成功。

在这一周的实习时间,我的确学到了很多东西,也开始感受到其中的乐趣,特别是自己完成一个程序的编写时的那种自豪令人难以忘记。学编程的确是一件痛苦的事,我们不得不连续几个小时地面对电脑,哪怕是在发呆。如果能顺利完成一个程序的编写,几个小时也许过得很快。如果遇到一个不知怎么下手的题目或者是编译时无论怎么改都是一大堆错误时,那么几个小时是非常难熬的,而且内心也一直不舒服,最后还得郁闷地走出机房,强忍住一无所获,徒劳无功的滋味。不过努力了总会有成果,付出了总会有回报,现在比起以前来有了很大很大的进步,我开始对C++有我自己的一点理解。

编程序是讲究效率的,可对我们初学者来说,我觉得最重要的是先把基础学好,要想提高效率还要对vc6.0的各种功能以及一些操作非常熟悉,编程过程中要十分专注,遇到问题应该及时想办法解决,而不是只在那儿抱怨。

程序是要给别人看的,整齐、美观、简捷的程序使人易于接受与理解,但简捷是相对的,要根据具体情况而定,像那种大型程序,我们只能将它的各个部分做到尽可能简捷,整体上依然是复杂的。对于整齐美观,那就跟个人的欣赏水平,审美角度有关,可以说各有所好。除了写程序要做到整齐、美观、简洁,在程序运行后用户看到的界面也应该是整齐、美观、简洁的,这样的程序才能被用户接受,如果以后从事这方面的工作,那这样的好习惯一定会很有帮助的。

编写程序也是要讲究习惯的,好的习惯能帮助我们在尽量短的时间内写出尽可能好的

程序,而坏习惯只会让我们重复那些可以避免的错误,给我们带来的是费时费力。说到好习惯,细心是最重要一个,有时我们往往错在一些本来不应该出错的地方,像不小心丢失一个符号,写错一个字母之类的。所以平时要记住常用的语法是必要的,而且还要经常自己练习编程最基本的技巧。其次,我们还必须有一定的耐性,缺乏耐性是无法立足的,会经常出现半途而废的结局。最后,我们要培养自己的兴趣,兴趣是最好的良药,也是最好的老师,而这方面的兴趣我们必须要有。

总之,在这次实习中,自己经历过了成功的喜悦,也经历了失败的懊恼,还有一些意外,如把U盘给丢了,结果要把所有的程序又重新写一遍。可以说成是粗心大意,也可以说是得意忘形,但这两种习惯都是我们学习编程的人不该有的,哪怕在没有编程的时候。

虽然错误时难免的,但减少错误是可以做到的。懂得收集自己犯过的错误,并争取把它改正,以后尽可能少犯。前事不忘后事之师,我相信经常反省自己,扬长避短是可以降低错误率的。

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- igat.cn 版权所有 赣ICP备2024042791号-1

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务