여기에 석차만 더 하면 되는데 ㅠㅜ도와주세요..ㅠㅜ
얀새
도와주세요 ㅠㅜ
여기에 이름별로 석차가 출력되게끔 해주세요 .. ㅠㅜ 랭크문이나 내림차순이나 .. ;; 잘 모르겟어요 ㅠㅜ
#include stdio.h
#define row 10
#define namenum 8
int main()
{
FILE *ifp, *ofp;
struct Student
{ //테이블 이름:Student
char name[namenum];
int kor, mat, eng, c, sum, max, min;
float avg;
};
struct Student st[row]; //행 만큼 또 만들어라
int i, j, subsum[row]={0,}, submax[4]={0,}, submin[4]={0,};
float subavg[row]={0.0,};
ifp = fopen(200704127_박선미.dat,r); //file open , r = read
ofp = fopen(200704127_박선미.txt,w); //file open
printf(성적결과입니다.\n);
printf(\n);
for(i=0; i row; i++)
{
fscanf(ifp,%s,st[i].name); //file scanf , ifp에서 자료를 읽어옴
fscanf(ifp,%d %d %d %d,&st[i].kor, &st[i].mat, &st[i].eng, &st[i].c); //file scanf , ifp에서 자료를 읽어옴
st[i].sum=st[i].kor+st[i].mat+st[i].eng+st[i].c;//과목들을 전부 더해서 합계를 만듭니다.
st[i].avg=(float)st[i].sum/row;//합계를 과목수로 나누어서 평균을 만듭니다.
st[i].max=st[i].min=st[i].kor;//과목중에 젤 높은 점수와 젤 낮은 점수를 찾아냅니다.
if(st[i].mat st[i].max)st[i].max=st[i].mat;
if(st[i].mat st[i].min)st[i].min=st[i].mat;
if(st[i].eng st[i].max)st[i].max=st[i].eng;
if(st[i].eng st[i].min)st[i].min=st[i].eng;
if(st[i].c st[i].max)st[i].max=st[i].c;
if(st[i].c st[i].min)st[i].min=st[i].c;
subsum[0]+=st[i].kor;//과목별로 합계를 만듭니다.
subsum[1]+=st[i].mat;
subsum[2]+=st[i].eng;
subsum[3]+=st[i].c;
}
for(i=0;i row;i++)//과목별로 합계를 사람수 만큼 나누어서 과목 평균을 만듭니다.
subavg[i]=(float)subsum[i]/row;
//과목 마다 제일 높은 점수와 제일 낮은 점수를 찾습니다.
submax[0]=submin[0]=st[0].kor;// 첫번째 과목들로 초기화 합니다.
submax[1]=submin[1]=st[0].mat;
submax[2]=submin[2]=st[0].eng;
submax[3]=submin[3]=st[0].c;
for(i=1; i row; i++)
& {
if(st[i].kor submax[0])submax[0]=st[i].kor;
if(st[i].kor submin[0])submin[0]=st[i].kor;
if(st[i].mat submax[1])submax[1]=st[i].mat;
if(st[i].mat submin[1])submin[1]=st[i].mat;
if(st[i].eng submax[2])submax[2]=st[i].eng;
if(st[i].eng submin[2])submin[2]=st[i].eng;
if(st[i].c submax[3])submax[3]=st[i].c;
if(st[i].c submin[3])submin[3]=st[i].c;
}
//결과 출력
printf(이름 | 국어 | 산수 | 영어 | C++ || 합계 | 평균 | 최고 | 최저\n);
printf(===============================================================================\n);
for(i=0; i row; i++)
{
printf(%s\t%d\t%d\t%d\t%d\t%d\t%.2f\t%d\t%d\n,
st[i].name, st[i].kor, st[i].mat, st[i].eng, st[i].c,
st[i].sum,st[i].avg,st[i].max,st[i].min);
}
printf(===============================================================================\n);
printf(평균:);//과목별 평균
for(j=0;j 4;j++)
printf(\t%.2f,subavg[j]);
printf(\n);
printf(최고:);//과목별 최고 점수
for(j=0;j 4;j++)
printf(\t%d,submax[j]);
printf(\n);
printf(최저:);//과목별 최저점수
for(j=0;j 4;j++)
printf(\t%d,submin[j]);
printf(\n);
fclose(ifp); //file close
fclose(ofp); //file close
getchar();
return 0;
}/* 메모장 내용 입력..
홍길동 10 90 70 50
홍길순 80 90 25 50
홍길똥 36 90 70 50
홍길길 80 90 88 50
홍길홍 80 90 77 50
홍길둥 65 90 70 50
홍길공 80 75 70 50
홍길찬 80 91 70 50
홍길숙 80 90 99 50
홍길자 80 90 32 50*/
-
미투리
모두모두 답변 감사드립니다..^^* 랭크를 이용하면 되는데.. 안배워서 몰랐거든요^^; 해결되었습니다^^
-
심플이
프로그램은 만드는것보다 알고리즘이 중요합니다.
손으로 그리면서 작성해 보세요.한 두번 해보면 금방 합니다.