69
1 1 C C 제제제 제제 제제제 제제

제 1 장 C 언어의 소개

Embed Size (px)

DESCRIPTION

제 1 장 C 언어의 소개. C 언어의 개요. ANSI C 기존의 K&R C 에 새로운 기능을 추가한 표준 문법 함수의 선언과 정의에 인자 (argument) 의 데이터 형 포함 기능 구조체 지정 (assignment) 와 나열형 (enumeration) 을 표준으로 채택 단점도 (single precison) 의 부동 소수점 계산 지원 부호 없는 숫자의 산술 연산과 전처리기 기능 개선 POSIX 표준 - PowerPoint PPT Presentation

Citation preview

Page 1: 제  1 장  C  언어의 소개

제 제 11 장 장 C C 언어의 소개언어의 소개

Page 2: 제  1 장  C  언어의 소개

C C 언어의 개요언어의 개요 ANSI CANSI C

– 기존의 기존의 K&R CK&R C 에 새로운 기능을 추가한 표준 문법에 새로운 기능을 추가한 표준 문법– 함수의 선언과 정의에 인자함수의 선언과 정의에 인자 (argument)(argument) 의 데이터 형 포함 의 데이터 형 포함

기능기능– 구조체 지정구조체 지정 (assignment)(assignment) 와 나열형와 나열형 (enumeration)(enumeration) 을 을

표준으로 채택표준으로 채택– 단점도단점도 (single precison)(single precison) 의 부동 소수점 계산 지원의 부동 소수점 계산 지원– 부호 없는 숫자의 산술 연산과 전처리기 기능 개선부호 없는 숫자의 산술 연산과 전처리기 기능 개선

POSIX POSIX 표준표준– Portable Operating System Interface for Computing EnvironPortable Operating System Interface for Computing Environ

mentsments 의 약자의 약자– IEEEIEEE 에서 에서 C C 라이브러리의 표준 제정라이브러리의 표준 제정– C C 프로그램의 이식성을 높임 프로그램의 이식성을 높임

Page 3: 제  1 장  C  언어의 소개

First C ProgramFirst C Program#include <stdio.h>#include <stdio.h>

/* first C Program*//* first C Program*/

main()main(){{

printf(“Hello World\n”) ;printf(“Hello World\n”) ;}}

Page 4: 제  1 장  C  언어의 소개

First C Program(con’d)First C Program(con’d) 모든 모든 C C 프로그램은 프로그램은 main main 함수부터 시작함수부터 시작 #include <stdio.h> #include <stdio.h> 헤더 파일을 포함헤더 파일을 포함 주석문은 주석문은 /* /* 와 와 */*/ 로 둘러 싸임로 둘러 싸임 printfprintf 는 화면에 문자열을 출력하는 함수는 화면에 문자열을 출력하는 함수 문자열 문자열 : a sequence of characters enclosed b: a sequence of characters enclosed b

y double quotey double quote– ““Hello World\n”Hello World\n”

\n : newline \n : newline 문자문자 (escape sequence)(escape sequence) CC 에서는 대소문자가 구분에서는 대소문자가 구분

Page 5: 제  1 장  C  언어의 소개

변수변수 모든 변수는 사용되기 전에 선언한다모든 변수는 사용되기 전에 선언한다 .. 변수의 선언변수의 선언

– 대부분 함수의 시작부분에 위치대부분 함수의 시작부분에 위치– datatype var1, var2,...;datatype var1, var2,...;– 데이터형데이터형 : char, short, int, long, float, double: char, short, int, long, float, double– ex) int number, sum ;ex) int number, sum ;

지정문지정문 (assignment statement)(assignment statement)– 변수에 값을 지정변수에 값을 지정– ex) number = 1 ;ex) number = 1 ;

Page 6: 제  1 장  C  언어의 소개

산술 연산산술 연산 사칙 연산사칙 연산

– 덧셈덧셈 , , 뺄셈뺄셈 , , 곱셈곱셈 , , 나눗셈나눗셈 : +, -, *, /: +, -, *, /– 나머지 연산자 나머지 연산자 (%)(%)

수식 수식 x%yx%y 는 는 xx 를 를 yy 로 나눈 나머지를 의미로 나눈 나머지를 의미

Page 7: 제  1 장  C  언어의 소개

순환문순환문 (Loop)(Loop)

프로그램에서 반복되는 작업을 구현하는데 프로그램에서 반복되는 작업을 구현하는데 사용사용

CC 에서 제공되는 순환문에서 제공되는 순환문– for for 문문– while while 문문– do while do while 문문

Page 8: 제  1 장  C  언어의 소개

순환문 예제순환문 예제 (while)(while)#include <stdio.h>#include <stdio.h>

main() main() {{

int n, sum = 0 ;int n, sum = 0 ;

n = 1 ;n = 1 ;while ( n <= 100 ) {while ( n <= 100 ) {

sum = sum + n ;sum = sum + n ;n = n + 1 ;n = n + 1 ;

}}printf(“Sum = %d\n”, sum) ;printf(“Sum = %d\n”, sum) ;

}}

Page 9: 제  1 장  C  언어의 소개

순환문 예제순환문 예제 (for)(for)

#include <stdio.h>#include <stdio.h>

main() main() {{int n, sum = 0 ;int n, sum = 0 ;

for ( n = 1 ; n <= 100 ; n = n + 1 )for ( n = 1 ; n <= 100 ; n = n + 1 )sum = sum + n ;sum = sum + n ;printf(“Sum = %d\n”, sum) ;printf(“Sum = %d\n”, sum) ;}}

