[대체] 13. 구조체

2011. 2. 18. 01:29 from PROGRAMMING/C

/*7구조체 : 레코드단위

*/
#include<stdio.h>
struct Sungjuk
{
    int no;//멤버변수의 선언
    char name[10];
    int kor;
    int eng;
    int tot;//멤버변수는 순서의개념이 있으므로 한줄에 하나씩 선언하는것이 좋다
    double ave;
    char grade;
    int rank;
};//구조체자료형 Sungjuk의 선언
typedef struct Sungjuk score;//구조체 이름 변경(꼭할필요는 없으나 작업이 편리해짐)
int main()
{
    score p={110833,"홍길동",87,88};//구조체변수 p선언(멤버변수의 순서대로)
    //printf("p의 byte수 : %d\n",sizeof(p));
    p.tot=p.kor+p.eng;
    p.ave=p.tot/2.0;
    switch((int)p.ave/10)
    {
        case 10:
        case 9:p.grade='A';break;
        case 8:p.grade='B';break;
        case 7:p.grade='C';break;
        case 6:p.grade='D';break;
        default:p.grade='F';
    }
    printf("번호\t이름\t국어\t영어\t총점\t평균\t평가\n");
    printf("%d\t%s\t%3d\t%3d\t%4d\t%.1f\%6c\n",p.no,p.name,p.kor,p.eng,p.tot,p.ave,p.grade);//구조체변수.멤버변수
    return 0;
}



/구조체자료형을 헤더파일로 만들기/

#ifndef SUNGJUK_H_INCLUDED
#define SUNGJUK_H_INCLUDED
struct Sungjuk
{
    int no;//멤버변수의 선언
    char name[10];
    int kor;
    int eng;
    int tot;//멤버변수는 순서의개념이 있으므로 한줄에 하나씩 선언하는것이 좋다
    double ave;
    char grade;
    int rank;
};//구조체자료형 Sungjuk의 선언

#endif // SUNGJUK_H_INCLUDED

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

[대체] 성적표구조체배열(사용자함수)  (0) 2011.02.18
[대체] 구조체배열  (0) 2011.02.18
[대체] 12. 포인터  (0) 2011.02.18
[대체] 사용자함수  (0) 2011.02.18
[대체] 자리배치(1차원배열, 난수)  (0) 2011.02.18
Posted by 마마필로 :

[대체] 12. 포인터

2011. 2. 18. 01:27 from PROGRAMMING/C

/*3포인터
포인터변수는 반드시 이미 정의된 변수의 주소로 초기화!
포인터변수는 주소만 갖는다.
포인터변수는 자료형과 관계없이 무조건 4byte!
*/
#include<stdio.h>
int main()
{
    int a=10;
    /*int *pa;//==int* pa; 정수형의 포인터변수 pa선언
    pa=&a;*/
    int *pa=&a;
    //pa=2293576
    printf("pa의 byte수 : %d\n",sizeof(pa));
    printf("&a : %u\tpa : %u\n",&a,pa);
    printf("a : %d\t",a);
    printf("pa가 가리킨 값( *pa ) : %d\t",*pa);
    return 0;
}



 

/*4.c

연산우선순위 * > + 므로
*(pa+i) (O)
*pa+i (X)
*pa(pa+i) ! = *pa+i

*/
#include<stdio.h>
int main()
{
    double a[5]={1.1, 2.2, 5.7, 6.2, 3.3};
    int i;
    double *pa=a;//==double *pa=&a[0];
    printf("pa의 byte수 : %d\n",sizeof(pa));//4
    printf("주소 확인\n");
    for(i=0;i<5;i++)
    {
        printf("&a[%d] = %u\t", &a[i]);
        printf("pa+%d = %u\n",i,pa+i);
    }
    printf("값 확인\n");
    for(i=0;i<5;i++)
    {
        printf("&a[%d] = %.1f\t", &a[i]);
        printf("pa+%d = %.1f\n",i,*(pa+i));
    }
    return 0;
}

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

[대체] 구조체배열  (0) 2011.02.18
[대체] 13. 구조체  (0) 2011.02.18
[대체] 사용자함수  (0) 2011.02.18
[대체] 자리배치(1차원배열, 난수)  (0) 2011.02.18
[대체] 판매보고서, 채점(2차원배열)  (0) 2011.02.17
Posted by 마마필로 :

[대체] 사용자함수

2011. 2. 18. 01:26 from PROGRAMMING/C

/*문) 수를 입력받아 1~그 수까지의 합을 사용자함수에서 구하고, 출력은 main()에서!
수? 10
합 : XX
*/
#include<stdio.h>
int Sum(int a)//함수결과형(정수이므로 int) 함수명(자료형 변수1, 자료형 변수2)
{
    int i,s=0;
    for(i=1;i<=a;i++)
    {
        s+=i;
    }
    return s;
}
int main()
{
    int a;
    //int re;
    printf("수? ");
    scanf("%d",&a);
    //re=Sum(a);//함수명(인수);
    printf("합 : %d\n",Sum(a));
    return 0;
}

 
 

/*문) 수를 입력받아 1~그 수까지의 합을 사용자함수에서 구하고, 출력은 main()에서!
수? 10
합 : XX

수? 100
합 : XX
...
수?-9(1보다 작은 수의 입력은 종료)
main()뒤에 사용자함수를 정의 한다면, main()전에 사용자함수의 선언을 반드시!!
*/
#include<stdio.h>
int Sum(int a);//사용자함수의 선언
int main()
{
    int a;
    while(1)
    {
        printf("수? ");
        scanf("%d",&a);
        if(a<1) break;
        printf("합 : %d\n",Sum(a));
    }

    return 0;
}
//사용자함수의 정의
int Sum(int a) //함수결과형 함수명(자료형 변수1, 자료형변수 2)
{
    int i,s=0;
    for(i=1;i<=a;i++)
    {
        s+=i;
    }
    return s;
}

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

