编程马拉松(10)
引自第八阁论坛:http://bbs.chinadbg.cn/输入5个学生的成绩,计算出总分和平均分,按总分进行排序,然后打印输出。
要求用,结构体指针。有数学,语文,英语,物理,化学。5个科目。
不太清楚的可以到http://www.pconline.com.cn/pcedu/empolder/gj/c/0503/567930.html这里看看
freesoft:C++
#include <iostream>
using namespace std;
struct STU
{
int id;
char name;
int yuwen;
int shuxue;
int yingyu;
int wule;
int huaxue;
float pingjunf;
float zongfen;
};
void setdata(STU *s);
void show(STU *s);
void sort(STU *s);
void jisuan(STU *s);
void main()
{
STU stu;//声明一个结构体数组并依次调用函数进行赋值,计算,排序,显示。
setdata(stu);
jisuan(stu);
sort(stu);
show(stu);
}
void show(STU *s)//此函数用于显示信息
{
int i;
cout<<"学号姓名语文数学英语物理化学平均分 总分\n";
for(i=0;i<5;i++)
{
cout
<<s.id<<""
<<s.name<<""
<<s.yuwen<<""
<<s.shuxue<<""
<<s.yingyu<<""
<<s.wule<<""
<<s.huaxue<<""
<<s.zongfen<<""
<<s.pingjunf;
}
}
void jisuan(STU *s)//此函数用于计算总分和平均分
{
int i;
for(i=0;i<5;i++)
{
s.zongfen=(float)(s.yuwen+s.shuxue+s.yingyu+s.wule+s.huaxue);
s.pingjunf=(float)(s.zongfen/5.0);
}
}
void sort(STU *s)//此函数用于按总分进行排序
{
int i,j;
STU temp;
for(i=0;i<5;i++)
{
for(j=i+1;j<5;j++)
{
if(s.zongfen<s.zongfen)
{
temp=s;
s=s;
s=temp;
}
}
}
}
void setdata(STU *s)//此函数用于添加数据
{
int i;
cout<<"请输入5位学生的资料\n";
for(i=0;i<5;i++)
{
cout<<"请输入第"<<i+1<<"学生的资料\n";
cout<<"学号:";
cin>>s.id;
cout<<"姓名:";
cin>>s.name;
cout<<"语文:";
cin>>s.yuwen;
cout<<"数学:";
cin>>s.shuxue;
cout<<"英语:";
cin>>s.yingyu;
cout<<"物理:";
cin>>s.wule;
cout<<"化学:";
cin>>s.huaxue;
}
}
天圆地方:Delphi
var
Form1: TForm1;
implementation
{$R *.dfm}
//*-----------user define-------*//
Type
TMYRecord=class(Tobject)
Name:array of ShortString;
ShuXue:array of real;
YuWen:array of real;
YingYu:array of real;
WuLi:array of real;
HuaXue:array of real;
ZongFen:array of real;
PinJunFen:array of real;
private
{ Private declarations }
function AverNum:boolean;
public
{ Public declarations }
Function SumNum:boolean;
Function SortSum:boolean;
end;
var
MyRecord:TMyRecord;
Function TMyRecord.AverNum:boolean;
var
i:integer;
begin
For i:=0 to 4 do
begin
MyRecord.PinJunFen:=(MyRecord.ShuXue+MyRecord.YuWen+MyRecord.YingYu+MyRecord.WuLi+MyRecord.HuaXue)/5;
end;
Result:=True;
end;
Function TMyRecord.SumNum:boolean;
var
i:integer;
begin
For i:=0 to 4 do
begin
MyRecord.ZongFen:=MyRecord.ShuXue+MyRecord.YuWen+MyRecord.YingYu+MyRecord.WuLi+MyRecord.HuaXue;
end;
Result:=True;
end;
Function TMyRecord.SortSum:boolean;
var
i,j:Integer;
begin
For i:=0 to 4 do
begin
For j:=i+1 to 4 do
begin
if MyRecord.ZongFen<MyRecord.ZongFen then
begin
//change number
MyRecord.ZongFen:=MyRecord.ZongFen;
MyRecord.ZongFen:=MyRecord.ZongFen;
MyRecord.ZongFen:=MyRecord.ZongFen;
MyRecord.ShuXue:=MyRecord.ShuXue;
MyRecord.ShuXue:=MyRecord.ShuXue;
MyRecord.ShuXue:=MyRecord.ShuXue;
MyRecord.YuWen:=MyRecord.YuWen;
MyRecord.YuWen:=MyRecord.YuWen;
MyRecord.YuWen:=MyRecord.YuWen;
MyRecord.YingYu:=MyRecord.YingYu;
MyRecord.YingYu:=MyRecord.YingYu;
MyRecord.YingYu:=MyRecord.YingYu;
MyRecord.WuLi:=MyRecord.WuLi;
MyRecord.WuLi:=MyRecord.WuLi;
MyRecord.WuLi:=MyRecord.WuLi;
MyRecord.HuaXue:=MyRecord.HuaXue;
MyRecord.HuaXue:=MyRecord.HuaXue;
MyRecord.HuaXue:=MyRecord.HuaXue;
MyRecord.PinJunFen:=MyRecord.PinJunFen;
MyRecord.PinJunFen:=MyRecord.PinJunFen;
MyRecord.PinJunFen:=MyRecord.PinJunFen;
MyRecord.Name:=MyRecord.Name;
MyRecord.Name:=MyRecord.Name;
MyRecord.Name:=MyRecord.Name;
end;
end;
end;
Result:=True;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
i:integer;
begin
MyRecord:=TMyRecord.Create;
For i:=0 to 4 do
begin
MyRecord.Name:=InputBox('输入','姓名:',' 张'+IntToStr(i+1));
MyRecord.ShuXue:=StrToFloat(InputBox('输入成绩','数学',FloatToStr(0.3+Random(100))));
MyRecord.YuWen:=StrToFloat(InputBox('输入成绩','语文',FloatToStr(0.5+Random(100))));
MyRecord.YingYu:=StrToFloat(InputBox('输入成绩','英语',FloatToStr(0.6+Random(100))));
MyRecord.WuLi:=StrToFloat(InputBox('输入成绩','物理',FloatToStr(0.8+Random(100))));
MyRecord.HuaXue:=StrToFloat(InputBox('输入成绩','化学',FloatToStr(0.9+Random(100))));
end;
MyRecord.AverNum;
MyRecord.SumNum;
MyRecord.SortSum;
For i:=0 to 4 do
begin
ShowMessage('总分第'+IntToStr(i+1)+'名:'+' 姓名:'+MyRecord.Name+'数学:'+FloatToStr(MyRecord.ShuXue)+' 语文:'
+FloatToStr(MyRecord.YuWen)+' 英语:'+FloatToStr(MyRecord.YingYu)
+' 物理:'+FloatToStr(MyRecord.WuLi)+' 化学:'+FloatToStr(MyRecord.HuaXue)
+' 总分:'+FloatToStr(MyRecord.ZongFen));
end;
MyRecord.Free;
end;
虽说程序里的缩成不是必需的,但我觉有适当缩成的代码看起来省心很多.. 下次尽量写清一点。。哈
页:
[1]