Page 10: 제  1 장  C  언어의 소개

순환문 예제순환문 예제 (do-while)(do-while)#include <stdio.h>#include <stdio.h>

main() main() {{int n = 1, sum = 0 ;int n = 1, sum = 0 ;

do {do {sum = sum + n ;sum = sum + n ;n = n + 1 ;n = n + 1 ;} while ( n <= 100 ) ;} while ( n <= 100 ) ;printf(“Sum = %d\n”, sum) ;printf(“Sum = %d\n”, sum) ;}}

Page 11: 제  1 장  C  언어의 소개

입력과 출력입력과 출력 CC 는 자체적으로 입출력 기능 는 자체적으로 입출력 기능 XX 라이브러리 함수 이용라이브러리 함수 이용 getchargetchar

– 키보드로부터 문자를 입력받아 리턴키보드로부터 문자를 입력받아 리턴– c = getchar() ;c = getchar() ;

putcharputchar– 화면에 한 문자를 출력하는 함수화면에 한 문자를 출력하는 함수– putchar(c) ;putchar(c) ;

printfprintf 와 와 scanf : scanf : 형식화된 입출력 제공형식화된 입출력 제공– printf(“%d, %d”, i, j) ;printf(“%d, %d”, i, j) ;– scanf(“%d %d”, &i, &j) ;scanf(“%d %d”, &i, &j) ;

Page 12: 제  1 장  C  언어의 소개

입력과 출력입력과 출력 (( 예제예제 ))#include <stdio.h>#include <stdio.h>

main()main(){{int c ;int c ;

c = getchar() ;c = getchar() ;while ( c != EOF ) {while ( c != EOF ) {putchar(c) ;putchar(c) ;c = getchar() ;c = getchar() ;}}}}

Page 13: 제  1 장  C  언어의 소개

입력과 출력입력과 출력 (con’d)(con’d)

#include <stdio.h>#include <stdio.h>

main()main() {{ char c, *s;char c, *s;

s = "s = " 우리는 지금우리는 지금 ";"; c = 'C';c = 'C'; printf("%s %c %s\n",s,c,"printf("%s %c %s\n",s,c," 를 배우고 있어요를 배우고 있어요 .");."); }}

Page 14: 제  1 장  C  언어의 소개

입력과 출력입력과 출력 (printf)(printf)서식 변 환 데이터 형 바이트수%d 부호 있는 10진수로 출력 int 2%u 부호 없는 10진수로 출력 unsigned int 2

%ld 부호 있는 10진수로 출력(long int 타입)

long int 4

%o 8 진수로 출력 unsigned 2%x 16진수로 출력 unsigned 2%c 문자로 출력 문자 2%s 문자열로 출력 문자 2

%f 고정 소수점 표기법에 의해출력

부동 8

%e 부동 소수점 표기법에 의해출력

부동 8

%g %e, %f에서 짧은 쪽 서식으로 출력

부동 8

Page 15: 제  1 장  C  언어의 소개

입력과 출력입력과 출력 (con’d)(con’d) printf() printf() 예제예제

#include <stdio.h>#include <stdio.h>

main()main(){{printf("printf(" 나이는 나이는 %u%u 살 입니다살 입니다 .",25);.",25);printf("%3d - %-3d = %5d printf("%3d - %-3d = %5d 입니다입니다 .",10,20,10-20);.",10,20,10-20);printf("%uprintf("%u 시시 %u%u 분분 %u%u 초초 ",10,28,45);",10,28,45);printf("printf(" 체중은 체중은 %.2f Kg%.2f Kg 입니다입니다 .",68.5);.",68.5);

}}

Page 16: 제  1 장  C  언어의 소개

입력과 출력입력과 출력 (scanf)(scanf)

서식 입력할 데이터형 대응하는 인자의 데이터형%d 부호있는 10진수 int 형을 가르키는 포인터

%l 8진수, 10진수, 16진수 unsigned형을 가르키는 포인터

%x 16 진수 int 형을 가르키는 포인터%o 8 진수 int 형을 가르키는 포인터%f 부동 소수점 수 float형을 가르키는 포인터%lf 부동 소수점 수 double형을 가르키는 포인터

Page 17: 제  1 장  C  언어의 소개

입력과 출력입력과 출력 (scanf)(scanf)#include <stdio.h>#include <stdio.h>main()main(){{int i;int i;float f;float f;char c;char c;char s[80];char s[80];

printf("Input Data");printf("Input Data");printf("printf(" 형식형식 : : 정수 실수 문자 문자열정수 실수 문자 문자열 "); "); scanf("%d %f %c %s",&i,&f,&c,&d);scanf("%d %f %c %s",&i,&f,&c,&d);printf("printf(" 정수 정수 = %d = %d 실수 실수 = %f = %f 문자 문자 = %c = %c 문자열 문자열 = %s",i,f,c,s);= %s",i,f,c,s);}}

Page 18: 제  1 장  C  언어의 소개

심볼 상수심볼 상수 (symbolic (symbolic constant)constant)

#define#define 문에 의한 심볼 상수 정의문에 의한 심볼 상수 정의– 프로그램에서 매직 넘버를 사용하는 것을 프로그램에서 매직 넘버를 사용하는 것을

피해야 함피해야 함– #define#define namename replacement-textreplacement-text– 전처리기가 전처리기가 namename 에 해당하는 토큰을 에 해당하는 토큰을 replrepl

acement-textacement-text 로 치환로 치환– ex) ex) #define MAXLEN#define MAXLEN 256256 int length = MAXLEN;int length = MAXLEN;

