飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 2535|回复: 4

第一次做的一道题目,觉不错,希望各位前辈指点一下。

[复制链接]

该用户从未签到

发表于 2006-10-26 13:05:18 | 显示全部楼层 |阅读模式
  1. /*    题目:有6个学生,每个学生有3门功课的成绩。要求输入(学号,姓名,3门功课的成绩),
  2.             并计算出平均成绩,所有数据按照平均成绩排序后存放在磁盘文件“学生.txt"中.
  3. */

  4. #include "stdafx.h"
  5. #include "stdio.h"
  6. #include "string.h"
  7. #include "stdlib.h"
  8. #define  NUM  6
  9. #define  FORMAT  "%-8s%-8s%-8.2f%-8.2f%-8.2f%.2f\n"

  10. int _tmain(int argc, _TCHAR* argv[])
  11. {
  12.    
  13.     struct student                                                   /*定义一个结构体类型*/
  14.     {
  15.         char number[5];
  16.         char name[20];
  17.         float score[3];
  18.         float average;
  19.     };

  20.     struct student stud[6];
  21.     int i;

  22.     for(i=0;i<NUM;i++)                                          
  23.     {
  24.         printf("\n请输入第%d位学生的学号、姓名及各门功课的成绩!\n",i+1);
  25.         Loop1:
  26.         printf("学号:");
  27.         scanf("%s",stud[i].number);                                     /*输入学号,并判断学号必须为0~9的数字组成的四位的字符串*/
  28.         if(strcmp("0000",stud[i].number)>0||strcmp("9999",stud[i].number)<0||strlen(stud[i].number)!=4)
  29.         {
  30.             printf("您输入的学号有误,请重新输入!\n");
  31.             goto Loop1;
  32.         }
  33.         
  34.         printf("姓名:");                                             /*输入姓名*/
  35.         scanf("%s",stud[i].name);

  36.         Loop2:
  37.         printf("语文:");
  38.         scanf("%f",&stud[i].score[0]);                                 /*输入语文成绩*/
  39.         if(stud[i].score[0]<0||stud[i].score[0]>100)
  40.         {
  41.             printf("您输入的成绩有误,请重新输入!\n");
  42.             goto Loop2;
  43.         }
  44.         Loop3:
  45.         printf("数学:");                                             /*输入数学成绩*/
  46.         scanf("%f",&stud[i].score[1]);
  47.         if(stud[i].score[1]<0||stud[i].score[1]>100)
  48.         {
  49.             printf("您输入的成绩有误,请重新输入!\n");
  50.             goto Loop3;
  51.         }
  52.         Loop4:
  53.         printf("英语:");                                             /*输入英语成绩*/
  54.         scanf("%f",&stud[i].score[2]);
  55.         if(stud[i].score[2]<0||stud[i].score[2]>100)
  56.         {
  57.             printf("您输入的成绩有误,请重新输入!\n");
  58.             goto Loop4;
  59.         }
  60.         stud[i].average=(stud[i].score[0]+stud[i].score[1]+stud[i].score[2])/3.0; /*求出3门功课的平均成绩*/
  61.         printf("平均成绩:%.2f\n",stud[i].average);
  62.     }

  63.     char temp1[5];
  64.     char temp[20];
  65.     float temp2;
  66.     FILE *fp;
  67.    
  68.     for(i=0;i<NUM-1;i++)                                             /*根据平均成绩,按照冒泡法进行排序*/
  69.         for(int j=0;j<NUM-1-i;j++)
  70.         {
  71.             if(stud[j].average>stud[j+1].average)
  72.             {
  73.                 strcpy(temp1,stud[j].number);
  74.                 strcpy(stud[j].number,stud[j+1].number);
  75.                 strcpy(stud[j+1].number,temp1);

  76.                 strcpy(temp,stud[j].name);
  77.                 strcpy(stud[j].name,stud[j+1].name);
  78.                 strcpy(stud[j+1].name,temp);

  79.                 temp2=stud[j].score[0];
  80.                 stud[j].score[0]=stud[j+1].score[0];
  81.                 stud[j+1].score[0]=temp2;

  82.                 temp2=stud[j].score[1];
  83.                 stud[j].score[1]=stud[j+1].score[1];
  84.                 stud[j+1].score[1]=temp2;

  85.                 temp2=stud[j].score[2];
  86.                 stud[j].score[2]=stud[j+1].score[2];
  87.                 stud[j+1].score[2]=temp2;

  88.                 temp2=stud[j].average;
  89.                 stud[j].average=stud[j+1].average;
  90.                 stud[j+1].average=temp2;
  91.             }
  92.         }

  93.     if((fp=fopen("F:\\学生.txt","w"))==NULL)                                 /*打开一个"学生.txt"的文本文件*/
  94.         {
  95.             printf("can not open this file!\n");
  96.             exit(0);
  97.         }

  98.     fprintf(fp,"按平均成绩排序后的学生成绩管理文件:\n");
  99.     fprintf(fp,"\n学号    姓名    语文    数学    英语    平均成绩\n");     /*从“学生.txt”中输出所有数据*/
  100.     for(i=0;i<NUM;i++)
  101.         fprintf(fp,FORMAT,stud[i].number,stud[i].name,stud[i].score[0],stud[i].score[1],stud[i].score[2],stud[i].average);

  102.     fclose(fp);                                                             /*关闭"学生.txt"的文本文件*/
  103.     return 0;
  104. }