[대체] 13. 구조체  (0) 2011.02.18
[대체] 12. 포인터  (0) 2011.02.18
[대체] 자리배치(1차원배열, 난수)  (0) 2011.02.18
[대체] 판매보고서, 채점(2차원배열)  (0) 2011.02.17
[대체] 11. 배열 ② 이차원배열  (0) 2011.02.17
Posted by 마마필로 :

/0218_1자리배치/

/*1자리배치.c
1~30번의 학생을 임의로 자리배치 합니다.(1줄에 5명씩)
----자리배치----
17 9 23 16 5
....
*/
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main()
{
    int i,j,r,sw,a[30],cn=0;
    srand((unsigned int)time(NULL));

    do
    {
        r=rand()%(30-1+1)+1;
        sw=0;
        for(j=0;j<cn;j++) //seat[0]=9   seat[1]=29   cn:2     9
        {
            if(r==a[j]) {sw=1;break;}
        }
        if(sw==0)
        {
             a[cn]=r;
             //printf("%d ",a[cn]);
             cn++;

         }

    } while(cn<30);
    printf("------자리배치-----\n");
    for(i=0;i<30;i++)
    {
        printf("%3d ",a[i]);
        if((i+1)%5==0) printf("\n");
    }

    return 0;
}

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

[대체] 12. 포인터  (0) 2011.02.18
[대체] 사용자함수  (0) 2011.02.18
[대체] 판매보고서, 채점(2차원배열)  (0) 2011.02.17
[대체] 11. 배열 ② 이차원배열  (0) 2011.02.17
[대체] 정렬, rank실습  (0) 2011.02.17
Posted by 마마필로 :

/*11판매보고서(이차원배열)코드와 수량을 5개 입력받아 다음처럼!
코드가 a(A)면 품명은 양복, 단가 38만원, 코드가 b(B)면 품명은 원피스, 단가 19만원
코드가 c(C)면 품명은 투피스, 단가 23만원, 코드가 d(D)면 품명은 운동복, 단가 20만원
그외의 코드면 구두, 단가 16만원

1번째 입력 --->코드? a
                      수량? 7
....
--------------------*판매보고서*----------------------
                                   금액(단위:만원)
코드  품명  수량(0번열)  단가(1번열)  금액(2번열)   판매순위(3번열)
x
...
---------------------------------------------------------
총계          XXX          XXX
최고수량 : XX    최저수량 : XX
*/
#include <stdio.h>
#include<string.h>
#include<ctype.h>
#define Si 5
int main()
{
    char code[Si],pum[Si][10],tpum[10],tcode;
    int k,i,j,a[Si][4],temp;
    int allsu=0,allkum=0,max,min;
    max=-9999;
    min=9999;
    for(i=0;i<Si;i++)
    {
        printf("%d번째 입력 ---> ",i+1);
        printf("코드? ");
        fflush(stdin);
        code[i]=getchar();
        printf("\t\t수량? ");
        scanf("%d",&a[i][0]);
        switch( tolower(code[i]))
               {
                   case 'a':strcpy(pum[i],"양  복");a[i][1]=38;break;
                   case 'b':strcpy(pum[i],"원피스");a[i][1]=19;break;
                   case 'c':strcpy(pum[i],"투피스");a[i][1]=23;break;
                   case 'd':strcpy(pum[i],"운동복");a[i][1]=20;break;
                   default:strcpy(pum[i],"구  두");a[i][1]=16;break;
               }
               a[i][2]=a[i][0]*a[i][1];
               allsu+=a[i][0];
               allkum+=a[i][2];

    }
    //순위
    for(i=0;i<Si;i++)
    {
        a[i][3]=1;
        for(j=0;j<Si;j++)
        {
            if(a[i][2] < a[j][2]) a[i][3]++;
        }
    }
    max=min=a[0][0];//배열 값중 하나를 초기치
        for(i=0;i<Si;i++)
        {
               if(max < a[i][0]) max=a[i][0];
               if(min > a[i][0]) min=a[i][0];
        }
    printf("\n--------------------*판매보고서*---------------------\n");
    printf("코드\t품명\t수량\t단가\t금액\t판매순위\n");
    printf("                                      (단위:만원)\n");
    printf("-----------------------------------------------------\n");
    for(i=0;i<Si;i++)
    {
        printf("%3c\t%s\t%4d\t%4d\t%4d\t%4d\n",code[i],pum[i],a[i][0],a[i][1],a[i][2],a[i][3]);
    }
    printf("-----------------------------------------------------\n");
    printf("총  계 : \t%d\t\t %d\n",allsu,allkum);
    printf("최고수량 : %d\t최저수량 : %d\n", max,min);
    //정렬하기
    for(i=0;i<Si-1;i++)
    {
        for(j=i+1;j<Si;j++)
        {
            if( strcmp(pum[i],pum[j] )<0 )//strcmp("원피스","투피스")<0
            {
                strcpy(tpum,pum[i]);
                strcpy(pum[i],pum[j]);
                strcpy(pum[j],tpum);
                tcode=code[i];code[i]=code[j];code[j]=tcode;
                for(k=0;k<4;k++)
               {temp=a[i][k];a[i][k]=a[j][k];a[j][k]=temp;}
                //temp=a[i][1];a[i][1]=a[j][1];a[j][1]=temp;
                //temp=a[i][2];a[i][2]=a[j][2];a[j][2]=temp;
                //temp=a[i][3];a[i][3]=a[j][3];a[j][3]=temp;
            }
        }
    }
    printf("\n---------------*판매보고서*(품명의 내림차순)----------\n");
    printf("코드\t품명\t수량\t단가\t금액\t판매순위\n");
    printf("                                      (단위:만원)\n");
    printf("-----------------------------------------------------\n");
    for(i=0;i<Si;i++)
    {
        printf("%3c\t%s\t",code[i],pum[i]);
        for(j=0;j<4;j++)
        {
            printf("%4d\t",a[i][j]);
        }
        printf("\n");
    }
    printf("-----------------------------------------------------\n");
    return 0;
}

 


 

