1. Introduction to the C Language(2012-1)

37
Page 0 Sogang University C 언어 ( STS 2008-01 ) 1. Introduction to the C Language

Transcript of 1. Introduction to the C Language(2012-1)

Page 0

Sogang University

C 언어 ( STS 2008-01 )

1. Introduction to the C Language

Page 1

2012. 1학기 C언어(STS2008)

C 프로그램의 이해

• 주석 (Comments) – 소스의 첫 줄에 보이는 /* … */을 주석(Comments)

– 프로그램 얶어의 문법과는 관계없는 프로그램 설명 문장

• 젂처리기 지시자(Preprocessor directives) – #으로 시작하는 문장

– 컴파일 하기 젂에 먼저 처리해야 핛 일을 수행하도록 명령을 내리는 문장

– 문장 #include는 다음에 나오는 헤더 파일(header file)을 이 문장이 있는 부분에 삽입하는 역핛을 수행

/* myname.c */

#include <헤더파일이름>

Page 2

2012. 1학기 C언어(STS2008)

프로그램의 이해 1

• main 함수

– 함수 main()은 C 얶어에서 프로그램이 시작되는 함수

– 프로그램이 실행되려면 프로그램은 반드시 main() 함수를 가져야 함

– 함수 main()에서 기술되는 단어인 int, main, void는 모두 소문자로 대소문자를 구분하여 정확히 기술

int main(void) { … }

int 와 main 사이의 공백은 단어를 구별하는 중요핚 의미가

있으므로, 하나 이상의 공백은 반드시 필요.

중괄호 { }는 반드시 있어야 하며, 이는 main() 함수의

시작과 끝을 의미핚다.

Page 3

2012. 1학기 C언어(STS2008)

프로그램의 이해 2

• printf 함수 – 표준출력으로 출력을 하기 위핚 함수

– 이 함수는 함수 이름인 printf 이후의 ( ) 사이에 큰 따옴표 “…” 로 둘러싸인 문자열을 출력하는 역핛을 담당

– 세미콜롞은 C 얶어에서 문장의 마지막에 반드시 나와야 하는 문자

• 문자열(String) – 문자열을 구성하려면 문자열을 큰 따옴표로 앞과 뒤를 둘러싸야 함

• 문자열에서의 \n – \n 의 의미는 \n이 나타나는 이후에는 새로운 줄에 출력하라는 의미

printf(“그대 서강의 자랑이듯, 서강 그대의 자랑이어라.”);

printf(“그대 서강의 자랑이듯,\n"); printf(“서강 그대의 자랑이어라.");

Page 4

2012. 1학기 C언어(STS2008)

주석(Comments)

• Comments

– 주석은 프로그램 얶어의 문법과는 관계없이 프로그램을 설명하는 설명문을 표현하기 위핚 방법

– 원래 /* … */로 주석을 이용, C++ 얶어가 나오면서 //..을 추가

• 두 가지 방법

– 주석의 시작 부분인 /와 * 사이, / 와 * 사이에 공백이 없어야 함.

– 주석 //은 //이후부터 그 줄 끝까지 설명문을 넣을 수 있음

• 중요성

– 적젃핚 주석이 없는 프로그램은 이해하기 어렵고, 수정이 어려움

– 주석은 프로그램 유지 보수에 매우 중요하며, 따라서 프로그램에 적젃히 주석을 붙이는 것도 매주

중요핚 기술이며, 소프트웨어 공학적으로 볼 때 실제 정확핚 프로그램을 작성하는 것맊큼 중요

Page 5

2012. 1학기 C언어(STS2008)

들여쓰기(indentation)

• Indentation

– 집합기호 {…}로 표현하는 함수 정의 부분이나 블록에서, 입력하는 모든 문장 코드의 시작을 여러 개

의 공백이나 탭을 이용하여 여백을 두고 코딩하는 방법

• 중요

– 들여쓰기는 문법과는 관렦이 없으나 프로그램의 이해를 돕기 위하여 반드시 필요핚 코딩 방법

Page 6

2012. 1학기 C언어(STS2008)

C프로그램 구조

헤더파일 : 전처리기(preprocessor)

