C/C++/API/MFC

API: C로 윈도우 프로그래밍을 하는 것

MFC: C++의 개념으로 API를 클래스로 싸논 것

 

프로그래밍 4단계

1. 프로그램 작성 (.cpp,.cs)

2. 컴파일 (*.obj)

3. 링크(.obj+.stl)

4. 실행파일 (.exe)

 

정적링크 vs. 동적링크

정적링크: .exe로 실행되는 파일

동적링크: .dll로 따로 빼놓는 것

 



메모리 구조

Stack-지역변수(자동변수)/수시로 썼다 지워졌다 함

Queqe-시스템메시지..

Data-전역변수, 정적변수(static)/컴파일시 크기가 결정되면 바뀌지 않음

Code segment-프로그램 코드가 올라가는 영역

Heap-주소값(포인터:포인터변수, 배열의 이름, 함수이름->함수포인터  >> 모두 포인터에 포함됨), 함수원형

 

cf.)

int a[30];

int* pA;

 

sizeof(a)? 120

sizeof(pA)? 4

포인터형 변수의 크기는 주소값을 담기때문에 자료형에 상관없이 무조건 4byte

 




전처리기- 컴파일되기 전에 미리 실행되는 것들(#include, #define등)

매크로

#define                                            PI             3.14

매크로 언어(전처리기 지시자)        매크로상수        값

 

static 값을 유지해야 할때 사용(ex. 함수가 리턴했을 경우 값이 변할 수 있는데 기존의 값으로 연산하고 싶을 때

static으로 선언해서 재사용 할 수 있음)

 

전역에 static을 붙이는 경우,

전역일 경우 다른 파일에서도 그 값에 접근할 수 있는데, static을 붙여 주면 그 프로그램에서만 사용 가능해진다.

 



■ printf()

 

출력제어문자(escape squence)

\n 줄바꿈

\r 캐리지 리턴

\b 백스페이스

\a 경고음

\" 겹따옴표

\' 홑따옴표

\\ 역슬레쉬

\t 탭

 

연산자=함수

%나머지 연산자

ex) rand()%10이라고 하면 0~9 사이의 값만 임의로 출력, 이런 식으로 범위를 지정해줄 때 사용.

 

관계 연산자는 리턴을 bool타입으로 함(TRUE or FALSE)

Posted by 마마필로 :

C언어에서 제공하는 문자열 처리함수를 이용하기 위해서는 <STRING.H>헤더파일이 필요하다.

 

<자주 사용되는 문자열 처리 함수>

1. strcpy(to, from)

원형: char *strcpy( char *strDestination, const char *strSource );

기능: from의 문자열이 to에 복사된다. 배열의 경계를 검사하지 않는다.

 

2. strcat(to, from)

원형: char *strcat( char *strDestination, const char *strSource );

기능: 문자열을 결합시켜 준다. 즉, from의 문자열이 to에 추가된다. 배열의 경계를 검사하지 않는다.

 

3. strlen(str)

원형: size_t strlen( const char *string );

기능: 문자열의 길이, 즉 문자 수를 반환한다. null 문자는 포함되지 않는다.

 

4. strcmp(str1, str2)

원형: int strcmp( const char *string1, const char * string2 );

기능: 두 문자열을 비교하여 다음 중 하나의 Return Value를 반환한다.

0: str1, str2 두 문자열이 같다.

양수: str1이 str2 보다 크다.

음수: str1이 str2 보다 작다.

Posted by 마마필로 :

키보드로 어떤 값을 입력 받기 위해 가장 먼저 배운 함수는 scanf()였다.

그러나 scanf()함수는 단어 입력 함수로, 공백을 포함한 문자열을 읽기 어렵다.

예를 들어"kim hyo jeong"이라고 입력받고 출력할 경우 "kim"만 출력되는 식이다.

이런 이유로 문자열 입력의 대부분은 C 표준 라이브러리 함수인 gets()함수로 처리한다.

 

1. gets()

