我是靠谱客的博主 激动书包,最近开发中收集的这篇文章主要介绍《c++程序设计》课程设计报告 《c++程序设计》课程设计报告,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

 

 

《c++程序设计》课程设计报告

 

 

 

 

 

 

 

班级:______数学类4____________学号:_2018212761____

 

报告人姓名:___赵景乐________  

 

实验地点: _______山东农业大学东校区教学楼414________

 

完成起止日期: __2019年11日至201914__

 

 

 

 

 

  1. 概要

    经过一个学期的C语言学习,现在已经能初步掌握C++程序的编写,应对一些不同的问题。在这里将整理一些做过的题目并列出其题目大意、解题思路、注意事项,并附带上原代码。

  1. 十五道题目

1、吃桃

题目:每天吃掉一半多一个的桃子,给出吃剩下1个桃子的天数,求桃子的个数。

思路:可以从结果反推桃子的个数。

注意:多组数据。

代码:

#include<iostream>

using namespace std;

int main()

{ int n,k,i;

while(cin>>n)

{

k=1;//余下1个//

 for(i=1;i<=n-1;i++)

{

 k=(k+1)*2;

}//注意天数与循环的差别//

 cout<<k<<endl;

 }

return 0;

}

2、末二位数

题目:一不知道末二位数的整数,但已知其能被另一数整除,求所有满足条件的末二位数。

思路:循环寻找。

注意:对同一组数据在一行输出结果,不同组在不同行,输入0 0表示结束。

代码:

#include<iostream>

using namespace std;

int main()

{

    int n,m,i,k;

    int a[100000];

    while(cin>>n>>m)

    {

        k=1;

        if(n==0&&m==0) break;

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

        {

            if((n*100+i)%m==0)

            {

                a[k]=i;

                k++;

            }

        }//将满足条件的末二位数保存,并记录个数//

        for(i=1;i<=k-2;i++)

        {

            if(a[i]<=9) cout<<0<<a[i]<<" ";

            else cout<<a[i]<<" ";

        }

        if(a[k-1]<=9) cout<<0<<a[k-1]<<endl;//控制空格//

        else cout<<a[k-1]<<endl;

    }

}

3、三角型图形

题意:给一整数和一字符,输出一个等边三角形。

思路:循环控制输出,设置变量控制空格。

注意:三角形右侧不含有空格,字符@表示结束。

代码:

#include<iostream>

using namespace std;

int main()

{

    char a;int n,i,j,flag=0;

    while(cin>>a>>n)

    {

        if(a=='@') break;

        if(flag)

        cout<<endl;//每个图形中间输出换行//

        flag=1;

        for(i=1;i<=n-1;i++)

        {

            for(j=1;j<=n+i-1;j++)

            {

                if(j==n-i+1||j==n-1+i)

                cout<<a;

                else cout<<" ";

            }

            cout<<endl;

        }//用n+i-1控制j,去掉多余空格//

        for(j=1;j<=2*n-1;j++)

        cout<<a;

        cout<<endl;

 

}

}

4、sky数

题目:一个4位数其十进制,十二进制,十六进制各位数之和都为相同的数,则其位sky数,判断一个4位数是否是sky数。

思路:进制转换并判断。

注意:要满足3个条件,任一不满足都不行,输入0表示结束。

代码:

#include<iostream>

using namespace std;

int main()

{

    int n,m,r, a,b,c,d, x,y,z;

    while(cin>>n)

    {

        if(n==0) break;

        m=n;

        x=0;y=0;z=0;

        a=n%10;

        b=(n%100)/10;

        d=n/1000;

        c=n/100-d*10;

        x=a+b+c+d;//十进制//

        while(n)

        {

            r=n%12;

            n=n/12;

            y+=r;

        }//十二进制//

        n=m;

        while(n)

        {

            r=n%16;

            n=n/16;

            z+=r;

        }//十六进制//

        if(x==y&&x==z) cout<<m<<" is a Sky Number."<<endl;

        else cout<<m<<" is not a Sky Number."<<endl;

    }

}

5、水仙花数

题目:称一个3位数为水仙花数,若其每位数字的三次方之和为其身,求多个区间内的所有水仙花数。