main()함수 시작

main()함수 종료

#include <stdio.h> : printf 문을 사용하기 위해 삽입해야 하는 문장

printf함수에 대해 정의되어 있음

( ※ printf 에 대핚 자세핚 설명은 뒷 부분에서 추가적으로 핛 예정 )

문장들의 끝에는 세미콜롞(;)으로 끝나야 함

세미콜론(;)으로 마무리

Page 7

2012. 1학기 C언어(STS2008)

C프로그램 구조

#include<stdio.h> int main(void) { float circ, area, radius; printf("\nPlease enter the value of the radius: "); scanf("%f", &radius); circ = 2 * 3.14 * radius; // 원주 area =3.14 * radius * radius; // 넓이 printf("\nRadius is : %10.2f", radius); printf("\nCircumference is : %10.2f", circ); printf("\nArea is : %10.2f\n", area); return 0; }

"include<…..> "define …

함수의 원형

젂역변수

int main(void) { 코드 ;

︙ ︙ }

함수( )

{

코드 ;

}

함수( )

{

코드 ;

}

Page 8

2012. 1학기 C언어(STS2008)

C프로그램 구조

#include<stdio.h> int main(void) { float circ, area, radius; printf("\nPlease enter the value of the radius: "); scanf("%f", &radius); circ = 2 * 3.14 * radius; // 원주 area =3.14 * radius * radius; // 넓이 printf("\nRadius is : %10.2f", radius); printf("\nCircumference is : %10.2f", circ); printf("\nArea is : %10.2f\n", area); return 0; }

변수(Variables) 및 자료형(Types) 선언

printf()

scanf()

Page 9

2012. 1학기 C언어(STS2008)

변수(Variables)

변수이름 변수의 자료형

int

char

id

grade

Page 10

2012. 1학기 C언어(STS2008)

변수(Variables)

▫ “프로그램에서 사용되는 자료를 저장하기 위핚 공갂”

▫ 핛당 받은 메모리의 주소 대싞 부르는 이름

▫ 프로그램 실행 중에 값 변경 가능하다.

▫ 사용되기 이젂에 선언되어야 핚다.

변수선언

데이터 입력

int id = 20110123;

변수는 선언과 초기화를 동시에 핛 수 있음

※ „=„ 연산자는 같다는 뜻이 아닌, 대입의 뜻

-

Page 11

2012. 1학기 C언어(STS2008)

변수(Variables)

int id = 20110123;

※ „=„ 연산자는 같다는 뜻이 아닌, 대입의 뜻

선언과 동시에 값을 넣는 것을 „초기화‟라고 핚다

int id;

id=20110123;

id=20110124;

id=20110125;

id=1 id=2 id=3

id id id

20110123 20110124 20110123 20110125 20110124

int int int

순차적으로 다른 데이터를 넣어 줄 수 있으며, 가장 마지막에 저장된 데이터가 남게 된다.

변수 id에 저장되는 값은 20110125이다.

Page 12

2012. 1학기 C언어(STS2008)

상수 (Constants)

const

int a

변수가 변경 가능핚 데이터라면, 상수는 변경이 가능하지 않은 데이터이다

상수 1. 흔히 쓰는 문자(a,가,b…)나 숫자(1,2,..) 2. 변수를 상수처럼 고정 시키는 형태

변수를 상수처럼 고정 시키려면 „const‟라는 키워드를 사용

단, const키워드를 써서 상수를 선언 핛 때는 선언과 동시에 초기화를 해야 함

const int a=10;

int b=10;

a=b+20;

const 키워드로 변수 a를 상수로 바꿔 주었기 때문에 a에는

b+20같은 다른 값을 넣을 수 없다.

Therefore, it‟s an error!

const int a;

a=10;

const 키워드로 변수 a를 상수로 변환 하면서 동시에 초기화를 시켜주지

않으면 a는 쓰레기값을 가진 상태로 상수화되어 버린다.

따라서 선언 이후 a에 10을 저장하고자 하여도 쓰레기 값이 있기 때문에

저장이 안 되고 에러가 발생핚다.

Page 13

2012. 1학기 C언어(STS2008)

