c programming basics.ppt [호환 모드]vip.sejong.ac.kr/dihan/ip/c_programming_basics.pdf ·...

33
C C 언어 언어 기본사항 기본사항 프로그램의 프로그램의 기본 기본 틀 main 함수 main 함수 프로그램의 시작점이자 종료지점

Upload: others

Post on 17-Jul-2020

3 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: C Programming Basics.ppt [호환 모드]vip.sejong.ac.kr/dihan/ip/C_Programming_Basics.pdf · 2019-02-25 · – 숫자로 시작 불가능 , C언어의 키워드 사용 불가능

C C 언어언어 기본사항기본사항

프로그램의프로그램의 기본기본 틀틀

main 함수• main 함수

– 프로그램의 시작점이자 종료지점

Page 2: C Programming Basics.ppt [호환 모드]vip.sejong.ac.kr/dihan/ip/C_Programming_Basics.pdf · 2019-02-25 · – 숫자로 시작 불가능 , C언어의 키워드 사용 불가능

printfprintf 함수를함수를 이용한이용한 문자열문자열 출력출력

• 문자열

– 프로그램상에서는 큰 따옴표로 묶어서 표현한다.

• printf 함수의 기능• printf 함수의 기능

– 큰 따옴표로 묶여서 표현되는 문자열의 출력

• printf 함수의 호출을 위해 필요한 것

– #include <stdio.h>의 삽입#include <stdio.h>의 삽입#include <stdio.h>

int main(void)

'\n'은 개행의 의미를지니는 "이스케이프시퀀스"

{

printf("사과 \n ");printf("토마토 \n");printf( 토마토 \n );

printf("파인애플 \n") ;

return 0;

} C 프로그램을 구성하는 명령문의끝을 표시

printfprintf 함수를함수를 이용한이용한 숫자숫자 출력출력

%d와 같은 문자를 가리켜'서식문자’라 하며 10진수정수의 출력을 의미

#include <stdio.h>

int main(void)

{

printf("Apple %d \n", 100); %d의 개수만큼 printf문printf( Apple %d \n , 100);

printf("Apple %d Orange %d \n", 100, 200);

printf("Apple %d Orange %d Kiwi %d \n", 100, 200, 300);

의 개수 p에 추가로 데이터가 삽입되어야 함

return 0;

}

Page 3: C Programming Basics.ppt [호환 모드]vip.sejong.ac.kr/dihan/ip/C_Programming_Basics.pdf · 2019-02-25 · – 숫자로 시작 불가능 , C언어의 키워드 사용 불가능

printfprintf 함수의함수의 기본기본 서식서식 문자문자

scanf 함수의 서식문자 체계와 비슷하지

서식문자 출력 대상(자료형) 출력 형태

%d int 부호 있는 10진수 정수

자 체계와 비슷하지만 차이를 보임

%u unsigned int 부호 없는 10진수 정수

%o unsigned int 부호 없는 8진수 정수

%x, %X unsigned int 부호 없는 16진수 정수

%f float, double 10진수 방식의 부동소수점 실수

%e, %E float, double e 또는 E 방식의 부동소수점 실수

%g, %G float, double 값에 따라 %f와 %e 사이에서 선택g

%c char 값에 대응하는 문자

%s char * 문자열%s char 문자열

%p void * 포인터의 주소 값

%n int * 포인터의 주소 값%n int * 포인터의 주소 값

변수의변수의 선언과선언과 초기화초기화

• int num=0;int num=0;– num이라는 이름의 변수 선언

– 선언과 동시에 0으로 초기화

– = 기호는 오른쪽에 있는 값을 왼쪽에 저장하라는 의미

– int는 변수 num에 정수를 저장하겠다는 의미

Page 4: C Programming Basics.ppt [호환 모드]vip.sejong.ac.kr/dihan/ip/C_Programming_Basics.pdf · 2019-02-25 · – 숫자로 시작 불가능 , C언어의 키워드 사용 불가능

변수의변수의 출력을출력을 위해위해 사용되는사용되는 서식문자서식문자

• 변수가 지니고 있는 값을 서식문자를 통해서 출력

1. = 기호는 오른쪽의 값을 왼

쪽에 저장하라는 의미

2 변수 al을 선언과 동시에 0

#include <stdio.h>

int main(void)2. 변수 val을 선언과 동시에 0