사용자가 <Enter>키를 입력할 때까지 문자들을 읽으며(개행문자가 나타날 때까지), 이 문자들은 포인터가 가리키는 배열에 저장한다.

문자열의 경우 공백을 포함하는 경우가 많기 때문에 scanf()함수보다 gets()함수를 많이 사용 한다.

 

1.1 gets()함수의 원형

char *gets(char *string);

 

2. puts()

string이 가리키는 문자열을 화면에 출력하며, 자동으로 줄 바꿈('\n')기능을 포함한다.

 

2.1 puts()함수의 원형

int puts(char *string);

Posted by 마마필로 :

1. for문     2. 다중 for문     3. while문     4. do-while문     5. continue문

 



1.for 문

■ 형식 : for(초기식; 종료식; 증감식)

         {

문장-1;

문장-2;

......

문장-n;

문장;

          }

■ 실행 순서 : 초기식 → 종료식에서 조건확인 → 조건이 만족할 경우, 문장 수행 → 증감식 → 종료식에서 조건확인 → 문장수행 → 증감식...

■ 특징

-문장의 수행은, 초기식 수행 후 종료식의 조건을 검사하여 참인 경우 지정된 문장을 수행하고 증감식을 수행

-증감식의 단위는 자유롭게 할 수 잇으며, 문자 처리, 수식 처리 및 기하학적인 증감도 가능

-필요 없으면 하나 이상의 수식 생략 가능

-매개변수는 루프 내에서 변화할 수 있으며, 초기식은 초기화 과정이 아니어도 됨

 ex)

for (i=3; i<30; i+=3) statement;

for (c='a'; c<='z'; c++) statement;

 

2. 다중 for문

: for문 안에 다른 for 문을 포함한 문

ex) 구구단 프로그램

 

 

3. while문

■ 형식 :  while(조건) { statement;}

조건을 먼저 확인 후, 조건을 검사한 결과가 참인 동안 반복 실행. 거짓이면 block을 벗어남

최초의 조건이 거짓일 경우 명령문들이 한번도 수행되지 않음

 

 

결과) 

 

4. do-while 문

 ■ 형식 : do { statement; } while (조건);

do 이하의 문장을 수행한 후 조건 비교. 참이면 반복 실행, 거짓이면 block 벗어남

조건이 참인 동안 명령문 반복 실행. 최소한 명령문 1번은 실행.

 

ex) 1-10까지의 합

결과)

 

5. continue 문

: while, do-while, for 문의 루프 속에서만 쓰이면서 루프의 안쪽에 있는 일부의 명령을 건너뛰어

조건식을 확인하고 다시 루프를 반복하는 용도

 

ex) 1-20까지의 수 중에서 짝수의 합

 

결과)

 

 

Posted by 마마필로 :

1. if문     2. switch문     3. break문

 



1. if 문

1) if 문

형식 : if 조건 statement;

조건이 참이면 조건 뒤의 문장 수행, 거짓이면 다음 문장 수행

 

ex) if (min < a) max = a; //min의 값이 a의 값보다 작다면 a의 값을 max 넣어라. 그렇지 않다면 다음 문장 실행

 

2) if - else 문

형식 : if (조건) statement1; else statement2;

조건이 참이면 조건 뒤의 문장(statement1)  실행, 거짓이면 else 뒤의 문장(statement2) 실행

 

ex)

int x = 10;

int y = 20;

 

if (x > y)

max = x;

else

max = y;

 

※ if 문과 if - else 문에서 여러 문장을 사용 할 때

:하나의 명령문일 때는 상관없지만 둘 이상의 문장은 중괄호{  }로 묶어준다

 

ex) 

 

3) 다중 if문(nested if statement)

: if문의 명령문 속에 if문이 있는 조건문

 

2. switch문

1) 식의 값을 여러 가지로 판단하여 각 값에 따라 실행할 명령을 선택하여 진행시킬 수 있는 조건문