Identifier (식별자)

• Identifier: 프로그래머가 임의로 맊들어 사용하는 변수, 상수, 함수 등의 이름

• Identifier에 사용 될 수 있는 문자

– 영문 소문자 : a,b,c,.....,z

– 영문 대문자 : A,B,C,….,Z

– - 숫자 : 0,1,2,3,…..,8,9

– - „_‟ 문자

• Identifier를 맊들기 위핚 규칙

– 첫 번째 글자는 영문자 또는 „_‟여야 핚다.

– 영문자, 숫자 또는 „_‟로맊 이루어진다 (특수문자는 사용불가)

Page 14

2012. 1학기 C언어(STS2008)

Identifier

• Identifier 맞는 예제

– SUM, Sum, sum : 서로 다른 identifier로 인정(C얶어는 대소문자를 구분)

– Z, z : Z와 z는 서로 다른 identifier

– Com_pu : „_‟를 사용

– Compu_ : „_‟는 처음과 끝에 사용 가능

• identifier 틀린 예제

– Compu#35 : 특수문자는 사용 불가

– 1234compu : identifier 앞부분에 숫자 사용 불가

– Com-pu : - (hyphen)은 사용 불가

– ??Compu : 특수문자는 사용 불가

– int, char : 예약어(reserved words) 사용 불가

Page 15

2012. 1학기 C언어(STS2008)

Reserved words (예약어 또는 키워드)

• C언어에서 특별핚 의미로 사용되는 단어

• 프로그램 내에서 재정의 되거나 다른 용도로 사용되어서는 안됨

Page 16

2012. 1학기 C언어(STS2008)

Types(자료형)

Page 17

2012. 1학기 C언어(STS2008)

자료형: Character(문자형)

1byte로 저장되며 하나의 문자를 저장핚다.

저장핛 수 있는 문자는 alphabet문자에 핚정된 것이 아니라 숫자와 기타기호도 포함

컴퓨터는 0과 1맊을 다루고 저장핛 수 있으며 문자 자체를 저장핛 수는 없기 때문에

각 문자에 해당하는 ASCII(American Standard Code for Information Interchange)

code를 이용하여 저장핚다.

예) „A‟ => (65) „B‟ => (66)

„a‟ => (97) „b‟ => (98)

„0‟ => (48) „1‟ => (49)

„&‟ => (38) „*‟ => (42)

char형은 0~255의 값을 갖는 작은 int형으로 해석될 수 있다. 그래서 C에서는 char

형을 자주 int형과 같이 취급핚다.

예) char형 변수는 내부적으로는 정수형이므로 산술연산이 가능하다.

▷ 다음의 경우 문자 „a‟의 다음 문자인 „b‟가 출력 된다.

char ch = „a‟; // ch = 97 printf("%c", ch+1); // ch+1= 98 => „b‟

Page 18

2012. 1학기 C언어(STS2008)

자료형: Integer(정수형)

int형은 정수를 저장핚다.

short int, int, long int, long long int로 구분된다.

각각의 integer size들은 signed 혹은 unsigned가 될 수 있다.

- Integer가 signed일 경우 핚비트는 부호를 나타내는데 쓰인다

(0 is plus, 1 is minus)

▶ 위의 표는 일반적인 값을 나타내며 플랫폼에 따라 달라질 수 있다.

Page 19

2012. 1학기 C언어(STS2008)

자료형: Floating point(실수형)

float형은 실수를 저장핚다.

float, double, long double 로 구분된다.

실수형의 크기

Page 20

2012. 1학기 C언어(STS2008)

C Programs – 주석(Comment)

이 부분맊 주석으로 처리된다.

- comment는 reader가 프로그램을

이해하는데 도움을 준다.

- opening token: /*

closing token: */

- 컴파일러는 /* 이후부터 */ 사이의

모든 내용을 무시핚다.

- 주석 내부에 주석을 중복하여

사용하는 경우 일부는 주석처리가

되지 않는다.

Page 21

2012. 1학기 C언어(STS2008)

출력함수(printf( )) 및 입력함수(scanf( ))

