/*10성적표구조체배열(사용자함수).c
기본data를 할당하고 총점,평균,평가는 사용자함수(Calc),
등수는 사용자함수(Rank), 에서 구하고 출력은 사용자함수(Show)에서 함!
연산운선순위 : () > . > *
(*(q+i)).kor (O)
*(q+i).kor (X)
*/
#include<stdio.h>
#include"Sungjuk.h"
typedef struct Sungjuk score;//구조체 이름 변경(꼭할필요는 없으나 작업이 편리해짐)
void Calc(score*q,int n)
{
    int i;
    for(i=0;i<n;i++)
    {
        (*(q+i)).tot=(*(q+i)).kor+(*(q+i)).eng;
         (*(q+i)).ave=(*(q+i)).tot/2.0;
         switch((int)(*(q+i)).ave/10)
        {
            case 10:
            case 9:(*(q+i)).grade='A';break;
            case 8:(*(q+i)).grade='B';break;
            case 7:(*(q+i)).grade='C';break;
            case 6:(*(q+i)).grade='D';break;
            default:(*(q+i)).grade='F';
         }
        (*(q+i)).tot=(*(q+i)).kor+(*(q+i)).eng;
    }
}
void Rank(score *q,int n)
{
    int i,j;

    for(i=0;i<5;i++)
    {
        (*(q+i)).rank=1;
        for(j=0;j<5;j++)
        {
            if((*(q+i)).tot < (*(q+j)).tot) (*(q+i)).rank++;
        }
    }
}
void Show(score *q,int n)
{
    int i;

    printf("번호\t이름\t국어\t영어\t총점\t평균\t평가\t등수\n");
    for(i=0;i<5;i++)
    {
         printf("%d\t%s\t%3d\t%3d\t%4d\t%5.1f\t%3c\t%2d\n",(*(q+i)).no,(*(q+i)).name,(*(q+i)).kor,(*(q+i)).eng,(*(q+i)).tot,(*(q+i)).ave,(*(q+i)).grade,(*(q+i)).rank);//구조체변수.멤버변수
    }

}
int main()
{
    int i,j;
    score p[5]=
    {
        {110833,"홍길동",87,88},
        {110837,"강길동",90,88},
        {110855,"주길동",67,88},
        {110824,"살  동",87,100},
        {110814,"박길동",100,100}
    };//구조체변수 p선언(멤버변수의 순서대로)
    //printf("p의 byte수 : %d\n",sizeof(p));
    /*for(i=0;i<5;i++)
    {
        p[i].tot=p[i].kor+p[i].eng;
        p[i].ave=p[i].tot/2.0;
        switch((int)p[i].ave/10)
        {
            case 10:
            case 9:p[i].grade='A';break;
            case 8:p[i].grade='B';break;
            case 7:p[i].grade='C';break;
            case 6:p[i].grade='D';break;
            default:p[i].grade='F';
         }
    }*/
   //등수구하기
    Calc(p,5);//Calc(&p[o],5);
    Rank(p,5);
    Show(p,5);
    /*
    for(i=0;i<5;i++)
    {
        p[i].rank=1;
        for(j=0;j<5;j++)
        {
            if(p[i].tot < p[j].tot) p[i].rank++;
        }
    }
    */
    /*

    printf("번호\t이름\t국어\t영어\t총점\t평균\t평가\t등수\n");
    for(i=0;i<5;i++)
    {
         printf("%d\t%s\t%3d\t%3d\t%4d\t%5.1f\t%3c\t%2d\n",p[i].no,p[i].name,p[i].kor,p[i].eng,p[i].tot,p[i].ave,p[i].grade,p[i].rank);//구조체변수.멤버변수
    }
    */
    return 0;
}