Page 19: 제  1 장  C  언어의 소개

배열배열 기억장소에 여러 개의 원소를 연속적인 기억장소에 여러 개의 원소를 연속적인

공간에 저장하여 참조공간에 저장하여 참조 선언 방법선언 방법

– type array-name[size] ;type array-name[size] ;– ex) int ndigit[10] ;ex) int ndigit[10] ;

배열의 첨자배열의 첨자– 배열의 원소를 참조하는 데에 사용배열의 원소를 참조하는 데에 사용– 첨자는 첨자는 00 부터 시작부터 시작– ex) ndigit[0], ndigit[1], ...., ndigit[8], ndigitex) ndigit[0], ndigit[1], ...., ndigit[8], ndigit

[9][9]

Page 20: 제  1 장  C  언어의 소개

문자 배열문자 배열 문자열을 저장하기 위해서 사용함문자열을 저장하기 위해서 사용함

– 문자열 문자열 : : 쌍따옴표로 둘러싸인 일련의 문자들쌍따옴표로 둘러싸인 일련의 문자들– ‘‘\0’ \0’ 문자 문자 : : 문자열의 끝을 나타냄문자열의 끝을 나타냄– ““Hello\n”Hello\n” 는 다음과 같이 저장는 다음과 같이 저장

– 길이가 길이가 nn 인 문자열을 저장하려면 문자 인 문자열을 저장하려면 문자 배열의 크기는 배열의 크기는 n+1n+1 이어야 함이어야 함

H e l l 0 \n \0

Page 21: 제  1 장  C  언어의 소개

배열배열 (( 예제예제 ))#include <stdio.h>#include <stdio.h>main()main()

{{int c, i, nwhite, nother ;int c, i, nwhite, nother ;int ndigit[10] ;int ndigit[10] ;

nwhite = nother = 0 ;nwhite = nother = 0 ;for ( i = 0 ; i < 10 ; i++ )for ( i = 0 ; i < 10 ; i++ )

ndigit[i] = 0 ;ndigit[i] = 0 ;

Page 22: 제  1 장  C  언어의 소개

While ( ( c = getchar() ) != EOF )While ( ( c = getchar() ) != EOF )if ( c >= ‘0’ && c <= ‘9’ ) if ( c >= ‘0’ && c <= ‘9’ )

++ndigit[c - ’0’] ;++ndigit[c - ’0’] ;else if ( c == ‘ ‘ || c == ‘\n’ || c == ‘\t’ else if ( c == ‘ ‘ || c == ‘\n’ || c == ‘\t’

) ) ++nwhite ;++nwhite ;

else ++nother ;else ++nother ;printf(“digits =“) ;printf(“digits =“) ;for ( i = 0 ; i < 10 ; i++ )for ( i = 0 ; i < 10 ; i++ )

printf(“ %d”, ndigits[i]) ;printf(“ %d”, ndigits[i]) ;printf( “, white space = %d, other = %d\n”, printf( “, white space = %d, other = %d\n”,

nwhite, nother) ;nwhite, nother) ;}}

Page 23: 제  1 장  C  언어의 소개

함수함수 프로그램의 기능적 분할프로그램의 기능적 분할 호출부호출부 (caller)(caller) 에 내부 구현 내용이 보이지 않음에 내부 구현 내용이 보이지 않음 함수의 정의 방법함수의 정의 방법

return-type function-name(argument declaration, if any)return-type function-name(argument declaration, if any){{

declarationsdeclarationsstatementsstatements

}} 호출부와 피호출 함수사이의 데이터 전달호출부와 피호출 함수사이의 데이터 전달

– 인자인자 (argument) (argument) 전달전달– 함수의 리턴값함수의 리턴값

Page 24: 제  1 장  C  언어의 소개

함수함수 (( 예제예제 ))#include <stdio.h>#include <stdio.h>

int power( int base, int n ) ; /* int power( int base, int n ) ; /* 함수의 선언 함수의 선언 */*/

main() main() {{int i ;int i ;for ( i = 0 ; i < 10 ; i++ )for ( i = 0 ; i < 10 ; i++ ) printf( “%d %d %d\n”, i, power( 2, i ), power(-3, i ) ;printf( “%d %d %d\n”, i, power( 2, i ), power(-3, i ) ;}}

Page 25: 제  1 장  C  언어의 소개

int power( int base, int n )/* int power( int base, int n )/* 함수의 정의 함수의 정의 */*/{{int i, p ;int i, p ;

p = 1 ;p = 1 ;for ( i = 1 ; i <= n ; i++ ) for ( i = 1 ; i <= n ; i++ ) p = p * base ;p = p * base ;return p ;return p ;}}

형식 인자형식 인자 (formal argument)(formal argument)– 함수에 전달된 인자함수에 전달된 인자 (( 실질 인자실질 인자 )) 를 접근하기 를 접근하기

위하여 사용위하여 사용 . ex) base, n. ex) base, n 호출부로의 값 전달호출부로의 값 전달

– return return return-valuereturn-value

Page 26: 제  1 장  C  언어의 소개

제 제 22 장 데이터형장 데이터형 , , 연산자연산자 , , 수식수식

Page 27: 제  1 장  C  언어의 소개

변수의 이름변수의 이름 변수와 심볼 상수변수와 심볼 상수