/*12채점.ㅊ 5명의 답안을 입력받아 채점하고 다음처럼!
int jdap[5]={1,2,3,4,1};//정답지
#1번째 data입력)
    번호? 11  (이미 있는 번호는 입력X)
    이름? 이 수 정
        #1 -> 1
        #2 -> 2
        #3 -> 2
        #4 -> 3
        #5 -> 4
#2번째 data입력)
    번호? 11
        이미 존재하는 번호입니다. 다시 번호? 11
        이미 존재하는 번호입니다. 다시 번호? 11
        이미 존재하는 번호입니다. 다시 번호? 12
...
-------------------*채점 결과*------------------
번호      이름  #1        #2       #3      #4       #5    점수(6)   등수(7)
ZZ(0)    ZZZ    1(1)    2(2)    2(3)    3(4)     3(5)
                  O   O    X    X    X    40     Z
....
*/

#include<stdio.h>
#define Si 5
int main()
{
    int i,j,jdap[5]={1,2,3,4,1},a[Si][8];
    char name[Si][15],ox[Si][5];
    for (i=0;i<Si;i++)
    {
         printf("#%d번째 data입력)\n",i+1);
         Dasino:
         printf("번호? ");
         scanf("%d",&a[i][0]);
         //번호check i: 3, j: 0,1,2
         for(j=0;j<i;j++)
         {
             if(a[i][0]==a[j][0])
             {
                 printf("\t이미 존재하는 번호입니다. 다시");
                 goto Dasino;
             }
         }
         printf("이름? ");
         fflush(stdin);
         gets(name[i]);
         a[i][6]=0;//점수
         for(j=1;j<=5;j++)
         {
              printf("\t#%d -> ",j);
              scanf("%d",&a[i][j]);
              if(a[i][j]==jdap[j-1])
              {ox[i][j-1]='O';a[i][6]+=20;}
              else
              ox[i][j-1]='X';
         }

    }
    //등수구하기
    for(i=0;i<Si;i++)
    {
        a[i][7]=1;
        for(j=0;j<Si;j++)
        {
            if(i==j) continue;
            if(a[i][6]<a[j][6]) a[i][7]++;
        }
    }
    printf("\n---------------------*채점 결과*--------------------\n");
    printf("번호\t이름\t #1  #2  #3  #4  #5\t점수\t등수\n");
    for(i=0;i<Si;i++)
    {
        printf("%d\t%s\t",a[i][0],name[i]);
        for(j=1;j<=5;j++)
        {
            printf("%3d ",a[i][j]);
        }
        printf("\n \t\t");
        for(j=0;j<5;j++)
        {
            printf("%3c ",ox[i][j]);
        }
        printf("%6d\t%4d\n",a[i][6],a[i][7]);
    }
    return 0;
}

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

[대체] 사용자함수  (0) 2011.02.18
[대체] 자리배치(1차원배열, 난수)  (0) 2011.02.18
[대체] 11. 배열 ② 이차원배열  (0) 2011.02.17
[대체] 정렬, rank실습  (0) 2011.02.17
[대체] 10. 정렬하기  (0) 2011.02.17
Posted by 마마필로 :

첨자 2개

int a[3][4];

a는 배열명, 3은 전체 행의 개수, 4는 전체 열의 개수


/*5명의 data를 입력하여 다음처럼 성적처리!
#1)
이름: 홍 길 동
국어? 88
영어? 87
#2)
.....
------------------------*성적표*---------------------------
이름    국어 영어  총점  평균     평가
XXX     XX    XX   XXX   XX.X    X
...
평가는 평균이 90이상 A, 80이상 B, 70이상 C, 60이상 D, 60미만 F

------------------------*성적표*(등수순)---------------------------
이름    국어 영어  총점  평균     평가    등수
XXX     XX    XX   XXX   XX.X    X        X

int a[Si][4];
       0번열 1번열 2번열 3번열 4번열
*/

