89
2013 년 1 년년 년년년년년 년 년년 Chap. 2 C 년년년년년 년년 Bo-Kug Seo ([email protected]) Soongsil Univ. MMS Lab.

프로그래밍 및 실습 Chap2

  • Upload
    dktm

  • View
    375

  • Download
    2

Embed Size (px)

Citation preview

Page 1: 프로그래밍 및 실습 Chap2

2013 년 1 학기 프로그래밍 및 실습Chap. 2 C 프로그래밍 기초

Bo-Kug Seo ([email protected])Soongsil Univ. MMS Lab.

Page 2: 프로그래밍 및 실습 Chap2

Logo

2

이 장에서 다룰 내용

프로그램을 작성할 때 꼭 필요한 내용들

printf() 함수의 기본 형태

printf() 함수의 서식 지정

scanf() 함수의 사용

변수의 이해

데이터 형식과 배열

Page 3: 프로그래밍 및 실습 Chap2

Logo프로그램 작성 순서 복습 프로그래밍 작성 순서 요약

– 프로젝트 만들기 : 소스 파일보다 프로젝트를 먼저 생성해야 함

– 코딩 : C 컴파일러가 알아들을 수 있는 형식으로 문서 작성

– 빌드 : 컴파일과 링크를 합친 개념• 컴파일 : 소스를 컴퓨터가 이해하는 오브젝트 파일로 변환• 링크 : 여러 개의 오브젝트 파일을 하나의 실행파일로 묶음

– 실행 : 빌드의 결과인 .exe 파일을 작동

3

Page 4: 프로그래밍 및 실습 Chap2

Logo프로그램의 구성과 실행과정 프로그램은 함수들로 만들어진다 .

– 함수는 입력되는 데이터를 가공하여 특별한 출력을 만들어내는 단위코드이다 .

메인함수가 다른 함수들을 호출하여 실행된다 .– 세 개의 함수로 구성된 프로그램 (10 과 20 을 더하여 화면에 출력 ).

4

Page 5: 프로그래밍 및 실습 Chap2

Logo메인함수 프로그램에는 반드시 하나의 메인함수가 있어야 한다 .

– 메인함수 하나로 작성된 10 과 20 을 더하는 프로그램

함수는 머리 (head) 와 몸통 (body) 으로 구성된다 .

5

Page 6: 프로그래밍 및 실습 Chap2

Logo함수의 머리 함수의 머리에는 세가지 정보를 표현한다 .

– 함수의 기능에 맞는 함수의 이름– 함수가 기능을 수행하는 데 필요한 데이터의 개수와 형태– 함수가 기능을 수행하고 나서 돌려주는 값의 형태

10 과 20 을 더하는 기능을 가진 함수의 예

메인함수의 머리는 데이터의 개수와 형태가 생략된 것이다 .

6

int main( )

Page 7: 프로그래밍 및 실습 Chap2

Logo함수의 몸통 함수의 몸통에는 함수가 수행하는 작업을 기술한다 .

– 함수의 머리 다음 줄부터 중괄호를 열어서 시작한다 .– 실행문장들은 중괄호 안쪽으로 들여쓰기 한다 .– 실행문장은 한 줄에 한 문장씩 작성하며 문장 끝에 세미콜론을 붙인다 .– 함수 내에서 실행문장은 위에서부터 차례로 실행된다 .– 함수를 끝내기 전에 return 문을 사용하여 정수값을 돌려준다 .

7

실행문장은 위에서 아래로하나씩 실행된다 .

Page 8: 프로그래밍 및 실습 Chap2

Logo

8

프로그램을 작성할 때 꼭 필요한 내용들

프로그램을 작성할 때는 합리적 순서를 따라야 한다 .

관례에 따라 코딩 형식을 지켜야 한다 .

주석은 선택이 아니다 필수다 .

식별자는 의미를 부여하게 만든다 .

Page 9: 프로그래밍 및 실습 Chap2

Logo

9

프로그램을 작성하는 순서 데이터를 입력하기 전에 반드시 입력할 데이터를 저장할 기억공간이

있어야 한다 . 즉 , 변수선언이 입력문 전에 있어야 한다 .

일반적인 프로그램 작성의 순서

Page 10: 프로그래밍 및 실습 Chap2

Logo

10

코딩형식 프로그램의 문장을 구분하는 것은 세미콜론 (;) 이다 .

– 한 줄에 여러 문장을 작성해도 되고 한 문장을 여러 줄에 작성해도 된다 .

프로그램은 알아보기 쉽게 관례에 따라 형식을 지킨다 .

Page 11: 프로그래밍 및 실습 Chap2

Logo

11

주석문 -1