思路:循环判断。

注意:正确表示区间内的循环,不能超时,从小到大排列,每组数用空格隔开,不存在水仙花数输出no。

代码:

#include<iostream>

using namespace std;

int main()

{

    int a,b,c[5]={0},d[1005]={0},e,f,i,j;

    while(cin>>a>>b)

    {   e=0;

        for(i=a;i<=b;i++)

        {f=i;

            for(j=1;j<=3;j++)

            {c[j]=f%10;f/=10;}//取出每个数//

            if(c[1]*c[1]*c[1]+c[2]*c[2]*c[2]+c[3]*c[3]*c[3]==i)

            {d[e]=i;e++;}

        }

        if(e!=0)

        {for(i=0;i<e-1;i++) cout<<d[i]<<" ";cout<<d[e-1]<<endl;}

        else cout<<"no"<<endl;

    }

}

6、奇数乘积

题目:多组数据,每组第一个表示本组有n个数,每组至少一个奇数,求每组所有奇数的积

思路:判断是否是奇数,再乘积。

注意:正确求出所有奇数,求和用1*a的形式。

代码:

#include<iostream>

using namespace std;

int main()

{

    int a[100010]={0},b,i,n;

    while(cin>>n)

    {   b=1;

        for(i=1;i<=n;i++) cin>>a[i];

        for(i=1;i<=n;i++) {if(a[i]%2!=0) b*=a[i];}

        cout<<b<<endl;

    }

}

7、多个平均值

题目:有多组数据,其都为从2开始的有序偶数(连续),每个长度为n,每m个求一个平均值,最后不足m个的也求出其平均值。

思路:判断,并用数组每m个求一个平均,最后一组特殊处理。

注意:最后一组特殊处理易出错,应用变量用循环计算满m个的偶数的平均值。

代码:

#include<iostream>

using namespace std;

int main()

{

    int m,n,a,b,c,i,j,d[1010]={0};

    while(cin>>n>>m)

    {

    for(i=1;i<=n;i++) d[i]=d[i-1]+2;//有序偶数//

    a=n/m;b=n%m;//a为a组m个 偶数,b为多出来的偶数//

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

    {c=0;

    for(j=(i-1)*m+1;j<=i*m;j++)

    {

        c+=d[j];

        if(j==i*m) c/=m;

}//利用变量实现不同的循环,如先从1到m,再从m+1到2m//

if(i!=a||b!=0) cout<<c<<" ";if(i==a&&b==0) cout<<c<<endl;

    }if(b!=0)

    {c=0;

    for(j=a*m+1;j<=n;j++)

    {

        c+=d[j];if(j==n) cout<<c/b<<endl;

    }

    }

    }

}

8、母牛生小牛

题目:每个母牛每年生一头小母牛,小母牛4年后能生新的小母牛,求n年的时候有多少头母牛。

思路:找出规律求解,每年的母牛数正好的去年和大前年的母牛数之和。

注意:年份的运算,第一年有1头母牛,第二年有两头,第四年有四头,说明在第一年的时候还没开始运算,注意年份与代码中变量的联系.

代码:

#include<iostream>

using namespace std;

int main()

{

    int a[60]={0},i,n;

    while(cin>>n)

    {

        a[1]=1;a[2]=2;a[3]=3;a[4]=4;

        if(n==0) break;

        for(i=5;i<=n;i++)

        {

             a[i]=a[i-1]+a[i-3];

        }cout<<a[n]<<endl;/*用求出的关系求解要比直接暴力运算好很多*/

    }

}

9、进制转化

题目:输入十进制数和R,将该十进制数转化为R进制数。

思路:类似十进制转二进制,用除法的思想。

注意;R的取值为2到16,分别用A,B,C,D,E,F代表10,11,12,13,14,15,该题为多组数据的处理。

代码:

#include<iostream>

using namespace std;

int main()

