程序代码:
#define num 100
#include<iostream>
#include<string>
using namespace std;
int main()
{
int x;float h;
cout<<"请输入学生的数量,范围不要超过100!"<<endl;
cin>>x;
while(x<0||x>99)
{
cout<<"输入学生的范围不要超过100!"<<endl;
cin>>x;
}
int a[num], c=0,i;
for (i=0;i<x;i++)
{
cout<<"请输入第"<<i+1<<"名学生的成绩\t";
cin>>a[i];
c=c+a[i];
}
h=(float)c/x;
cout<<x<<"名学生的平均成绩为\t"<<h<<endl;
return 0;
}
}
这是很久前我写的,用的是数组,缺点也像11楼说的那样浪费空间和限制,不过链表的诞生就是为 解决数组浪费空间而创建的
接下来演示用链表制作
程序代码:
#include <iostream>
#include<string>
using namespace std;
class labe //链表类
{
private:
labe *next;
double date;
public:
labe():date(0),next(0){};
labe(double a):date(a),next(0){};
~labe(){delete next;}
void setnext(labe *a){ next=a;}
labe* getnext()const{return next;}
void print2(){cout<<date<<endl;}
double getDate()const{return date;}
};
class list //操作类
{
private:
labe *head;
int total;
public:
list():head(0),total(0){}
~list(){delete head;}
void run();
void print();
void math();
//void gettotal(){cout<<total<<endl;}
};
void list::math()
{
if(!head)
{
cout<<"程序结束"<<endl;
return;
}
int i=0;
double Total=0;
labe *head2=head;
while(head2)
{
Total=Total+head2->getDate();
head2=head2->getnext();
i++;
}
cout<<"总和为"<<Total<<" 平均数为:"<<(Total/total)<<endl;
}
void list::print() //为了具体说明链表拥有和数组一样的功能,特意输出了所有输入的数字;和数组的区别是它的优越性可以不受束缚"无限"创建;不用去管他是怎么做的,只管创建就行了.
{
if(!head)
{
cout<<"程序结束"<<endl;
return;
}
labe *head2;
int i=0;
head2=head;
while(head2)
{
i++;
cout<<"第"<<i<<"个数为:";
head2->print2();
head2=head2->getnext();
}
}
void list::run()
{
labe *sen2;
labe *sen;
double a;
cout<<"请输入一个数字,当不是数字时结束"<<endl;
cin>>a;
if(a<0||a>9)
{
return;
}
head=new labe(a);
total++;
sen=head;
string sd;
while(1)
{
cout<<"请输入一个数字;当不是数字时结束"<<endl;
cin>>sd;
if(sd[0]<'0'||sd[0]>'9')
{
return;
}
a=atof(sd.c_str());
sen2=new labe(a);
total++;
sen->setnext(sen2);
sen=sen->getnext();
}
}
void main()
{
list a;
a.run();
a.print();
a.math();
}
用链表的优越性大大的加强,不像数组产生多余空间无法定义元素数目的问题,但缺点则是写起来比较复杂(麻烦),由于我还没有看到摸版STL,对11楼的程序表示看不懂
如果想又简单又方便就用11楼的程序(我个人认为大多初学者都不会用STL);
[
本帖最后由 xg5699 于 2011-8-23 22:52 编辑 ]