– 문자문자 , , 숫자숫자 , '_'(underscore), '_'(underscore) 로 구성됨로 구성됨– 반드시 첫글자는 문자 또는 반드시 첫글자는 문자 또는 '_’'_’– 처음 처음 3131 자까지만 의미가 있음자까지만 의미가 있음– 대문자와 소문자 구별대문자와 소문자 구별 (case sensitive)(case sensitive)– 변수는 주로 소문자를변수는 주로 소문자를 , , 심볼 상수는 대문자를 사용심볼 상수는 대문자를 사용– C C 언어의 키워드는 변수의 이름으로 사용될 수 없음언어의 키워드는 변수의 이름으로 사용될 수 없음

변수의 용도와 관련되도록 이름을 부여하는 것이 변수의 용도와 관련되도록 이름을 부여하는 것이 좋음좋음

Page 28: 제  1 장  C  언어의 소개

변수의 선언변수의 선언 모든 변수는 사용되기전에 선언되어야 한다모든 변수는 사용되기전에 선언되어야 한다 .. 선언은 변수의 이름과 데이타형을 알린다선언은 변수의 이름과 데이타형을 알린다 .. 변수의 초기화변수의 초기화

– 초기값을 갖는 자동 변수초기값을 갖는 자동 변수 : : 함수가 호출될 때마다 함수가 호출될 때마다 초기화됨초기화됨

– 초기값을 갖지 않는 자동 변수초기값을 갖지 않는 자동 변수 : : 임의의 정해지지 임의의 정해지지 않은 값을 가짐않은 값을 가짐

한정사 한정사 constconst– 값이 변경되지 않는 변수의 선언에 사용값이 변경되지 않는 변수의 선언에 사용– ex) ex) const char msg[] = "This will not be changed.";const char msg[] = "This will not be changed.";

Page 29: 제  1 장  C  언어의 소개

데이터형과 크기데이터형과 크기 정수형정수형

실수형실수형

구분 허용범위 바이트 수int -32768 32767 2

unsigned int 0 65535 2long -2147483648 2147483647 4

unsigned long 0 4294967295 4

구분 최소 지수 최대 지수 유효 자리수 바이트 수float -38 38 7 8 4

double -308 308 15 16 8long double -4932 4932 19 20 10

Page 30: 제  1 장  C  언어의 소개

데이터형과 크기데이터형과 크기 (con’d)(con’d)

문자형문자형

<limit.h><limit.h> 와 와 <float.h><float.h> 는 지원하는 는 지원하는 숫자의 크기를 심볼 상수로 정의숫자의 크기를 심볼 상수로 정의

구분 허용범위 바이트수 사용용도

char -128 127 1 일반적인 영문자와 숫자 사용시

unsigned char 0 256 1 그래픽 문자나 바이트 단위 수치

Page 31: 제  1 장  C  언어의 소개

상수상수 정수 상수정수 상수 (integet constant)(integet constant)

– 십진수십진수 , 8, 8 진수진수 , 16, 16 진수로 표현가능진수로 표현가능– ex) 1234, -1234, 1234L, 01234, 0xabcd, ex) 1234, -1234, 1234L, 01234, 0xabcd,

0XABCD0XABCD

부동소수점 상수부동소수점 상수 (floating point constant)(floating point constant)– 123.4, 1.234e2, 1.234E2123.4, 1.234e2, 1.234E2 의 형태로 표현의 형태로 표현

Page 32: 제  1 장  C  언어의 소개

상수상수 (con’d)(con’d) 문자 상수문자 상수

– ‘‘a’, ‘A’, ‘0’ a’, ‘A’, ‘0’ 과 같이 표현과 같이 표현 (single quote (single quote 사용사용 ))– escape sequence: escape sequence: 제어 문자 표현제어 문자 표현문자 의 미

\a 삑 소리가 나게 한다.(Alert)

\b 커서가 한 문자 뒤로 이동한다.(Backspace)

\f 프린터의 페이지 넘김 문자이다.(Formfeed)

\n 커서가 다음행의 처음으로 간다.(NewLine)

\r 커서가 현재행의 처음으로 간다.(Carrage return)

\t 커서가 다음의 탭 위치로 이동한다.(Horizontal tab)

\v 프린터의 8칸 수직 이동 문자이다.(Vertical tab)

\\ 역슬래시를 나타낸다.

Page 33: 제  1 장  C  언어의 소개

상수상수 (con’d)(con’d)

문자열 상수문자열 상수– ““DCSLAB”DCSLAB” 와 같이 와 같이 double quotedouble quote 로 로 둘러싸인 일련의 문자들둘러싸인 일련의 문자들– “”“”: : 빈 문자열빈 문자열– 문자 상수 ‘문자 상수 ‘ a’a’ 와 문자열 상수 “와 문자열 상수 “ a”a” 는 는 구분되어야 한다구분되어야 한다 ..

\’ 작은 따옴표를 나타낸다. (single quote)

\” 큰 따옴표를 나타낸다.(double quote)

\? 물음표를 나타낸다.(Question Mark)

\000 8진수로 문자를 표현한다.

\xhh 16진수로 문자를 표현(hh는 16진수)

Page 34: 제  1 장  C  언어의 소개

Enumeration constantEnumeration constant– enum boolean FALSE, TRUE ;enum boolean FALSE, TRUE ;– FALSEFALSE 는 는 00 값을 갖고 값을 갖고 TRUETRUE 는 는 11 값을 갖는다값을 갖는다 ..– #define#define 을 사용하는 것보다 간결함을 사용하는 것보다 간결함– enumenum 형 변 수 를 정 의 할 수 있 다형 변 수 를 정 의 할 수 있 다 ..