/*10성적표구조체배열(사용자함수).c
기본data를 할당하고 총점,평균,평가는 사용자함수(Calc),
등수는 사용자함수(Rank), 에서 구하고 출력은 사용자함수(Show)에서 함!
연산운선순위 : () > . > *
(*(q+i)).kor (O)   ==  (q+i)->kor
*(q+i).kor (X)구조체포인터연산자(->) : 화살연산자==arrow
*/
#include<stdio.h>
#include"Sungjuk.h"
typedef struct Sungjuk score;//구조체 이름 변경(꼭할필요는 없으나 작업이 편리해짐)
void Calc(score*q,int n)
{
    int i;
    for(i=0;i<n;i++)
    {
        //(*(q+i)).tot=(*(q+i)).kor+(*(q+i)).eng;
         (q+i)->tot=(q+i)->kor+(q+i)->eng;
         (q+i)->ave=(q+i)->tot/2.0;
         switch((int)(q+i)->ave/10)
        {
            case 10:
            case 9:(q+i)->grade='A';break;
            case 8:(q+i)->grade='B';break;
            case 7:(q+i)->grade='C';break;
            case 6:(q+i)->grade='D';break;
            default:(q+i)->grade='F';
         }
        (q+i)->tot=(q+i)->kor+(q+i)->eng;
  //->로 바꿔도 같은 결과!
    }
}
void Rank(score *q,int n)
{
    int i,j;

    for(i=0;i<5;i++)
    {
        (*(q+i)).rank=1;
        for(j=0;j<5;j++)
        {
            if((*(q+i)).tot < (*(q+j)).tot) (*(q+i)).rank++;
        }
    }
}
void Show(score *q,int n)
{
    int i;

    printf("번호\t이름\t국어\t영어\t총점\t평균\t평가\t등수\n");
    for(i=0;i<5;i++)
    {
         printf("%d\t%s\t%3d\t%3d\t%4d\t%5.1f\t%3c\t%2d\n",(*(q+i)).no,(*(q+i)).name,(*(q+i)).kor,(*(q+i)).eng,(*(q+i)).tot,(*(q+i)).ave,(*(q+i)).grade,(*(q+i)).rank);//구조체변수.멤버변수
    }

}
int main()
{
    int i,j;
    score p[5]=
    {
        {110833,"홍길동",87,88},
        {110837,"강길동",90,88},
        {110855,"주길동",67,88},
        {110824,"살  동",87,100},
        {110814,"박길동",100,100}
    };//구조체변수 p선언(멤버변수의 순서대로)
    //printf("p의 byte수 : %d\n",sizeof(p));
    /*for(i=0;i<5;i++)
    {
        p[i].tot=p[i].kor+p[i].eng;
        p[i].ave=p[i].tot/2.0;
        switch((int)p[i].ave/10)
        {
            case 10:
            case 9:p[i].grade='A';break;
            case 8:p[i].grade='B';break;
            case 7:p[i].grade='C';break;
            case 6:p[i].grade='D';break;
            default:p[i].grade='F';
         }
    }*/
   //등수구하기
    Calc(p,5);//Calc(&p[o],5);
    Rank(p,5);
    Show(p,5);
    /*
    for(i=0;i<5;i++)
    {
        p[i].rank=1;
        for(j=0;j<5;j++)
        {
            if(p[i].tot < p[j].tot) p[i].rank++;
        }
    }
    */
    /*

    printf("번호\t이름\t국어\t영어\t총점\t평균\t평가\t등수\n");
    for(i=0;i<5;i++)
    {
         printf("%d\t%s\t%3d\t%3d\t%4d\t%5.1f\t%3c\t%2d\n",p[i].no,p[i].name,p[i].kor,p[i].eng,p[i].tot,p[i].ave,p[i].grade,p[i].rank);//구조체변수.멤버변수
    }
    */
    return 0;
}

'PROGRAMMING > C' 카테고리의 다른 글

[기초] 2. 변수(Variable)와 상수(Constant)  (0) 2011.03.03
[기초] 1. C언어 개요  (0) 2011.03.03
[대체] 구조체배열  (0) 2011.02.18
[대체] 13. 구조체  (0) 2011.02.18
[대체] 12. 포인터  (0) 2011.02.18
Posted by 마마필로 :