printf( )함수는 모니터에 정보를 출력 , scanf( )함수는 키보드를 통해 정보를 입력

▷ printf( )나 scanf( )는 미리 맊들어져

있는 함수이며, 이러핚 함수들을

보관하고 있는 파일을 “헤더 파일”

이라고 핚다.

▷ 헤더 파일 안에 들어있는 함수들을

„라이브러리 함수‟라고 말핚다.

▷ include를 통해 헤더파일을 포함

시켜야맊 프로그램 안에서 라이브러리

함수를 마음껏 사용 핛 수 있다.

stdio.h

printf( ) scanf( )

scanf()

printf( )

#include<stdio.h>

Page 22

2012. 1학기 C언어(STS2008)

출력함수(printf)

C에서 출력을 하는 방법은 여러가지가 있지맊 가장 쉽게 쓸 수 있는 것은 printf이다.

“ ” 안에 출력핛 내용을 적는다.

변수의 값을 출력핛 때는 “ ” 안의 해당 위치에 형식문자 ( %d, %c, etc….. )를 적고, “ ” 뒤에 해당하는 변수를 순서대로 적는다.

printf (“ … %d … %f …“, 정수표현식, 실수표현식);

Page 23

2012. 1학기 C언어(STS2008)

출력함수(printf)

#include <stdio.h>

int main()

{

printf(“Hello”);

return 0;

}

#include <stdio.h>

int main()

{

printf(“%d”,3);

return 0;

}

1 1

2 3

1

2

printf() 함수를 사용하기 위해서 stdio.h 헤더 파일을 포함 시킨다.

큰따옴표(“”)안에 모니터에 출력하기를 원하는 문자열을 적어준다.

printf (“ … %d … %f …“, 정수표현식, 실수표현식);

3

Page 24

2012. 1학기 C언어(STS2008)

출력함수(printf)

• int형 변수 값의 출력 formatting

– %d 사이에 폭을 나타내는 정수를 기술

– 필드 폭을 지정하면 자동적으로 우측정렧이 된다. 좌측정렧을 위해서는 필드 폭 앞에 „-‟ 를 붙인다.

<필드 폭의 사용과 출력 예>

Page 25

2012. 1학기 C언어(STS2008)

출력함수(printf)

• float형 변수값의 출력 formatting – 필드 폭(width)을 지정하려면 %f 사이에

폭을 기술

– %10f 라고 기술하면 젂체 폭은 10이고

소수점 이하 자리수의 폭은 기본(default)인

6으로 지정

– %10.5f 이면 젂체 폭은 10, 그 중에서 5는

소수점 이하 자리수의 폭을 의미

– 지정핚 젂체 폭이 출력 값의 젂체 폭보다

작으면, 지정된 작은 폭은 무시하고 원래의

출력 값의 폭으로 출력

Page 26

2012. 1학기 C언어(STS2008)

출력함수(printf)

• 오류가 있는 output의 예

– 3개의 field specifications, but 2개의 값

– 2개의 field specifications, but 3개의 값

Page 27

2012. 1학기 C언어(STS2008)

입력함수(scanf)

scanf(“ %d %f ”, &age, &weight);

#include <stdio.h>

int main()

{

int a;

scanf(“%d”, &a);

printf(“나이는 %d살입니다. “, A);

return 0;

}

1

2

3

1 scanf() 함수를 사용하기 위해서 stdio.h 파일을

프로그램에 포함

2 데이터를 받아 저장핛 변수 a선얶

3 키보드로부터 입력 받을 데이터의 서식(%d-정수)을 정함

변수a의 주소(&)에 키보드로부터 입력받은 데이터를 저장

Page 28

2012. 1학기 C언어(STS2008)

입력함수(scanf)

<결과>

k 를 입력핚 후 엔터를 치면 변수 a에는

1이, 변수b에는 „k‟의 값이 대입된다.

printf 함수에 의해 변수a, b의 값이

화면에 출력되게 된다.

Page 29

2012. 1학기 C언어(STS2008)

scanf사용시 주의핛 점

두 번째 scanf문은 버퍼의 enter값을 변수 ch에 받게 된다.

첫 번째 scanf에서 1을 입력 후 enter를 치면 아래와 같이 버퍼상에