#include<stdio.h>
#define Si 5
#include<string.h>
int main()
{
    int i,j,a[Si][4],temp;
    double ave[Si],tave;
    char grade[Si],name[Si][15],tgrade,tname[15];
    for(i=0;i<Si;i++)
    {
        printf("#%d)\n",i+1);
        printf("이름? ");
        fflush(stdin);
        gets(name[i]);//==gets(%name[i][0]);
        printf("국어? ");
        scanf("%d",&a[i][0]);
        printf("영어? ");
        scanf("%d",&a[i][1]);
        a[i][2]=a[i][0]+a[i][1];
        ave[i]=a[i][2]/2.0;
        //평가는 평균이 90이상 A, 80이상 B, 70이상 C, 60이상 D, 60미만 F
        switch((int)ave[i]/10)
        {
            case 10://맨처음 만나는 break는 전 문장 실행
            case 9:grade[i]='A';break;
            case 8:grade[i]='B';break;
            case 7:grade[i]='C';break;
            case 6:grade[i]='D';break;
            default:grade[i]='F';//switch문에서 default이하의 break는 생략가능
        }
    }
    //등수구하기
    for(i=0;i<Si;i++)
    {
        a[i][3]=1;
        for(j=0;j<Si;j++)
        {
            if (a[i][2] < a[j][2]) a[i][3]++;
        }
    }

    printf("--------------------------*성적표*------------------------------\n");
    printf("이름\t\t국어\t영어\t총점\t평균 \t평가\t등수\n");
    for(i=0;i<Si;i++)
    {
        printf("%-10s\t",name[i]);
        for(j=0;j<3;j++)
        {
            printf("%3d\t",a[i][j]);
        }
        printf("%5.1f\t%3c\t%3d\n",ave[i],grade[i],a[i][j]);
    }
    //정렬하기
    for(i=0;i<Si-1;i++)
    {
        for(j=i+1;j<Si;j++)
        {
            if(a[i][3] > a[j][3])
            //  3                   1
            {
                strcpy(tname,name[i]);
                strcpy(name[i],name[j]);
                strcpy(name[j],tname);
                temp=a[i][0];a[i][0]=a[j][0];a[j][0]=temp;
                temp=a[i][1];a[i][1]=a[j][1];a[j][1]=temp;
                temp=a[i][2];a[i][2]=a[j][2];a[j][2]=temp;
                tave=ave[i];ave[i]=ave[j];ave[j]=tave;
                temp=a[i][3];a[i][3]=a[j][3];a[j][3]=temp;
                tgrade=grade[i];grade[i]=grade[j];grade[j]=tgrade;
            }
        }
    }
    printf("--------------------------*성적표(등수순)*------------------------------\n");
    printf("이름\t\t국어\t영어\t총점\t평균 \t평가\t등수\n");
    for(i=0;i<Si;i++)
    {
        printf("%-10s\t%3d\t%3d\t%3d\t%5.1f\t%3c\t%3d\n",name[i],a[i][0],a[i][1],a[i][2],ave[i],grade[i],a[i][3]);
    }
    return 0;
}



 //정렬하기
    for(i=0;i<Si-1;i++)
    {
        for(j=i+1;j<Si;j++)
        {
            if(a[i][3] > a[j][3])
            //  3                   1
            {
                strcpy(tname,name[i]);
                strcpy(name[i],name[j]);
                strcpy(name[j],tname);
                for(k=0;k<4;k++)
                {temp=a[i][k];a[i][k]=a[j][k];a[j][k]=temp;}
                   
                   
                //temp=a[i][1];a[i][1]=a[j][1];a[j][1]=temp;
                //temp=a[i][2];a[i][2]=a[j][2];a[j][2]=temp;
                tave=ave[i];ave[i]=ave[j];ave[j]=tave;
                //temp=a[i][3];a[i][3]=a[j][3];a[j][3]=temp;
                tgrade=grade[i];grade[i]=grade[j];grade[j]=tgrade;
            }
        }
    }

 

---->위에서 반복되는 부분을 for문으로 돌려줌(k변수 선언할것)

 

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

[대체] 자리배치(1차원배열, 난수)  (0) 2011.02.18
[대체] 판매보고서, 채점(2차원배열)  (0) 2011.02.17
[대체] 정렬, rank실습  (0) 2011.02.17
[대체] 10. 정렬하기  (0) 2011.02.17
[대체] 9. 배열 예제  (0) 2011.02.17
Posted by 마마필로 :

[대체] 정렬, rank실습

2011. 2. 17. 01:21 from PROGRAMMING/C

/0217_8판매보고서/

/*8판매보고서.c 코드와 수량을 5개 입력받아 다음처럼!
코드가 a(A)면 품명은 양복, 단가 38만원, 코드가 b(B)면 품명은 원피스, 단가 19만원
코드가 c(C)면 품명은 투피스, 단가 23만원, 코드가 d(D)면 품명은 운동복, 단가 20만원
그외의 코드면 구두, 단가 16만원

1번째 입력 --->코드? a
                      수량? 7
....
--------------------*판매보고서*----------------------
                                   금액(단위:만원)
코드  품명  수량  단가  금액   판매순위
x
...
*/
#include <stdio.h>
#include<string.h>
#include<ctype.h>
#define Si 5
int main()
{
    char code[Si],pum[Si][10];
    int i,j,su[Si],dan[Si],kum[Si],rank[Si];
    for(i=0;i<Si;i++)
    {
        printf("%d번째 입력 ---> ",i+1);
        printf("코드? ");
        fflush(stdin);
        code[i]=getchar();
        printf("\t\t수량? ");
        scanf("%d",&su[i]);
        switch( tolower(code[i]))
               {
                   case 'a':strcpy(pum[i],"양  복");dan[i]=38;break;
                   case 'b':strcpy(pum[i],"원피스");dan[i]=19;break;
                   case 'c':strcpy(pum[i],"투피스");dan[i]=23;break;
                   case 'd':strcpy(pum[i],"운동복");dan[i]=20;break;
                   default:strcpy(pum[i],"구  두");dan[i]=16;break;
               }
               kum[i]=su[i]*dan[i];
    }
    //순위
    for(i=0;i<Si;i++)
    {
        rank[i]=1;
        for(j=0;j<Si;j++)
        {
            if(kum[i] < kum[j]) rank[i]++;
        }
    }
    printf("\n--------------------*판매보고서*---------------------\n");
    printf("코드\t품명\t수량\t단가\t금액\t판매순위\n");
    printf("                                      (단위:만원)\n");
    printf("-----------------------------------------------------\n");
    for(i=0;i<Si;i++)
    {
        printf("%c\t%s\t%d\t%d\t%d\t%d\n",code[i],pum[i],su[i],dan[i],kum[i],rank[i]);
    }
    return 0;
}

 


