1580, 9/79 회원가입  로그인  
   geniusevil
   geniusevil의 가벼운 C언어 배우기 2

http://www.hackerschool.org/HS_Boards/zboard.php?id=Free_Lectures&no=434 [복사]


오늘도 geniusevil의 가벼운 c언어를 계속 이어나가보겠습니다.

2일째지요? 어제 배웠던 내용을 기억하실까 모르겠네요.

1일째를 못보신분들은 1일째를 보고 오시기 바랍니다.

1일째 주소   :   http://www.hackerschool.org/HS_Boards/zboard.php?id=Free_Lectures&page=1&sn1=&divpage=1&sn=off&ss=on&sc=on&select_arrange=headnum&desc=asc&no=433

요약을 해보도록 하지요

- 1일째 내용 요약 -

#include <stdio.h>
- #include 는 헤더파일을 불러온다. 헤더파일은 함수들이 정의되어있는 파일이다.
stdio.h 라는 헤더파일은 입력,출력에 관련된 함수가 정의되어있다.

main() {    }
- 메인은 프로그램의 몸체이다.

printf()
- 문자열이나 변수에 대한 값을 출력하는 함수이다. %d 를 넣어주면 정수형 변수에 대한 값을 출력할수 있다.

//내용
- 주석이다. 주석은 프로그램에 영향을 주지않으며 소스 옆에 적는 프로그래머의 설명이다.

int name;
- 변수를 선언한다. 변수는 상자라고 할수있다. 숫자를 담을수도 있고 문자를 담을수도 있다.
변수와 변수는 서로 연산이 가능하다.

+,-,*,/,%,++,-- 등의 연산자는 기본으로 아셔야합니다.

- 요약끝. 1일째 요약의 경우 1일째강좌를 보지 않으면 이해가 잘 안갈수 있으므로
꼭 1일째 강좌를 보고오세요! -


이제 2일째 강좌를 시작합니다

----------------------------------------------------------------------

예제3
1:#include <stdio.h>
2:
3:main()
4:{
5:        int intvari=32767;        //int형 변수 선언과 동시에 값 32767 저장
6:        char charvari='A';                //char형 변수 선언과 동시에 문자 A 저장
7:        long longvari=214748367;                //long형 변수 선언과 동시에 214748367 저장
8:        float floatvari=3.14;                //float형 변수 선언과 동시에 3.14저장
9:        double doublevari=3000.143;                //double형 변수 선언과 동시에 3000.143저장
10:
11:        printf("int형 변수 %d \n", intvari);
12:        printf("char형 변수 %c \n", charvari);
13:        printf("long형 변수 %ld \n", longvari);
14:        printf("float형 변수 %f \n", floatvari);
15:        printf("double형 변수 %f \n", doublevari);
16:}

프로그램설명: 변수 유형에따라 알맞은 값을 저장하고 알맞은 변환지정자를 사용하여 출력합니다

주의! - 행 번호는 설명을 위해 적은것이니 여러분 컴파일러에 행 번호는 입력하지마세요

5행 - 9행을 보시면 변수선언이라는 것은 아실겁니다.
그런데 변수를 선언하는 동시에 값을 저장했죠? 이렇게 하면 2줄 들어갈것을 1줄로 줄일수있습니다.
처음 보는 변수 유형인 char,long,float,double들은 각각의 특징이 있습니다.
아래 -꼭 외워야 할것!-에서 설명합니다.

11행 - 15행은 각각의 변수값을 출력합니다. 아시죠?
그런데 변수유형마다 변환지정자(%d나 %c같은것)가 바뀌죠? 특징에따라 변환지정자가 다양합니다.
변환지정자 종류도 아래에 -꼭 외워야 할것!-에서 설명합니다.

이해가 가시겠죠 ^^?

.
.
.
.
.

----- 꼭 외워야 할것! ------

- 변수 유형

변수유형        키워드                범위

정수                int(2바이트)        -32768 ~ 32767

short정수        short(2바이트)        -32768 ~ 32767        

긴 정수                long(4바이트)        -214748368 ~ 214748367

문자                char(1바이트)        -128 ~ 127

부호없는정수        unsigned int        0 ~ 65535

부호없는문자        unsigned char        0 ~ 255

부호없는긴정수        unsigned long        0 ~ 4294967295

단정도부동소수점 float(4바이트)        1.2E-38 ~ 3.4E38^1

배정도부동소수점 double(8바이트) 2.2E-308 ~ 1.8E308^2


참고로 범위는 그 변수에 저장될수 있는 값의 한계이며 범위는 외우실 필요 없습니다.
다만 어느정도 알고는 계셔야겠죠.



