天天看點

第二周——項目2程式的多檔案組織

/*  
 * Copyright (c++) 2015 煙台大學計算機學院  
 * All right reserved.  
 * 檔案名稱:student.cpp  
 * 作    者: 商文轲  
 * 完成日期:2015年9月14日  
 * 版 本 号:v1.9   
 *  
 *問題描述:學習資料結構,目标就是要編制出有相當規模的程式的。将所有 
           的代碼放在一個檔案中的做法,不能适用現階段的需求了。通過 
           這個項目,确認有能力用多檔案組織程式。友善以後各章,我們 
           就某一資料結構定義算法庫,并能引用算法庫進行實踐。 
 *輸入描述:無 
 *程式輸出:學生資訊 
 */  


           

mian.c中代碼

#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;
}
           

student.c中代碼

#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));
}
           

head.h中代碼

#include <stdio.h>
#define MaxStud 50      //學生人數最多為50
#define MaxCour 300
struct stud1
{
    int no;         //學号
    char name[10];  //姓名
    int bno;        //班号
};
struct stud2
{
    int no;         //學号
    int cno;        //課程編号
    int deg;        //分數
};
           

總結: 1源檔案的代碼中要添加對頭檔案的引用

           2結構體的定義也應該包含在頭檔案中

繼續閱讀