2) 분기 조건을 여러 가지로 명시 할 수 있음

형식 :    switch (식)

{

   case n1 : statement 1;

   case n2 : statement 2;

..........

   case nr : statement r;

   default : statement n;

}                                         // 모든 조건에 맞지 않다면 default문 실행

ex)

 

결과)

 

 

위의 결과값처럼, b를 입력 받은경우, "부산"을 출력후 종료하지 못하고, 아래의 case문을 다 실행한다.

이러한 결과를 막아주기 위한 것이 break문 이다.

 

3. break문

: 해당 block을 탈출하여 block 다음으로 실행순서를 옮김(if문의 경우 break문을 사용할 수 없음)

ex) 2번의 switch문에 아래와 같이 break문 추가 

 

결과)

 

b를 입력하면 "부산"을 출력하고 해당 블럭을 빠져나온다.

 

 

Posted by 마마필로 :

[기초] 3. 연산자

2011. 3. 4. 03:22 from PROGRAMMING/C

1. 산술연산자    2. 단항 연산자    3. 관계 연산자    4. 논리 연산자    5. 비트 연산자    6. 3항 연산자

※자료의 형(Type)

 



1.산술연산자(arithmetic operator)

: 덧셈, 뺄셈, 곱셈, 나눗셈등을 하는 것

 

: 마이너스전환-> 변수 앞에 붙여 부호를 바꿔줌

 

ex)

n = 23 / 5 -----> n = 4 (몫)          // 오른쪽에 계산된 결과값이 왼쪽으로 치환됨

n = 23 %5 -----> n = 3 (나머지)    

동일한 우선순위라면 왼쪽 -> 오른쪽으로 우선 순위 부여됨

 

2. 단항 연산자(unary operator)

: 증가 연산자와 감소 연산자가 있으며, c언어만이 가지고 있는 편리한 계산 연산자

이항 연산자와 달리 1개의 자료를 대상으로 연산을 실행하게 되므로 단항 연산자라 함

 

++a: 1을 먼저 증가 시킨 후 대입, a++: 값을 먼저 대입 시킨 후 1증가

ex)

 

 

q1) 실행결과 예측해보기

 

 

결과)

 

 

3. 관계 연산자(relational operator)

: 두 수간의 대소 관계를 평가하는 연산자. 관계가 성립되면 참(true)이 되어 1로, 성립되지 않으면 거짓(false)이 되어 0으로 표시.

 

 

4. 논리 연산자(logical operator)

: AND, OR, NOT의 논리 연산을 수행하는 연산자로서 연산 결과가 참일 때는 1, 거짓일 때는 0이 됨

 

 

 

5. 비트 연산자(bit operator)

: 비트 단위로 연산하는 연산자

 

 

ex)

 

6. 3항 연산자

 

 

 

■ 자료의 형(Type)

 



Posted by 마마필로 :

1. 변수

1.1 정수(integer)형 변수    1.2 실수(real)형 변수

2. 상수

2.1 문자형(character) 상수    2.2  정수형(interger) 상수    2.3 기호 상수    2.4 문자열(String) 상수

  



1 변수(Variable)

 

1.1 정수형(integer) 변수

 

1) 기본형 : 데이터형명 변수명;  ==> int 변수명;

2) 특징

-기억장소의 바이트 수에 따라 int(2byte), short(2byte), long(4bute)로 구분

-사용전에 모두 선언되어야 함

-값 출력 시에 printf() 변환문 사용 --> %d(10진수), %o(8진수), %x(16진수)

-자료형 선언과 동시에 초기값 부여 가능

 

ex)

 

 

결과)

 

 

1.2 실수형(real) 변수

1)특징

-소수점이 포함된 자료형

-정수형과 달리 지수부와 소수부로 구분되어 수치자료가 기억됨

-예약어 float, double 등으로 선언

-%f (소수점 포함 출력), %e(지수형으로 출력)

 

ex)

 

결과)

 

 

 

2. 상수(Constant)

 

