第二周项目2-程序的多文件组织


  1. 问题及代码:  
  2.   
  3. /*    
  4. *烟台大学计控学院     
  5. *作    者:陈晓琳   
  6. *完成日期:2016年9月8日    
  7. *问题描述:学习数据结构,目标就是要编制出有相当规模的程序的。将所有的代码放在一个文件中的做法,不能适用现阶段的需求了。     
  8.   通过这个项目,确认有能力用多文件组织程序。方便以后各章,我们就某一数据结构定义算法库,并能引用算法库进行实践。     
  9.   最简单的多文件组织,一个项目中有3个文件:     
  10.   (1) .h 头文件:定义数据类型、声明自定义函数、定义宏等。    
  11.  (2).cpp 源文件1:用于实现头文件中声明的自定义函数。    
  12. *输入描述:无    
  13. *输出描述:(1).学生的学号,姓名及个人的平均分  
  14. (2).各课程的平均分    
  15. */      
  16. (1).head.h中的代码  
  17.   
  18. #include <stdio.h>  
  19. #define MaxStud 50      //学生人数最多为50  
  20. #define MaxCour 300     //学生成绩记录数最多为50*6  
  21. struct stud1  
  22. {  
  23.     int no;         //学号  
  24.     char name[10];  //姓名  
  25.     int bno;        //班号  
  26. };  
  27. struct stud2  
  28. {  
  29.     int no;         //学号  
  30.     int cno;        //课程编号  
  31.     int deg;        //分数  
  32. };  
  33. double studavg(struct stud2 s2[],int m,int i);  
  34. double couravg(struct stud2 s2[],int m,int i) ;  
  35. void allavg(struct stud1 s1[],int n,struct stud2 s2[],int m);  
  36.   
  37. (2)pingjun.cpp中的代码#include"head.h"  
  38. double studavg(struct stud2 s2[],int m,int i)   //求学号为i的学生的平均分  
  39. {  
  40.     int j,n=0;              //n为学号为i的学生选学课程数  
  41.     double sum=0;           //学号为i的学生总分  
  42.     for (j=0; j<m; j++)  
  43.         if (s2[j].no==i)    //学号为i时统计  
  44.         {  
  45.             n++;  
  46.             sum+=s2[j].deg;  
  47.         }  
  48.         return(sum/n);  
  49. }  
  50. double couravg(struct stud2 s2[],int m,int i)   //求编号为i的课程的平均分  
  51. {  
  52.     int j,n=0;              //n为编号为i的课程选修人数  
  53.     double sum=0;           //编号为i的课程总分  
  54.     for (j=0; j<m; j++)  
  55.     {  
  56.         if (s2[j].cno==i)   //课程编号为i时统计  
  57.         {  
  58.             n++;  
  59.             sum+=s2[j].deg;  
  60.         }  
  61.     }  
  62.     return(sum/n);  
  63. }  
  64.   
  65. void allavg(struct stud1 s1[],int n,struct stud2 s2[],int m)    //求学生平均分和课程平均分  
  66. {  
  67.     int i,j;  
  68.     printf("学生平均分:\n");  
  69.     printf("  学号     姓名 平均分\n");  
  70.     i=0;  
  71.     while (i<n)  
  72.     {  
  73.         j=s1[i].no;  
  74.         printf("%4d %10s %g\n",s1[i].no,s1[i].name,studavg(s2,m,j));  
  75.         i++;  
  76.     }  
  77.     printf("课程平均分:\n");  
  78.     for (i=1; i<=6; i++)  
  79.         printf(" 课程%d:%g\n",i,couravg(s2,m,i));  
  80. }  
  81.   
  82. (3)main中的代码  
  83.   
  84. #include"head.h"  
  85. int main()  
  86. {  
  87.     int n=7;        //学生记录人数  
  88.     int m=21;       //学生成绩记录数  
  89.     struct stud1 s1[MaxStud]=  
  90.     {  
  91.         {1,"张斌",9901},  
  92.         {8,"刘丽",9902},  
  93.         {34,"李英",9901},  
  94.         {20,"陈华",9902},  
  95.         {12,"王奇",9901},  
  96.         {26,"董强",9902},  
  97.         {5,"王萍",9901}  
  98.     };  
  99.     struct stud2 s2[MaxCour]=   //规定课程的编号从1到6,同一学生成绩记录连续存放  
  100.     {  
  101.         {1,1,67},  
  102.         {1,2,98},  
  103.         {1,4,65},  
  104.         {8,1,98},  
  105.         {8,3,90},  
  106.         {8,6,67},  
  107.         {34,2,56},  
  108.         {34,4,65},  
  109.         {34,6,77},  
  110.         {20,1,68},  
  111.         {20,2,92},  
  112.         {20,3,64},  
  113.         {12,4,76},  
  114.         {12,5,75},  
  115.         {12,6,78},  
  116.         {26,1,67},  
  117.         {26,5,78},  
  118.         {26,6,62},  
  119.         {5,1,94},  
  120.         {5,2,92},  
  121.         {5,6,89}  
  122.     };  
  123.     allavg(s1,n,s2,m);  
  124.     return 0;  
  125. }  
  126. 运行结果:  
  127. 问题及代码:
    
    /*  
    *烟台大学计控学院   
    *作    者:朱建豪 
    *完成日期:2016年9月8日  
    *问题描述:学习数据结构,目标就是要编制出有相当规模的程序的。将所有的代码放在一个文件中的做法,不能适用现阶段的需求了。   
      通过这个项目,确认有能力用多文件组织程序。方便以后各章,我们就某一数据结构定义算法库,并能引用算法库进行实践。   
      最简单的多文件组织,一个项目中有3个文件:   
      (1) .h 头文件:定义数据类型、声明自定义函数、定义宏等。  
     (2).cpp 源文件1:用于实现头文件中声明的自定义函数。  
    *输入描述:无  
    *输出描述:(1).学生的学号,姓名及个人的平均分
    (2).各课程的平均分  
    */    
    (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)pingjun.cpp中的代码#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));
    }
    
    (3)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;
    }
    运行结果:
    
    


  1. 知识点总结:    1.程序的多文件组织(放在同一个工程内),h 头文件:定义数据类型、声明自定义函数、定义宏等。  cpp 源文件1:用于实现头文件中声明的自定义函数。  

       2.学习心得:  每天进步一点,日积月累  


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值