질문 제목 : 배열 구조체를 이용한 성적출력
질문 요약 : 과목별로 성적을 출력하여 내림차순을 시키는 방법
질문 내용 : 아래함수 부분에서 down_stand함수에 내림차순을 시키는겁니다.
학교에서 자면서 열심히 연구했는데 도저히 안떠오르네요.ㅠㅠ
도와주세요...ㅠㅠ힌트라도..제발~ㅠㅠ
Code Example:
/* Written by rinehart@naver.com */
/* 2009. 2. 10. */
/* Tested on Windows, Cygwin, gcc */
/* This code example is very very ugly*/
/* It's originaly written by a questioner */
/* My code is the function : down_stand*/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
struct grade
{
char sub[5];
char name1[10];
char name2[10];
char name3[10];
char name4[10];
};
typedef struct grade grade;
void grade_prt(grade score[]); //성적표 출력함수
void grade_score(grade score[], char subject[]); //과목별 개인 점수
void down_stand(grade score[], char subject[], int i);
/****************************************************************/
int main()
{
int i=0;
char subject[5];
grade score[5]= {{" ","김태희", "한가인", "손예진", "이지아"},
{"국어", "80", "100", "10", "95"},
{"영어", "100", "100", "15", "85"},
{"수학", "90", "85", "75", "35"},
{"과학", "75", "90", "65", "25"}};
grade_prt(score); //성적표 출력함수
while(1) //종료를 위함
{
printf("\n***************************************\n\n");
printf("**종료하고싶으시면 x 를 입력하세요.**\n\n");
printf("<과목을 입력해주세요.>\n");
memset(subject, 0x00, sizeof(char)*5);
gets(subject);
if(subject[0]=='x')
break;
printf("\n--> (%s) 과목의 개인별 점수는?\n", subject);
grade_score(score, subject); //과목별 개인 점수
}
return 0;
}
/****************************************************************/
void grade_prt(grade score[]) //성적표 출력함수
{
int i=0;
for(; i<=4; i++)
{
printf("%5s | %6s | %6s | %6s | %6s\n",
score[i].sub,
score[i].name1,
score[i].name2,
score[i].name3,
score[i].name4);
}
}
/****************************************************************/
void grade_score(grade score[], char subject[]) //과목별 개인 점수
{
int i, j, k=0;
for(i=0; i<=5; i++) //score[i].sub선택
{
for(j=4; j>=0; j-- ) //과목 비트비교
{
if(score[i].sub[j] == subject[j])
k++;
}
if(k==5)
{
down_stand(score, subject, i); //내림차순 정렬
}
k=0;
}
}
/****************************************************************/
void down_stand(grade score[], char subject[], int m) //내림차순 정렬
{
int i, j;
typedef struct new_grade
{
char name[10];
int score;
}new_grade;
new_grade New_Grade[4] = { {"김태희", 0},
{"한가인", 0},
{"손예진", 0},
{"이지아", 0}
};
struct new_grade s_temp; //for sorting
//initialize new_grade array.
New_Grade[0].score = atoi(score[m].name1);
New_Grade[1].score = atoi(score[m].name2);
New_Grade[2].score = atoi(score[m].name3);
New_Grade[3].score = atoi(score[m].name4);
// Bubble Sorting
for (i = 3; i > 0; i--)
{
for (j= i; j > 0; j--)
{
if (New_Grade[j].score > New_Grade[j-1].score) //Bigger one switch to foward
{
memset(&s_temp, 0x00, sizeof(new_grade));
memcpy(&s_temp, &New_Grade[j-1], sizeof(new_grade));
memcpy(&New_Grade[j-1], &New_Grade[j], sizeof(new_grade));
memcpy(&New_Grade[j], &s_temp, sizeof(new_grade));
}
}
}
// Print out
printf("%5s | %6s | %6s | %6s | %6s\n", score[0].sub,
New_Grade[0].name, New_Grade[1].name, New_Grade[2].name, New_Grade[3].name);
printf("%5s | %6d | %6d | %6d | %6d\n", score[m].sub,
New_Grade[0].score, New_Grade[1].score, New_Grade[2].score, New_Grade[3].score);
}
'ECIM list (Help!)' 카테고리의 다른 글
C언어 재귀함수로 삼각형 그리기 - 재귀함수 연습 (0) | 2015.08.30 |
---|---|
피보나치 수열 비재귀방법으로 풀기 - Fibonacci number without recursion (0) | 2015.08.30 |
Find next biggest binary number : 다음으로 큰 2진수 찾기 (3) | 2009.02.10 |
배열을 활용한 2의 100승 구하기 Calculate using array. (2 power 100, 2^100) (2) | 2009.02.07 |
씨언어에서 (c++아님) x,y의 좌표가 주어졌을때 각도 구하는 법 (0) | 2008.08.10 |