2.1 문자형(character) 상수

1) 홑 따옴표(' ')로 묶인 오직 1개의 문자

2) 문자형 변수 선언 : char

3) printf()로 출력시 변환코드 %c 사용

4) %c 대신 %d를 지정해 주면 문자의 ASC|| 코드값을 10진수로 출력해 줌

ex)

 

결과)

 

 

 

2.2  정수형(interger) 상수

기본적으로 프로그램 속에서 사용하는 수치로 10진수로 취급하며, 8진수, 16진수, long상수가 있음

-10진 상수

-8진 상수 : 0을 맨앞에 붙임

-16진 상수 : 0x 또는 0X를 맨앞에 붙임

-long 상수 : 수치 마지막에 L을 붙임

ex)

 

결과)

 

 

결과 값의 100은 같은 100이 아니라 각각 10진수의 100, 8진수 100(10진수의 64), 16진수 100(10진수의 256) 이다.

 

2.3 기호 상수

-프로그램 선언 부분에서 #define으로 상수 선언

-일반적으로 변수 이름은 소문자, 기호 상수의 이름은 대문자로 씀

ex)

 

결과)

 

 

2.4 문자열(String) 상수

-문자열(String) 상수는 겹 따옴표("  ")로 싸인 문자들의 집합

-printf()로 출력시 변화코드 %s 사용

-문자열의 마지막 바이트에는 문자열의 끝을 표시하는 nill 문자 \0이 ASC|| 코드값으로 저장됨

 

 

-문자열은 문자의 배열로 기억되면 끝에 \0을 추가시켜 access할 때 감지할 수 있도록 함

-제어문자(escape 문자)

ASC||코드 중에서 0x20(16진수 20)미만의 코드는 출력이 불가능한 문자인데, 이들 코드를 문자로 표현할 때,

escape문자 사용. escape 문자는 "\"다음에 한 개의 문자가 옴.

 

ex)

\0 : null

\a : 소리

\b : back space

\f : form feed

\n : new line

\' : ' 출력

\" : " 출력

\? : ? 출력

 

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

[기초] 4. 제어구조 1 (if, switch, break)  (0) 2011.03.04
[기초] 3. 연산자  (0) 2011.03.04
[기초] 1. C언어 개요  (0) 2011.03.03
[대체] 성적표구조체배열(사용자함수)  (0) 2011.02.18
[대체] 구조체배열  (0) 2011.02.18
Posted by 마마필로 :

[기초] 1. C언어 개요

2011. 3. 3. 03:18 from PROGRAMMING/C

■ 프로그램 작성 및 실행 과정

1. 프로그램 작성

source program(확장자 *.C)

원시프로그램

 

2. Compile

object program (확장자 *.OBJ)

 

3. Link/Edit

Execute program 확장자 *.exe)

실행프로그램

 

1→2→3의 순서로 프로그램이 만들어져서 실행됨

 

 

■ C언어의 개요

1. 구조

-모든 C프로그램은 main()이라는 함수로 시작

-실행을 지시하는 문장은 중괄호({ })로 묶어서 블럭화

-모든 문장의 끝은 ;

-/* */ 사이의 내용은 주석처리

-c프로그램은 하나이상의 함수로 구성, 함수는 머리 부분과 본체로 이루어짐

 

2. 구성요소

1) 예약어(Reserved word)

: 용도가 미리 정해져 있는 단어. 해당 용도로만 사용.

-반복문 : for, while, do~while

-조건문 : if, else, switch, case, default

-분기문 : break, continue, goto

-데이터 형 : char, int, short, long, unsigned, float, double, struct, union, typedef

-연산자 : sizeof

 

2) 식별어(Identifier)

-원시 프로그램에서 쓰이는 예약어 이외의 변수, 함수명, 배열명 등을 지칭하는 명칭

-작성규칙에 따른다

# 첫자는 영문자로 시작

# 영문자와 숫자를 혼용할 수 있지만, 영문 대/소문자는 다른 문자로 취급

