函数(实验报告和作业报告)

来源:互联网 发布:双十一网络销售情况 编辑:程序博客网 时间:2024/06/04 19:25
/*  
* 文件名称:Ex4-1.cpp  
  • * 作    者:严钟响 
  • * 完成日期:2017 年 4月 10 日  
  • * 版 本 号:cb v1.25.0
  • * 对任务及求解方法的描述部分: 
  • * 输入描述:无  
  • * 问题描述:对数组的,函数结合运用。
  • * 程序输出:略
  • * 问题分析:略 
  • * 算法设计:略  
  • */    
  • #include <iostream>
    #include<cmath>
    using namespace std;
    void sort(int p[], int n);  //数组排序
    bool prime(int x);   //素数判断
    void print(int p[], int n);//输出数组
    int main()
    {
     int a[10] = { 2, 13, 5, 47, 19, 53, 27, 23, 28, 11 };
     int b[10], i, j = 0;
     for (i = 0; i<10; i++)
     {
      if (prime(a[i]))//将a中的素数存入b数组
       b[j++] = a[i];
     }
     print(b,8 ); //输出排序前的b数组
     sort(b, 8);   //对数组b排序
     print(b,8);   //输出排序后的b数组
     return 0;
    }
    //下面定义自定义函数
    void sort(int p[], int n)
    {
           int i, j,k=0;
     for (i = 0; i < n - 1; i++)
      for (j = 0; j < n - i - 1; j++)
      {
       if (p[j] > p[j + 1])
       {
        int t = p[j];
        p[j] = p[j + 1];
        p[j + 1] = t;
       }
      }
    }

    bool prime(int x)
    {
     int i,m;
  • m=floor(sqrt(x)+0.5);
     for (i = 2; i <=m; i++)
     {
      if (x%i == 0)
                    return 0;
     }
     return 1;
    }
    void print(int p[], int n)
    {
            int k=0;
     while(k<n)
            cout<<p[k++]<<' ';
            cout<<endl;
    }
  • 心得体会:
  • 写的时候一堆问题,数组访问总是越界,后来才看出来,这模板略坑。就是sort(b,n)这里,n是什么?显然从题目看的出来n是这个数组的元素个数,可这个n是怎么得到的?呵呵,想了我好久。这里题目给定了一个数组,显然n等于8,可是 如果不是这个数组呢,你还能让他等于8吗?那就要计算!怎么算?这个是int型的数组,就注定了不能用strlen来算,用‘/0’来判断显然也不合理(如果数组中有0这个元素呢?)。在网上看到很多人说用sizeof(buff)/sizeof(buff[0])来算,仔细想想还是不对,这里给定了10个单元的b数组,用这样的方法来算求的是10个元素,而实际上后面2个应该是为空的,也就是实际上只有8个元素。再想想即使是用快排也要知道元素个数啊,用迭代器遍历也必须知道元素个数或者它的begin和end吧。有一种方法是先将整形的数组转化为字符串,可这样做就有点太过了,而且还要改main()里面的东西。一时竟想不到合理的解决方法,只能把8写上去了。

  • 知识点总结:
  • 子函数编写。


    以下为作业报告
    /*  
    * 文件名称:Ex4-2.cpp  
  • * 作    者:严钟响 
  • * 完成日期:2017 年 4月 10 日  
  • * 版 本 号:cb v1.25.0
  • * 对任务及求解方法的描述部分: 
  • * 输入描述:无  
  • * 问题描述: 定义一个有10个的数组a,输出数组a中所有的奇数的阶乘和和偶数的阶乘和。其中将奇偶数的判断和阶段的计算定义为函数。
  • * 程序输出:略
  • * 问题分析:略 
  • * 算法设计:略  
  • */   
    #include<iostream>
    using namespace std;
    int fac(int a)
    {
            int i,s=1;
            for(int i=1;i<=a;i++)
            s*=i;
            return s;
    }
    int fun(int a[],int n)
    {
            int i,m=0,k=0;
            for(i=0;i<n;i++)
            {
                    if(a[i]%2==0)
                         m+=fac(a[i]);
                    else
                         k+=fac(a[i]);
            }
            cout<<m<<endl<<k;
    }
    int main()
    {
            int i=0;
            int a[10];
            cout<<"请输入10个整数:";
            while(i<10)
            cin>>a[i++];
            fun( a,10);
    }








  • /*  
    * 文件名称:Ex4-3.cpp  
  • * 作    者:严钟响 
  • * 完成日期:2017 年 4月 10 日  
  • * 版 本 号:cb v1.25.0
  • * 对任务及求解方法的描述部分: 
  • * 输入描述:无  
  • * 问题描述:对数组的,函数结合运用。
  • * 程序输出:略
  • * 问题分析:略 
  • * 算法设计:略  
  • */  
  • #include<iostream>
    #include<cstring>
    #include<iomanip>
    using namespace std;
    void sanjiao()
    {
            int i,j,n=0,a[15][15];
            memset(a,0,sizeof(a));
            cout<<"请输入杨辉三角形的行数:";
            cin>>n;
            for(i=0;i<n;i++)
            {
                    a[i][0]=1;
            }
            for(i=1;i<n;i++)
            for(j=1;j<=i;j++)
            {
                    a[i][j]=a[i-1][j-1]+a[i-1][j];
            }
            for(i=0;i<n;i++)
            {
            for(j=0;j<=i;j++)
            cout<<setw(5)<<a[i][j];
            cout<<'\n';
            }
    }
    int main()
    {
            sanjiao();
    }




  • /*  
    * 文件名称:Ex4-4.cpp  
  • * 作    者:严钟响 
  • * 完成日期:2017 年 4月 10 日  
  • * 版 本 号:cb v1.25.0
  • * 对任务及求解方法的描述部分: 
  • * 输入描述:无  
  • * 问题描述:从有一个10个数的数组,求出这10个数的最大数、最小数和平均数,并统计出大于平均数的个数。其中求最大数、最小数和平均数用一个函数完成,统计大于平均数的个数用另一个函数完成。
  • * 程序输出:略
  • * 问题分析:略 
  • * 算法设计:略  
  • */    
  • #include<iostream>
    using namespace std;
    double aver(int x[],int n,int &max1,int &min1,double &averscore)
    {
            int i;
            double s=0;
            max1=min1=x[0];
           for(i=0;i<10;i++)
           {
            s+=x[i];
            if(x[i]>max1)
                    max1=x[i];
            else
                    min1=x[i];
           }
           averscore=s/n;
           return 0;
    }
    int count1(int x[],double averscore)
    {
            int num=0;
            for(int i=0;i<10;i++)
                    if(x[i]>averscore)
                    num++;
                    return num;
    }
    int main()
    {
           int x[10]={4,6,8,16,19,14,5,10,1,21},max1,min1,num;
           double averscore=0;
           aver(x,10,max1,min1,averscore);
          num= count1(x,averscore);
            cout<<"最大数为:"<<max1<<",最小数为:"<<min1<<",平均数为:"<<averscore<<",大于平均数的个数为:"<<num;
            return 0;
    }










  •  











  • 0 0
    原创粉丝点击