Notice
Recent Posts
Recent Comments
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 | 31 |
Tags
- 프로그래밍
- 백준
- 빅데이터
- 자바독학
- 코딩
- 프로그래머스
- backend
- 사물인터넷
- frontend
- 코딩테스트
- 코스닥
- 모의 주식
- java정리
- C++
- Python
- 이웃한 칸
- 개발자
- 주가예측
- 개발
- 풀스택프레임워크
- 프로그램
- java
- Project
- 코테
- 자바
- 자바정리
- 개인프로젝트
- Reflex
- 코딩독학
- SNS
Archives
- Today
- Total
Creative Code
main.c(구조체 포인터,파일 입출력 사용 성적순 정렬) 본문
#include <stdio.h>
typedef struct student {
char name[21];
int kor;
int eng;
int mat;
int total;
double average;
int rank;
}Student;
int main(void)
{
FILE *fin, *fout;
fin = fopen("score.dat","r"); // 읽기용
fout = fopen("score.out","w"); //쓰기용
Student students[10];
int board[10];
for (int i = 0; i<10; i++){
fscanf(fin,"%20s %d %d %d",
students[i].name, &students[i].kor, &students[i].eng,&students[i].mat);
// name은 배열의 첫번째에 들어가므로 &을 쓰지 않아도 된다.
}
// total, average, rank
for (int i = 0; i<10; i++){
students[i].total = students[i].kor + students[i].eng +students[i].mat;
students[i].average = (double)students[i].total/3.0;
students[i].rank = 1;
}
int count = 0;
for (int i = 0; i<9; i++) {
for (int j = i+1; j<10; j++){
if (students[i].total > students[j].total){
students[j].rank ++;
} else if (students[i].total<students[j].total){
students[i].rank ++;
}
}
}
// selection sorting
Student *table[10];
for (int i = 0; i<10; i++){
table[i] = &students[i];
}
for (int i = 0; i<9; i++){
for (int j = i+1; j<10; j++){
if (table[i]->total < table[j]->total){
Student *tmp = table[i];
table[i] = table[j];
table[j] = tmp;
}
}
}
fprintf(fout,"---------------------------------------------------------------------\n");
fprintf(fout," name kor eng mat sum avg rnk\n");
fprintf(fout,"---------------------------------------------------------------------\n");
for (int i = 0; i<10; i++){
fprintf(fout,"%-20s %3d %3d %3d %3d %6.2f %2d\n",
//students[i].name,students[i].kor, students[i].eng,
//students[i].mat, students[i].total, students[i].average,
//students[i].rank);
table[i]->name,table[i]->kor,table[i]->eng,table[i]->mat,
table[i]->total,table[i]->average,table[i]->rank);
}
fclose(fin);
fclose(fout);
return 0;
}
'C Programming' 카테고리의 다른 글
atoi.c(문자열을 숫자로 출력) (0) | 2023.08.07 |
---|---|
main.c(문자열 라이브러리) (0) | 2023.08.07 |
score.dat(점수 데이터) (0) | 2023.08.07 |
name.c( 문자열 포인터로 입력) (0) | 2023.08.07 |
name.c(scanf로 문자열 입력받기) (0) | 2023.08.07 |