주석문은 프로그램의 가독성을 높인다 . 한 줄 주석문 (//)

– 주석기호 이후 그 줄 끝까지 모두 주석처리 된다 .

// **********************************************// 제 목 : 태권브이의 인공지능 프로그램// 날 짜 : 2080 년 가을// 작성자 : 김박사// **********************************************

#include <stdio.h>

int main(){ int left_fire; // 왼쪽 주먹 발사명령을 저장하기 위한 변수 ………

Page 12: 프로그래밍 및 실습 Chap2

Logo

12

주석문 -2

여러 줄 주석문 (/* 주석 */)– 여러 줄을 한꺼번에 묶어서 주석처리 할 수 있다 .– “/*” 로 시작하여 “ */” 로 끝을 표시한다 .

// 메인함수가 전부 주석인 프로그램

#include <stdio.h>

/*int main(){ int left_fire; ………}*/

주석 시작

주석 끝

Page 13: 프로그래밍 및 실습 Chap2

Logo

13

식별자 -1 식별자 (identifier) 는 변수명 , 함수명 등으로 사용된다 . 식별자를 만드는 규칙

– 알파벳 대문자 A~Z, 소문자 a~z, 숫자 0~9, 밑줄 _(underline) 으로 구성된다 .– 첫 문자에는 숫자가 올 수 없다 .– 대문자와 소문자는 서로 다른 식별자다 .

result Hong_gil_dong _p__q_num77KoreaEun_Ha_Cheol_Do_999

2002WorldCup

Ha-eun

Good_morning~

Doctor Kim

int ( 예약어 )

식별자 식별자가 아님

Page 14: 프로그래밍 및 실습 Chap2

Logo

14

식별자 -2

예약어 (reserved word) 는 식별자로 사용할 수 없다 .– 예약어는 컴파일러와 그 의미가 약속되어 있는 단어이다 .– C 문법을 배우는 것은 예약어의 기능을 익히는 것이다 .

예약어 목록

자료형void char short int long float double

unsigned struct union enum const

기억클래스 auto static extern register

제어문if else switch case break continue return goto

반복문 for while do

기타 sizeof typedef

Page 15: 프로그래밍 및 실습 Chap2

Logo

15

화면출력

데이터를 화면에 출력할 때는 printf() 함수를 사용한다 .

문자열 출력

정수값 출력

문자열과 정수값을 함께 출력

줄 바꾸어 출력

Page 16: 프로그래밍 및 실습 Chap2

Logo

16

printf() 함수의 기본 형태 기본적인 printf() 함수 사용법

– 모니터 상에 따옴표 안의 내용을 출력

– 서식에 따라 다른 출력 결과

• %d : 정수 (decimal) 를 의미• 서식의 개수와 따옴표 뒤에 나오는 숫자의 개수는 같아야 함

문자 100 ( 일 영영 )

숫자 100

Page 17: 프로그래밍 및 실습 Chap2

Logo

17

화면에 문자열 출력 문자열은 큰따옴표 (“ ”) 를 사용하여 표현한다 . 출력할 문자열을 printf 함수의 괄호 안에 넣어서 호출한다 .

printf 함수를 사용하기 위해서 stdio.h 헤더 파일을 include 한다 .

#include <stdio.h>

int main(){ printf(“perfect-C”); return 0;}

perfect-C화면출력

Page 18: 프로그래밍 및 실습 Chap2

Logo

18

화면에 정수값 출력 -1

정수값을 출력할 때는 변환문자열 %d 를 사용한다 .

- printf 함수는 기본적으로 문자열만을 출력하므로 정수값을 출력할 때는 문자열로

변환시키는

과정이 필요하다 .

– 여러 개의 정수값을 출력할 때는 변환문자열을 그 수만큼 사용한다 .

10화면출력

10 20화면출력

Page 19: 프로그래밍 및 실습 Chap2

Logo

19

화면에 정수값 출력 -2

– 수식의 결과 값을 바로 출력할 수 있다 .

30화면출력

Page 20: 프로그래밍 및 실습 Chap2

Logo

20

화면에 문자열과 정수값을 한번에 출력 출력할 문자열 안에 변환문자열을 넣어 함께 사용한다 .

정수값이 여러 개라면 변환문자열도 그 개수에 맞게 사용한다 .

은하철도 999화면출력

10 과 20 의 합은 30 입니다 .화면출력

Page 21: 프로그래밍 및 실습 Chap2

Logo

21

화면에 줄 바꾸어 출력 Printf 함수를 세 번 사용해도 줄이 바뀌지는 않는다 .

줄을 바꾸기 위해서는 줄바꿈 서식문자 \n 을 사용해야 한다 .

Page 22: 프로그래밍 및 실습 Chap2

Logo

22

[ 기본예제 2-1] printf() 함수 사용 예01 #include <stdio.h>0203 int main()04 {05 printf("100+100");06 printf("\n");07 printf("%d", 100+100);08 printf("\n");09 }

모두 글자

계산 결과를 숫자로 출력

Page 23: 프로그래밍 및 실습 Chap2

Logo

23

[ 기본예제 2-2] printf() 함수 사용 예01 #include <stdio.h>0203 int main()04 {05 printf("%d", 100, 200);06 printf("\n");07 printf("%d %d", 100);08 printf("\n");09 }

%d 는 하나 , 숫자는 두 개

%d 는 두 개 , 숫자는 하나

서식의 개수와 숫자의 개수가 맞지 않는 경우

수정

Page 24: 프로그래밍 및 실습 Chap2

Logo

24

printf() 함수의 기본 형태

Page 25: 프로그래밍 및 실습 Chap2

Logo

25

[ 기본예제 2-3] 서식을 사용한 출력 예01 #include <stdio.h>0203 int main()04 {05 printf("%d / %d = %d", 100, 200, 0.5);06 printf("\n");07 }

%d 세 개와 숫자 세 개 사용

Page 26: 프로그래밍 및 실습 Chap2

Logo

26

printf() 함수의 서식 지정 서식과 숫자의 불일치 상황

Page 27: 프로그래밍 및 실습 Chap2

Logo

27

printf() 함수의 서식 지정 자주 사용되는 서식

서식 값의 예 설명

%d, %X, %o 10, 100, 1234 정수 (10 진수 , 16 진수 , 8 진수 )

%f 또는 %lf 0.5 , 1.0 , 3.14 실수 ( 소수점이 붙은 수 )

%c ‘a’, ‘b’, ‘F’ 문자 . 꼭 한 글자여야 하고 , ‘ ’ 로 싸여 있어야

%s “ 안녕” , “abcdefg”, “a” 문자열 . 한 글자 이상이며 , “ ” 로 싸여 있어야

Page 28: 프로그래밍 및 실습 Chap2

Logo

28

[ 기본예제 2-4] 서식을 사용한 출력 예01 #include <stdio.h>0203 int main()04 {05 printf("%d / [ ① ] = [ ② ] \n", 100, 200, 0.5) ;06 printf("[ ③ ] %c \n", 'a', 'K') ;07 printf("%s %s \n", " 안녕 ", "C 언어 ");08 }

정수 두개와 실수 한 개 출력%d%c

%f문자 두 개 출력

문자열 두 개 출력

Page 29: 프로그래밍 및 실습 Chap2

Logo

29

printf() 함수의 서식 지정 -1

자릿수를 맞춘 출력 ( 정수형 )

Page 30: 프로그래밍 및 실습 Chap2

Logo

30

printf() 함수의 서식 지정 -2

자릿수를 맞춘 출력 ( 실수형 )

Page 31: 프로그래밍 및 실습 Chap2

Logo

31

printf() 함수의 서식 지정 -3

자릿수를 맞춘 출력 ( 문자형 )

Page 32: 프로그래밍 및 실습 Chap2

Logo

32

[ 기본예제 2-5] 다양한 서식 활용 예01 #include <stdio.h>0203 int main()04 {0506 printf("%d\n", 123);07 printf("%5d\n", 123);08 printf("%05d\n", 123);0910 printf("%f\n", 123.45);11 printf("%7.1f\n", 123.45);12 printf("%7.3f\n", 123.45);1314 printf("%s\n", "Basic-C");15 printf("%10s\n", "Basic-C");16 }

정수형 서식 활용

실수형 서식 활용

문자형 서식 활용

Page 33: 프로그래밍 및 실습 Chap2

Logo

33

printf() 함수의 서식 지정 다양한 기능의 서식 문자

서식 값의 예 설명

\n 새로운 줄로 이동 Enter 키를 누른 효과

\t 다음 탭으로 이동 Tab 키를 누른 효과

\b 뒤로 한 칸 이동 Back Space 키를 누른 효과

\r 줄의 맨 앞으로 이동 Home 키를 누른 효과

\a ‘ 삑’ 소리를 냄

\\ \ 를 출력

\' ' 를 출력

\" " 를 출력

Page 34: 프로그래밍 및 실습 Chap2

Logo

34

[ 기본예제 2-6] 다양한 서식 활용 예 01 #include <stdio.h>0203 int main()04 {0506 printf("\n 줄바꿈 \n연습 \n");07 printf("\t탭키 \t연습 \n");08 printf(" 이것을 \r덮어씁니다 \n");09 printf("\a\a\a삐소리 3 번 \n");10 printf(" 글자가 \"강조 \" 되는 효과 \n");11 printf("\\\\\\ 역슬래쉬 세개 출력 \n");12 }

Page 35: 프로그래밍 및 실습 Chap2

Logo

35

데이터의 저장

값을 저장하기 위해서는 변수를 사용해야 한다 .

변수의 선언

대입문 ( 변수에 값을 저장 )

초기화 ( 변수의 선언과 동시에 값을 저장 )

Page 36: 프로그래밍 및 실습 Chap2

Logo

36

변수의 선언 변수는 데이터를 저장할 수 있는 메모리의 기억공간이다 .

컴파일러에게 형태와 이름을 알려준다 .– 변수의 형태 : 변수가 저장할 수 있는 값의 종류– 변수의 이름 : 사용할 메모리 기억공간의 이름

정수값을 저장하기 위해서는 int 예약어를 사용한다 .

같은 형태의 변수는 한번에 선언할 수 있다 .

Page 37: 프로그래밍 및 실습 Chap2

Logo

37

변수의 이해 -1

변수– 프로그램을 작성하려면 변수 선언이 먼저 선행되어야 함– 소수점이 없는 값과 소수점이 있는 값을 담는 변수– 데이터 형식에 따라 그릇의 크기가 다름

int a; float b;

Page 38: 프로그래밍 및 실습 Chap2

Logo

38

변수의 이해 -2

다양한 변수 선언 방식

변수 선언 예

int a;int b;

int a, b;=

int a;float b;int c;float d;

int a, c;float b, d;

int a, float b;int c, float d;

① 가능 ② 가능

③ 불가능

Page 39: 프로그래밍 및 실습 Chap2

Logo

39

변수의 이해 -3

변수에 값을 넣는 방법– 변수 a 에 정수 100 을 대입– 변수 b 에 실수 123.45 를 대입

– 선언

• 예 ) a 와 b 가 모두 정수라면

int a;float b;a = 100;b = 123.45;

int a = 100;float b = 123.45;=

int a = 100, b = 200;

Page 40: 프로그래밍 및 실습 Chap2

Logo

40

변수에 값을 저장 [ 대입문 ] -1 변수에 값을 저장할 때는 대입연산자 (=) 를 사용한다 .

– 대입연산자는 오른쪽의 값을 왼쪽의 변수에 저장한다 .

– 대입연산자 왼쪽에는 값을 저장할 기억공간 ( 변수 ) 이 와야 한다 .– 대입 연산자 오른쪽에 변수가 올 때는 그 값을 왼쪽의 변수에 복사하는 것이다 .

Page 41: 프로그래밍 및 실습 Chap2

Logo

41

변수에 값을 저장 [ 대입문 ] -2– 변수를 사용하여 10 과 20 을 더해서 출력하는 프로그램

#include <stdio.h>

int main(){ int hap;

hap = 10 + 20; printf(“%d”, hap); return 0;}

Page 42: 프로그래밍 및 실습 Chap2

Logo

42

초기화 변수를 선언하여 할당된 기억공간에는 쓰레기값 (garbage) 이 있다 .

초기화는 변수의 선언과 동시에 값을 저장하는 것이다 .

#include <stdio.h>

int main(){ int num;

printf(“ 쓰레기값 : %d\n”,

num); return 0;}

쓰레기값 : -858993460

Page 43: 프로그래밍 및 실습 Chap2

Logo

43

[ 기본예제 2-7] 변수에 값 대입하기01 #include <stdio.h>0203 int main()04 {05 int a;06 float b;0708 a = 123.45;09 b = 200;1011 printf ("a 의 값 ==> %d \n", a);12 printf ("b 의 값 ==> %f \n", b);13 }

정수형 변수 선언

실수형 변수 선언

정수형 변수에 실수 대입

실수형 변수에 정수 대입

Page 44: 프로그래밍 및 실습 Chap2

Logo

44

변수의 이해 -1

지정된 데이터 형식을 무시한 값 대입– 8 행

– 9 행

Page 45: 프로그래밍 및 실습 Chap2

Logo

45

[응용예제 2-8] 서식을 사용한 출력 예01 #include <stdio.h>0203 int main()04 {05 int a , b;06 float c, d;0708 a = 100;09 [ ① ] 1011 c = 111.1;12 [ ② ]1314 printf ("a, b 의 값 ==> %d, %d \n", a, b);15 printf ("c, d 의 값 ==> %5.1f, %5.1f \n", c, d);16 }

정수 변수 a, b

b = a;

d = c;

정수 변수 c, d

a 에 100 대입

b 에 a 값 대입

c 에 111.1 대입

d 에 c 값 대입

Page 46: 프로그래밍 및 실습 Chap2

Logo

46

변수의 이해 -2

변수에 변수를 대입하는 예 (1)– 8 행 ~9 행 : a = 100;

b = a;

• 변수 a 의 값 100 이 변수 b 에 들어감• 결국 변수 a 와 b 의 값이 같아짐

Page 47: 프로그래밍 및 실습 Chap2

Logo

47

[응용예제 2-9] 변수에 변수를 대입하는 예 -101 #include <stdio.h>0203 int main()04 {05 int a , b , c , d ;0607 a = 100 + 100 ;08 b = a + 100;09 c = a + b - 100 ;10 [ ① ] 11 printf ("a, b , c , d 의 값 ==> %d , %d , %d , %d \n", a, b, c, d);1213 [ ② ] 14 printf ("a, b , c , d 의 값 ==> %d , %d , %d , %d \n", a, b, c, d);15

a 에 계산 결과 대입

d = a + b + c;

b 에 a+100 결과 대입

c 에 a+b-100 결과 대입

d 에 a+b+c 결과 대입

a = b = c = d = 100;

a, b, c, d 에 모두 100 을 대입

Page 48: 프로그래밍 및 실습 Chap2

Logo

48

[응용예제 3-9] 변수에 변수를 대입하는 예 -216 a = 100;17 a = a + 200;18 printf ("a 의 값 ==> %d \n", a);19 }

