zoukankan      html  css  js  c++  java
  • 第六章实验报告

    C程序设计实验报告

    实验项目:

    6.4.1、函数的定义和调用

    1、编写由三角形三边求面积的函数
    2、编写求N阶乘的函数
    3、求两个整数的最大公约数
    4、打印输出三角形
    5、求500以内的所有亲密数对

      • 姓名:方缙 实验地点: 514实验室 实验时间:2019年4月30日

        一、实验目的与要求

        6.4.1、函数的定义和调用
        6.4.1.1编写由三角形三边求面积的函数
    • 调用area()函数求三角形的面积
    • 在求面积函数中运用海伦公式
      6.4.1.2编写求N阶乘的函数
    • 定义符号常量
    • 使用整型变量存放累乘积
    • 在函数中,使用局部静态变量存放累乘积
    • 使用全局变量存放累乘积
      6.4.1.3求两个整数的最大公约数
    • 调用gcd()函数求两个整数的最大公约数
    • 掌握辗转相除法求两个整数的最大公约数
      6.4.1.4打印输出指定图形
    • 调用trangle()函数输出三角形
    • 在trangle()函数中用for循环的嵌套输出指定的结果
      6.4.2、模块化程序设计
      6.4.2.1求500以内的所有亲密数对
    • 掌握C语言中定义函数的方法
      • 掌握通过“值传递”调用函数的方法

        二、实验内容

        6.4.1:用for语句实现循环

        实验练习1:编写由三角形三边求面积的函数
    • 问题的简单描述:编写程序,从键盘输入三角形的3条边,调用三角形面积函数求出其面积,并输出结果。
    • 程序流程图:

    • 实验代码:
    #include<stdio.h>
    #include<math.h>
    float area(float a,float b,float c)
    {
        float s,p,area;
        s=(a+b+c)/2;
        p=s*(s-a)*(s-b)*(s-c);/*根据海伦公式求三角形面积*/
        area=sqrt(p);
        return(area); 
    }
    main()
    {
        float x,y,z,ts;
        printf("请输入三角形的三条边:"); /*键盘输入三角形的三条边*/
        scanf("%f,%f,%f",&x,&y,&z);
        ts=area(x,y,z);/*调用求三角形面积函数*/
        if(x+y>z&&x+z>y&&y+z>x)/*判断是否构成三角形*/
        printf("area=%f
    ",ts);
        else printf("data error!"); 
    }
    

      

    • 问题分析:(重点分析在实验过程中出现的问题,及解决方法。)
      这个程序要用到开方函数,所以要使用头文件math.h;判断输入的3条边是否能构成三角形的条件;按照流程图的顺序一步一步地完成这个程序
      • 程序运行如下:


        实验练习2:编写求N阶乘的函数
    • 问题的简单描述:编写函数,求出从主调函数传来的数值i的阶乘值,然后将其传回主调函数并输出。
    • 程序流程图:
    • 实验代码:
    #include"stdio.h"
    #define N 5/*定义符号常量N,代表数字5*/
    long function(int i)
    {
        static long f=1;/*定义局部静态变量f并赋初值1*/
        f=f*i;/*求形参i的阶乘值并存放在f中*/
        return f; 
    }
     main()
    {
        long product;
        int i;
        for(i=1;i<=N;i++)
        {
            product=function(i);/*调用函数function()求阶乘值,并赋值给product*/
            printf("i的阶乘是:%d
    ",product); 
        }
    }
    

      

    • 问题分析:
      这个程序首先要定义一个符号变量N,具体的写法之前的一次实验中,我们也是有做过的,然后要定义一个局部静态变量,并实验long型变量来存放所求的值,最后按照流程图走,将程序代码补充完整。
      • 程序运行如下:


        实验练习3:求两个整数的最大公约数
    • 问题的简单描述:编写程序,从键盘输入两个整数,调用gcd()函数求它们的最大公约数,并输出结果。
    • 程序流程图:
    • 实验代码:
    #include<stdio.h>
    int gcd(int a,int b)
    {
        int temp;
        int remainder;
        if(a<b)
        {
            temp=b;
            b=a;/*交换a和b的值*/
            a=temp;
        }
        remainder=a%b;
        while(remainder!=0)
        {
            a=b;
            b=remainder;/*辗转相除求最大公约数*/
            remainder=a%b;
        }
        return b; 
    }
    main()
    {
        int x,y;
        int fac;
        printf("please input two integers:");/*提示输入两个整数*/
        scanf("%d,%d",&x,&y);/*输入两个整数*/
        fac=gcd(x,y);/*用输入的两个数调用求最大公约数的函数*/
        printf("The great common divisor is:%d",fac);
    }
    

      

    • 问题分析:这个程序关键部分还是那个算法,确实要理解这个算法要良好的数学功底。定义函数的时候首先要判断输入两个整数的大小关系,总是要较大的数除以较小数,如果顺序不对,要先交换顺序才能继续相除,然后就是while语句里输完a=b;b=remainder;后还没完结,还要再次输入remainder=a%b,不然程序是不能算出最大公约数的。
      • 程序运行结果如下:


        实验练习4:打印输出指定图形
    • 问题的简单描述:输入整数n,输出高度为n的等边三角形。当n=5时的等边三角形。
    • 程序流程图:
    • 实验代码:
    #include<stdio.h>
    void trangle(int n)
    {
        int i,j,k;
        for (i=0;i<=n;i++)
        {
            for( j=i;j<n;j++)
            printf(" ");/*打印每一行的空格*/
               for ( k=1;k<=(2*i-1);k++)
                printf("*");/*打印每一行的*号*/
            putchar('
    ');
        }
     } 
    int main()
     {
        int n;
        printf("please input n:");/*提示输入一个整数n*/
        scanf("%d",&n);/*输入整数n*/
        printf("
    ");
        trangle(n);/*调用函数打印出等边三角形*/
     }
    

      

    • 问题分析:(重点分析在实验过程中出现的问题,及解决方法。)
      这个程序其实之前我们就已经做过了类似的了,根据书中给出的等边三角形,可以发现等边三角形的组成规律,每一行星号前的空格都比上一行的少一个,每一行的星号个数也是有规律的,可以用2i-1来表示,最后按照这些规律将代码补齐,程序就运行成功了。
      • 程序运行结果如下:

        6.4.2:模块化程序设计

        实验练习1:求500以内的所有亲密数对
    • 问题的简单描述:若正整数A的所有因子(包括1担不包括自身,下同)之和为B,而B的因子之和为A,则称A和B为一对亲密数。例如:6的因子之和为1+2+3=6,因此6与6为一对亲密数(即6自身构成一对亲密数);又如,220的因子之和为1+2+3+4+5+10+11+20+22+44+55+110=284,而284的因子之和为1+2+4+71+142=220,因此,220与284为一对亲密数。
      具体要求如下:
      (1)编制一个函数facsum(m),返回给定正整数m的所有因子(包括1但不包括自身)之和。
      (2)编制一个主函数,调用(1)中的函数facsum(),寻找并输出500以内的所有亲密数对。
      (3)输出要有文字说明。在输出每对亲密数时,要求从小到大排列并去掉重复的亲密数对。
      (4)所有函数中的循环均为for循环。
    • 程序流程图:
    • 实验代码:
    #include<stdio.h>
    int facsum(int m)
    {
        int sum=1,f=2;
        while(f<=m/2)/*while循环的循环体*/
        {
            if(m%f==0)/*循环求m的因子之和并存放在sum变量中*/ 
                sum=sum+f;
                f=f+1;
        }
        return sum; 
    }
    main()
    {
        int m=3,n,k;
        while(m<=500)/*求500以内亲密数对的while循环体*/
        {
            n=facsum(m);/*调用facsum求m的因子之和并存入k中*/ 
            k=facsum(n);/*调用facsum求k的因子之和*/
            if(m==k&&m<=n)/*判断是否是亲密数对的if条件语句*/
            printf("%d,%d
    ",m,n);
            m++;
        }
    }
    

      

    3问题分析:(重点分析在实验过程中出现的问题,及解决方法。)
    要做出这个程序首先要弄清楚什么是亲密数对,亲密数对成立的条件是什么,然后在facsum(m)模板中,求出m的所有因子,并将它们的和作为返回值。在主函数中,for循环从m=3开始调用facsum(m),再计算m是否有亲密数对。

      • 程序运行如下:

        三、实验小结(在本次实验中收获与不足)

        这节课内容确实比之前的要麻烦好多,涉及的内容也比较宽广。或许太久没有编写代码了,刚开始就有点陌生,犯一些小毛病,在一些细节方面,;“ 啥的忘记打了。还是要多加练习吧,只有形成了惯性思维才不会出错。

  • 相关阅读:
    Django对静态文件的处理——部署阶段
    使用Django来处理对于静态文件的请求
    Django1.7如何配置静态资源访问
    Spring WebSocket中403错误解决
    FastJSON JSONObject 字段排序 Feature.OrderedField
    国际化(i18n) 各国语言缩写
    【转】java.io.Closeable接口
    【转】spring bean 卸载
    This content should also be served over HTTPS
    Failed to close the ServletOutputStream connection cleanly, Broken pipe
  • 原文地址:https://www.cnblogs.com/fj001024/p/10816300.html
Copyright © 2011-2022 走看看