# 밑줄은 식별어의 처음, 끝, 중간에 쓸 수 있음

# 예약어를 식별어로 사용할 수 없음

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

[기초] 3. 연산자  (0) 2011.03.04
[기초] 2. 변수(Variable)와 상수(Constant)  (0) 2011.03.03
[대체] 성적표구조체배열(사용자함수)  (0) 2011.02.18
[대체] 구조체배열  (0) 2011.02.18
[대체] 13. 구조체  (0) 2011.02.18
Posted by 마마필로 :

/*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 마마필로 :

[대체] 구조체배열

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

/*8구조체배열.c

*/
#include<stdio.h>
#include"Sungjuk.h"
typedef struct Sungjuk score;//구조체 이름 변경(꼭할필요는 없으나 작업이 편리해짐)
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';
         }
    }
   //등수구하기
    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;
}



/*9판매.c
#1)
    코드? a
    수량? 10
#1)
...
-----------------------*판매보고서*----------------
코드  제품명  수량  단가  판매금액  판매순위
 X
 코드가  a(A)면 제품명이 지우개, 단가 700
 코드가  b(B)면 제품명이 도화지, 단가 500
 코드가  c(C)면 제품명이 샤  프, 단가 3900
 코드가  d(D)면 제품명이 노  트, 단가 2500
 그외의 코드면 제품명이 크래파스, 단가 7800
 금액=수량*단가, 순위는 금액으로 구함
 비고 판매수량이 20개 이상이면 양호 그렇지않으면 ★출력
*/
#include<stdio.h>
#include<string.h>
#include<ctype.h>
#include"Panmae.h"
typedef struct Panmae pan;
int main()
{
    int i,j;
    pan p[5];
    for(i=0;i<5;i++)
    {
        printf("#%d)\n",i+1);
        printf(" 코드? ");
        //p[0].code=getchar();
        fflush(stdin);
        scanf("%c",&p[i].code);
        printf(" 수량? ");
        scanf("%d",&p[i].su);
        switch(tolower(p[i].code))
        {
            case 'a':strcpy(p[i].jepum,"지 우 개");p[i].dan=700;break;
            case 'b':strcpy(p[i].jepum,"도 화 지");p[i].dan=500;break;
            case 'c':strcpy(p[i].jepum,"샤    프");p[i].dan=3900;break;
            case 'd':strcpy(p[i].jepum,"노    트");p[i].dan=2500;break;
            default:strcpy(p[i].jepum,"크래파스");p[i].dan=7800;
        }
        p[i].kum=p[i].su*p[i].dan;
        if(p[i].su>=20)
        strcpy(p[i].bigo,"양호");
        else strcpy(p[i].bigo,"★");
    }
    //순위
    for(i=0;i<5;i++)
    {
        p[i].rank=1;
        for(j=0;j<5;j++)
        {
            //if(i==j) continue;
            if(p[i].kum < p[j].kum) p[i].rank++;
        }
    }
    printf("-----------------------*판매보고서*----------------\n");
    printf("코드\t제품명\t수량\t단가\t판매금액\t판매순위\t비고\n");
    for(i=0;i<5;i++)
    {
        printf("%c\t%s\t%d\t%d\t%d\t%d\t%s\n",p[i].code,p[i].jepum,p[i].su,p[i].dan,p[i].kum,p[i].rank,p[i].bigo);
    }

    return 0;
}

 

/판매보고서의 header파일 "Panmae.h"/

struct Panmae
{
    char code;
    char jepum[15];
    int su;
    int dan;
    int kum;
    int rank;
    char bigo[10];
};

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

[기초] 1. C언어 개요  (0) 2011.03.03
[대체] 성적표구조체배열(사용자함수)  (0) 2011.02.18
[대체] 13. 구조체  (0) 2011.02.18
[대체] 12. 포인터  (0) 2011.02.18
[대체] 사용자함수  (0) 2011.02.18
Posted by 마마필로 :