a 에 100 대입

a 에 a 값 + 200 대입

Page 49: 프로그래밍 및 실습 Chap2

Logo

49

변수의 이해 -3

변수에 변수를 대입하는 예 (2)– 7 행 : a = 100 + 100;

– 8 행 : b = a + 100;

Page 50: 프로그래밍 및 실습 Chap2

Logo

50

변수의 이해 -4

– 9 행 , 10 행도 이와 같은 과정을 거침

– 13 행 : a = b = c = d = 100;

a = b = c = d = 100;

d = 100;c = d;b = c;a = b;

=

Page 51: 프로그래밍 및 실습 Chap2

Logo

51

×변수의 이해 -5

대입 연산자와 변수의 위치

10 = 100; a = 100;

Page 52: 프로그래밍 및 실습 Chap2

Logo

52

데이터 형식 -1

비트– 컴퓨터에서 표현하는 가장 작은 단위– 전기 스위치와 같은 개념으로 0(On) 과 1(Off) 만 존재

• 하나의 비트로 표현할 수 있는 가짓수는 2 가지

Page 53: 프로그래밍 및 실습 Chap2

Logo

53

데이터 형식 -2

진수– 2 진수 : 표현 가능한 숫자 0, 1– 10 진수 : 표현 가능한 숫자 0~9– 16 진수 : 표현 가능한 숫자 0~9, A~F

