![]() ![]() |
|
C++习题与解析(类和对象-09) | |
作者:佚名 文章来源:不详 点击数 更新时间:2008/4/18 14:40:48 文章录入:杜斌 责任编辑:杜斌 | |
|
|
解: 设计一个学生类Stud,除了包括no(学号)、name(姓名)和deg(成绩)数据成员外,有两个静态变量sum和num,分别存放总分和人数,另有两个普通成员函数setdata()和disp(),分别用于给数据成员赋值和输出数据成员的值,另有一个静态成员函数avg(),它用于计算平均分。在main()函数中定义了一个对象数组用于存储输入的学生数据。 本题程序如下: #include<stdio.h> #include<string.h> #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<N;i++) { printf("输入学号 姓名 成绩:"); scanf("%d%s%d",&n,na,&d); st[i].setdata(n,na,d); } printf("输出数据\n"); printf(" 学号 姓名 成绩\n"); for(i=0;i<N;i++) st[i].disp(); printf(" 平均分=%g\n\n",Stud::avg()); } 本程序的执行结果如下: 输入学号 姓名 成绩: 1 stud1 89 输入学号 姓名 成绩: 2 stud2 78 输入学号 姓名 成绩: 3 stud 84 输出数据 学号 姓名 成绩 1 stud1 89 2 stud2 78 3 stud3 84 平均分=83
题20.编写一个程序,已有若干个学生数据,这些数据包括学号、姓名、语文成绩、数学成绩和英语成绩,求各门功课的平均分。要求设计不同的成员函数求各门课程的平均分,并使用成员函数指针调用它们。 解: 设计一个学生类student,包括no(学号)、name(姓名)、deg1(语文成绩)、deg2(数学成绩)、deg3(英语成绩)数据成员和三个静态数据成员sum1(累计语文总分)、sum2(累计数学部分)、sum3(累计英语总分);另外有一个构造函数和三个求平均分的成员函数和一个disp()成员函数。 本题程序如下: #include<stdio.h> #include<string.h> #define N 4 class student { int no; char name[10]; int deg1; // 语文成绩 int deg2; // 数学成绩 int deg3; // 英语成绩 static int sum1; // 语文总分 static int sum2; // 数学总分 static int sum3; // 英语总分 public: student(int n,char na[],int d1,int d2,int d3) { no=n; strcpy(name,na); deg1=d1;deg2=d2;deg3=d3; sum1+=deg1;sum2+=deg2;sum3+=deg3; } double avg1(){return (sum1*1.0)/N;} double avg2(){return (sum2*1.0)/N;} double avg3(){return (sum3*1.0)/N;} void disp() { printf(" %4d%10s%6d%6d%6d\n",no,name,deg1,deg2,deg3); } }; int student::sum1=0; int student::sum2=0; int student::sum3=0; void main() { double (student::*fp)(); // 定义成员函数指针 student s1(1,"Li",67,89,90); student s2(2,"Ma",67,89,90); student s3(3,"Zheng",67,89,90); student s4(4,"Chen",67,89,90); printf("输出结果\n"); s1.disp(); s2.disp(); s3.disp(); s4.disp(); fp=student::avg1; printf(" 语文平均分:%g\n",(s1.*fp)()); fp=student::avg2; printf(" 数学平均分:%g\n",(s1.*fp)()); fp=student::avg3; printf(" 英语平均分:%g\n",(s1.*fp)()); } 本程序的执行结果如下: 输出结果 1 Li 67 89 90 2 M 89 89 90 3 Zheng 67 89 90 4 Chen 67 89 90 语文平均分:67 数学平均分:89 英语平均分:90
题21.编写一个程序,输入N个学生数据,包括学号、姓名、成绩,要求只输出成绩在80~89分的学生数据。 解: 设计一个学生类Stud,包括no(学号)、name(姓名)和deg(成绩)数据成员,另有两个普通成员函数setdata()和disp(),前者用于设置对象数据,后者用于只输出成绩在80~89分数段的学生数据。在main()函数中定义了一个对象数组,用于存储输入的学生数据。 本题程序如下: #include<stdio.h> #include<string.h> #define N 3 class Stud { int no; char name[10]; int deg; public: void setdata(int n,char na[],int d) { no=n; deg=d; strcpy(name,na); } void disp() { if(deg>=80&°<=89) printf(" %-5d%-8s%3d\n",no,name,deg); } }; void main() { Stud st[N]; int i,n,d; char na[10]; for(i=0;i<N;i++) { printf("输入学号 姓名 成绩:"); scanf("%d%s%d",&n,na,&d); st[i].setdata(n,na,d); } printf("输出数据\n"); printf(" 学号 姓名 成绩\n"); for(i=0;i<N;i++) st[i].disp(); } 本程序执行结果如下: 输入学号 姓名 成绩: 1 stud1 78 输入学号 姓名 成绩: 2 stud2 85 输入学号 姓名 成绩: 3 stud3 89 输出数据 学号 姓名 成绩 2 stud2 85 3 stud3 89 |
|
![]() ![]() |