【第2周 項目2 - 程序的多文件組織】

/*Copyright (c)2015,煙臺大學計算機與控制工程學院

All rights reserved.

 文件名稱:項目2--zuzhi.cpp

作 者:樑凱

完成日期:2016年9月18日

版 本 號:v1.0

學習數據結構,目標就是要編制出有相當規模的程序的。將所有的代碼放在一個文件中的做法,不能適用現階段的需求了。
  通過這個項目,確認有能力用多文件組織程序。方便以後各章,我們就某一數據結構定義算法庫,並能引用算法庫進行實踐。
  最簡單的多文件組織,一個項目中有3個文件:
  (1) .h 頭文件:定義數據類型、聲明自定義函數、定義宏等
  (2).cpp 源文件1:用於實現頭文件中聲明的自定義函數
  (3).cpp 源文件2:定義main()函數,用於調用相關函數,實現問題求解目標。
  請將例1.13中按方案3實現的程序,用多文件形式組織並運行。   
下面是寫在一個文件中的程序:

*/
 

//(1)頭文件 head.h

 

 

 

    #include <stdio.h> 
    #define MaxStud 50      //學生人數最多爲50 
    #define MaxCour 300     //學生成績記錄數最多爲50*6 
    struct stud1 
    { 
        int no;         //學號 
        char name[10];  //姓名 
        int bno;        //班號 
    }; 
    struct stud2 
    { 
        int no;         //學號 
        int cno;        //課程編號 
        int deg;        //分數 
    }; 
     
    double studavg(struct stud2 s2[],int m,int i) ; 
    double couravg(struct stud2 s2[],int m,int i) ; 
    void allavg(struct stud1 s1[],int n,struct stud2 s2[],int m) ;

 


//(2)cpp源文件1 定義的main函數

 

    #include"head.h" 
     
    int main() 
    { 
        int n=7;        //學生記錄人數 
        int m=21;       //學生成績記錄數 
        struct stud1 s1[MaxStud]= 
        { 
            {1,"張斌",9901}, 
            {8,"劉麗",9902}, 
            {34,"李英",9901}, 
            {20,"陳華",9902}, 
            {12,"王奇",9901}, 
            {26,"董強",9902}, 
            {5,"王萍",9901} 
        }; 
        struct stud2 s2[MaxCour]=   //規定課程的編號從1到6,同一學生成績記錄連續存放 
        { 
            {1,1,67}, 
            {1,2,98}, 
            {1,4,65}, 
            {8,1,98}, 
            {8,3,90}, 
            {8,6,67}, 
            {34,2,56}, 
            {34,4,65}, 
            {34,6,77}, 
            {20,1,68}, 
            {20,2,92}, 
            {20,3,64}, 
            {12,4,76}, 
            {12,5,75}, 
            {12,6,78}, 
            {26,1,67}, 
            {26,5,78}, 
            {26,6,62}, 
            {5,1,94}, 
            {5,2,92}, 
            {5,6,89} 
        }; 
        allavg(s1,n,s2,m); 
        return 0; 
    }

 

//(3)cpp源文件2 實現自定義函數

 


[cpp] view plaincopyprint?

    #include"head.h" 
     
    double studavg(struct stud2 s2[],int m,int i)   //求學號爲i的學生的平均分 
    { 
        int j,n=0;              //n爲學號爲i的學生選學課程數 
        double sum=0;           //學號爲i的學生總分 
        for (j=0; j<m; j++) 
            if (s2[j].no==i)    //學號爲i時統計 
            { 
                n++; 
                sum+=s2[j].deg; 
            } 
        return(sum/n); 
    } 
    double couravg(struct stud2 s2[],int m,int i)   //求編號爲i的課程的平均分 
    { 
        int j,n=0;              //n爲編號爲i的課程選修人數 
        double sum=0;           //編號爲i的課程總分 
        for (j=0; j<m; j++) 
        { 
            if (s2[j].cno==i)   //課程編號爲i時統計 
            { 
                n++; 
                sum+=s2[j].deg; 
            } 
        } 
        return(sum/n); 
    } 
    void allavg(struct stud1 s1[],int n,struct stud2 s2[],int m)    //求學生平均分和課程平均分
    { 
        int i,j; 
        printf("學生平均分:\n"); 
        printf("  學號     姓名 平均分\n"); 
        i=0; 
        while (i<n) 
        { 
            j=s1[i].no; 
            printf("%4d %10s %g\n",s1[i].no,s1[i].name,studavg(s2,m,j)); 
            i++; 
        } 
        printf("課程平均分:\n"); 
        for (i=1; i<=6; i++) 
            printf(" 課程%d:%g\n",i,couravg(s2,m,i)); 
    }

運算結果:

知識點總結:.

h 頭文件) 、.cpp 源文件之間的聯繫與運用。並熟悉使用。

心得體會:

編寫程序功能可實現模塊化,同時工作即可節省時間。

 


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章