第一次做的一道题目,觉不错,希望各位前辈指点一下。
/* 题目:有6个学生,每个学生有3门功课的成绩。要求输入(学号,姓名,3门功课的成绩),并计算出平均成绩,所有数据按照平均成绩排序后存放在磁盘文件“学生.txt"中.
*/
#include "stdafx.h"
#include "stdio.h"
#include "string.h"
#include "stdlib.h"
#defineNUM6
#defineFORMAT"%-8s%-8s%-8.2f%-8.2f%-8.2f%.2f\n"
int _tmain(int argc, _TCHAR* argv[])
{
struct student /*定义一个结构体类型*/
{
char number;
char name;
float score;
float average;
};
struct student stud;
int i;
for(i=0;i<NUM;i++)
{
printf("\n请输入第%d位学生的学号、姓名及各门功课的成绩!\n",i+1);
Loop1:
printf("学号:");
scanf("%s",stud.number); /*输入学号,并判断学号必须为0~9的数字组成的四位的字符串*/
if(strcmp("0000",stud.number)>0||strcmp("9999",stud.number)<0||strlen(stud.number)!=4)
{
printf("您输入的学号有误,请重新输入!\n");
goto Loop1;
}
printf("姓名:"); /*输入姓名*/
scanf("%s",stud.name);
Loop2:
printf("语文:");
scanf("%f",&stud.score); /*输入语文成绩*/
if(stud.score<0||stud.score>100)
{
printf("您输入的成绩有误,请重新输入!\n");
goto Loop2;
}
Loop3:
printf("数学:"); /*输入数学成绩*/
scanf("%f",&stud.score);
if(stud.score<0||stud.score>100)
{
printf("您输入的成绩有误,请重新输入!\n");
goto Loop3;
}
Loop4:
printf("英语:"); /*输入英语成绩*/
scanf("%f",&stud.score);
if(stud.score<0||stud.score>100)
{
printf("您输入的成绩有误,请重新输入!\n");
goto Loop4;
}
stud.average=(stud.score+stud.score+stud.score)/3.0; /*求出3门功课的平均成绩*/
printf("平均成绩:%.2f\n",stud.average);
}
char temp1;
char temp;
float temp2;
FILE *fp;
for(i=0;i<NUM-1;i++) /*根据平均成绩,按照冒泡法进行排序*/
for(int j=0;j<NUM-1-i;j++)
{
if(stud.average>stud.average)
{
strcpy(temp1,stud.number);
strcpy(stud.number,stud.number);
strcpy(stud.number,temp1);
strcpy(temp,stud.name);
strcpy(stud.name,stud.name);
strcpy(stud.name,temp);
temp2=stud.score;
stud.score=stud.score;
stud.score=temp2;
temp2=stud.score;
stud.score=stud.score;
stud.score=temp2;
temp2=stud.score;
stud.score=stud.score;
stud.score=temp2;
temp2=stud.average;
stud.average=stud.average;
stud.average=temp2;
}
}
if((fp=fopen("F:\\学生.txt","w"))==NULL) /*打开一个"学生.txt"的文本文件*/
{
printf("can not open this file!\n");
exit(0);
}
fprintf(fp,"按平均成绩排序后的学生成绩管理文件:\n");
fprintf(fp,"\n学号 姓名 语文 数学 英语 平均成绩\n"); /*从“学生.txt”中输出所有数据*/
for(i=0;i<NUM;i++)
fprintf(fp,FORMAT,stud.number,stud.name,stud.score,stud.score,stud.score,stud.average);
fclose(fp); /*关闭"学生.txt"的文本文件*/
return 0;
} 怎么没人来啊? 嗯,看上去写得挺不错的! 好好看看,呵呵 你的程序写的有些复杂,没有用到指针、函数iostream.
而且运行不出来!
下面是我写的程序:
#include<iostream.h>
#include<fstream.h>
#include<stdlib.h>
struct xinxi
{
char number; //学号
char name;//姓名
int score;//成绩分数
int average;//成绩平均分
};
xinxi s;
xinxi *paixu(xinxi *p,int n)
{
xinxi temp;
int i,j;
for(i=0;i<n;i++)
(p+i)->average=((p+i)->score+(p+i)->score+(p+i)->score)/3;
for(i=0;i<n;i++)
for(j=i;j<n;j++)
if((p+i)->average<(p+j)->average) //按平均分从高向低排序
{
temp=*(p+i);
*(p+i)=*(p+j);
*(p+j)=temp;
}
return p;
}
void main()
{
xinxi s,*p;
int n=6;
fstream sudami;
for(int i=0;i<n;i++)
{
cout<<"请输入第"<<i+1<<"个学生信息:"<<endl;
cout<<"学号:"<<endl;
cin>>s.number;
cout<<"姓名:"<<endl;
cin>>s.name;
cout<<"3门课的成绩,依次数学、英语、语文:"<<endl;
cin>>s.score;
cin>>s.score;
cin>>s.score;
}
p=s;
paixu(p,n);
sudami.open("d:\\学生.txt",ios::app|ios::in);
if(!sudami)
{
cout<<"打开文件失败!"<<endl;
abort();
}
sudami.seekp(0);
for(i=0;i<n;i++)
{
sudami<<"学号:"<<(p+i)->number<<endl;
sudami<<"姓名:"<<(p+i)->name<<endl;
sudami<<"数学成绩:"<<(p+i)->score<<endl;
sudami<<"英语成绩:"<<(p+i)->score<<endl;
sudami<<"语文成绩:"<<(p+i)->score<<endl;
sudami<<"平均成绩:"<<(p+i)->average<<endl;
sudami<<endl;
}
sudami.close();
}
做的过程的部分截图:
http://space.hackbase.com/attachments/2006/12/5488119_200612011705053.jpg
http://space.hackbase.com/attachments/2006/12/5488119_200612011705051.jpg
http://space.hackbase.com/attachments/2006/12/5488119_200612011705052.jpg
[ 本帖最后由 sudami 于 2007-4-21 09:25 编辑 ]
页:
[1]