알고리즘

구조체를 사용하여아 하며 이를 활용한 성적 입력과 출력을 한다.

국어, 영어, 수학 이 3가지를 기본으로 하며 '총점, 평균, 등수' 등등을 비교하여 석차 순으로 출력한다.

출력 방법은 자유롭게 해도 상관 없다.

 

#include <stdio.h>

//구조체 선언
struct student{
 char name[20];
 int kor, eng, mat, sum, rank;
 double ave;
};
 
//함수 선언
int main(){
 int i, j, k;

struct문 사용. 총 두번의 선언이 있습니다.
 
//성적 입력
 for(i=0; i<10; i++){
 
  printf("%d번째 학생입니다. \n형식에 맞게 기입해주세요.\n\n", i+1);
  printf(" 학생의 이름 : ");
  scanf("%s", st[i].name);
  fflush(stdin); //용량 높은 버퍼 삭제
 
  printf(" 국어 성적 : ");
  scanf("%d", &st[i].kor);

  printf(" 영어 성적 : ");
  scanf("%d", &st[i].eng);

  printf(" 수학 성적 : ");
  scanf("%d", &st[i].mat);
 
//평균 계산
 printf("\n");
 st[i].sum = st[i].kor + st[i].eng + st[i].mat;
 st[i].ave = st[i].sum / 3.0f;
}

//석차 구하기
 for(i=0; i<10; i++){//석차구하기
  k = 1;
  for(j=0; j<10; j++){
   if(st[i].ave < st[j].ave){
    k++;
   }
  }
  st[i].rank = k;
 }

//석차 내림차순
 for(i=0; i<10; i++)
  for(j=i; j<10; j++)
   if(st[i].rank>st[j].rank){

선언함수 총 3번 사용하면 됩니다
    temp = st[i];
    st[i] = st[j];
    st[j] = temp;
 }
 
//성적 출력
 printf("순위\t 이름\t국어\t영어\t수학\t총점\t평균\t\t\n");
 printf("=====================================================\n");

 for(i=0; i<10; i++){
 printf("  %d\t%s\t %d\t %d\t %d\t%d\t%.1f\t\t\n", st[i].rank, st[i].name, st[i].kor, st[i].eng, st[i].mat, st[i].sum, st[i].ave);
 } printf("=====================================================\n");
 
return 0;
 
}

Posted by 언랏

댓글을 달아 주세요

  1. 비밀댓글입니다

    2014.12.03 17:13 [ ADDR : EDIT/ DEL : REPLY ]
  2. temp 선언 안되있는데 어떻게 출력 한다는거죠>

    2018.02.16 16:33 [ ADDR : EDIT/ DEL : REPLY ]
  3. 비밀댓글입니다

    2018.05.07 04:40 [ ADDR : EDIT/ DEL : REPLY ]