/0217_판매보고서에 총계,최고수량,최저수량 추가하기/

/*8판매보고서.c 코드와 수량을 5개 입력받아 다음처럼!
코드가 a(A)면 품명은 양복, 단가 38만원, 코드가 b(B)면 품명은 원피스, 단가 19만원
코드가 c(C)면 품명은 투피스, 단가 23만원, 코드가 d(D)면 품명은 운동복, 단가 20만원
그외의 코드면 구두, 단가 16만원

1번째 입력 --->코드? a
                      수량? 7
....
--------------------*판매보고서*----------------------
                                   금액(단위:만원)
코드  품명  수량  단가  금액   판매순위
x
...
---------------------------------------------------------
총계          XXX          XXX
수최고수량 : XX    최저수량 : XX
*/
#include <stdio.h>
#include<string.h>
#include<ctype.h>
#define Si 5
int main()
{
    char code[Si],pum[Si][10];
    int i,j,su[Si],dan[Si],kum[Si],rank[Si];
    int allsu=0,allkum=0,max,min;
    max=-9999;
    min=9999;
    for(i=0;i<Si;i++)
    {
        printf("%d번째 입력 ---> ",i+1);
        printf("코드? ");
        fflush(stdin);
        code[i]=getchar();
        printf("\t\t수량? ");
        scanf("%d",&su[i]);
        switch( tolower(code[i]))
               {
                   case 'a':strcpy(pum[i],"양  복");dan[i]=38;break;
                   case 'b':strcpy(pum[i],"원피스");dan[i]=19;break;
                   case 'c':strcpy(pum[i],"투피스");dan[i]=23;break;
                   case 'd':strcpy(pum[i],"운동복");dan[i]=20;break;
                   default:strcpy(pum[i],"구  두");dan[i]=16;break;
               }
               kum[i]=su[i]*dan[i];
               allsu+=su[i];
               allkum+=kum[i];
               if(max < su[i]) max=su[i];
               if(min > su[i]) min=su[i];
    }
    //순위
    for(i=0;i<Si;i++)
    {
        rank[i]=1;
        for(j=0;j<Si;j++)
        {
            if(kum[i] < kum[j]) rank[i]++;
        }
    }
    printf("\n--------------------*판매보고서*---------------------\n");
    printf("코드\t품명\t수량\t단가\t금액\t판매순위\n");
    printf("                                      (단위:만원)\n");
    printf("-----------------------------------------------------\n");
    for(i=0;i<Si;i++)
    {
        printf("%c\t%s\t%d\t%d\t%d\t%d\n",code[i],pum[i],su[i],dan[i],kum[i],rank[i]);
    }
    printf("-----------------------------------------------------\n");
    printf("총  계 : \t%d\t\t %d\n",allsu,allkum);
    printf("최고수량 : %d\t최저수량 : %d\n", max,min);
    return 0;
}


/0217_8_1판매보고서-->품목별내림차순 출력/

