飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 2474|回复: 2

编程马拉松(10)

[复制链接]

该用户从未签到

发表于 2007-8-22 08:26:26 | 显示全部楼层 |阅读模式
引自第八阁论坛:http://bbs.chinadbg.cn/
输入5个学生的成绩,计算出总分和平均分,按总分进行排序,然后打印输出。

要求用,结构体指针。有数学,语文,英语,物理,化学。5个科目。
不太清楚的可以到http://www.pconline.com.cn/pcedu/empolder/gj/c/0503/567930.html这里看看
freesoft:C++

  1. #include <iOStream>
  2. using namespace std;
  3. struct STU
  4. {
  5. int id;
  6. char name[20];
  7. int yuwen;
  8. int shuxue;
  9. int yingyu;
  10. int wule;
  11. int huaxue;
  12. float pingjunf;
  13. float zongfen;
  14. };
  15. void setdata(STU *s);
  16. void show(STU *s);
  17. void sort(STU *s);
  18. void jisuan(STU *s);
  19. void main()
  20. {
  21. STU stu[5];//声明一个结构体数组并依次调用函数进行赋值,计算,排序,显示。
  22. setdata(stu);
  23. jisuan(stu);
  24. sort(stu);
  25. show(stu);
  26. }
  27. void show(STU *s)//此函数用于显示信息
  28. {
  29. int i;
  30. cout<<"学号  姓名  语文  数学  英语  物理  化学  平均分      总分\n";
  31. for(i=0;i<5;i++)
  32. {
  33. cout
  34. <<s[i].id<<"  "
  35. <<s[i].name<<"  "
  36. <<s[i].yuwen<<"  "
  37. <<s[i].shuxue<<"  "
  38. <<s[i].yingyu<<"  "
  39. <<s[i].wule<<"  "
  40. <<s[i].huaxue<<"  "
  41. <<s[i].zongfen<<"  "
  42. <<s[i].pingjunf;

  43. }
  44. }
  45. void jisuan(STU *s)//此函数用于计算总分和平均分
  46. {
  47. int i;
  48. for(i=0;i<5;i++)
  49. {
  50. s[i].zongfen=(float)(s[i].yuwen+s[i].shuxue+s[i].yingyu+s[i].wule+s[i].huaxue);
  51. s[i].pingjunf=(float)(s[i].zongfen/5.0);
  52. }
  53. }
  54. void sort(STU *s)//此函数用于按总分进行排序
  55. {
  56. int i,j;
  57. STU temp;
  58. for(i=0;i<5;i++)
  59. {
  60. for(j=i+1;j<5;j++)
  61. {
  62. if(s[i].zongfen<s[j].zongfen)
  63. {
  64. temp=s[i];
  65. s[i]=s[j];
  66. s[j]=temp;
  67. }
  68. }
  69. }
  70. }
  71. void setdata(STU *s)//此函数用于添加数据
  72. {
  73. int i;
  74. cout<<"请输入5位学生的资料\n";
  75. for(i=0;i<5;i++)
  76. {
  77.         cout<<"请输入第"<<i+1<<"学生的资料\n";
  78.         cout<<"学号:";
  79.         cin>>s[i].id;
  80.         cout<<"姓名:";
  81.         cin>>s[i].name;
  82.         cout<<"语文:";
  83.         cin>>s[i].yuwen;
  84.         cout<<"数学:";
  85.         cin>>s[i].shuxue;
  86.         cout<<"英语:";
  87.         cin>>s[i].yingyu;
  88.         cout<<"物理:";
  89.         cin>>s[i].wule;
  90.         cout<<"化学:";
  91.         cin>>s[i].huaxue;
  92. }
  93. }
复制代码