– 진수를 구분하여 표기하는 방법• 2 진수 : 102

• 10 진수 : 1010

• 16 진수 : 1016

십진수 2 진수 16 진수

00 0000 0

01 0001 1

02 0010 2

03 0011 3

04 0100 4

05 0101 5

06 0110 6

07 0111 7

08 1000 8

09 1001 9

10 1010 A

11 1011 B

12 1100 C

13 1101 D

14 1110 E

15 1111 F

Page 54: 프로그래밍 및 실습 Chap2

Logo

54

데이터 형식 -3

바이트– 8 개의 비트가 합쳐진 단위

비트수 바이트수 개수 2 진수 10 진수 16 진수

1 - 21 = 2 0 ~1 0 ~ 1 0 ~ 1

2 - 22 = 4 0 ~11 0 ~ 3 0 ~ 4

4 - 24 = 16 0 ~1111 0 ~ 15 0 ~ F

8 1 28 = 256 0 ~11111111 0 ~ 255 0 ~ FF

16 2 216 = 65,536 0 ~11111111 11111111 0 ~ 63,355 0 ~ FFFF

32 4232 = 약 42

억0 ~ … 0 ~ 약 42 억 0 ~ FFFF FFFF

64 8 264 = … 0 ~ … …0 ~ 아주 큰