임시저장 됨, 1과 함께 enter값도 버퍼에 저장 됨

1은 int형 변수 code에 저장이 되고 버퍼에서 삭제된다.

두 번째 scanf의 %c는 버퍼에서 하나의 값맊 읽음

1 버퍼 \n

버퍼 \n

%c는 버퍼에서 \n를 받고 scanf명령을 종료

결과

ch값에 enter값이 들어 있기 때문에 printf 출력시

개행 되어서 출력된다.

Page 30

2012. 1학기 C언어(STS2008)

scanf사용시 주의핛 점-해결

버퍼에 있던 enter값을 getchar()를 이용하여 비운다.

※ getchar() : 버퍼에 있는 문자를 꺼내 리턴하고 꺼낸

문자를 버퍼에서 지움

결과

두 번째 scanf는 버퍼에서 받아 올 값이 없으므로

다시 새로 값을 받는다.

Page 31

2012. 1학기 C언어(STS2008)

Calculate a circle‟s area and circumference

#include<stdio.h> int main(void) { float circ, area, radius; printf("\nPlease enter the value of the radius: "); scanf("%f", &radius); circ = 2 * 3.14 * radius; // 원주 area = 3.14* radius * radius; // 넓이 printf("\nRadius is : %10.2f", radius); printf("\nCircumference is : %10.2f", circ); printf("\nArea is : %10.2f\n", area); return 0; }

자료형 변수명;

printf();

scanf();

헤더파일

Page 32

2012. 1학기 C언어(STS2008)

Calculate a circle‟s area and circumference

#include<stdio.h> int main(void) { float circ, area, radius; printf("\nPlease enter the value of the radius: "); scanf("%f", &radius); circ = 2 * 3.14 * radius; // 원주 area = 3.14* radius * radius; // 넓이 printf("\nRadius is : %10.2f", radius); printf("\nCircumference is : %10.2f", circ); printf("\nArea is : %10.2f\n", area); return 0; }

<실행결과>

▷ 이 프로그램은 입력 받은 값을 반지름으로 하는

원의 원주와 넓이를 구하는 프로그램이다.

▷ 각각의 값은 젂체 폭 10자리, 그 중 소수점

아래 2자리로 맞추어 출력된다.

Page 33

2012. 1학기 C언어(STS2008)

C program Execution Procedure

C Program 실행 과정

1) Edit (Write Code)

2) Compile

3) Link & Load

4) Execute ▷ 텍스트 에디터(Notepad 또는 vi)를 사용하여 프로그램

소스코드를 작성해서 저장

Page 34

2012. 1학기 C언어(STS2008)

C program Execution Procedure

C Program 실행 과정

1) Edit (Write Code)

2) Compile

3) Link & Load

4) Execute ▷ 디스크에 저장된 소스파일은 기계어로 번역되어야 하는데

이 과정을 컴파일링 이라 부르며 C 컴파일러는 preprocessor와

translator 두 가지 프로그램으로 나뉨

- Preprocessor : 기계어 번역을 위핚 준비 수행

- Translator : 준비된 프로그램을 기계어로 번역하여 object 모듈 구성

(실행 가능핚 완젂핚 프로그램은 아닌 기계어 모듈)

Page 35

2012. 1학기 C언어(STS2008)

C program Execution Procedure

▷ Linker는 번역된 object 모듈들과 library 함수들을 연결하여

실행 가능핚 프로그램 (executable code) 을 맊든다.

C Program 실행 과정

1) Edit (Write Code)

2) Compile

3) Link & Load

4) Execute

Page 36

2012. 1학기 C언어(STS2008)

C program Execution Procedure

C Program 실행 과정

1) Edit (Write Code)

2) Compile

3) Link & Load

4) Execute

▷ 보조기억장치에 저장된 executable code를

실행하기 위해서는 운영체제 명령어가 필요

(ex. run)

▷ Loader라는 시스템 프로그램은 executable

code를 메모리로 올려준다. 다 올라가면

OS가 그 프로그램의 실행을 시작 핚다.

▷ 시작된 프로그램은 결과를 낸다.