enum escapes { BELL = ‘\a’, BACKSPACE = enum escapes { BELL = ‘\a’, BACKSPACE = ‘\b’‘\b’, , TAB = ‘\t’TAB = ‘\t’} } ;;enum months { JAN = 1, FEB, MAR, APR, MAY, enum months { JAN = 1, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC } ;JUN, JUL, AUG, SEP, OCT, NOV, DEC } ; /* FE /* FEB = 2, MAR = 3, ..... */B = 2, MAR = 3, ..... */

Page 35: 제  1 장  C  언어의 소개

예제 프로그램예제 프로그램#include <stdio.h>#include <stdio.h>

main()main(){{int a, b, c, sum ;int a, b, c, sum ;float d, e ;float d, e ;a = 123 ;a = 123 ;b = 4537 ;b = 4537 ;c = 32943 ;c = 32943 ;sum = a + b + c ;sum = a + b + c ;printf(“%d + %d + %d = %d \n”) ;printf(“%d + %d + %d = %d \n”) ;}}

Page 36: 제  1 장  C  언어의 소개

산술 연산자산술 연산자 사칙 연산과 나머지 연산사칙 연산과 나머지 연산 (%)(%)

– 이항이항 (binary) (binary) 연산자연산자 : +. -. *, /, %: +. -. *, /, %– *, /, % *, /, % 연산은 연산은 +, -+, - 보다 연산 우선순위가 보다 연산 우선순위가 높다높다 ..– % % 연산은 연산은 floatfloat 와 와 doubledouble 형에는 사용될 수 형에는 사용될 수 없다없다 . . – 단항단항 (unary) (unary) 연산자 연산자 ++ 와 와 -- 는 이항 는 이항 연산자보다 우선순위가 높다연산자보다 우선순위가 높다 . .

Page 37: 제  1 장  C  언어의 소개

관계 연산자와 논리 연산자관계 연산자와 논리 연산자 관계 연산자관계 연산자

논리 연산자논리 연산자

연산자 의 미> greater than

>= greater than or equal to< less than

<= less than or equal to== equal!= not equal

연산자 의 미&& Logical AND

|| Logical OR! Logical NOT

Page 38: 제  1 장  C  언어의 소개

비트 연산자비트 연산자 char, short, int, longchar, short, int, long 형의 피연산자만을 형의 피연산자만을 취함취함

비트 연산자의 종류비트 연산자의 종류연산자 의 미

& bitwise AND| bitwise OR^ bitwise Exclusive OR

<< left shift>> right shift~ 1의 보수(complement), 단항 연산자

Page 39: 제  1 장  C  언어의 소개

++, --++, -- 연산자연산자 ++++ 연산자연산자

– 변수를 변수를 11 만큼 증가시킴만큼 증가시킴 -- -- 연산자연산자

– 변수를 변수를 11 만큼 감소시킴만큼 감소시킴 전위전위 (prefix) (prefix) 또는 후위또는 후위 (postfix)(postfix) 에 위치할 수 있음에 위치할 수 있음

– 전위에 오는 경우전위에 오는 경우 : : 변수를 참조하기 전에변수를 참조하기 전에– 후위에 오는 경우후위에 오는 경우 : : 변수를 참조한 후변수를 참조한 후

ex) ex) n = 0;n = 0; n = 0;n = 0; x = ++n;x = ++n; x = n++;x = n++; n = 1, x = 1n = 1, x = 1 n = 1, x = 0;n = 1, x = 0;

Page 40: 제  1 장  C  언어의 소개

지정 연산자지정 연산자 (assignment (assignment operator)operator)

i = i + 2;i = i + 2; 와 같이 왼쪽의 변수가 오른쪽에서 반복되는 와 같이 왼쪽의 변수가 오른쪽에서 반복되는 경우에 사용경우에 사용

연산자의 사용예연산자의 사용예 i += 2;i += 2;

i -= 2;i -= 2; i *= 2;i *= 2; i /= 2;i /= 2; i %= 2;i %= 2; i <<= 2; or i >>= 2;i <<= 2; or i >>= 2; i &= 2;i &= 2; i |= 2;i |= 2;

i ^= 2;i ^= 2;

Page 41: 제  1 장  C  언어의 소개

조건부 수식조건부 수식 (conditional (conditional expression)expression)

아래와 같은 동작을 취하는 삼항아래와 같은 동작을 취하는 삼항 (ternary) (ternary) 연산자 연산자 ?:?:

if (if (expr1expr1) ) expr2expr2;; else else expr3expr3;; => => expr1expr1 ? ? expr2expr2 : : expr3expr3 으로 표현으로 표현 계산 과정계산 과정

– expr1expr1 을 계 산 하 여 결과 가 참 이 면 을 계 산 하 여 결과 가 참 이 면 expr2expr2 가 가 수행되고 거짓이면 수행되고 거짓이면 expr3expr3 을 을 수행수행

– ex) max = (a > b) ? a : b;ex) max = (a > b) ? a : b;

Page 42: 제  1 장  C  언어의 소개

형변환형변환 (type conversion)(type conversion) 연산자가 서로 다른 형의 피연산자를 가질 때 형변환이 연산자가 서로 다른 형의 피연산자를 가질 때 형변환이 필요필요

일반적으로 크기가 작은 피연산자를 큰 연산자로 일반적으로 크기가 작은 피연산자를 큰 연산자로 형변환 규칙형변환 규칙

– Rule 1. Rule 1. 피연산자 중 피연산자 중 long doublelong double 이 있으면 나머지는 이 있으면 나머지는 long dolong doubleuble 로 변환로 변환