/*8_1판매보고서.c  --> 최고,최저수량을 for를 이용해서.
코드와 수량을 5개 입력받아 다음처럼!
코드가 a(A)면 품명은 양복, 단가 38만원, 코드가 b(B)면 품명은 원피스, 단가 19만원
코드가 c(C)면 품명은 투피스, 단가 23만원, 코드가 d(D)면 품명은 운동복, 단가 20만원
그외의 코드면 구두, 단가 16만원

1번째 입력 --->코드? a
                      수량? 7
....
--------------------*판매보고서*----------------------
                                   금액(단위:만원)
코드  품명  수량  단가  금액   판매순위
x
...
---------------------------------------------------------
총계          XXX          XXX
최고수량 : XX    최저수량 : XX
*/
#include <stdio.h>
#include<string.h>
#include<ctype.h>
#define Si 5
int main()
{
    char code[Si],pum[Si][10],tpum[10],tcode;
    int i,j,su[Si],dan[Si],kum[Si],rank[Si],temp;
    int allsu=0,allkum=0,max,min;
    max=-9999;
    min=9999;
    for(i=0;i<Si;i++)
    {
        printf("%d번째 입력 ---> ",i+1);
        printf("코드? ");
        fflush(stdin);
        code[i]=getchar();
        printf("\t\t수량? ");
        scanf("%d",&su[i]);
        switch( tolower(code[i]))
               {
                   case 'a':strcpy(pum[i],"양  복");dan[i]=38;break;
                   case 'b':strcpy(pum[i],"원피스");dan[i]=19;break;
                   case 'c':strcpy(pum[i],"투피스");dan[i]=23;break;
                   case 'd':strcpy(pum[i],"운동복");dan[i]=20;break;
                   default:strcpy(pum[i],"구  두");dan[i]=16;break;
               }
               kum[i]=su[i]*dan[i];
               allsu+=su[i];
               allkum+=kum[i];

    }
    //순위
    for(i=0;i<Si;i++)
    {
        rank[i]=1;
        for(j=0;j<Si;j++)
        {
            if(kum[i] < kum[j]) rank[i]++;
        }
    }
    max=min=su[0];//배열 값중 하나를 초기치
        for(i=0;i<Si;i++)
        {
               if(max < su[i]) max=su[i];
               if(min > su[i]) min=su[i];
        }
    printf("\n--------------------*판매보고서*---------------------\n");
    printf("코드\t품명\t수량\t단가\t금액\t판매순위\n");
    printf("                                      (단위:만원)\n");
    printf("-----------------------------------------------------\n");
    for(i=0;i<Si;i++)
    {
        printf("%c\t%s\t%d\t%d\t%d\t%d\n",code[i],pum[i],su[i],dan[i],kum[i],rank[i]);
    }
    printf("-----------------------------------------------------\n");
    printf("총  계 : \t%d\t\t %d\n",allsu,allkum);
    printf("최고수량 : %d\t최저수량 : %d\n", max,min);
    //정렬하기
    for(i=0;i<Si-1;i++)
    {
        for(j=i+1;j<Si;j++)
        {
            if( strcmp(pum[i],pum[j] )<0 )//strcmp("원피스","투피스")<0
            {
                strcpy(tpum,pum[i]);
                strcpy(pum[i],pum[j]);
                strcpy(pum[j],tpum);
                tcode=code[i];code[i]=code[j];code[j]=tcode;
                temp=su[i];su[i]=su[j];su[j]=temp;
                temp=dan[i];dan[i]=dan[j];dan[j]=temp;
                temp=kum[i];kum[i]=kum[j];kum[j]=temp;
                temp=rank[i];rank[i]=rank[j];rank[j]=temp;
            }
        }
    }
    printf("\n---------------*판매보고서*(품명의 내림차순)----------\n");
    printf("코드\t품명\t수량\t단가\t금액\t판매순위\n");
    printf("                                      (단위:만원)\n");
    printf("-----------------------------------------------------\n");
    for(i=0;i<Si;i++)
    {
        printf("%c\t%s\t%d\t%d\t%d\t%d\n",code[i],pum[i],su[i],dan[i],kum[i],rank[i]);
    }
    printf("-----------------------------------------------------\n");
    return 0;

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

[대체] 판매보고서, 채점(2차원배열)  (0) 2011.02.17
[대체] 11. 배열 ② 이차원배열  (0) 2011.02.17
[대체] 10. 정렬하기  (0) 2011.02.17
[대체] 9. 배열 예제  (0) 2011.02.17
[대체] 9.배열 ① 일차원배열  (0) 2011.02.17
Posted by 마마필로 :

[대체] 10. 정렬하기

2011. 2. 17. 01:20 from PROGRAMMING/C

1)오름차순 : 작 -> 큰 순서로의 나열
2)내림차순 : 큰 -> 작은값 순서로의 나열

원래---
199 100 -200 155 300

정렬후---
-200 100 155 199 300
*/
#include<stdio.h>
int main()
{
     int i,j,temp,score[5]={199,100,-200,155,300};
     printf("원래---\n");
     for(i=0;i<5;i++)
     {
         printf("%5d",score[i]);
     }
     printf("\n");

     //정렬하기
     for(i=0;i<4;i++)
     {
         for(j=i+1;j<5;j++)
         {
             if(score[i] > score[j])
             {
                 temp=score[i];
                 score[i]=score[j];
                 score[j]=temp;
             }
         }
     }

     printf("정렬후---\n");
     for(i=0;i<5;i++)
     {
         printf("%5d",score[i]);
     }
     printf("\n");

 

     return 0;
}

 


 

/성적처리에 정렬하기 추가/

/*5명의 data를 입력하여 다음처럼 성적처리!
#1)
이름: 홍 길 동
국어? 88
영어? 87
#2)
.....
------------------------*성적표*---------------------------
이름    국어 영어  총점  평균     평가
XXX     XX    XX   XXX   XX.X    X
...
평가는 평균이 90이상 A, 80이상 B, 70이상 C, 60이상 D, 60미만 F
*/

#include<stdio.h>
#define Si 5
#include<string.h>
int main()
{
    int i,j,tot[Si],kor[Si],eng[Si],rank[Si],temp;
    double ave[Si],tave;
    char grade[Si],name[Si][15],tgrade,tname[15];
    for(i=0;i<Si;i++)
    {
        printf("#%d)\n",i+1);
        printf("이름? ");
        fflush(stdin);
        gets(name[i]);//==gets(%name[i][0]);
        printf("국어? ");
        scanf("%d",&kor[i]);
        printf("영어? ");
        scanf("%d",&eng[i]);
        tot[i]=kor[i]+eng[i];
        ave[i]=tot[i]/2.0;
        switch((int)ave[i]/10)
        {
            case 10://맨처음 만나는 break는 전 문장 실행
            case 9:grade[i]='A';break;
            case 8:grade[i]='B';break;
            case 7:grade[i]='C';break;
            case 6:grade[i]='D';break;
            default:grade[i]='F';//switch문에서 default이하의 break는 생략가능
        }
    }
    //등수구하기
    for(i=0;i<Si;i++)
    {
        rank[i]=1;
        for(j=0;j<Si;j++)
        {
            if (i==j) continue;
            if(tot[i] < tot[j] ) rank[i]++;
        }
    }

    printf("--------------------------*성적표*------------------------------\n");
    printf("이름\t\t국어\t영어\t총점\t평균 \t평가\t등수\n");
    for(i=0;i<Si;i++)
    {
        printf("%-10s\t%3d\t%3d\t%3d\t%5.1f\t%3c\t%3d\n",name[i],kor[i],eng[i],tot[i],ave[i],grade[i],rank[i]);
    }
    //정렬하기
    for(i=0;i<Si-1;i++)
    {
        for(j=i+1;j<Si;j++)
        {
            if(rank[i] > rank[j])
            //  3                   1
            {
                strcpy(tname,name[i]);
                strcpy(name[i],name[j]);
                strcpy(name[j],tname);
                temp=kor[i];kor[i]=kor[j];kor[j]=temp;
                temp=eng[i];eng[i]=eng[j];eng[j]=temp;
                temp=tot[i];tot[i]=tot[j];tot[j]=temp;
                tave=ave[i];ave[i]=ave[j];ave[j]=tave;
                temp=rank[i];rank[i]=rank[j];rank[j]=temp;
                tgrade=grade[i];grade[i]=grade[j];grade[j]=tgrade;
            }
        }
    }
    printf("--------------------------*성적표(등수순)*------------------------------\n");
    printf("이름\t\t국어\t영어\t총점\t평균 \t평가\t등수\n");
    for(i=0;i<Si;i++)
    {
        printf("%-10s\t%3d\t%3d\t%3d\t%5.1f\t%3c\t%3d\n",name[i],kor[i],eng[i],tot[i],ave[i],grade[i],rank[i]);
    }
    return 0;
}

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