- 변환지정자

변수를 출력하는 변환지정자는 변수에 맞는것들이 따로 있습니다.

예를들어 int와 %d가 맞는것이지요.

%d         정수 (int,short)

%ld         긴 정수 (long)

%f         부동소수점 (float)

%lf        배정도부동소수점 (double)

%c        문자 한개 (char)

%s        문자열 (char의 배열)

%u        부호가 없는 정수 (unsigned int)

%lu        부호가 없는 긴 정수 (unsigned long)





예제4
1:#include <stdio.h>
2:
3:main()
4:{
5:        int sep;
6:        printf("1과 2중 마음에 드는 숫자를 입력하세요 --> ");
7:        scanf("%d", &sep);        //프로그램 사용자로부터 데이터를 입력받습니다
8:
9:        printf("\n");
10:
11:        if(sep == 1)                //sep이 1과같을경우 실행
12:        {
13:                printf("1을 입력하셨습니다\n");
14:        }
15:        else if(sep == 2)        //sep이 2와 같을경우 실행
16:        {
17:                printf("2를 입력하셨습니다\n");
18:        }
19:        else                        //두 조건 다 만족 못할경우 실행
20:        {
21:                printf("1이나 2가 아닙니다\n");
22:        }
23:}

프로그램설명 : 1이나 2를 입력받고 무엇을 입력했는지 알려줍니다

7행은 scanf()함수입니다.

scanf("%d", &sep);

scanf()함수는 프로그램 사용자에게서 데이터를 입력받습니다.
입력받은 "변환지정자"의 유형의 데이터를 &변수에 저장합니다.
모든 변환지정자, 변수유형이 가능합니다.

예를들어 long형의 변수를 입력받고자 하면

long abc;

scanf("%ld", &abc);

라고 하면되지요. 변수이름 앞에 &를 붙여주는 이유는 변수의 주소를 가리키기 때문입니다.
변수의 주소? 지금은 알 필요가없습니다 ^^ 나중에 포인터가 나오면서 알게되기 때문이죠.
지금은 변수이름앞에 &를 붙여준다. 정도만 아시면 됩니다.

int a,b,c;

또한 scanf("%d %d %d", &a, &b, &c); 를 하면 여러개의 데이터를 한꺼번에 받을수 있습니다.

예)
int intvri;
char charvri;

scanf("%c %d", &intvri, &charvri);

입력창 : 74 K

등으로 쓰는것이 가능합니다.

주의! - scanf함수를 쓸때 변수이름앞에 &를 빼먹지 않는다.


11행 - 22행 까지는 if()함수가 쓰입니다
if는 조건문을 보고 조건이 만족되면 {} 안에 있는것을 실행합니다.
조건문이란? (sep == 1) 처럼 비교되는문. 1일째에서 배웠죠?
if도 대괄호로 분리합니다 ( {} )

15행의 else if는 위에 있는 if가 만족되지 않을경우 else if의 조건문을 검사합니다.
여기서 주의할점은 만약 if의 조건이 만족해서 실행이 됐을경우엔 else if를 검사하지않고 그냥 넘어갑니다.
실행을 아에 안하는거죠.
또한 else if는 여러개 쓰실수 있습니다.
if ()
{
}
else if ()
{
}
else if ()
{
}     등으로 말이지요.




그 아래 19행의 else는 if의 조건문과 else if의 조건문이 둘다 만족을 하지 못할때 실행됩니다.

이해 되시겠죠 ^^?

.
.
.
.
.




------ 알아둘것! ------

그리고 기호상수라는것이 있습니다.

#define ONE 1
이렇게 선언하게 되면 (보통 main()함수 위에다 선언합니다)
ONE라는 문자는 1과 똑같게 됩니다. 이름은 관습적으로 대문자로 사용합니다. 변수랑 헤깔릴수 있거든요.

만약 if(변수 > 1)은    if(변수 > ONE)와 같이 쓸수있는거죠
이게 왜필요하냐? 라고 물으실수도 있겠지만 나중에 c언어를 많이 배우다보면 유용하다는걸 알게되실겁니다^^

#define으로 정의하는 방법도 있고 또 다른 방법이 있습니다.

const int one = 1;
이렇게 선언하면 one는 1의 값을 가지게 되고 절대 수정할수 없는 변수가 됩니다.
만약 이 const 변수를 수정하려고 한다면 컴파일을 할수 없을겁니다.

one = 5;   // 컴파일 할수없음! const변수는 수정불가

이 두 기호상수의 차이점은 나중에 포인터를 공부하게되면 알수있을겁니다.




- 실용적 프로그램 만들기! -