天圆地方:Delphi

  1. var
  2.   Form1: TForm1;

  3. implementation

  4. {$R *.dfm}
  5. //*-----------user define-------*//
  6. Type
  7.   TMYRecord=class(Tobject)
  8.       Name:array[0..5] of ShortString;
  9.       ShuXue:array[0..5] of real;
  10.       YuWen:array[0..5] of real;
  11.       YingYu:array[0..5] of real;
  12.       WuLi:array[0..5] of real;
  13.       HuaXue:array[0..5] of real;
  14.       ZongFen:array[0..5] of real;
  15.       PinJunFen:array[0..5] of real;
  16.   private
  17.     { Private declarations }
  18.       function AverNum:boolean;
  19.     public
  20.     { Public declarations }
  21.       Function SumNum:boolean;
  22.       Function SortSum:boolean;

  23.   end;
  24. var
  25. MyRecord:TMyRecord;

  26. Function TMyRecord.AverNum:boolean;
  27. var
  28. i:integer;
  29. begin
  30.   For i:=0 to 4 do
  31.   begin
  32.     MyRecord.PinJunFen[i]:=(MyRecord.ShuXue[i]+MyRecord.YuWen[i]+MyRecord.YingYu[i]+MyRecord.WuLi[i]+MyRecord.HuaXue[i])/5;
  33.   end;
  34. Result:=True;
  35. end;

  36. Function TMyRecord.SumNum:boolean;
  37. var
  38. i:integer;
  39. begin
  40.   For i:=0 to 4 do
  41.   begin
  42.     MyRecord.ZongFen[i]:=MyRecord.ShuXue[i]+MyRecord.YuWen[i]+MyRecord.YingYu[i]+MyRecord.WuLi[i]+MyRecord.HuaXue[i];
  43.   end;
  44. Result:=True;
  45. end;

  46. Function TMyRecord.SortSum:boolean;
  47. var
  48. i,j:Integer;
  49. begin
  50.   For i:=0 to 4 do
  51.   begin
  52.     For j:=i+1 to 4 do
  53.     begin
  54.       if MyRecord.ZongFen[i]<MyRecord.ZongFen[j] then
  55.         begin
  56.           //change number
  57.           MyRecord.ZongFen[5]:=MyRecord.ZongFen[i];
  58.           MyRecord.ZongFen[i]:=MyRecord.ZongFen[j];
  59.           MyRecord.ZongFen[j]:=MyRecord.ZongFen[5];

  60.           MyRecord.ShuXue[5]:=MyRecord.ShuXue[i];
  61.           MyRecord.ShuXue[i]:=MyRecord.ShuXue[j];
  62.           MyRecord.ShuXue[j]:=MyRecord.ShuXue[5];

  63.           MyRecord.YuWen[5]:=MyRecord.YuWen[i];
  64.           MyRecord.YuWen[i]:=MyRecord.YuWen[j];
  65.           MyRecord.YuWen[j]:=MyRecord.YuWen[5];

  66.           MyRecord.YingYu[5]:=MyRecord.YingYu[i];
  67.           MyRecord.YingYu[i]:=MyRecord.YingYu[j];
  68.           MyRecord.YingYu[j]:=MyRecord.YingYu[5];

  69.           MyRecord.WuLi[5]:=MyRecord.WuLi[i];
  70.           MyRecord.WuLi[i]:=MyRecord.WuLi[j];
  71.           MyRecord.WuLi[j]:=MyRecord.WuLi[5];

  72.           MyRecord.HuaXue[5]:=MyRecord.HuaXue[i];
  73.           MyRecord.HuaXue[i]:=MyRecord.HuaXue[j];
  74.           MyRecord.HuaXue[j]:=MyRecord.HuaXue[5];

  75.           MyRecord.PinJunFen[5]:=MyRecord.PinJunFen[i];
  76.           MyRecord.PinJunFen[i]:=MyRecord.PinJunFen[j];
  77.           MyRecord.PinJunFen[j]:=MyRecord.PinJunFen[5];

  78.           MyRecord.Name[5]:=MyRecord.Name[i];
  79.           MyRecord.Name[i]:=MyRecord.Name[j];
  80.           MyRecord.Name[j]:=MyRecord.Name[5];
  81.         end;
  82.     end;
  83.   end;
  84. Result:=True;
  85. end;

  86. procedure TForm1.Button1Click(Sender: TObject);
  87. var
  88. i:integer;
  89. begin
  90. MyRecord:=TMyRecord.Create;
  91. For i:=0 to 4 do
  92. begin
  93.   MyRecord.Name[i]:=InputBox('输入','姓名:',' 张'+IntToStr(i+1));
  94.   MyRecord.ShuXue[i]:=StrToFloat(InputBox('输入成绩','数学',FloatToStr(0.3+Random(100))));
  95.   MyRecord.YuWen[i]:=StrToFloat(InputBox('输入成绩','语文',FloatToStr(0.5+Random(100))));
  96.   MyRecord.YingYu[i]:=StrToFloat(InputBox('输入成绩','英语',FloatToStr(0.6+Random(100))));
  97.   MyRecord.WuLi[i]:=StrToFloat(InputBox('输入成绩','物理',FloatToStr(0.8+Random(100))));
  98.   MyRecord.HuaXue[i]:=StrToFloat(InputBox('输入成绩','化学',FloatToStr(0.9+Random(100))));
  99. end;
  100. MyRecord.AverNum;
  101. MyRecord.SumNum;
  102. MyRecord.SortSum;
  103. For i:=0 to 4 do
  104. begin
  105.   ShowMessage('总分第'+IntToStr(i+1)+'  名:'+'   姓名:'+MyRecord.Name[i]+'数学:'+FloatToStr(MyRecord.ShuXue[i])+' 语文:'
  106.                +FloatToStr(MyRecord.YuWen[i])+' 英语:'+FloatToStr(MyRecord.YingYu[i])
  107.                +' 物理:'+FloatToStr(MyRecord.WuLi[i])+' 化学:'+FloatToStr(MyRecord.HuaXue[i])
  108.                +' 总分:'+FloatToStr(MyRecord.ZongFen[i]));
  109. end;
  110. MyRecord.Free;
  111. end;
复制代码
PYG19周年生日快乐!

该用户从未签到

发表于 2007-8-22 18:10:28 | 显示全部楼层
虽说程序里的缩成不是必需的,但我觉有适当缩成的代码看起来省心很多..
PYG19周年生日快乐!

该用户从未签到

 楼主| 发表于 2007-8-23 07:49:26 | 显示全部楼层
下次尽量写清一点。。哈
PYG19周年生日快乐!
您需要登录后才可以回帖 登录 | 加入我们

本版积分规则

快速回复 返回顶部 返回列表