[대체] 11. 배열 ② 이차원배열  (0) 2011.02.17
[대체] 정렬, rank실습  (0) 2011.02.17
[대체] 9. 배열 예제  (0) 2011.02.17
[대체] 9.배열 ① 일차원배열  (0) 2011.02.17
[대체] 8.다중반복문  (0) 2011.02.16
Posted by 마마필로 :

[대체] 9. 배열 예제

2011. 2. 17. 01:15 from PROGRAMMING/C

/0217_5.여러명의 이름처리/

#include <stdio.h>
int main()
{
    char name[5][15] = {"홍길동", "김 진 수", "강 호동", "남궁 지수", "이진"};
    // 홍길동 [0][0]~[0][6], 김진수 [1][0]
    int i;

    printf("name의 byte수 : %d\n\n", sizeof(name));  // 5* 15* 1byte = 75 byte

    for(i=0; i<5; i++)
    {
        printf("name[%d] : %-10s\n", i, name[i]);  // 10칸 확보해서 왼쪽(-) 정렬
    }

    return 0;
}

//선언은 2차원처럼 보이나 실행은 1차원



/0217_성적처리.c에 이름출력 추가/

 

/*5명의 data를 입력하여 다음처럼 성적처리!
#1)
이름: 홍 길 동
국어? 88
영어? 87
#2)
.....
------------------------*성적표*---------------------------
이름    국어 영어  총점  평균     평가
XXX     XX    XX   XXX   XX.X    X
...
평가는 평균이 90이상 A, 80이상 B, 70이상 C, 60이상 D, 60미만 F
*/

#include<stdio.h>
#define Si 5
int main()
{
    int i,tot[Si],kor[Si],eng[Si];
   
double ave[Si];
    char grade[Si],
name[Si][15];
    for(i=0;i<Si;i++)
    {
        printf("#%d)\n",i+1);
        printf("이름? ");
        fflush(stdin);
        gets(name[i]);//==gets(%name[i][0]);
        printf("국어? ");
        scanf("%d",&kor[i]);
        printf("영어? ");
        scanf("%d",&eng[i]);
        tot[i]=kor[i]+eng[i];
        ave[i]=tot[i]/2.0;
        switch((int)ave[i]/10)
        {
            case 10://맨처음 만나는 break는 전 문장 실행
            case 9:grade[i]='A';break;
            case 8:grade[i]='B';break;
            case 7:grade[i]='C';break;
            case 6:grade[i]='D';break;
            default:grade[i]='F';//switch문에서 default이하의 break는 생략가능
        }
    }
    printf("--------------------------*성적표*------------------------------\n");
    printf("이름\t\t국어\t영어\t총점\t평균 \t평가\n");
    for(i=0;i<Si;i++)
    {
        printf
("%-10s\t%3d\t%3d\t%3d\t%5.1f\t%3c\n",name[i],kor[i],eng[i],tot[i],ave[i],grade[i]);
    }
    return 0;
}


/0217_6등수구하기/

/*6등수구하기.c
점수  등수
-----------
199    3
100    4
200    2
100    4
300    1
*/

#include<stdio.h>
int main()
{
    int score[5]={199,100,200,100,300},i,j;
    int rank[5];
    for(i=0;i<5;i++)  //i가 기준
    {
        rank[i]=1;//비교전에 초기치
        for(j=0;j<5;j++)//j가 비교대상
        {
            if(i==j)continue;//i와j가 같은경우 실행하지 않고 건너뛰게 하기 위해 continue추가
            if(score[i] < score[j]) rank[i]++;
        }
    }
    printf("점수\t등수\n");
    printf("------------\n");
    for(i=0;i<5;i++)
    {
        printf("%3d\t%3d\n",score[i],rank[i]);
    }
    return 0;
}


/성적처리 파일에 등수 추가/

