C++習(xí)題與解析(類和對(duì)象-09)

字號(hào):

題19.編寫一個(gè)程序,輸入N個(gè)學(xué)生數(shù)據(jù),包括學(xué)號(hào)、姓名、成績(jī),要求輸出這些學(xué)生數(shù)據(jù)并計(jì)算平均分。
    解:
    設(shè)計(jì)一個(gè)學(xué)生類Stud,除了包括no(學(xué)號(hào))、name(姓名)和deg(成績(jī))數(shù)據(jù)成員外,有兩個(gè)靜態(tài)變量sum和num,分別存放總分和人數(shù),另有兩個(gè)普通成員函數(shù)setdata()和disp(),分別用于給數(shù)據(jù)成員賦值和輸出數(shù)據(jù)成員的值,另有一個(gè)靜態(tài)成員函數(shù)avg(),它用于計(jì)算平均分。在main()函數(shù)中定義了一個(gè)對(duì)象數(shù)組用于存儲(chǔ)輸入的學(xué)生數(shù)據(jù)。
    本題程序如下:
    #include
    #include
    #define N 3
    class Stud
    {
    int no;
    char name[10];
    int deg;
    static int num;
    static int sum;
    public:
    void setdata(int n,char na[],int d)
    {
    no=n; deg=d;
    strcpy(name,na);
    sum+=d;
    num++;
    }
    static double avg()
    {
    return sum/num;
    }
    void disp()
    {
    printf(" %-5d%-8s%3d\n",no,name,deg);
    }
    };
    int Stud::sum=0;
    int Stud::num=0;
    void main()
    {
    Stud st[N];
    int i,n,d;
    char na[10];
    for(i=0;i    {
    printf("輸入學(xué)號(hào) 姓名 成績(jī):");
    scanf("%d%s%d",&n,na,&d);
    st[i].setdata(n,na,d);
    }
    printf("輸出數(shù)據(jù)\n");
    printf(" 學(xué)號(hào) 姓名 成績(jī)\n");
    for(i=0;i    st[i].disp();
    printf(" 平均分=%g\n\n",Stud::avg());
    }
    本程序的執(zhí)行結(jié)果如下:
    輸入學(xué)號(hào) 姓名 成績(jī): 1 stud1 89
    輸入學(xué)號(hào) 姓名 成績(jī): 2 stud2 78
    輸入學(xué)號(hào) 姓名 成績(jī): 3 stud 84
    輸出數(shù)據(jù)
    學(xué)號(hào) 姓名 成績(jī)
    1 stud1 89
    2 stud2 78
    3 stud3 84
    平均分=83