复制代码

评分

参与人数 1威望 +20 飘云币 +20 +20 收起 理由
老顽童 + 20 + 20 + 20 原创内容

查看全部评分

PYG19周年生日快乐!

该用户从未签到

发表于 2006-10-28 09:50:07 | 显示全部楼层
怎么没人来啊?
PYG19周年生日快乐!

该用户从未签到

发表于 2006-11-11 10:13:42 | 显示全部楼层
嗯,看上去写得挺不错的!
PYG19周年生日快乐!

该用户从未签到

发表于 2006-11-27 09:30:36 | 显示全部楼层
好好看看,呵呵
PYG19周年生日快乐!

该用户从未签到

发表于 2006-12-1 17:21:24 | 显示全部楼层
你的程序写的有些复杂,没有用到指针、函数iostream.

而且运行不出来!

下面是我写的程序:


  1. #include<iostream.h>
  2. #include<fstream.h>
  3. #include<stdlib.h>
  4. struct xinxi
  5. {
  6.         char number[10]; //学号
  7.         char name[20];  //姓名
  8.         int score[3];  //成绩分数
  9.         int average;  //成绩平均分
  10. };
  11. xinxi s[6];
  12. xinxi *paixu(xinxi *p,int n)
  13. {
  14.         xinxi temp;
  15.         int i,j;
  16.     for(i=0;i<n;i++)
  17.         (p+i)->average=((p+i)->score[0]+(p+i)->score[1]+(p+i)->score[2])/3;
  18.         for(i=0;i<n;i++)
  19.                 for(j=i;j<n;j++)
  20.                         if((p+i)->average<(p+j)->average) //按平均分从高向低排序
  21.                         {
  22.                                 temp=*(p+i);
  23.                                 *(p+i)=*(p+j);
  24.                 *(p+j)=temp;
  25.                         }
  26.         return p;
  27. }
  28. void main()
  29. {
  30.         xinxi s[6],*p;
  31.         int n=6;
  32.         fstream sudami;
  33.         for(int i=0;i<n;i++)
  34. {
  35.   cout<<"请输入第"<<i+1<<"个学生信息:"<<endl;
  36.   cout<<"学号:"<<endl;
  37.   cin>>s[i].number;
  38.   cout<<"姓名:"<<endl;
  39.   cin>>s[i].name;
  40.   cout<<"3门课的成绩,依次数学、英语、语文:"<<endl;
  41.   cin>>s[i].score[0];
  42.   cin>>s[i].score[1];
  43.   cin>>s[i].score[2];
  44. }
  45.         p=s;
  46.         paixu(p,n);
  47. sudami.open("d:\\学生.txt",ios::app|ios::in);
  48. if(!sudami)
  49. {
  50.   cout<<"打开文件失败!"<<endl;
  51.   abort();
  52. }
  53. sudami.seekp(0);
  54. for(i=0;i<n;i++)
  55. {
  56.   sudami<<"学号:"<<(p+i)->number<<endl;
  57.   sudami<<"姓名:"<<(p+i)->name<<endl;
  58.   sudami<<"数学成绩:"<<(p+i)->score[0]<<endl;
  59.   sudami<<"英语成绩:"<<(p+i)->score[1]<<endl;
  60.   sudami<<"语文成绩:"<<(p+i)->score[2]<<endl;
  61.   sudami<<"平均成绩:"<<(p+i)->average<<endl;
  62.   sudami<<endl;
  63. }
  64. sudami.close();
  65. }

复制代码







做的过程的部分截图:




[ 本帖最后由 sudami 于 2007-4-21 09:25 编辑 ]
PYG19周年生日快乐!
您需要登录后才可以回帖 登录 | 加入我们

本版积分规则

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