이번엔 계산기 프로그램을 만들어보겠습니다 낄낄..
대단한건 아니구요.. - -; 두 수를 입력받고 더하기 빼기 곱하기 나누기를 하는 초보적 계산기입니다.

그래도 가슴이 두근거리지않나요 ?! 처음으로 생활에서 쓸수있는 프로그램을 만든다는거..
저는 처음 c언어를 만질때 이 프로그램을 만든 후 두근두근거렸답니다 ^^ I can do it!


프로그램1 - 두숫자계산기
#include <stdio.h>
main()
{
        #define PLUS 1     //기호상수 정의
        #define MINUS 2
        #define AGAIN 3
        #define DIVIDE 4

        int sep, first, second, dival; //메뉴,처음값,둘째값,나머지
        long val;         //val은 나오는값이며 큰값을 받기위해 long형 변수
        printf("두수 계산기입니다. 계산방식을 고르세요\n");
        printf("덧셈:1  뺄셈:2  곱셈:3  나눗셈:4  ->  ");
        scanf("%d", &sep);
        printf("첫 수를 입력하세요");
        scanf("%d", &first);
        printf("두번째 수를 입력하세요");
        scanf("%d", &second);

        printf("\n");

        if(sep == PLUS)    //기호상수를 사용하여 비교했음 (sep==1)과 같은효과
        {
                val = first + second;
                printf("값은 %ld입니다", val);
        }
        else if(sep == MINUS)
        {
                val = first - second;
                printf("값은 %ld입니다", val);
        }
        else if(sep == AGAIN)
        {
                val = first * second;
                printf("값은 %ld입니다" ,val);
        }
        else if(sep == DIVIDE)
        {
                val = first / second;
                dival = first % second;

                printf("몫은 %ld, 나머지는%d입니다", val, dival);
                // long 변수의 경우 소수를 출력 못하므로 몫과 나머지를 분리한다
        }
        else
        {
                printf("1 - 4번 중 하나를 고르셔야합니다");
        }

}



위에 있는것정도는 작동원리를 해석하실줄 아셔야합니다 꼭이요 ^^

또 하나, 위 프로그램의 경우 switch()함수를 이용하면 더욱 효율적인 프로그래밍이 가능합니다.
if의 경우엔 else if를 다 검사하고 넘어가는 반면에 스위치는 딱 그 숫자 있는곳을 짚어서 실행하거든요.
잘 이해가 안되도 괜찮습니다 ^^ switch()는 다음날에 배울거거든요.

그리고 숙제를 낼게요.

숙제 ! - 위의 프로그램은 나눗셈에서 나머지가 있으면 몫과 나머지를 분리하여 출력하였다.
몫과 나머지를 분리하지 말고 몫을 소수로 출력하여서 나머지를 없앤 프로그램을 만들어보아라.

숙제는 꼭 해보시는게 좋습니다 ^^

제가 검사할 방법은 없지만요.. :) 여러분의 실력 향상을 위해 해보세요.


뭐든지 모르겠다 싶으면 언제든 질문하세요. 댓글로 질문하셔도 되고 제 싸이홈피에 오셔서 질문하셔도 됩니다^^