{

    int n,i,j,l,r,s[10010];

    while(cin>>n>>r)

    {

        l=0;if(n<0) {n=-n;l=1;}//将所有数变为正数//

        for(i=1;n>=0;i++)

        {

            s[i]=n%r;

            if(n/r==0) {s[i]=n;n=-1;}

            else n/=r;

        }//类似转化二进制的运算,不过输出要逆序输出//

        for(j=i-1;j>0;j--)

        {

            if(j==i-1&&l==1)cout<<"-";/*正负数对应有无符号,注意判断条件*/

            if(s[j]<=9) cout<<s[j];

            else if(s[j]==10) cout<<"A";

            else if(s[j]==11) cout<<"B";

            else if(s[j]==12) cout<<"C";

            else if(s[j]==13) cout<<"D";

            else if(s[j]==14) cout<<"E";

            else if(s[j]==15) cout<<"F";

        }

        cout<<endl;

    }

}

10、时间的和

题目:n表示有n行数据,每组数据有代表时,分,秒的共6个,2组数据,求时间的和。

思路:数组求和。

注意:分和秒的范围都是0~59。

代码:

#include<iostream>

using namespace std;

int main()

{

    int n,i,j,l,r,s[100],a[100];

    cin>>n;

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

    {

        for(j=1;j<=3;j++) cin>>s[j];//第一组时间//

        for(j=1;j<=3;j++) cin>>a[j];//第二组时间//

        for(j=3;j>=1;j--)

        {

            s[j]+=a[j];

            if(j!=1&&s[j]>=60){s[j-1]++;s[j]-=60;}

        }//满60进1//

        for(j=1;j<3;j++) cout<<s[j]<<" ";cout<<s[3]<<endl;//没空格//

    }

}

11、集合的查

题目:给出两个集合,n,m代表每个集合的元素的个数,求差,差以从小到大的顺序排列。

思路: 先求差,再排列。

注意:多组输入且0 0表示输入结束,差为空集输出NULL。

代码:

#include<iostream>

#include<algorithm>

using namespace std;

int main()

{

int n,m,j,i,k,h,q,x;

int a[10000],b[10000];

while(cin>>n>>m)

{

if(n==0&&m==0) break;

h=0;x=0;//计数,便于之后判断输出//

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

{

cin>>a[i];

}

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

{

k=0;

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

{

if(a[i]==a[j]){h++;break;}

else k++;

}

if(k==m) {b[x]=a[i];x++;}

}

if(x>=1)

{

sort(b,b+x);//从小到大排列差//

for(q=0;q<x;q++)

cout<<b[q]<<" ";

cout<<endl;

}

if(h==n) cout<<"NULL"<<endl;

}

}

12、蜜蜂爬行

题目:蜜蜂只能向右爬行,给出其起点和终点,判断所有可能的方式有几种。

思路:寻找规律求解。

注意:重点在起点和终点的差值上。

代码:

#include<iostream>

using namespace std;

int main()

{

    int n,m,a,b,i,j;long long int s[60];

    cin>>n;

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

    {

        cin>>a>>b;m=b-a+1;//求出差值//

        s[2]=1;s[3]=2;

        if(m>=4) for(j=4;j<=m;j++) s[j]=s[j-1]+s[j-2];//规律求解//

        cout<<s[m]<<endl;

    }

}

13、手机尾号

题目:给出n个11位的手机号,6+每个手机号的后5位为对应短号,求多个短号。

思路:数组直接运算。

注意:数组范围。

代码:

#include<iostream>

using namespace std;

int main()

{

    int n,a,b[220];long long int f[220];

    cin>>n;

    for(a=1;a<=n;a++) cin>>f[a];

    for(a=1;a<=n;a++)

    {

        b[a]=f[a]%100000;

        if(b[a]==0) cout<<"600000"<<endl;

        else if(b[a]<10) cout<<"60000"<<b[a]<<endl;

        else if(b[a]<100) cout<<"6000"<<b[a]<<endl;

        else if(b[a]<1000) cout<<"600"<<b[a]<<endl;

        else if(b[a]<10000) cout<<"60"<<b[a]<<endl;

        else if(b[a]<100000) cout<<"6"<<b[a]<<endl;

    }

}

14、不吉利号码

题目:含有4或者连续的62的号码为不吉利号码,给出多个区间,求其中不是不吉利号码的个数。

思路:函数求不吉利号码的运算。

注意:易超时。

代码:

#include<iostream>

bool hs(int x)