– Rule 2. Rule 2. 피연산자 중 피연산자 중 doubledouble 이 있으면 나머지는 이 있으면 나머지는 doubledouble 로 로 변환변환

– Rule 3. Rule 3. 피연산자 중 피연산자 중 floatfloat 가 있으면 나머지는 가 있으면 나머지는 floatfloat 로 변환로 변환– Rule 4. Rule 4. 피연산자 중 피연산자 중 charchar 나 나 shortshort 는 는 intint 로 변환로 변환– Rule 5. Rule 5. 피연산자 중 피연산자 중 longlong 이 있으면 나머지는 이 있으면 나머지는 longlong 으로 변환으로 변환

Page 43: 제  1 장  C  언어의 소개

형 변환형 변환 (con’d)(con’d)

type cast: type cast: 명시적 형 변환명시적 형 변환– (type-name) (type-name) expressionexpression– ex) ex)

int i ;int i ;float f = 12.34 ;float f = 12.34 ;i = (int) f ;i = (int) f ;

Page 44: 제  1 장  C  언어의 소개

연산자 간의 우선순위연산자 간의 우선순위연 산 자 Associativity

( ) [ ] . L – R

! ++ -- + - *& (type) sizeof

R – L

* / % L – R

+ - L – R

<< >> L – R

< <= >= > L – R

== != L – R

& L – R

Page 45: 제  1 장  C  언어의 소개

연산자 간의 우선순위연산자 간의 우선순위 (con’d)(con’d)^ L – R

| L – R

&& R – L

|| L – R

? : R – L= += -= *= /= %=^= |= &= <<= >>= R – L

. L – R

Page 46: 제  1 장  C  언어의 소개

예제예제#include <stdio.h>#include <stdio.h>

main()main(){{int x, y, z;int x, y, z;x = 1, y = 2, z = 4;x = 1, y = 2, z = 4;x = x || y && z;x = x || y && z;printf("%d\n",x);printf("%d\n",x);x = 1, y = 2, z = 3;x = 1, y = 2, z = 3;x = (x > y || z ==y && x<z);x = (x > y || z ==y && x<z);printf("%d\n",x);printf("%d\n",x);x = y = z = 1;x = y = z = 1;x = -y++ + ++z;x = -y++ + ++z;printf("%d\n%d\n%d\n",x,y,z);printf("%d\n%d\n%d\n",x,y,z);}}

Page 47: 제  1 장  C  언어의 소개

제 제 3 3 장 제어흐름장 제어흐름

Page 48: 제  1 장  C  언어의 소개

문장문장 (statement)(statement) 와 블록와 블록(block)(block)

문장문장– 지정문지정문 , , 증감 연산증감 연산 ( ++, -- ), ( ++, -- ), 함수 호출 등의 함수 호출 등의

서식서식– 문장문 문장문 ;( semicolon);( semicolon) 으로 끝남으로 끝남

블록블록– 복합문복합문 (compound statement)(compound statement)– brace { } brace { } 로 선언과 문장들을 모아서 복합문을 로 선언과 문장들을 모아서 복합문을 만듬만듬

– ex) function bodyex) function body

Page 49: 제  1 장  C  언어의 소개

if-elseif-else 판단이나 결정을 나타내기 위해 사용판단이나 결정을 나타내기 위해 사용

if (if (expressioexpression)n)statement1statement1elseelsestatement2statement2

expressionexpression 이 이 00 이 아닌 값을 가지면이 아닌 값을 가지면 (( 참이면참이면 ) ) statement1statement1 이 이 수행되고 수행되고 00 이면이면 ((거짓이면거짓이면 ) else ) else 부분의 부분의 statement2statement2 가 수행된다가 수행된다 ..

모호성모호성 (ambiguity)(ambiguity) if ( n > 0 )if ( n > 0 )if ( a > b ) z = a ;if ( a > b ) z = a ;else z = b ; /* else else z = b ; /* else 와 매치되는 와 매치되는 ifif 는 는 ? */? */

Page 50: 제  1 장  C  언어의 소개

if - else(con’d)if - else(con’d) 모호성의 해결모호성의 해결

– 가장 가까운 가장 가까운 if if 의 의 elseelse 로 취급로 취급 (( 컴파일러컴파일러 ))– 브레이스를 사용브레이스를 사용 (( 명시적 지정명시적 지정 ))– ex) ex)

if ( n > 0 ) {if ( n > 0 ) {if ( a > b )if ( a > b )z = a ;z = a ;

}}else z = b ;else z = b ;

Page 51: 제  1 장  C  언어의 소개

else ifelse if multi-way decisionmulti-way decision 에 사용에 사용 구문구문

if (if (expressionexpression) ) statementstatementelse if (else if (expressionexpression)) statementstatementelse if (else if (expressionexpression)) statementstatementelse else statementstatement

Page 52: 제  1 장  C  언어의 소개

switchswitch 문문 switch switch 문은 다중 비교 분기의 특별한 경우문은 다중 비교 분기의 특별한 경우 구문구문

switch (switch (expressionexpression) {) {

case case const-exprconst-expr:: statements statementscase case const-exprconst-expr:: statements statements........................................default:default: statements statements

}}

breakbreak– casecase 는 레이블로만 사용됨는 레이블로만 사용됨– 제어의 흐름을 제어의 흐름을 switchswitch 문에서 벗어나게 함문에서 벗어나게 함

Page 53: 제  1 장  C  언어의 소개

switch switch 문 사용예문 사용예#include <stdio.h>#include <stdio.h>

