freesoft 发表于 2007-8-22 08:26:26

编程马拉松(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;

Gue 发表于 2007-8-22 18:10:28

虽说程序里的缩成不是必需的,但我觉有适当缩成的代码看起来省心很多..

freesoft 发表于 2007-8-23 07:49:26

下次尽量写清一点。。哈
页: [1]
查看完整版本: 编程马拉松(10)