[기초] 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 마마필로 :

///////////////////////////////////미완성 입니다.////////////////////////////////////////

 

using System;

namespace CS0221
{
    class SuperPack
    {
        static void Main(string[] args)
        {
            Emp b = new Emp("이름","나이","키","IQ");
            b.OutEmp;           
        }
    }
}

struct Emp
{
    public string NAME;
    public int AGE;
    public double height;
    public double IQ;
    public Emp(string aName, int aAge, double aHeinght, double aIQ)
    {
        Name = aName;
        Age = aAge;
        Height = aHeight;
        IQ = aIQ;
    }
    public void OutEmp()
    {
        Console.WriteLine("이름 : {0}, 나이 : {1}, 키 : {2}, IQ : {3}", Name, Age, Height, IQ);
    }
}

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

[0304과제] 연산자 종류(C, C#)  (0) 2011.03.06
[0304과제] 자료형(type)의 종류  (0) 2011.03.06
chap.10 닷넷 클래스  (0) 2011.02.22
chap.9 델리게이트  (0) 2011.02.21
chap.8 인터페이스  (0) 2011.02.11
Posted by 마마필로 :

1. 루트 클래스

1.1 object 1.2 객체의 비교 1.3 리플렉션

 

2.string

2.1 string의 멤버 2.2 StringBuilder 2.3 서식화 2.4 정규식

 

3. 컬렉션

3.1 ArrayList 3.2 HashTable 3.3 스택과 큐

 

4. 유틸리티 클래스

4.1 DateTime 4.2 Math 4.3 Environment


 

1. object

닷넷 라이브러리 클래스의 가장 상위계층에 존재하는 루트 클래스.

닷넷의 모든 클래스는 선언문에 명시적인 상속 지정이 없더라도 암시적으로 object를 상속받도록 되어 있음.

<object내의 메서드>

 

메서드 

 속성

 설명

 ToString

public virtual   객체를 문자열 형태로 표현. 디폴트로 클래스 이름을 리턴하는데 필요 시 재정의 가능. 
 GetType  public  객테의 타입 정보를 제공하는 System.Type 객체 리턴
 MemberwiseClone  protected  객체의 멤버끼리 일대일 복사. 얕은 복사.
 GetHashCode  public virtual  객체를 검색하기 위한 해시값 리턴.
 Equals

 public virtual

 public static

 두 객체를 비교하여 같은 객체인지 판별. 널 객체와 비교할 수 있는 정적 버전도 중복 정의되어 있음.
 ReferenceEquals  public static  객체가 같은 대상을 가리키고 있는지 비교.
 Finalize 또는 ~Object();  protected virtual  정리 작업을 수행하는 파괴자. Finalize라는 이름을 쓰는 대신 클래스명 앞에 ~를 붙임.

 

2. 리플렉션(Reflection)

실행 중에 클래스나 객체의 타입 정보를 조사하는 기능

실행 중에 다른 모듈에 선언된 인스턴스를 생성, 메서드 호출 가능

 

3. String

닷넷에서 문자열을 표현하기 위한 별도의 클래스.

<String에 포함된 문자열 관리 메서드들>

Insert : 지정한 위치에 문자열 삽입

Remove : 지정한 범위에 문자 삭제

Replace : 지정한 문자를 다른 문자로 대체

Compare : 문자열 객체끼리 비교. 대소문자 구분, 언어 정보 등을 지정할 수 있으며 부분 문자열만 비교도 가능

IndexOf : 문자, 또는 부분 문자열을 검색하여 그 인덱스 리턴. 발견되지 않으면 -1리턴.

IndexOfAny : 주어진 문자집합 중 최초로 검색되는 위치 검색하여 그 인덱스 리턴

LastIndexOf : IndexOf와 같되 역검색

Contains : 부분 문자열이 있는지 조사

SubString : 지정한 위치부터 끝까지 부분 문자열을 만들어 리턴

Trim : 앞뒤의 불필요한 공백 문자 제거

TrimStart : 문자열 앞쪽에 있는 지정한 문자들 제거

TrimEnd : 문자열 뒤쪽에 있는 지정한 문자들 제거

ToLower : 소문자로 변환한 문자열 리턴

ToUpper : 대문자로 변환한 문자열 리턴

PadLeft : 지정한 폭으로 늘리고 왼쪽에 공백 삽입

PadRight : 지정한 폭으로 늘리고 오른쪽에 공백 삽입

Split : 문자열을 특정 문자를 기준으로 한 부분 문자열 배열로 나눔

Format : 서식 조립

 

4. StringBuilder

문자열을 반복적으로 조작할 때 사용

 

5. 컬렉션(Collection)

변수들의 조직적인 집합.

ArrayList / HashTable / 스택 / 큐

 

6. 유틸리티 클래스

DateTime / Math / Environment

 

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

[0304과제] 자료형(type)의 종류  (0) 2011.03.06
[0221과제] 수퍼팩(C#)  (0) 2011.02.23
chap.9 델리게이트  (0) 2011.02.21
chap.8 인터페이스  (0) 2011.02.11
chap.7 클래스 상속 3. 추상 클래스  (0) 2011.02.11
Posted by 마마필로 :

chap.9 델리게이트

2011. 2. 21. 00:39 from PROGRAMMING/C#.NET

1. 델리게이트

1.1 메서드 참조

1.2 공변성

1.3 델리게이트 활용

 

2. 이벤트

2.1 멀티캐스트

2.2 이벤트

2.3 익명 메서드


 

1. 델리게이트(Delegate)

1) 메서드를 가리키는 참조형

2) 메서드의 번지를 저장하거나 다른 메서드의 인수로 메서드 자체를 전달하고 싶을 때 사용(C++의 '포인터'에 대응)

3) 포인터와 선언형식 차이: 포인터(인수의 타입만 지정), 델리게이트(완전한 형식 요구)

4) 형식: 지정자 delegate 리턴타입 이름(인수목록);

→완전한 형식을 요구하므로 형식 인수 이름도 일단은 지정되어야 함.

5) System.Delegate로부터 파생되는 하나의 클래스 타입이어서 꼭 클래스에 소속되지 않고 네임스페이스에 바로 소속 가능.

클래스가 선언될 수 있는 모든 곳에 델리게이트도 선언 가능 하지만, 클래스 바깥쪽에 선언하는 것이 관례.

6) 타입이므로 그 자체만으로 메서드를 가리킬수 없으며 인스턴서 생성 후 메서드를 가리키도록 초기화 해야함

7)          int method(string s)

delegate int dele(string s)

① 리턴 타입과 인수는 그대로 옮겨 적고

② 메서드 이름을 델리게이트 이름으로 바꾸고

③ 앞에 delegate 키워드를 붙인다.

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

[0221과제] 수퍼팩(C#)  (0) 2011.02.23
chap.10 닷넷 클래스  (0) 2011.02.22
chap.8 인터페이스  (0) 2011.02.11
chap.7 클래스 상속 3. 추상 클래스  (0) 2011.02.11
chap.7 클래스 상속 2. 재정의  (0) 2011.02.11
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 마마필로 :

[대체] 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 마마필로 :