main()main(){{int c, i, nwhite, nother, ndigit[10] ;int c, i, nwhite, nother, ndigit[10] ;

nwhite = nother = 0;nwhite = nother = 0;for ( i = 0 ; i < 10 ; i++ )for ( i = 0 ; i < 10 ; i++ )ndigit[i] = 0;ndigit[i] = 0;while (( c = getch() ) != EOF ) while (( c = getch() ) != EOF ) switch ( c ) switch ( c ) case '0’ : case '1’ : case '2’ : case '3’ : case '0’ : case '1’ : case '2’ : case '3’ : case '4’ : case '5’ : case '6’ : case '7’ :case '4’ : case '5’ : case '6’ : case '7’ :case '8’ : case '9’ :case '8’ : case '9’ :ndigitndigit[c - '0']++;[c - '0']++;b reak;b reak;

Page 54: 제  1 장  C  언어의 소개

switchswitch 문 사용예문 사용예 (con’d)(con’d)case ‘ ‘ :case ‘ ‘ :case ‘\n’ :case ‘\n’ :case ‘\t’ :case ‘\t’ :

nwhite++ ;nwhite++ ;break ;break ;

default :default :nother++ ;nother++ ;break ;break ;

}}}}printf( “digits = “ ) ;printf( “digits = “ ) ;for ( i = 0 ; i < 10 ; i++ )for ( i = 0 ; i < 10 ; i++ )

printf( “ %d”, ndigit[i] ) ;printf( “ %d”, ndigit[i] ) ;printf( “, white space = %d, other = %d\n”, nwhite, nother ) ;printf( “, white space = %d, other = %d\n”, nwhite, nother ) ;return 0 ;return 0 ;

}}

Page 55: 제  1 장  C  언어의 소개

while while 문문 구문구문

while ( expression )while ( expression )

statementstatement expressionexpression 은 계산되어 만약 은 계산되어 만약 00 이 아닌 값을 가지면 이 아닌 값을 가지면 statemstatem

entent 가 수행이 되고 가 수행이 되고 expressionexpression 을 다시 계산을 다시 계산 , , 이러한 이러한 반복은 반복은 expressionexpression 이 이 00 이 될 때까지 계속됨이 될 때까지 계속됨

예제예제int i = 0 ;int i = 0 ;

while ( i <= 100 ) {while ( i <= 100 ) {....................i++ ;i++ ;}}

Page 56: 제  1 장  C  언어의 소개

for for 문문 구문구문

for ( for ( expr1expr1 ; ; expr2expr2 ; ; expr3expr3 ) )

statementstatement

동작동작– whilewhile 문의 형태로 표시하면 다음과 같다문의 형태로 표시하면 다음과 같다 ..

expr1 ;expr1 ;while ( expr2 ) {while ( expr2 ) {statmentstatmentexpr3 ;expr3 ;}}

Page 57: 제  1 장  C  언어의 소개

for for 문문 (con’d)(con’d) forfor 문의 구조문의 구조

– expr1expr1 과 과 expr3expr3 은 일반적으로 지정문이나 함수 호출로 구성은 일반적으로 지정문이나 함수 호출로 구성– expr2expr2 는 관계 수식는 관계 수식 (relational expression)(relational expression) 으로 표현으로 표현– 세 개의 수식중 어느 하나를 생략하더라도 세미콜론세 개의 수식중 어느 하나를 생략하더라도 세미콜론 (;)(;) 은 그대로 은 그대로

존재존재– expr2expr2 가 생략되면 항상 참인 조건을 의미가 생략되면 항상 참인 조건을 의미

for ( ; ; ;) { /* infinite loop */for ( ; ; ;) { /* infinite loop */ ..............}}

순환문의 중단순환문의 중단– breakbreak 와 와 return return 사용사용

순환문내에 순환문을 중첩시킬 수 있음순환문내에 순환문을 중첩시킬 수 있음

Page 58: 제  1 장  C  언어의 소개

comma comma 연산자연산자 하나의 수식에서 여러 개의 계산을 수행하는 하나의 수식에서 여러 개의 계산을 수행하는 경우에 사용경우에 사용 commacomma 에 의해 분리되는 한 쌍의 수식은 에 의해 분리되는 한 쌍의 수식은 왼쪽에서 오른 쪽으로 계산되면 계산 결과의 왼쪽에서 오른 쪽으로 계산되면 계산 결과의 형과 값은 오른쪽 피연산자의 형과 값을 가짐형과 값은 오른쪽 피연산자의 형과 값을 가짐 commacomma 는 함수의 인자를 분리하는 데도 는 함수의 인자를 분리하는 데도 사용하고 변수의 선언에도 사용되지만 이는 사용하고 변수의 선언에도 사용되지만 이는

comma comma 연산자가 아님연산자가 아님

Page 59: 제  1 장  C  언어의 소개

comma comma 연산자연산자 (con’d)(con’d) 예제예제

#include <string.h>#include <string.h>

main()main(){{int c, i, j;int c, i, j; char *s = “Hello world”;char *s = “Hello world”;

for (i = 0, j = strlen(s) - 1; i < j; i++, j--) {for (i = 0, j = strlen(s) - 1; i < j; i++, j--) {c = s[i];c = s[i];s[i] = s[j];s[i] = s[j];s[j] = c;s[j] = c;}}

}}

Page 60: 제  1 장  C  언어의 소개

do whiledo while 문문 forfor 문과 문과 whilewhile 문은 순환문의 종료 조건을 순환문의 시작 위치에서 문은 순환문의 종료 조건을 순환문의 시작 위치에서 검사검사 do whiledo while 문은 순환문의 마지막 위치에서 검사 문은 순환문의 마지막 위치에서 검사 (( 항상 적어도 한번은 항상 적어도 한번은 수행수행 )) 구문구문