수 0 ~ … …

Page 55: 프로그래밍 및 실습 Chap2

Logo

55

데이터 형식 -4

진수의 변환 연습– 2 진수 10 진수

• 2 진수의 맨 뒤에서부터 각 자리에 해당하는 가중치 (20, 21, 22,…) 를 곱한다• 각 자리의 결과를 모두 합한다

Page 56: 프로그래밍 및 실습 Chap2

Logo

56

데이터 형식 -5

– 2 진수 16 진수 10 진수• 2 진수의 네 자리는 16 진수의 한 자리에 해당• 16 진수를 10 진수로 바꾸려면 각 자리의 가중치 (160, 161,…) 를 곱한다• 각 자리의 결과를 모두 합한다

Page 57: 프로그래밍 및 실습 Chap2

Logo

57

데이터 형식 -6

– 10 진수 2 진수• 10 진수를 계속 2 로 나눠가면서 몫과 나머지를 구한다 .

Page 58: 프로그래밍 및 실습 Chap2

Logo

58

데이터 형식 -7 – 16 진수 2 진수

• 16 진수를 계속 2 로 나눠가면서 몫과 나머지를 구한다 .

Page 59: 프로그래밍 및 실습 Chap2

Logo

59

데이터 형식 -8

– 16 진수 2 진수 간편 변환• 16 진수 1 자리 = 2 진수 4 자리 해당

16 진수 2 진수

0 0000

1 0001

2 0010

3 0011

4 0100

5 0101

6 0110

7 0111

8 1000

9 1001

A 1010

B 1011

C 1100

D 1101

E 1110

F 1111

Page 60: 프로그래밍 및 실습 Chap2

Logo

60

데이터 형식 -9