{

    while(x)

    {

        if(x%10==4||x%100==62)//判断是否含有4和62//

        {

            return true;

        }

        x/=10;

    }

    return false;

}

using namespace std;

int main()

{

    int m,n,i,sum,num;

    while(cin>>m>>n,m!=0&&n!=0)//多组输入//

    {

        num=0;

        for(i=m;i<=n;i++)

        {

            if(hs(i)==true)//求不吉利号码的个数//

            num++;

        }

        cout<< n-m+1-num <<endl;//求不是不吉利号码的个数/、

    }

    return 0;

}

15、龟兔赛跑

题意:该题是关于龟兔赛跑的题,给兔子恒定的初速度vr,乌龟骑电车速度是vt1,爬行的速度是vt2。在长l的赛道上有n个充电站,每一次充电可以跑c远的距离,但充一次电需要t时间,而且知道每一个充电站距离起点的距离是lj1lj2……求兔子和乌龟谁先到终点。
细节:循环的初始值;double定义;
解题思路:将乌龟的电站看成一个个分节点,一共分成了n+1段,我们只需要求最短时间即可。分别把节点看成终点。例如第一个节点我们将所求的时间赋值给abc[1],当第二个节点时第一次判断该点到起点与c的大小.如果>=c,则求出该段时间h,并赋值到min,再从第一个节点出发,如果第二个节点到第一个节点的距离>=c,则求出时间并+t,与min进行判断取最小的赋值.如果<c则说明不需要充电求出时间。以此类推当第n+1个节点(即终点)时,求出了最短时间abc[n+1],与兔子所用的时间进行比较,便可得出结果。

源代码:
#include<iostream>

using namespace std;

int lj[1000];       //电站到起点的距离;

double abc[1000];   //起点到第k个节点的时间;

int main()

{

    int l,n,c,t,vr,vt1,vt2,i,j;

    double min , h;  

    while(cin>>l)

    {

        cin>>n>>c>>t;

        cin>>vr>>vt1>>vt2;

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

        cin>>lj[i];

        abc[0]=0; 

        lj[0]=0;lj[n+1]=l; //起点即lj[0]、终点即lj[n+1];

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

        {

            min=1000000;   //把min赋值成特别大的数,以便取最小值的判断;

            for(j=0;j<i;j++)                     (//第个节点到i个节点的时间)

            {

                if(lj[i]-lj[j]>=c)

             h=abc[j]+1.0*c/vt1+1.0*(lj[i]-lj[j]-c)/vt2;

                else

                h=abc[j]+1.0*(lj[i]-lj[j])/vt1;

                if(j>0)

                h+=t;

                if(h<min)

                min=h;

            }

            abc[i]=min;   //起点到第i个的时间;

        }

        double tz;   //兔子所用的时间;

        tz=1.0*l/vr;

        if(abc[n+1]<tz)   //判断时间的大小;

        cout<<"What a pity rabbit!"<<endl;

        else

        cout<<"Good job,rabbit!"<<endl;

    }

    return 0;

}

 三,总结

    在解决问题时,应先理清思路,注意细节编写代码,在代码出现问题时,可在重要的步骤中添加输出,分析是哪一步出现错误,若是有超时的情况,尽量简化代码运算步骤,上网查询别人的代码借鉴一下思路,如第15题,若是将小于c的小区间合并,再分别判断最短用时,对大部分的情况都是可以满足的,但并不意味这没有错误。又如倒序输出一段数,若是依照一般的想法,求出每一位数再输出,将会非常麻烦,但运用循环只需要除10和余10两个代码循环就能完成。借鉴不意味着抄袭,借鉴的是思路,并不是说复制下来代码就会做相应的题目。C语言的学习在一点点累积,在解决题目时多思考,不需要大量背诵和死记硬背。C语言的学习还在进行中,之后还会再学习函数,指针等,还需要继续努力。

最后

以上就是激动书包为你收集整理的《c++程序设计》课程设计报告 《c++程序设计》课程设计报告的全部内容,希望文章能够帮你解决《c++程序设计》课程设计报告 《c++程序设计》课程设计报告所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(69)

评论列表共有 0 条评论

立即
投稿
返回
顶部