#include<stdio.h>
#define Si 5
int main()
{
    int i,j,tot[Si],kor[Si],eng[Si],rank[Si];
    double ave[Si];
    char grade[Si],name[Si][15];
    for(i=0;i<Si;i++)
    {
        printf("#%d)\n",i+1);
        printf("이름? ");
        fflush(stdin);
        gets(name[i]);//==gets(%name[i][0]);
        printf("국어? ");
        scanf("%d",&kor[i]);
        printf("영어? ");
        scanf("%d",&eng[i]);
        tot[i]=kor[i]+eng[i];
        ave[i]=tot[i]/2.0;
        switch((int)ave[i]/10)
        {
            case 10://맨처음 만나는 break는 전 문장 실행
            case 9:grade[i]='A';break;
            case 8:grade[i]='B';break;
            case 7:grade[i]='C';break;
            case 6:grade[i]='D';break;
            default:grade[i]='F';//switch문에서 default이하의 break는 생략가능
        }
    }
 //등수구하기
    for(i=0;i<Si;i++)
    {
        rank[i]=1;
        for(j=0;j<Si;j++)
        {
            if (i==j) continue;  
            if(tot[i] < tot[j] ) rank[i]++;
        }
    }

    printf("--------------------------*성적표*------------------------------\n");
    printf("이름\t\t국어\t영어\t총점\t평균 \t평가\t등수\n");
    for(i=0;i<Si;i++)
    {
        printf("%-10s\t%3d\t%3d\t%3d\t%5.1f\t%3c\t%3d\n",name[i],kor[i],eng[i],tot[i],ave[i],grade[i],rank[i]);
    }
    return 0;

}

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

[대체] 정렬, rank실습  (0) 2011.02.17
[대체] 10. 정렬하기  (0) 2011.02.17
[대체] 9.배열 ① 일차원배열  (0) 2011.02.17
[대체] 8.다중반복문  (0) 2011.02.16
[대체] 7. 반복문(do~while)  (0) 2011.02.16
Posted by 마마필로 :

① 일차원배열

첨자가 1개
int a[5];
a는 배열명, 5는 배열요소의 개수

 

/0217_2일차원배열/

 

#include<stdio.h>
int main()
{
    int i,a[5]={10,100,66,45,99};
    printf("a의 byte수 : %d\n",sizeof(a));//5*4byte ==>20
    printf("값 확인\n");
    for(i=0;i<5;i++)
    {
        printf("a[%d] = %d\n",i,a[i]);
    }
    printf("\n주소 확인\n");
    for(i=0;i<5;i++)
    {
        printf("a[%d]의 주소 = %u\n",i,&a[i]);
    }
    return 0;
}
 

/0217_2_1일차원배열/

 

#include<stdio.h>
int main()
{
    int i,cn,a[]={10,100,66,45,99};
    //printf("a의 byte수 : %d\n",sizeof(a));//5*4byte ==>20
    printf("값 확인\n");
    //cn=sizeof(a)/sizeof(a[0]);//배열요소의 개수 20/4 ---> 5
    cn=sizeof(a)/sizeof(int);
    for(i=0;i<cn;i++)
    {
        printf("a[%d] = %d\n",i,a[i]);
    }
    printf("\n주소 확인\n");
    for(i=0;i<cn;i++)
    {
        printf("a[%d]의 주소 = %u\n",i,&a[i]);
    }
    return 0;
}

 

/0217_3주사위(일차원배열)/

 

#include<stdio.h>
#include<stdlib.h>//rand()
#include<time.h>//time()
int main()
{
    int r,i,s=0,cn[6]={0};
    //srand(unsigned int)time(NULL));
    srand(time(NULL));
    for(i=1;i<=100;i++)//i발생회수
    {
        r=rand()%(6-1+1)+1;//r=rnad()%6+1;
        printf("%d ",r);
        if(i%10==0) printf("\n");
        cn[r-1]++;
        /*switch(r)
        {
            case 1:cn[0]++;break;
            case 2:cn[1]++;break;
            case 3:cn[2]++;break;
            case 4:cn[3]++;break;
            case 5:cn[4]++;break;
            case 6:cn[5]++;break;
        }*/
    }
    printf("-----------------------\n");
    for(i=1;i<=6;i++)
    {
        printf("%d의 눈의 개수 : %d개\n",1,cn[i-1]);
        //s+=cn[i-1]; (확인)
    }
    //printf("s : %d\n",s); (확인)
    return 0;
}

 


0217_4성적처리

/*5명의 data를 입력하여 다음처럼 성적처리!
#1)
국어? 88
영어? 87
#2)
.....
------------------------*성적표*---------------------------
국어 영어  총점  평균     평가
XX    XX   XXX   XX.X    X
...
평가는 평균이 90이상 A, 80이상 B, 70이상 C, 60이상 D, 60미만 F
*/

#include<stdio.h>
#define Si 5
int main()
{
    int i,tot[Si],kor[Si],eng[Si];
    double ave[Si];
    char grade[Si];
    for(i=0;i<Si;i++)
    {
        printf("#%d)\n",i+1);
        printf("국어? ");
        scanf("%d",&kor[i]);
        printf("영어? ");
        scanf("%d",&eng[i]);
        tot[i]=kor[i]+eng[i];
        ave[i]=tot[i]/2.0;
        switch((int)ave[i]/10)
        {
            case 10://맨처음 만나는 break는 전 문장 실행
            case 9:grade[i]='A';break;
            case 8:grade[i]='B';break;
            case 7:grade[i]='C';break;
            case 6:grade[i]='D';break;
            default:grade[i]='F';//switch문에서 default이하의 break는 생략가능
        }
    }
    printf("--------------------------*성적표*------------------------------\n");
    printf("국어\t영어\t총점\t평균 \t평가\n");
    for(i=0;i<Si;i++)
    {
        printf("%3d\t%3d\t%3d\t%5.1f\t%c\n",kor[i],eng[i],tot[i],ave[i],grade[i]);
    }
    return 0;
}

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

[대체] 10. 정렬하기  (0) 2011.02.17
[대체] 9. 배열 예제  (0) 2011.02.17
[대체] 8.다중반복문  (0) 2011.02.16
[대체] 7. 반복문(do~while)  (0) 2011.02.16
[대체] 6. continue;  (0) 2011.02.16
Posted by 마마필로 :