– 16 진수 2 진수 간편 변환• 16 진수를 계속 2 로 나눠가면서 몫과 나머지를 구한다 .

Page 61: 프로그래밍 및 실습 Chap2

Logo

61

데이터 형식 -10

숫자형 데이터 형식– 소수점이 없는 정수형

데이터 형식 의미 크기 값의 범위

short 작은 정수형 2byte -215 (-32768)~ 215 -1(32767)

unsigned short 부호없는 작은 정수형 2byte 0~ 216 -1(65535)

int 정수형 4byte-231 ( 약 -21 억 )~ 231 -1( 약 21

억 )

unsigned int 부호없는 정수형 4byte 0~ 232 -1( 약 42 억 )

long int 큰 정수형 4byte -231~ 231 -1

unsigned long 부호없는 정수형 4byte 0~ 232 -1

Page 62: 프로그래밍 및 실습 Chap2

Logo

62

[ 기본예제 2-10] 소수점이 없는 정수형01 #include <stdio.h>0203 int main()04 {05 int a=100 , b=200;06 float result ;0708 result = a / b ;0910 printf ("%f \n", result);11 }

정수형 변수 a, b 에 값 지정

실수형 변수 result 선언

a/b 를 실수형 변수 result에 대입 (0.5 를 예상함 )

Page 63: 프로그래밍 및 실습 Chap2

Logo

63

데이터 형식 -11

– 정수형의 나눗셈

Page 64: 프로그래밍 및 실습 Chap2

Logo

64

데이터 형식 -12

– 소수점이 있는 정수형

데이터 형식 의미 크기 값의 범위

float 실수형 4byte 약 -3.4×1038 ~ 약 3.4×1038

double 큰 실수형 8byte 약 -1.79×1038 ~ 약 1.79×1038

long double 큰 실수형 8byte 약 -1.79×1038 ~ 약 1.79×1038

Page 65: 프로그래밍 및 실습 Chap2

Logo

65

[ 기본예제 2-11] 소수점이 있는 정수형01 #include <stdio.h>0203 int main()04 {05 float a = 0.1234567890123456789012345;06 double b = 0.1234567890123456789012345;0708 printf("%30.25f \n", a);09 printf("%30.25f \n", b);10 }

float 형 변수 a 에 정밀도 25 자리 입력double 형 변수 b 에 정밀도 25자리 입력

Page 66: 프로그래밍 및 실습 Chap2

Logo

66

데이터 형식 -13

문자형 데이터 형식– 아스키 코드

• 예

– 한 글자를 뜻하는 문자형

데이터 형식 의미 크기

0 ~ 9 48 ~ 57 0x30 ~ 0x39

A ~ Z 65 ~ 90 0x41 ~ 0x5A

a ~ z 97 ~ 122 0x61 ~ 0x7A

char ch = ‘a’; char ch = 97;=

데이터 형식 의미 크기 크기

char 문자형 또는 정수형 2byte -128 ~ 127

unsigned char 문자형 또는 정수형 2byte 0 ~ 255

Page 67: 프로그래밍 및 실습 Chap2

Logo

67

[ 기본예제 2-12] 문자형 변수 사용 예 01 #include <stdio.h>0203 int main()04 {05 char a, b, c;0607 a = 'A';08 printf("%c \n", a);09 printf("%d \n", a);1011 b = 'a';12 c = b + 5;13 printf("%c \n", b);14 printf("%c \n", c);1516 c = 90;17 printf("%c \n", c);18 }

문자형 변수 3 개 선언

문자형 변수 a 에‘ A’ 대입

문자형 변수 a 를 문자형과정수형으로 출력

b 에‘ a’ 대입

c 에 b+5 결과 대입

문자형 변수 c 에 숫자 90 대입

Page 68: 프로그래밍 및 실습 Chap2

Logo

68

데이터 형식 -14

– 서식에 따라 달라지는 출력 결과

Page 69: 프로그래밍 및 실습 Chap2

Logo

69

[응용예제 2-13] 문자형 변수 사용 예 01 #include <stdio.h>0203 int main()04 {05 int a, b;06 char c, d;0708 a = 0x41;09 b = 0x50;1011 [ ① ] 1213 c = a;14 [ ② ] 1516 d = '#';17 printf("%c 의 ASCII 값은 %d 입니다 \n", d, d);18 }

정수형 변수 a 에 16 진수 0x41 대입

printf("%c \n", b);

정수형 변수 b 에 16 진수 0x50 대입

문자형 변수 c 에 정수형 변수 a 값 대입

정수형 변수 b 를 문자형으로 출력

printf("%c \n", c); 문자형 변수 c 를 문자형으로 출력

문자형 변수 d 에 문자 대입

문자형 변수 d 를 두 가지 형태로 출력

Page 70: 프로그래밍 및 실습 Chap2

Logo

70

데이터 형식 -15

문자열의 기본 형식– 문자열은 문자를 여러 개 모아 연결한 형태

