C 习题和解析(类和对象-09)

2008-02-23 05:34:43来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折

题19.编写一个程式,输入N个学生数据,包括学号、姓名、成绩,需要输出这些学生数据并计算平均分。
解:
设计一个学生类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=\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(" Msmmm\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&&deg<=89)
printf(" %-5d%-8s=\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



标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇: C 习题和解析(类和对象-08)

下一篇: C 实例教学(类的应用-02)

热门词条
热门标签