으로 초기화{

int val=0;

val=1+2;

printf("1+2=%d \n", val);

val 2+3;val=2+3;

printf("2+3=%d \n", val);

return 0;

}

scanfscanf 함수함수

• scanf 함수의 기능scanf 함수의 기능

– 키보드로부터의 데이터 입력

• scanf 함수를 이용한 정수의 입력 방법

%d는 키보드로부터 정수를 입력 받으라는 의미– %d는 키보드로부터 정수를 입력 받으라는 의미

– 입력 받은 값을 저장할 변수의 이름 앞에 기호 &를 붙임

Page 5: C Programming Basics.ppt [호환 모드]vip.sejong.ac.kr/dihan/ip/C_Programming_Basics.pdf · 2019-02-25 · – 숫자로 시작 불가능 , C언어의 키워드 사용 불가능

scanfscanf 함수함수 활용활용 예예

scanf 함수의 호출을scanf 함수의 호출을위해서 필요한 문장#include <stdio.h>

int main(void){{

int n1;double n2;

printf("정수 입력: ");

scanf("%d", &n1);키보드로부터 정수를입력 받아 변수 n1에

printf("실수 입력: ");

f("%lf" & 2)

저장

키보드로부터 실수를입력 받아 변수 n2에scanf("%lf", &n2);

printf("입력된 두 개의 데이터: %d, %f \n", n1, n2);return 0;

입력 받아 변수 n2에저장

return 0;}

scanfscanf 함수의함수의 기본기본 서식서식 문자문자

printf 함수의 서식문

서식문자 입력 대상(자료형) 입력 형태

자 체계와 비슷하지만 차이를 보임

%d int 부호 있는 10진수 정수

%i int 부호 있는 10진수 정수%i int 부호 있는 10진수 정수

%u unsigned int 부호 없는 10진수 정수

%o unsigned int 부호 없는 8진수 정수

%x unsigned int 부호 없는 16진수 정수

%c char 문자

%s char * 문자열%s char 문자열

%p void * 주소 값

%f, %e, %g float 부호 있는 실수

Page 6: C Programming Basics.ppt [호환 모드]vip.sejong.ac.kr/dihan/ip/C_Programming_Basics.pdf · 2019-02-25 · – 숫자로 시작 불가능 , C언어의 키워드 사용 불가능

주석의주석의 특성과특성과 의미의미

주석은 소스코드 내에 삽입하는 메모• 주석은 소스코드 내에 삽입하는 메모

– 코드와 관련된 내용을 삽입할 수 있다.

– 주석은 컴파일의 대상에서 제외된다.

– 주석은 선택이 아닌 필수이다.

• 블록 단위 주석: /* ~ */

• 행 단위 주석: // 주석내용

블록 단위 주석 활용의 예

Page 7: C Programming Basics.ppt [호환 모드]vip.sejong.ac.kr/dihan/ip/C_Programming_Basics.pdf · 2019-02-25 · – 숫자로 시작 불가능 , C언어의 키워드 사용 불가능

행행 단위단위 주석주석 활용의활용의 예예

자료형자료형

Page 8: C Programming Basics.ppt [호환 모드]vip.sejong.ac.kr/dihan/ip/C_Programming_Basics.pdf · 2019-02-25 · – 숫자로 시작 불가능 , C언어의 키워드 사용 불가능

CC언어의언어의 정수정수 자료형자료형

• 정수 자료형• 정수 자료형

– 시스템마다 자료형의 크기에 차이가 있다.

정수 자료형은 다음 조건을 만족해야 한다– 정수 자료형은 다음 조건을 만족해야 한다.

char ≤ short ≤ int ≤ long ≤ long long

– 그리고 정수 자료형은 다음 표의 제약사항을 갖는다.

CC언어의언어의 실수실수 자료형자료형

• 실수 자료형

– 실수 자료형의 선택 기준은 '소수점 이하 정밀도‘

– 소수점 이하 정밀도란 오차 없이 표현 가능한 정도를 의미

– float보다는 double이, double 보다는 long double이 표현 범위도 넓고,

정밀도도 높음

• 일반적으로

Page 9: C Programming Basics.ppt [호환 모드]vip.sejong.ac.kr/dihan/ip/C_Programming_Basics.pdf · 2019-02-25 · – 숫자로 시작 불가능 , C언어의 키워드 사용 불가능

변수의변수의 선언선언

• 변수의 메모리 공간 할당을 의미함변수의 선언은 컴파일러에게 변수의 자료형과 이름을 알리는 행위• 변수의 선언은 컴파일러에게 변수의 자료형과 이름을 알리는 행위

int main(void) int main(void)CASE 1

int main(void){

int val1;int val2;

int main(void){

int val1;val1=10;

새로운 표준을 반영하지 않은 컴파일러에서 에러 발생;

val1=10;val2=20;

int val2;val2=20;

. . . . . . . . . .CASE 2

int main(void){

CASE 3

{int val1=10;int val2=20; 콤마를 이용해서 둘 이상의 변수를 선

언하고 초기화 하는 것 가능int val3=30, val4=40;. . . . .

언하고 초기화 하는 것 가능

변수의변수의 이름이름 조건조건

변수의 이름이 되기 위한 조건• 변수의 이름이 되기 위한 조건

– 알파벳, 숫자, _ 문자의 조합

– 대소문자 구분

– 숫자로 시작 불가능, C언어의 키워드 사용 불가능,

– 공백 삽입 불가

잘못된 이름: 7ThVal phone# name Man– 잘못된 이름: 7ThVal, phone#, name Man

• 변수의 이름에 의미 부여변수의 이름에 의미 부여

– 의미가 통하는 이름을 부여해야 코드의 유지보수가 유리

Page 10: C Programming Basics.ppt [호환 모드]vip.sejong.ac.kr/dihan/ip/C_Programming_Basics.pdf · 2019-02-25 · – 숫자로 시작 불가능 , C언어의 키워드 사용 불가능

연산자연산자

대입대입 연산자연산자( = ) ( = ) 와와 산술산술 연산자연산자(+, (+, --, *, /, %), *, /, %)

이항 연산자• 이항 연산자

– 두 개의 피연산자를 필요로 하는 연산자

– 대입 연산자와 산술 연산자는 모두 이항 연산자

Page 11: C Programming Basics.ppt [호환 모드]vip.sejong.ac.kr/dihan/ip/C_Programming_Basics.pdf · 2019-02-25 · – 숫자로 시작 불가능 , C언어의 키워드 사용 불가능

대입대입 연산자와연산자와 산술산술 연산자의연산자의 활용활용 예예

복합복합(Compound) (Compound) 대입대입 연산자연산자

대입 연산자와 다른 연산자의 결합• 대입 연산자와 다른 연산자의 결합

Page 12: C Programming Basics.ppt [호환 모드]vip.sejong.ac.kr/dihan/ip/C_Programming_Basics.pdf · 2019-02-25 · – 숫자로 시작 불가능 , C언어의 키워드 사용 불가능

복합복합 대입연산자대입연산자 활용활용 예예

#include <stdio.h>

i t i ( id)int main(void){

int n1 = 7, n2=5;

n1 += n2; //n1=n1+n2;printf("n1 += n2: %d \n", n1);

n2 +=12; //n2=n2+12;printf("n2 += 12: %d \n", n2);return 0;

}}

관계관계 연산자연산자(<, >, ==, !=, <=, >=)(<, >, ==, !=, <=, >=)

대소 비교 : < > < >• 대소 비교 : <, >, <=, >=

• 동등 비교 : ==, !=

• 관계 연산자는 연산식이 참이면 1, 거짓이면 0을 반환

Page 13: C Programming Basics.ppt [호환 모드]vip.sejong.ac.kr/dihan/ip/C_Programming_Basics.pdf · 2019-02-25 · – 숫자로 시작 불가능 , C언어의 키워드 사용 불가능

관계관계 연산자연산자 활용활용 예예

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

int main(void){{

int num1=10;int num2=12;

int result1, result2;

result1 = (num1 == num2); // 동등 비교result2 = (num1 <= num2); // 대소 비교result2 = (num1 <= num2); // 대소 비교

printf("같은가? %d \n", result1);printf("같거나 작은가? %d \n", result2);p ( 같거나 작은가 \ , );

return 0;}

논리논리 연산자연산자(&&, ||, !)(&&, ||, !)

• 참과 거짓을 따지는 연산자• 참과 거짓을 따지는 연산자

• AND(논리곱), OR(논리합), NOT(논리부정)을 의미하는 연산자로 구성

연산자 연산자의 기능 결합방향연산자 연산자의 기능 결합방향

&&예) A && BA와 B 모두 참이면 연산결과는 참(논리 AND)

||예) A || B

→||A와 B 둘 중 하나라도 참이면 연산결과는 참(논리 OR)

!예) ! A

연산결과는 A가 참이면 거짓, A가 거짓이면 참(논리 NOT)←

Page 14: C Programming Basics.ppt [호환 모드]vip.sejong.ac.kr/dihan/ip/C_Programming_Basics.pdf · 2019-02-25 · – 숫자로 시작 불가능 , C언어의 키워드 사용 불가능

논리논리 연산자연산자 활용활용 예예

i t i ( id)int main(void){

int num1 = 10;int num2 = 12;int num2 = 12;

int result1, result2, result3;

result1 = (num1==10 && num2==12);result2 = (num1<=12 || num2>=12);result3 = !num1;

printf("result1 : %d \n", result1);printf("result2 : %d \n", result2);printf("result3 : %d \n" result3);printf( result3 : %d \n , result3);return 0;

}

분기분기

Page 15: C Programming Basics.ppt [호환 모드]vip.sejong.ac.kr/dihan/ip/C_Programming_Basics.pdf · 2019-02-25 · – 숫자로 시작 불가능 , C언어의 키워드 사용 불가능

ifif문에문에 의한의한 조건적조건적 실행실행

int main(void){{

int option;double n1, n2;

printf("선택(덧셈1 뺄셈2 곱셈3 나눗셈4): ");printf( 선택(덧셈1, 뺄셈2, 곱셈3, 나눗셈4): );scanf("%d", &option);

printf("두 숫자 입력(숫자1 숫자2): ");scanf("%lf %lf" &n1 &n2);scanf( %lf %lf , &n1, &n2);

if(option==1) printf("덧셈 결과: %f \n", n1+n2);

if(option==2) printf("뺄셈 결과: %f \n", n1-n2);

if(option 3)if(option==3) printf("곱셈 결과: %f \n", n1*n2);

if(option==4) printf("나눗셈 결과: %f \n" n1/n2);printf( 나눗셈 결과: %f \n , n1/n2);

printf("프로그램을 종료합니다. \n");return 0;

}

불필요한 비교연산 발생

}

둘둘 이상의이상의 문장문장 실행을실행을 위한위한 중괄호의중괄호의 사용사용

int main(void){

int num;printf("정수 입력: ");scanf("%d" &num);scanf( %d , &num);

if(num<0){

printf("입력된 숫자는0 미만. \n");return 0;

}

if(num>=0 && num<10){

printf("입력된 숫자는 0이상 10미만. \n");return 0;

}

. . . .

return 0; // 사실상 실행되지 않는return문}

Page 16: C Programming Basics.ppt [호환 모드]vip.sejong.ac.kr/dihan/ip/C_Programming_Basics.pdf · 2019-02-25 · – 숫자로 시작 불가능 , C언어의 키워드 사용 불가능

ifif문문 뒤에뒤에 elseelse를를 붙여서붙여서 둘둘 중중 하나하나 실행하기실행하기

int main(void){

int num;

printf("정수 입력: ");pscanf("%d", &num);

if(!(num%2))printf("입력된 수는 짝수입니다. \n");p

elseprintf("입력된 수는 홀수입니다. \n");

if(num<0){

printf("그리고 음수입니다. \n");}else{

if(num==0)printf("다름아닌 0입니다. \n");

elseprintf("그리고 양수입니다. \n");

}return 0;

}

if...else if...elseif...else if...else

• 중첩된 if~else문의 사용 방법중첩된 if else문의 사용 방법– 아래 그림과 같이 일반화해서 사용하는 것이 보통

– 필요 시 중간에 ‘else if’ 추가 가능

Page 17: C Programming Basics.ppt [호환 모드]vip.sejong.ac.kr/dihan/ip/C_Programming_Basics.pdf · 2019-02-25 · – 숫자로 시작 불가능 , C언어의 키워드 사용 불가능

switchswitch문문

• 조건에 따라 해당 레이블로• 조건에 따라 해당 레이블로

이동하여 실행을 계속하는 제어문

실행 위치에 대한 표시는 와• 실행 위치에 대한 표시는 case와

default 레이블 사용

• 레이블에 사용되는 숫자나

switch문에 전달되는 값 모두

정수이어야 한다.

switchswitch문문 + break+ break문문

int main(void){{

int num;

printf("정수입력: ");printf( 정수입력: );scanf("%d", &num);

switch(num){{case 1:

printf("A1 ");printf("A2 \n"); break문을 통해 레이블 별로 영역을p ( \ )break;

case 2:printf("B1 ");

문을 통해 레이블 별 영역을

형성하여 해당 부분만 실행 가능

printf( B1 );printf("B2 \n");break;

default:printf("Default! \n");

}return 0;return 0;}

Page 18: C Programming Basics.ppt [호환 모드]vip.sejong.ac.kr/dihan/ip/C_Programming_Basics.pdf · 2019-02-25 · – 숫자로 시작 불가능 , C언어의 키워드 사용 불가능

반복반복

whilewhile문의문의 이해와이해와 활용활용

while문을 구성할 때 명시해야 할 사항• while문을 구성할 때 명시해야 할 사항

– 반복의 조건

– 반복의 대상

• while문은 주어진 '반복의 조건'이 '참'인 동안 '반복의 영역'을 반복 실행

– 반복의 영역이 둘 이상의 문장으로 구성되면, 중괄호로 묶는다.,

Page 19: C Programming Basics.ppt [호환 모드]vip.sejong.ac.kr/dihan/ip/C_Programming_Basics.pdf · 2019-02-25 · – 숫자로 시작 불가능 , C언어의 키워드 사용 불가능

whilewhile문의문의 활용활용 예예

int main(void){{

int i=0;

while(i<7) /* 총 7회의 출력을 반복*/{{

printf("%d 번째 Hello world! \n", i+1);i++;

}return 0;return 0;

}

i t i ( id)int main(void){

int i=1;int dan;

printf("몇 단의 출력을 원하는가? ");scanf("%d", &dan);

hil (i<10)while(i<10) {

printf("%d x %d = %d \n", dan, i, dan*i);i++;

}}return 0;

}

do~whiledo~while문의문의 이해와이해와 활용활용

do while문의 특징• do~while문의 특징

– while문과 달리 조건검사를 뒷부분에서 진행

– 때문에 while문과 달리 조건에 상관없이 반복영역을 최소 1회 실행

int main(void)int main(void){

int i=1;int dan;

printf("몇 단의 출력을 원하는가? ");scanf("%d", &dan);

do {

printf("%d x %d = %d \n", dan, i, dan*i);printf( %d x %d %d \n , dan, i, dan i);i++;

} while(i<10);

do~while문의 끝에return 0;

}

문의 끝에반드시 세미콜론( ; )을 붙여야 한다.

Page 20: C Programming Basics.ppt [호환 모드]vip.sejong.ac.kr/dihan/ip/C_Programming_Basics.pdf · 2019-02-25 · – 숫자로 시작 불가능 , C언어의 키워드 사용 불가능

반복반복 대상을대상을 최소최소 한번한번 실행시켜야실행시켜야 하는하는 상황상황

int main(void){

사용자로부터 숫자를 입력 받고 난 후 비로소 반복문의 탈출 여부 결정{

int sum=0;int num;

복문의 탈출 여부 결정

do{printf("정수입력(0 to Quit): ");scanf("%d", &num);sum+=num;

}while(num != 0);

i tf("입력된 정수의 총합 %d \ " )printf("입력된 정수의 총합: %d \n", sum);return 0;

}

forfor문의문의 실행흐름실행흐름 파악의파악의 포인트포인트

은 for문을 처음 실행할 때 딱! 한번만 실행– 은 for문을 처음 실행할 때, 딱! 한번만 실행

– 는 for문의 반복영역을 실행하고 나서 실행

Page 21: C Programming Basics.ppt [호환 모드]vip.sejong.ac.kr/dihan/ip/C_Programming_Basics.pdf · 2019-02-25 · – 숫자로 시작 불가능 , C언어의 키워드 사용 불가능

배열배열

배열배열 선언에선언에 필요한필요한 것것 세세 가지가지

– 배열의 이름

– 배열 요소(배열을 구성하는 변수)의 자료형 배열 선언의

– 배열의 길이 3대 요소

총 7개의 int형변수를 얻게된다된다.

Page 22: C Programming Basics.ppt [호환 모드]vip.sejong.ac.kr/dihan/ip/C_Programming_Basics.pdf · 2019-02-25 · – 숫자로 시작 불가능 , C언어의 키워드 사용 불가능

인덱스를인덱스를 이용한이용한 배열의배열의 접근접근

• 접근하고자 하는 배열의 위치 정보는 [ ] 사이에 숫자를 넣어 지정• 접근하고자 하는 배열의 위치 정보는 [ ] 사이에 숫자를 넣어 지정

• [ ] 사이에 들어가는 숫자(인덱스)는 0부터 시작

첫 번째 배열요소에 10 저장

두 번째 배열요소에 20 저장

array[0] = 10; array[1] = 20;

배열의배열의 선언선언 및및 접근방법의접근방법의 예예

#incl de <stdio h>#include <stdio.h>

int main(void){{

int arr[5];int i;

arr[0]=10; arr[1]=20; arr[2]=30; arr[3]=40; arr[4]=50;

for(i=0; i<5; i++)i tf(“%번째 요소에 저장된 값 %d \ ” i+1 [i]) [ ] 안에 변수가printf(“%번째 요소에 저장된 값: %d \n”, i+1, arr[i]);

return 0;}

[ ] 안에 변수가올 수 있다.

}

Page 23: C Programming Basics.ppt [호환 모드]vip.sejong.ac.kr/dihan/ip/C_Programming_Basics.pdf · 2019-02-25 · – 숫자로 시작 불가능 , C언어의 키워드 사용 불가능

22차원차원 배열의배열의 선언과선언과 접근접근 방식방식

2차원 배열의 선언방식• 2차원 배열의 선언방식

– 2차원 배열이므로 길이를 세로와 가로로

나눠서 선언

2차원 배열의 접근방식• 2차원 배열의 접근방식

– 0을 시작으로 세로와 가로의 위치를

각각 지정각각 지정

22차원차원 배열의배열의 실제실제 사용사용 방법방법

int main(void){{

int arr[3][3];int i, j;

for(i 0; i<3; i++)

3 by 3

단위 행렬 구성for(i=0; i<3; i++){

for( j=0; j<3; j++){

if(i==j)arr[i][ j]=1;

elsearr[i][ j]=0;arr[i][ j]=0;

}}

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

for( j=0; j<3; j++){{

printf("%d ", arr[i][ j]);}printf("\n");

} 단위 행렬}return 0;

}

단위 행렬출력

Page 24: C Programming Basics.ppt [호환 모드]vip.sejong.ac.kr/dihan/ip/C_Programming_Basics.pdf · 2019-02-25 · – 숫자로 시작 불가능 , C언어의 키워드 사용 불가능

함수함수

함수의함수의 구성구성

Page 25: C Programming Basics.ppt [호환 모드]vip.sejong.ac.kr/dihan/ip/C_Programming_Basics.pdf · 2019-02-25 · – 숫자로 시작 불가능 , C언어의 키워드 사용 불가능

함수의함수의 호출과호출과 반환반환 값값 저장의저장의 과정과정

함수가 호출되면 호출된 함수의 실행을 위해 이동• 함수가 호출되면 호출된 함수의 실행을 위해 이동

• 전달인자는 매개변수를 초기화

• 매개변수는 선언된 함수 내에서만 접근 가능

반환 값은 함수가 호출된 위치로 전달• 반환 값은 함수가 호출된 위치로 전달

함수의함수의 호출에호출에 따른따른 프로그램의프로그램의 흐름흐름

정의된 함수는 반복 호출이 가능하다• 정의된 함수는 반복 호출이 가능하다.

• 함수가 호출될 때마다 매개변수는 초기화 된다.

Page 26: C Programming Basics.ppt [호환 모드]vip.sejong.ac.kr/dihan/ip/C_Programming_Basics.pdf · 2019-02-25 · – 숫자로 시작 불가능 , C언어의 키워드 사용 불가능

포인터포인터

주소주소 값을값을 구하는구하는 방법방법

주소 값을 얻기 위해 사용되는 & 연산자• 주소 값을 얻기 위해 사용되는 & 연산자

– & 연산자가 단항 연산자로 사용되면, 피연산자의 주소 값 반환

int main(void){

i t 1 3int num1=3;char num2='A';double num3=3.15;

printf("num1의 저장위치: %#x \n", &num1);printf("num2의 저장위치: %#x \n", &num2);

i tf(" 3의 저장위치 %# \ \ " & 3)printf("num3의 저장위치: %#x \n\n", &num3);

printf("num1의 주소 값 크기: %d \n", sizeof(&num1));i tf(" 2의 주소 값 크기 %d \ " i f(& 2))printf("num2의 주소 값 크기: %d \n", sizeof(&num2));

printf("num3의 주소 값 크기: %d \n\n", sizeof(&num3));return 0;

}}

Page 27: C Programming Basics.ppt [호환 모드]vip.sejong.ac.kr/dihan/ip/C_Programming_Basics.pdf · 2019-02-25 · – 숫자로 시작 불가능 , C언어의 키워드 사용 불가능

포인터포인터 변수변수 선언의선언의 기본기본 규칙규칙

• 포인터(Pointer) • 포인터 변수포인터(Pointer)

– 변수나 상수의 주소 값

포인터 변수

– 주소 값의 저장을 위한 변수

TYPE val;

기본규칙

int val;int * prt;prt = &val;

TYPE val;

TYPE * ptr;

ptr = &val; int형에 적용 prt &val;ptr = &val; 형에 적용

int val; int * prt= &val;

포인터 변수도선언과 동시에초기화 가능초기화 가능

구조체구조체

Page 28: C Programming Basics.ppt [호환 모드]vip.sejong.ac.kr/dihan/ip/C_Programming_Basics.pdf · 2019-02-25 · – 숫자로 시작 불가능 , C언어의 키워드 사용 불가능

구조체의 정의

구조체

POINT 정의그룹을 지어줘야

하는 데이터 변수

double xPos;

double yPos;double yPos;

구조체를 기반으로변수 xPos와 yPos변수 xPos와 yPos를 묶음

구조체의 정의가 의미하는 것은?

struct pointp{

double xPos;double yPos;

∙ 정의가 이뤄지고 난 다음부터 point는 변수의 선언

에 사용되는 자료형의 이름으로 인식 됨.

∙ 즉 point라는 이름은 프로그래머가 정의한 자료형double yPos;};

∙ 즉, point라는 이름은 프로그래머가 정의한 자료형

기본 자료형 double과

double point

제공 방식 기본적으로 제공 프로그래머의 정의에 의해 제공

구조체 자료형 point

비교

제공 방식 기본적으로 제공 프로그래머의 정의에 의해 제공

변수 선언double num;double num1, num2;

struct point pnt; struct point p1, p2;

접근 방식 num=20;pnt.xPos=10;pnt.yPos=20;

Page 29: C Programming Basics.ppt [호환 모드]vip.sejong.ac.kr/dihan/ip/C_Programming_Basics.pdf · 2019-02-25 · – 숫자로 시작 불가능 , C언어의 키워드 사용 불가능

구조체 활용의 예와 구조체 멤버의 접근

struct point{

일반 변수와 구조체변수의 메모리 구성

{double xPos;double yPos;

};

int main(void){

double num;struct point pnt;

num=1.2;pnt xPos=2 2;

구조체 변수 선언의 경우

키워드 t t를 붙여야pnt.xPos=2.2;pnt.yPos=3.4;

printf("num: %g \n", num);

키워드 struct를 붙여야

한다.

printf("pnt.xPos: %g \n", pnt.xPos);printf("pnt.yPos: %g \n\n", pnt.yPos);

printf("num의 크기: %d바이트\n" sizeof(num));

∙ 변수 pnt는 두 개의 변수 xPos와 yPos로

이뤄져 있기 때문에, xPos로 접근할 지printf( num의 크기: %d바이트\n , sizeof(num));printf("pnt의 크기: %d바이트\n", sizeof(pnt));

return 0;

yPos로 접근할지를 명시해야 함

∙ 구조체 변수의 멤버에 접근하기 위해서

는 dot( ) 연산자 사용} 는 dot(.) 연산자 사용

파일파일

Page 30: C Programming Basics.ppt [호환 모드]vip.sejong.ac.kr/dihan/ip/C_Programming_Basics.pdf · 2019-02-25 · – 숫자로 시작 불가능 , C언어의 키워드 사용 불가능

fopen 함수의 사용방법 소개 1

출력(output) 스트림

FILE * fp = fopen( "C:\\Prog\\data.txt" , "wt" );

첫 번째 전달인자는 스트림을 형성할 파일의 경로가 C:\Prog이고, 파일의 이름은 data.txt임을 알려준다.

두 번째 전달인자는 스트림의 종류가 "텍스트 데이터를 쓰기 위한스트림"임을 알려준다.

함수의 호출 결과

출력 스트림을 통해서는 데이터를 쓸 수만 있고 읽지는 못함

텍스트 기반 출력 스트림 형성

fopen 함수의 사용방법 소개 2

입력(input) 스트림

FILE * fp = fopen( "C:\\Prog\\data.txt" , "rt" );

"rt"는 데이터를 읽기 위한 입력 스트림의 형성을 요구

함수의 호출이 성공하면, 입력 스트림이 형성되어 파일로부터 데이터를 읽을 수 있다.

함수의 호출 결과

텍스트 기반 입력 스트림 형성

Page 31: C Programming Basics.ppt [호환 모드]vip.sejong.ac.kr/dihan/ip/C_Programming_Basics.pdf · 2019-02-25 · – 숫자로 시작 불가능 , C언어의 키워드 사용 불가능

파일에 데이터를 써 봅시다.

fputc 함수를 사용하여 파일에 데이터 저장하기

int main(void){

FILE * fp=fopen("C:\\Prog\\data.txt", "wt");FILE fp fopen( C:\\Prog\\data.txt , wt );if(fp==NULL){

puts("파일 오픈 실패!");t 1

파일의 경로가 C:\Prog이므로 로컬디스크 C에 Prog

라는 이름의 디렉터리가 존재해야 한다return -1;}

fputc('A', fp);

라는 이름의 디렉터리가 존재해야 한다.

출력용 스트림을 형성하는 경우에는 파일이 존재하p ( , p);fputc('B', fp);fputc('C', fp);

fclose(fp);

지 않으면 자동으로 파일이 생성.

fclose(fp);return 0;

}

문자 A, B, C를 구조체

포인터 fp가 가리키는

파일에 저장파일에 저장

형성된 스트림의 소멸을 요청하는 fclose 함수

fclose 함수fclose 함수

스트림을 해제하는 함수(파일을 닫는 함수)

fopen 함수의 반대 기능을 제공

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

int fclose(FILE * stream);

성공 시 0, 실패 시 EOF 반환

Page 32: C Programming Basics.ppt [호환 모드]vip.sejong.ac.kr/dihan/ip/C_Programming_Basics.pdf · 2019-02-25 · – 숫자로 시작 불가능 , C언어의 키워드 사용 불가능

파일로부터 데이터를 읽어 봅시다.

int main(void){{

int ch, i;FILE * fp=fopen("C:\\Prog\\data.txt", "rt");if(fp==NULL){{

puts("파일오픈 실패!");return -1;

}

두 번째 전달인자로 "rt"가 전달되면서

fopen 함수가 호출되었으니, 텍스트 방식

으로 읽기 위한 스트림 형성

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

ch=fgetc(fp);

으로 읽기 위한 스트림 형성

ch=fgetc(fp);putchar(ch);

}

f f

fp가 가리키는 파일에 저장된 문자 하나가

반환되어 변수 ch에 저장fclose(fp);return 0;

}

반환되어, 변수 ch에 저장

파일 기반 표준 입출력 함수

데이터 함수의 선언(모두 헤더파일 stdio.h에 선언) 기능

문자

int fgetc(FILE * stream);int getc(FILE * stream);

입력

char * fputc(int c, FILE * stream);char * putc(int c FILE * stream);

출력char * putc(int c, FILE * stream);

출력

문자열char * fgets(char * s, int n, FILE * stream); 입력

int fputs(const char * s, FILE * stream); 출력

서식int fscanf(FILE * stream, const char * format, ...); 입력

int fprintf(FILE * stream, const char * format, ...); 출력

size_t fread입력

바이너리(void * ptr, size_t size, size_t cnt, FILE * stream);

입력

size_t fwrite(const void * ptr, size_t size, size_t cnt, FILE * stream);

출력

Page 33: C Programming Basics.ppt [호환 모드]vip.sejong.ac.kr/dihan/ip/C_Programming_Basics.pdf · 2019-02-25 · – 숫자로 시작 불가능 , C언어의 키워드 사용 불가능

기타기타

아스키아스키(ASCII) (ASCII) 코드코드 11

아스키(ASCII) 코드란?• 아스키(ASCII) 코드란?

– 값이 할당된 문자들의 집합

– 영어 대소문자, 특수문자 그리고

숫자로 구성.

• 아스키코드 코드 특성

총 128개로 구성 따라서 7개– 총 128개로 구성, 따라서 7개

의 비트로 모든 아스키코드 표

현 가능현 가능

– 알파벳 대문자, 소문자에 일련의

( )값(1씩 증가) 할당

– 대소문자간 값의 차는 32!