• Hanbit 이라는 문자열 저장

– 널 (null) 문자 : \0• 문자열의 끝을 알려주는 역할• 화면에 출력되지 않음

– 문자열은 문자 배열을 사용

Page 71: 프로그래밍 및 실습 Chap2

Logo

71

데이터 형식 -16

문자열의 대입과 출력– strcpy() 함수로 문자열 대입

– 문자열 출력

Page 72: 프로그래밍 및 실습 Chap2

Logo

72

[ 기본예제 2-14] 문자열 형식 사용 예01 #include <stdio.h>0203 int main()04 {05 char str1[10];06 char str2[10];07 char str3[10] = "CookBook";0809 strcpy(str1, "Basic-C");10 strcpy(str2, str3);1112 printf("str1 ==> %s \n", str1);13 printf("str2 ==> %s \n", str2);14 printf("str3 ==> %s \n", str3);15 }

문자형 배열 str1, str2 선언

str1 에 문자열 대입

str3 을 str2 에 대입

문자형 배열 str1, str2, str3 출력

문자형 배열 str3 의 선언과 문자열 대입

Page 73: 프로그래밍 및 실습 Chap2

Logo

73

데이터 형식 -17– [ 기본예제 3-14] 의 문자열 선언 상태

Page 74: 프로그래밍 및 실습 Chap2

Logo

74

[응용예제 2-15] 문자열 형식 사용 예01 #include <stdio.h>0203 int main()04 {05 char str[10] = "0123456789";0607 printf("str ==> %s \n", str);0809 str[0] = 'I';10 str[1] = 'T';11 str[2] = 'C';12 str[3] = 'o';13 str[4] = 'o';14 str[5] = 'k';15 str[6] = '\0';1617 printf("str ==> %s \n", str);1819 printf("str[7] ==> %c \n", [ ① ] );2021 printf("str[50] ==> %c \n", [ ② ] );22 }

str 배열 10 자리에 10 글자 대입

str[7]

str 배열에 글자 입력

str 배열 출력

str[7] 의 내용만 출력

str[50] 의 내용만 출력str[50]

Page 75: 프로그래밍 및 실습 Chap2

Logo

75

데이터 형식 -18

– 5 행• str 배열을 선언하면서 문자열 대입• 널 문자가 없기 때문에 출력 시 문제 발생

Page 76: 프로그래밍 및 실습 Chap2

Logo

76

데이터 형식 -19

– 9 행 ~15 행을 실행한 후의 str 배열

Page 77: 프로그래밍 및 실습 Chap2

Logo

77

키보드 입력

데이터를 키보드에서 입력할 때는 scanf 함수를 사용한다 .

정수값 하나 입력

여러 개의 정수값 입력

scanf 함수 사용시 주의할 점

Page 78: 프로그래밍 및 실습 Chap2

Logo

78

정수값 입력 -1

키보드에서 입력하는 것은 모두 문자열이다 .

- 키보드에서 10 을 입력하면 문자 1 과 문자 0 이 붙어 있는 문자열이 된다 . - 따라서 키보드 입력을 수치값으로 변환하여 변수에 저장한다 .

정수값을 입력 받을 때는 %d 변환 문자열을 사용한다 .

Page 79: 프로그래밍 및 실습 Chap2

Logo

79

정수값 입력 -2

키보드로부터 변수에 정수값을 입력 받아 출력하는 예#include <stdio.h>

int main(){ int num;

printf(“ 정수값 하나를 입력하세요 : ”); scanf(“%d”, &num); printf(“ 입력 받은 정수값은 %d 입니다 .\n”, num); return 0;}

정수값 하나를 입력하세요 : _ 정수값 하나를 입력하세요 : 10 (엔터 )

정수값 하나를 입력하세요 : 10

입력 받은 정수값은 10 입니다 .

Page 80: 프로그래밍 및 실습 Chap2

Logo

80

정수값 입력 -3 여러 개의 변수에 값을 한번에 입력 받을 수 있다 .

- 이 때는 변수의 개수에 맞게 변환문자열을 사용한다 .

– 두 정수값을 입력할 때는 두 값 사이에 공백 , 탭 , 엔터키를 쳐서 두 값을 구분해야

한다 .정수값 두 개를 입력하세요 : 10 20 (엔터 )

여기에서 하나 이상의 공백 , 탭 , 엔터키를 친다 .

Page 81: 프로그래밍 및 실습 Chap2

Logo

81

scanf 함수 사용시 주의할 점 변환문자열과 함께 불필요한 문자열을 사용하지 않는다 .

printf(“ 정수값 하나를 입력하세요 : ”);

scanf(“%d”, &num);

출력과 입력을 구분하여 작성한다 .

Page 82: 프로그래밍 및 실습 Chap2

Logo

82

[ 예제모음 _01] 정수형을 출력하는 프로그램

실행결과

예제설명