do do statementstatementwhile (while (expressionexpression););

동작동작– statementstatement 가 먼저 수행이 되고 가 먼저 수행이 되고 expressionexpression 이 계산됨이 계산됨– 만약 만약 expressionexpression 이 참이면 이 참이면 statementstatement 는 다시 수행을 반복하게 는 다시 수행을 반복하게 되고 되고 expressionexpression 이 거짓이 되면 반복을 종료이 거짓이 되면 반복을 종료

Page 61: 제  1 장  C  언어의 소개

do whiledo while 문문 (con’d)(con’d) 예제예제

#include <stdio.h>#include <stdio.h>

main()main(){{int ch;int ch;do { do { printf("Once again? (y/n) ");printf("Once again? (y/n) ");ch = getchar();ch = getchar();} while (ch != 'n' && ch != 'y');} while (ch != 'n' && ch != 'y');}}

Page 62: 제  1 장  C  언어의 소개

break break 문문 for, while, do while, switchfor, while, do while, switch 문 바깥으로 빠져 나가는데 문 바깥으로 빠져 나가는데

사용사용 순순 cc ccc c 환문이 중첩되는 경우에는 환문이 중첩되는 경우에는 break break 는 는 breakbreak 를 를

둘러싸는 가장 안쪽 순환문을 빠져 나옴둘러싸는 가장 안쪽 순환문을 빠져 나옴for ( ... ) {for ( ... ) {for ( ... ) {for ( ... ) {for ( ... ) {for ( ... ) {................break ;break ;}}}}}}

Page 63: 제  1 장  C  언어의 소개

break break 문문 예제예제

while ((c = getchar()) != EOF) {while ((c = getchar()) != EOF) {if (c == '') break;if (c == '') break;else putchar(c);else putchar(c);

}}

Page 64: 제  1 장  C  언어의 소개

continue continue 문문 break break 문에 비해 자주 사용되지는 않음문에 비해 자주 사용되지는 않음 for, while, do while for, while, do while 문에서만 사용될 수 있음문에서만 사용될 수 있음 순환문의 실행 도중 순환문의 실행 도중 continuecontinue 문을 만나면 순환문의 문을 만나면 순환문의

나머지 부분은 수행하지 않고 다음 번의 반복을 수행나머지 부분은 수행하지 않고 다음 번의 반복을 수행

for (i = 0; i < n; i++) {for (i = 0; i < n; i++) {

if (a[i] < 0) continue;if (a[i] < 0) continue; /* skip negative value *//* skip negative value */..................

}}

Page 65: 제  1 장  C  언어의 소개

continue continue 문문for (i = 0; i < n; i++) {for (i = 0; i < n; i++) {

/* skip negative value *//* skip negative value */

if (a[i] < 0) continue; if (a[i] < 0) continue; ..................

}}

Page 66: 제  1 장  C  언어의 소개

goto goto 문과 레이블문과 레이블 일반적으로 일반적으로 gotogoto 문과 같은 무조건 분기문은 문과 같은 무조건 분기문은

가급적 사용하지 말아야 함가급적 사용하지 말아야 함– 프로그램이 이해하기 어려워짐프로그램이 이해하기 어려워짐– 대분분의 코드는 대분분의 코드는 gotogoto 문 없이 작성할 수 있음문 없이 작성할 수 있음

불가피한 경우불가피한 경우– 중첩된 순환문에서 가장 안쪽 순환문에서 전체 중첩된 순환문에서 가장 안쪽 순환문에서 전체

순환문을 빠져나가는 경우순환문을 빠져나가는 경우

Page 67: 제  1 장  C  언어의 소개

goto goto 문과 레이블문과 레이블

error: error: clean up the messclean up the mess

레이블레이블 (label): (label): 분기의 목적지분기의 목적지 , , 콜론콜론 (:)(:) 을 을 수반수반

Page 68: 제  1 장  C  언어의 소개

예제예제/* /* 소수 추출 프로그램소수 추출 프로그램 (C Primer Plus(C Primer Plus 에서 발췌에서 발췌 ) */) */#include <stdio.h>#include <stdio.h> main()main(){{

int number, divisor, limit;int number, divisor, limit;int count = 0;int count = 0;

printf("printf(" 상한 값을 입력하라상한 값을 입력하라 .(2.(2 보다 커야함보다 커야함 ) :");) :");scanf("%d",&limit);scanf("%d",&limit);

while (limit < 2) { /* while (limit < 2) { /* 입력오류 검사 입력오류 검사 */*/printf("printf(" 다시 입력하라다시 입력하라 : ");: ");scanf("%d",&limit);scanf("%d",&limit);}}

}}

Page 69: 제  1 장  C  언어의 소개

예제예제 (con’d)(con’d)printf("1printf("1 에서 에서 %d%d 까지의 소수들은까지의 소수들은 ..\n",limit);..\n",limit);

for (number=2;number<=limit;number++) {for (number=2;number<=limit;number++) {for (divisor=2;number%divisor != 0;divisor++) ;for (divisor=2;number%divisor != 0;divisor++) ;if (divisor == number) {if (divisor == number) {printf("%5d ",number);printf("%5d ",number);count++;count++;if (count % 10 == 0) /*if (count % 10 == 0) /* 한줄에 한줄에 1010 개의 소수출력개의 소수출력 */*/printf("\n");printf("\n");}}}}getch();getch();

}}