Copyrightⓒ2006 geniusevil( http://www.cyworld.com/01028852864 ) .All rights reserved
↑ 혹시나 퍼가시려면 ^^;;; 이 표시만 안지우시면 퍼가셔도 됩니다

  Hit : 9364     Date : 2006/01/09 01:20



    
X-line 숙제 팁 ......(float) 2006/01/09  
ckdmsghcoh ㅠㅠ 나눗셈 연산에 소수점은 풀룻으루하면 %f 가되잖아여 나머지계산에서두 valdl idval 루 변할때 fval루 바꺼야되나요? 2006/01/09  
ckdmsghcoh 제가지금 Dev-C++ 를쓰는데 모든 부분애ㅔ 오류가 나와여 2006/01/09  
geniusevil 리플로 답변해놓았습니다 ^^ 참고하세요 2006/01/09  
prosper 항상 C언어를 보면 이와 같은 형태로 나가는것이 안타깝습니다. 문법위주와 개념이해는 좋으나.. 플로어 차트등 먼저 도식화 과정을 설명했더라면.. 2006/01/09  
hr33 c언어 쌩초보인데요 다이해합니다 float 를 변수형 어쩌구해서 맨끝에 long형대신 쓰는거자나여 아닌가여? 아무튼 그런데여 f5를 누르면 v c++ 에서 dos창이뜨구 프로그램이 2006/01/20  
hr33 실행이되는데요 마지막에 답이 나오려고 엔터를 치면 답이나오는 그즉시 dos창이 꺼집니다. 왜이러죠? ㅡ.ㅡ 유지시키는방법은? 2006/01/20  
geniusevil 컴파일이 완료된것입니다. dos창이 꺼지고 나온창에서 Ctrl+F5를 누르세요 2006/01/21
worldsky1 오우~이거 좋은데요/ 2006/01/29  
SEO <a href="http://www.guerrilla-seo.net/">SEO</a><a href="http://www.lasik-king.net/">꺃꺖궥긿궚</a><a href="http://www.shochuweb.net/">꽱뀕</a><a href="http://www.implant-lab.net/">궎꺍깤꺀꺍깉</a><a href="http://www.spdcash.net/">궘깵긿궥꺍궛</a><a href="http://www.strong-server.net/">꺃꺍궭꺂궢꺖깘꺖</a><a href="http://www.beauty-4ever.net/">獰롥방빐壤</a><a href="http://www.homey-home.net/">訝띶땿뵣</a><a href="http://www.kabu-load.net/">젶凉</a><a href="http://www.pension-support.net/">亮닻뇫</a><a href="http://www.sweet-sapri.com/">궢깤꺁깳꺍깉</a><a href="http://www.business-freshness.net/">깛궦깓궧깯깏꺖</a><a href="http://www.charm-happy.net/">뜝걚</a><a href="http://www.eternity-wedding.net/">永먨찚</a><a href="http://www.fx-victor.net/">FX</a><a href="http://www.happy-counter.net/">궋궚궩궧궖궑꺍궭꺖</a><a href="http://www.top-counter.net/">궋궚궩궧궖궑꺍궭꺖</a><a href="http://www.counter-lab.net/">궋궚궩궧궖궑꺍궭꺖</a><a href="http://www.website-trade.com/">궢궎깉鶯꿱껭</a><a href="http://www.world-auctions.org/">궕꺖궚궥깾꺍</a><a href="http://www.kualia-nails.com/">깓궎꺂</a><a href="http://www.esthetic-live.net/">궓궧깇</a><a href="http://www.old-bike.org/">깘궎궚縕룟룚</a><a href="http://www.home-teacher.biz/">若뜹벼븰躍</a><a href="http://www.kualia-nails.com/school/index.html">깘궎궕궦궒꺂궧궚꺖꺂</a><a href="http://www.kualia-nails.com/school/index.html">깓궎꺂궧궚꺖꺂</a><a href="http://www.decksanddice.com/">눎땿邕듾퓷쇇</a><a href="http://www.cyborgowner.com/">뵟뫝岳앶쇇</a> 2008/10/23
1420   리눅스와 도스[5]     H.R.T
12/18 9746
1419   임베디드 시스템란?[3]     X-line
12/18 8400
1418   편리하지만 정말 모르시는 단축키..[20]     blue21
12/21 9353
1417   pharming attacks[2]     prosper
12/28 7408
1416   정보보안전문가(해커)의 종류..;;[15]     H.R.T
12/29 11213
1415   정보통신 인터넷 용어..(모르시는 분들만..+참고..)[19]     H.R.T
12/29 16416
1414   cmos비밀번호 푸는 방법[25]     idl0521
12/29 19871
1413   알툴즈 프로그램의 광고없애기![13]     kgt2001sus
01/01 8496
1412   원격종료....[39]     bsjzzz
01/02 11684
1411   msn 쓰시는 분들을 위한 공짜로 용량 늘리기[5]     idl0521
01/02 8108
1410   초간단 리눅스 명령어, 기본적으로 꼭꼭 알아야 할 것[14]     빈대
01/04 9938
1409   커널 업그레이드 방법[2]     빈대
01/04 8264
1408   geniusevil의 가벼운 c언어 배우기 1[30]     geniusevil
01/06 10389
  geniusevil의 가벼운 C언어 배우기 2[10]     geniusevil
01/09 9363
1406     [re] ckdmsghcoh님 답변[6]     geniusevil
01/09 6493
1405   2.4.x에서 2.6.x 로 컴파일 할때 주의할점[2]     dadmi29
01/09 8861
1404   리눅스 방화벽의 종류...[4]     bsjzzz
01/12 13751
1403   * 보안에 대한 주요 FAQ[8]     dl4815
01/14 10730
1402   [펌]로그지우기[12]     khas
01/18 11209
1401   geniusevil의 가벼운 c언어 배우기 3[7]     geniusevil
01/19 10519
[1][2][3][4][5][6][7][8] 9 [10]..[79]

Copyright 1999-2023 Zeroboard / skin by Hackerschool.org / Secure Patch by Hackerschool.org & Wowhacker.com