① 정수형 숫자를 하나 입력받고 , 10 진수 , 16 진수 , 8 진수로 출력하는 프로그램을 작성해보자 .

Page 83: 프로그래밍 및 실습 Chap2

Logo

83

[ 예제모음 _01] 소스01 #include <stdio.h>0203 int main()04 {05 int data;0607 printf(" 정수를 입력하세요 ==> ");08 scanf("%d", &data);0910 printf("10 진수 ==> %d \n", data);11 printf("16 진수 ==> %X \n", data);12 printf("8 진수 ==> %o \n", data);13 }

정수형 변수 선언

키보드로 정수를 입력 받음

10 진수 출력

16 진수 출력

8 진수 출력

Page 84: 프로그래밍 및 실습 Chap2

Logo

84

[ 예제모음 _02] 입력하는 정수의 진수 결정

실행결과

예제설명

① 10 진수 , 16 진수 , 8 진수 중 어떤 진수의 값을 입력할지 결정하고 , 해당 숫자를 입력한 후에 그것이 10 진수 , 16 진수 , 8 진수로 어떤 숫자일지를 출력하는 프로그램이다 .

Page 85: 프로그래밍 및 실습 Chap2

Logo

85

[ 예제모음 _02] 소스01 #include <stdio.h>0203 int main()04 {05 int type, data;0607 printf(" 입력진수 결정 <1>10 <2>16 <3>8 : ");08 scanf("%d", &type);0910 printf(" 값 입력 : ");1112 if(type == 1)13 { scanf("%d", &data); }1415 if(type == 2)16 { scanf("%x", &data); }

키보드로 숫자를 입력받음

입력값이 1 이면 10 진수를 입력받음

입력값이 2 이면 16 진수를 입력받음

Page 86: 프로그래밍 및 실습 Chap2

Logo

86

[ 예제모음 _02] 소스1718 if(type == 3)19 { scanf("%o", &data); }2021 printf("10 진수 ==> %d \n", data);22 printf("16 진수 ==> %X \n", data);23 printf("8 진수 ==> %o \n", data);24 }

입력값이 3 이면 8 진수를 입력받음

입력받은 data 값을 8, 10, 16진수로 변환하여 출력

Page 87: 프로그래밍 및 실습 Chap2

Logo

87

[ 예제모음 _03] 데이터형의 크기 확인

실행결과

예제설명

① sizeof( ) 함수를 사용해서 각 데이터형의 크기를 확인하는 프로그램이다 .

Page 88: 프로그래밍 및 실습 Chap2

Logo

88

[ 예제모음 _03] 소스01 #include <stdio.h>0203 int main()04 {05 printf("int 형의 크기 ==> %d\n", sizeof(int));06 printf("unsigned int 형의 크기 ==> %d\n", sizeof(unsigned int));07 printf("short 형의 크기 ==> %d\n", sizeof(short));08 printf("unsigned short 형의 크기 ==> %d\n", sizeof(unsigned short));09 printf("long int 형의 크기 ==> %d\n", sizeof(long int));10 printf("unsigned long int 형의 크기 ==> %d\n", sizeof(unsigned long int));11 printf("float 형의 크기 ==> %d\n", sizeof(float));12 printf("double 형의 크기 ==> %d\n", sizeof(double));13 printf("long double 형의 크기 ==> %d\n", sizeof(long double));14 printf("char 형의 크기 ==> %d\n", sizeof(char));15 printf("unsigned char 형의 크기 ==> %d\n", sizeof(unsigned char));16 }

sizeof() 함수로 각 데이터형의 크기 출력

Page 89: 프로그래밍 및 실습 Chap2

Logo

89

요약① 모니터에 뭔가를 출력하는 역할② printf(“ 서식” , 인자들… ) 사용③ 정수 : %d, 실수 : %f, 문자 : %c, 문자열 : %s 사용

printf() 함수

① ‘%5d’ 서식을 사용하면 5 자리로 정수를 출력한다 .② ‘%7.3f’ 서식을 사용하면 전체 7 자리에 소수점 아래 3 자리 실수를

출력한다 .③ 기타 서식 : ‘\n’(새로운 줄로 이동 ), ‘\t’( 다음 탭으로 이동 ), ‘\\’(\ 출력 )

printf() 함수의 서식

① 왼편에는 반드시 변수가 와야 한다② 오른쪽은 상수 , 변수 , 계산값 등 무엇이 오든 상관없다 .

변수에 값 대입

① 컴퓨터에서는 2 진수를 사용 , 2 진수 4 자리를 묶은 것이 16 진수② 정수 데이터 형식 : short, int, long③ 부호없이 사용하려면 앞에 unsigned 를 붙임④ 실수 데이텨 형식 : float, double⑤ 문자 하나를 저장하는 형식 : char⑥ 여러 글자를 저장하는 데이터 형식은 문자열 배열 사용⑦ 문자열 길이 : 실제 문자열 길이 + 1(널 문자 )

데이터 형식