윤 홍 란 hryun@sookmyung.ac.kr
내용 프로그래밍 언어(programming language) C 언어란?? C 언어 역사 C 언어 특징 C 프로그램의 구조 예제(sea.c)
프로그래밍 언어 프로그래밍 언어 알고리즘 데이터 알고리즘과 데이터를 설명하는 표현방법 문제를 해결하는 방법 컴퓨터에 구현됨 데이터 메모리에 저장되어 있는 값
프로그래밍(programming)과정 C 원시파일(source file)작성 컴파일(compile) 원시파일을 목적코드(object code)로 바꾸는 과정 컴파일러 프로그램 이용 링킹(linking) 목적코드(object codes)를 실행 가능한 프로그램으로 만드는 과정 링커(linker)프로그램 이용 디버깅(debugging) 프로그램의 잘못된 부분을 수정하는 과정 실행
프로그래밍 준비 운영체제와 하드웨어 컴파일러 MS-DOS, Windows2000(NT) UNIX, LINUX PC Unix Turbo C(C++), Borland C(C++), Visual C++ Unix cc, gcc Linux gcc
코드작성과 컴파일 (1/2) C 프로그램의 작성, 컴파일, 실행과정 컴파일 (Compile) 링킹 (Linking) hello.c (원시파일) hello.obj (목적파일) hello.exe (실행파일) 시스템 내장 라이브러리 편집기를 이용하여 프로그램소스를 작성한다. 작성한 소스를 컴파일하면 목적코드가 생성된다. C내장 라이브러리 함수 및 사용자가 만든 다른 목적파일이나 라이브러리가 함께 연결되어 실행파일이 생성된다. 사용자 작성 라이브러리
코드작성과 컴파일 (2/2) C 프로그램의 작성, 컴파일, 실행과정 TCC HELLO.C 컴파일 결과로 생성된 실행파일과 목적파일 hello.c #include <stdio.h> void main() { printf("Hello, World!!"); } hello.exe의 실행결과
C 언어의 역사 1972년 벨 연구소의 Dennis Ritchie 와 Brian Kernighan에 의해서 개발되어 UNIX 운영체제를 위한 시스템 언어로서 사용 어셈블리어를 고급언어로 표현 종래의 B언어를 기초로 개발 1983년 미국표준협회(ANSI: American National Standard Institute)에서 ANSI 표준 C를 발표.
C 언어의 특징 범용 프로그래밍 언어이다. 이식성이 높다. 형식이 자유롭다. C 언어는 함수, 즉 모듈을 제공한다.
C 프로그램의 구조(1) C 프로그램은 하나 이상의 함수로 구성 함수는 머리(Header)와 본체(Body)로 구성 이중 반드시 하나는 main( )이어야 한다. 함수는 머리(Header)와 본체(Body)로 구성 Header : 전처리기에 대한 문장과 함수( 예 : #include ) Body : 중괄호()로 싸여 블록화 ( 예 : { --------- } )
C 프로그램의 구조(2) #include <stdio.h> Main() { ----- C 프로그램 sum( ); printf(“The total price is ..”); } Int sum( ) C 프로그램 헤더(header) : #include Main() 함수 그 밖의 함수
실습 예제 다음 문장을 화면에 출력하는 프로그램을 작성하라. Welcome to C world!! 편집기로 아래와 같이 소스 크드를 입력한다. 소스 코드 파일 이름을 sample.c로 하여 A 드라이브에 저장한다. #include <stdio.h> main( ) { printf(“Welcome to C World !!\n”); }
#include 문 형 식 #include문이 위치한 곳에 다른 파일의 코드를 포함시키는 역할 - 형 식 #include <파일명> #include “파일명” (1)의 형식은 지정한 파일명을 시스템 디렉토리에서만 찾는 경우로 파일은 공용 라이브러리 파일이다. (2)의 형식은 지정한 파일명을 현재 사용자 디렉토리에서 찾고, 없으면 시스템 디렉토리에서 찾는다. 이 경우의 파일은 개인용 파일을 의미한다.
printf() 화면에 출력하는 함수 연속적으로 printf()가 있을 경우, 뒤에 나오는 printf()의 출력은 바로 앞 printf()의 마지막 출력 위치에서부터 시작하여 출력한다. 즉, 다음 printf()는 printf("from sea to shining C\n"); 다음과 같이 사용해도 같은 출력을 낸다. Printf("from sea to"); printf("shining C"); printf("\n");
프로그램에 주석을 다 방법 01 #include <stdio.h> 02 03 /* 04 사각형의 넓이 계산 05 두 수를 입력받아서 사각형의 넓이를 계산한다. 06 */ 07 void main() 08 { 09 int height; /* 사각형의 세로길이 */ 10 int width; /* 사각형의 가로길이 */ 11 int area = 0; /* 사각형의 면적 */ 12 13 /* 프로그램 타이틀 */ 14 char *title = "== THE AREA OF RECTANGLE ==\n"; 15 16 printf(title); /* 프로그램 제목 출력 */ 17 printf("사각형의 가로길이 : "); 18 scanf("%d", &width); /* 가로길이 입력 받기 */ 19 printf("사각형의 세로길이 : "); 20 scanf("%d", &height); /* 세로길이 입력 받기 */ 21 22 area = width * height; /* 면적 계산 */ 23 24 printf("height = %d\n", height); 25 printf("width = %d\n", width); 26 printf("area = %d\n", area); /* 결과 출력 */ 27 } 프로그램의 이해를 돕기 위한 설명문일 뿐 컴파일 대상에서 제외되고 실행파일의 크기에도 영향을 주지 않는다. C++의 경우는 한 줄 짜리 주석기호로 // 을 사용할 수 있다.
윤 홍 란 hryun@sookmyung.ac.kr 어휘 원소, 연산자 윤 홍 란 hryun@sookmyung.ac.kr
내용 키워드 식별자 데이터형 연산자
구문과 토큰 구문(syntax) 토큰(token) 알파벳으로 구성된 단어와 구두점을 이용하여 올바른 프로그램을 만들 수 있도록 하는 규칙 “컴파일러”:특정 언어에서 구문상의 문제점을 찾아내고, 특정시스템의 목적언어로 목적코드를 생성하는 도구 문법(grammar)와 유사 토큰(token) 구문상에서 사용되는 의미있는 최소 단위 언어의 최소 기본 단위 ANSI에서 제공하는 토큰의 종류 키워드(keyword), 식별자(identifier), 상수(constant), 문자열 상수(string constant), 연산자(operator)
키워드(예약어) 키워드(예약어)란? C 언어에서 특별한 의미가 부여된 프로그래머가 사용할 수 없는, 컴파일러가 특수하게 처리하는 단어. c 언어의 예약어 데이터 형 char, short, int, long, unsigned, float, double, struct, union, typedef, enum, void, const, signed 기억장소 종류 auto, register, static, extern 제어문 if, else, switch, case, default, for, while, do, break, continue, goto, return 연산자 sizeof
식별자 문자, 숫자, 특수문자로 구성된 토큰 프로그램의 객체에게 유일한 이름 부여 문자나 _으로 시작해야 함 _으로 시작하는 식별자는 주로 시스템 변수에 많이 활용됨 대소문자 구분 프로그램의 객체에게 유일한 이름 부여 가독성을 고려한 문자 선택이 중요 ANSI C 는 31자까지 구분(현재 C는 그 이상도 구분가능) 시스템에 따라 가변적
변 수 변수란? 생성 규칙 변수 생성시 주의점 : 프로그램의 수행 도중에 사용될 값 임시로 저장할 기억 장소에 붙여진 이름 변 수 변수란? 프로그램의 수행 도중에 사용될 값 임시로 저장할 기억 장소에 붙여진 이름 변수의 이름들은 서로 구별되는 이름을 사용 생성 규칙 다음 규칙에 의해 변수 이름 생성 변수 생성시 주의점 : 예약되어 있는 키워드는 사용할 수 없음 영문자 대/소문자 구별 첫 글자는 반드시 영문자나 밑줄로 시작 대문자 : A ~ Z 소문자 : a ~ z 정 수 : 0 ~ 9 밑 줄 : _ (underscore)
변 수 변수사용예 age /* 맞음 */ month /* 맞음 */ x1234 /* 맞음 */ 변 수 변수사용예 age /* 맞음 */ month /* 맞음 */ x1234 /* 맞음 */ total_of_salary /* 맞음 */ total-of-salary /* 틀림 : 빼기 기호 (-) 사용 불가 */ 1997year /* 틀림 : 첫 글자는 영문자 */ double /* 틀림 : 키워드는 사용 불가 */ count# /* 틀림 : #는 사용할 수 없는 문자 */ max number /* 틀림 : 변수 이름에 공백 사용 불가 */
상수, 연산자와 구두점 상수(constant) 연산자(operator) 구두점 실행시간 동안 변경되지 않는 값 정수, 실수, 문자열, 열거상수, etc 연산자(operator) 산술, 논리, 배정, 비트 연산자등을 제공 구두점 괄호, 중괄호, 콤마, 세미콜론
데이터 형 데이터 형은 데이터의 성격과 수치의 범위를 규정한다. 기억장소의 크기와 저장 형태의 기준으로 구분 숫자형 정수형(int, long) 숫자형 소수형(float, double) 기본 데이터형 문자형(char)
데이터 형 기본 데이터 형 C의 확장된 데이터 형 데이터형 키워드 메모리 크기 값의 저장 범위 문자형 char 1 바이트 -128 ~ 127 정수형 int 2 바이트 -32768 ~ 32767 단정도 실수형 float 4 바이트 -1.2E - 38 ~ 3.4E38 배정도 실수형 double 8 바이트 2.2E – 308 ~ 1.8E308 데이터형 키워드 메모리 크기 값의 저장 범위 부호 없는 문자 unsigned char 1 바이트 0 ~ 255 짧은 정수 short int 2 바이트 -32768 ~ 32767 부호 없는 정수 unsigned int 4 바이트 0 ~ 65535 긴 정수형 long int 8 바이트 - 2147483648 ~ 2147483647
예제 /*자신이 사용하는 컴퓨터의 데이터형 크기를 알아보는 프로그램을 작성하라. */ # include <stdio.h> void main( ) { printf(“문자형의 크기는 %d 바이트 〵n”, sizeof(char)); printf(“정수형의 크기는 %d 바이트 〵n”, sizeof(int)); printf(“short형의 크기는 %d 바이트 〵n”, sizeof(short)); printf(“long형의 크기는 %d 바이트 〵n”, sizeof(long)); printf(“단정도 실수형의 크기는 %d 바이트 〵n”, sizeof(float)); printf(“배정도 실수형의 크기는 %d 바이트 〵n”, sizeof(double)); } 문자형의 크기는 1바이트 정수형의 크기는 2바이트 short형의 크기는 2바이트 long형의 크기는 4바이트 단정도 실수형의 크기는 4바이트 배정도 실수형의 크기는 8바이트
연산자 우선순위 & 결합법칙 우선순위 법칙(precedence rule) 결합법칙(associative rule) 서로 다른 연산자들간의 수행 순서 결합법칙(associative rule) 같은 우선 순위의 연산자가 두개 이상 연속적으로 나올 경우 이들 간의 우선 순위
연산자의 정의 area = PI * Radius * Radius; 연산자란? 수식이란? 문장이란? 변수와 상수 등 기본적인 데이터 대상에 대해 연산을 지시하는 것 수식이란? 변수, 상수, 연산자가 조합하여 숫자 값을 계산하거나 어떤 결과를 만들어 내는 것 문장이란? 컴퓨터에게 어떤 동작을 수행하도록 지시하는 명령. 모든 C의 문장은 세미콜론(;)을 붙임 2 + 3 → 정수 2와 3을 더하라. PI * Radius * Radius → 변수 PI에 Radius 제곱을 곱하라. area = PI * Radius * Radius;
배정(대입, 할당) 연산자( = ) bmw = 2002; lvalue rvalue 대입 연산자란? 피연산자와 같다는 의미가 아니라, 대입 연산자의 오른쪽에 있는 값을 대입 연산자 왼쪽에 있는 피연산자에 대입하는 것 주의사항 lvalue는 항상 하나의 변수만 와야 한다. rvalue는 반드시 어떤 값을 갖고 있는 변수, 수식, 상수가 올 수 있다. bmw = 2002; lvalue rvalue int sum, salary, sum sum = 20; salary = 30; /* 상수를 대입 */ sum = sum + salary; /* 수식이 사용 */
사칙 연산자/ 부호연산자 7 / 4 → 결과 1 1 / 4 → 결과 0 7.0 / 4 → 결과 1.75 사칙연산자 C에서 제공하는 일반 산술 연산자는 덧셈, 뺄셈, 곱셈 그리고 나눗셈이다. 나누기 연산자는 두 연산자 모두 정수일 때 결과값은 소수 이하는 제거된 정수이다. 부호 연산자 하나의 피연산자 앞에 +, - 부호를 붙여 부호를 나타낼 수 있다. 7 / 4 → 결과 1 1 / 4 → 결과 0 7.0 / 4 → 결과 1.75 1. / 4.→ 결과 0.25 debit = -12.5; credit = -debit;
부가적인 연산자 5 % 3 → 결과 2 1592 % 10 → 결과 2 5 % 20 → 결과 5 10.2 % 4 → 컴파일 에러 모듈러스(나머지) 연산자(%) 이항 연산자로 % 왼쪽에 있는 정수를 % 오른쪽에 있는 정수로 나누어서 나머지만의 값 주의할 점은 피연산자 모두가 정수이어야 함 5 % 3 → 결과 2 1592 % 10 → 결과 2 5 % 20 → 결과 5 10.2 % 4 → 컴파일 에러
증가(++)와 감소(--) 연산자 ++a; a = a + 1; --sum; sum = sum – 1; int a = 5; 증감 연산자는 단항 연산자로 피연산자의 값을 1 증가 또는 감소 시킨다. ++a; a = a + 1; --sum; sum = sum – 1; int a = 5; ① x = a++; 결과 : x = 5 a = 6 (후치) ② y = ++a; 결과 : y = 6 a = 6 (전치)
연산자 예
윤 홍 란 hryun@sookmyung.ac.kr 제어의 흐름 윤 홍 란 hryun@sookmyung.ac.kr
내용 프로그램 제어 흐름의 형태 조건문 반복문 중첩된 반복문 기타 흐름 제어문
프로그램 제어 흐름의 형태 순서적 수행(Sequence) 문장들이 위에서 아래로 순차적으로 실행하는 것. 문 1 문 2 선택적 수행(Selection) No(False) 조건 문 1 어떤 조건을 검사하여 실행할 부분과 미 실행 부분을 나누어서 실행 하는 것. Yes(True) 문 2
프로그램 제어 흐름의 형태 반복적 수행(Looping) 어떤 조건을 만족할 때까지 반복 수행하는 문장구조. 조건 문 1 문 2 Yes(True) 조건 문 1 No(False) 문 2
조건문 if 문과 if-else 문 1) 단일 if 문 형식 1 : if (관계 수식) 문; 또는 {여러 개의 문} 수식 문 #include <stdio.h> void main() { int sum, a; sum = 100; scanf("%d", &a); if(a > 100) sum+=a; } 1) 단일 if 문 형식 1 : if (관계 수식) 문; 또는 {여러 개의 문} 수식 문 참(True) 거짓(False)
조건문 형식 2 : if (관계 수식) 문 1; 또는 {여러 개의 문} else 문 2; 또는 {여러 개의 문} #include <stdio.h> void main() { int a, b; int max, min; a = 5; b = 6; if (a > b) {max = a; } else {min = b; } } #include <stdio.h> void main() { char character; if (character == 'a') {printf ("A\n"); } else {printf ("Not A\n"); } }
조건문 2) 중첩(nested) if 형식 3: if (관계 수식 1) 문 1; 또는 {여러 개의 문} else if (관계 수식 2) 문 2; 또는 {여러 개의 문} else if (관계 수식 3) 문 3; 또는 {여러 개의 문} else if (관계 수식 n – 1) 문 n – 1; 또는 {여러 개의 문} else 문 n; 또는 {여러 개의 문} #include <stdio.h> void main( ) { int time = 5; if((time >=0) && (time < 12)) printf(“good morning”); else if((time >= 12) && (time < 18)) printf(“good afternoon”); else if((time >= 18) && (time <= 24) printf(“good evening”); else printf(“time is out of range”); }
조건문 조건 연산자와 if-else 문 If-else 문을 조건 연산자로 바꾸는 예제. if-else 문 조건 연산자 (관계 수식) ? 문 1:문 2; 관계 수식이 참이면 문 1이 수행, 거짓이면 문 2가 수행. If-else 문을 조건 연산자로 바꾸는 예제. if (score >= 60) grade = ‘p’: else grade = ‘F’: printf(“score = %d result = %c\n”, score, grade); grade = (score >=60)? ‘P’:’F’; printf(“score = %d result = %s\n”, score, grade); 또는 printf(“score = %d result = %s\n”, score, (score >= 60) ?’P’: ‘F’);
조건문 조건 연산자를 if-else 문으로 바꾸는 예제. max = (a > b) ? (a):(b); if(a > b) max = a; else max = b;
switch문 switch 문 switch 문은 어떤 값에 따라 실행되는 문을 선택하는 경우에 사용. 형식 : case 템플리트 1: 문장 1; case 템플리트 2: 문장 2; case 템플리트 3: 문장 3; default: 문장 n; }
switch문 - 수식의 결과가 템플리트 중의 하나와 일치하면 case 문을 수행. - 일치하는 템플리트가 없고 default 문이 있으면 default문을 수행. 일치하는 템플리트가 없고 default 문이 없으면 switch문을 끝냄. #include <stdio.h> void main() { int input; scanf ("%d", &input); switch(input) { case 1: printf ("one\n"); case 2: printf ("two\n"); case 3: printf ("three\n"); case 4: printf ("four\n"); }
반복문 while 문 while 문은 조건이 만족되는 동안 반복 순환되는 제어문 이다. 거짓 수식 참 문 1
반복문 while 반복문을 사용할 때 주의할 점. count = 1; while(count < 5) { printf(“무한 반복 %d\n”, count); } 위 예제에서 count = 1이기 때문에 관계 수식은 항상 참이다. 따라서 printf( )를 무한 반복 수행한다. while 문의 관계 수식의 결과를 거짓으로 만드는 문장이 while 문 내에 반드시 있어야 무한 반복을 피할 수 있다.
반복문 do-while 문 do-while 문은 관계 수식의 값이 거짓이라도 최소 한번은 실행한다. 형식 : do { 반복 수행될 문장; } while(관계 수식); 수식 문 참 거짓
반복문 #include<stdio.h> void main() { int count; count = 1; do { printf("do while 문 반복: %d\n", count); count++; } while(count < 5); printf("do while 문 반복 횟수: %d\n", count - 1); } do while 문 반복 : 1 do while 문 반복 : 2 do while 문 반복 : 3 do while 문 반복 : 4 do while 문 반복 횟수 : 4
반복문 for 문 for 문은 유연성을 가지고 있어, 프로그램을 편리하게 사용. 단순문 또는 {복합문} 초기 수식 문 조건 변경식 반복 조건 참 거짓
반복문 for 문과 while 문은 서로 동일한 의미를 갖는 문으로 변경가능. for 문의 유용성 초기 수식; while(반복 수행 조건) { 반복 수행 문장; 조건 변경식; } for (초기수식; 반복 수행 조건; 조건 변경식) for 문의 유용성 콤마 연산자로 여러 변수를 초기화할 수 있다. 하나 이상의 수식을 사용하지 않아도 된다. for 문의 첫째 수식은 초기화 수식이 아니어도 된다. 빈 for 문은 항상 참으로 간주하여 무한 반복한다. 숫자 아닌 문자를 가지고 반복 수행할 수도 있다.
중첩된 반복문 반복문을 여러 겹으로 겹쳐서 사용하는걸 중첩 반복문 이라 한다. for ( ) { } for ( ) { while ( ) }
기타 흐름 제어문 continue 문 반복문의 나머지 부분을 수행하지 않고 다음 반복을 할 때 사용. 1) for 문 2) while 문 for(count = 1; count <= 100; count++) { if(count%2 != 0) continue; printf (“%d”, count); } while (count <= 100) { count++; if (count %2 == 0) continue; printf (“%d”, count) }
기타 흐름 제어문 break 문 반복문으로부터 제어를 이동시키는 기능을 실행한다. 1) for(count = 100; count >= 1; count--) { if (count == 50) break; printf(“%d”, count); } 2) for(j = 0; j <=5; j++) { if (j == 1) break; for (k = 0; k <= 5; k++) { if(k == 3) break; } printf(“j = %d, k = %d\n”, j, k);
기타 흐름 제어문 goto 문 여러 반복문을 한 번에 벗어날때 사용. 형식 : goto 레이블명; 레이블명: 문; if(ch != ‘y’ && ch != ‘Y’) goto Exit; Exit: printf(“ch는 y 또는 Y가 아니다. \n”);
윤 홍 란 hryun@sookmyung.ac.kr 데이터의 입력과 출력 윤 홍 란 hryun@sookmyung.ac.kr
내용 Keyboard Screen 화면으로의 데이터 출력 키보드로부터 데이터 입력 프로그램 예제 scanf()와 printf()함수 Keyboard Screen #include <stdio.h> void main(void) { scanf ( ) printf ( ) }
화면으로의 데이터 출력 표준(모니터) 출력에는 다음과 같은 세 개의 출력 함수가 있다. printf( ) 함수 : 형식화된 문자열과 변수의 값을 표준 출력으로 출력. puts( ) 함수 : 문자열을 표준 출력으로 출력하고 새로운 라인에 이것을 첨부. putchar( ) 함수 : 단일 문자를 표준 출력으로 출력.
printf()함수 형식 printf(“형식 지정 문자열”,[변수1], [변수2], ··· ); 형식 지정 문자열(formatted string)은 출력하고자 하는 내용과 출력을 제어하는 출력 제어 문자 그리고 형식 문자를 포함. 변수는 일반적인 용어로, 어떤 값을 저장한 변수, 상수, 수식, 함수 등이 올 수 있으며 그 결과 값을 출력.
printf()함수 문자열의 화면 출력 문자열을 출력하려면 “ “안에 출력하려는 문자를 나열하면 된다. printf(“this is the first line.”); printf(“that is the second line.”); 결과 : this is the first line.that is the second line. printf(“\nthis is the first line\n\nthis is the second line\n”); 결과 (빈줄) - 첫 번째 \n으로 빈 줄 하나 삽입 This the first line - 두 번째 \n으로 다음 줄로 이동 (빈줄) - 세 번째 \n으로 다음 줄로 이동 This is the second line - 네 번째 \n으로 다음 줄로 이동 (현재 출력 위치) - 다음은 여기서부터 시작한다.
printf()함수 출력 제어 문자 ‘\n’은 이중인용부호(“ “) 어디에나 여러 번 사용이 가능. 출력 제어 문자 문 자 문 자 의 미 \a 벨 소리 \b 백스페이스 \n 줄 바꾸기 \f 용지 바꾸기 \t 탭 \\ 백슬래쉬 출력 \’ 작은 따옴표 출력 \” 인용부호 출력 \0 Null 문자 \x41 ASCⅡ 41(16진수)에 해당하는 문자 ‘A’
printf()함수 변수의 값을 출력하기 printf( ) 함수는 “ “에 단순한 문자열을 출력할 수 있고, 또한 변수 값이나 수식의 결과를 출력할 수 있다. 형식 변환 문자 변환 문자 의 미 %c 한 개의 문자 출력 %d 부호 있는 10진 int형 정수 출력 %f 실수 출력 %s 문자열 출력 %ld 부호 있는 10진 long형 정수 출력 %u 부호 없는 10진 int형 정수 출력
printf()함수 printf( )를 이용한 숫자 값의 출력 예제 #include <stdio.h> main( ) 탭(tab) 문자를 쓰지 않고 정수 출력: 100 200 300 탭(tab) 문자를 쓰고 출력: 100 200 300 자리수 없는 실수 출력: 10.550000 20.550000 자리수 있는 실수 출력: 10.55 10.55 수식의 결과 출력: 600 131.10 216.80 #include <stdio.h> main( ) { int a = 100, b = 200, c = 300; float d = 10.55, e = 20.55; printf(“탭(tab) 문자를 쓰지 않고 정수 출력: %d %d %d”, a, b, c); printf(“탭(tab) 문자를 쓰고 정수 출력: %3d\t%3dt%3d”, a, b, c); printf(“\n 자릿수 없는 실수 출력: %f\t%f\n”, d, e); printf(“자릿수 있는 실수 출력: %.2f\t%.2f\n”, d, e); printf(“\n 수식의 결과 출력: %d\t%.2f\n”, a+b+c, a+d+e. d*e); }
printf()함수 예 Specifier Number Display Comments |%2d| 3 | 3| Number fits in field |%2d| 43 |43| Number fits in field |%2d| 143 |143| Field width ignored |%2d| 2.3 Machine Floating point number dependent in an integer field |%5.2f| 2.366 | 2.37| Field of 5 with 2 decimal digits |%5.2f| 42.3 |42.30| Number fits in field |%5.2f| 142.364 |142.364| Field width ignored but fractional specifier used |%5.2f| 142 Machine Integer in a floating dependent point field
printf()함수 주의사항(1) 주의사항(2) 변환 문자보다 더 많은 변수를 사용하면 변환 문자와 대응하지 않은 변수는 출력되지 않으며, 변수의 개수보다 많은 변환 문자가 사용되면 남는 변혼 문자의 위치에는 알 수 없는 이상한 값이 출력된다. 주의사항(2) 데이터형과 변환 기호가 틀리면 형식 지정에 사용된 데이터형으로 변환되어 출력된다.
printf()함수 문자와 문자열의 출력 문자형의 출력은 변환 문자 %c를 이용한다. Printf(“%c%c%c”, ‘A’, ‘B’, ‘C’); 결과 ABC 문자형 데이터는 ASCⅡ 코드로 된 숫자로 저장되고 처리된다. Printf(“A = %d, 66 = %c, C = %d”, ‘A’, 66, ‘C’); 결과 A = 65, 66 = B C = 67
printf()함수 a b c \0 1000 1001 1002 1003 주소 “abc” 1byte 문자열의 메모리 구조 문자열의 출력은 %s를 이용한다. 문자열은 이중인용부호 안에 있는 문자들을 1바이트씩 연속적으로 메모리에 저장하고 또한 null 문자(\0)를 끝에 포함. char str[]="choi"; printf("%s\n",str); 결과 choi a b c \0 1000 1001 1002 1003 주소 “abc” 1byte 문자열의 메모리 구조
puts(“first line\nsecond line”); 로 바꾸어 준다. puts(“hello world”); 결 과 hello world puts( )에서도 출력 제어 문자를 사용할 수 있다. puts(“first line\nsecond line”); 결과 first line second line
putchar()함수/getchar()함수 함수 형식 : putchar(ch); getchar( ) 함수로 문자를 받아 putchar( ) 함수로 출력하는 예제. int ch; ch = getchar ( ); putchar(ch);
화면으로부터 데이터 입력-scanf() 키보드로부터 데이터를 입력받는 방법을 표준입력 함수라 함. 형식 키보드로부터 단일 문자, 정수 등의 데이터를 읽어 들이며, 입력된 데이터를 하나 이상의 프로그램 변수에 할당. 변수를 사용할 시 항상 부호 &로 시작함. #include <stdio.h> void main( ) { int i_num; float f_num; char c_char; scanf("%d%f%c", &i_num,&f_num,&c_char); printf("i_num = %d, f_num = %.2f, c_char = %c\n", i_num, f_num, c_char); } 입력 형태 : 10 10.21 c <enter> 결과 i_num = 10, f_num = 10.21 c_char = c
scanf()함수 각 변수에 데이터를 입력하는 방법 scanf( ) 함수를 사용하여 여러 개의 데이터를 변수에 대입 하 려면 각각의 데이터를 구분해서 입력해야 함. scanf(“%d%f%c”, &a, &b, &c)일 경우; 각 데이터를 공백으로 분리해서 입력. 10 10.21 a 2) 각 데이터를 <enter> 로 분리하여 입력. 10 <enter> 10.21 <enter> a <enter>
scanf()함수 숫자 데이터 입력시 주의사항 ① “%d”일 때 소수로 입력시 정수만 입력된다. ③ “%d%d”일 때 입력 데이터가 많을때 틀린 변수가 입력될 수 있다. ④ “a=%d, b=%f”처럼 형식 지정 문자열에 변환 문자 이외의 문자가 들어 있을때, 형식 지정 문자열에 있는 그대로 입력해야 한다.
scanf()함수 문자와 문자열 입력 ① 문자 입력: 문자 입력시 공백이나 <ENTER>를 사용하지 않고 연속으로 입력한다. scanf(“%c%c%c”, &a, &b, &c) 입력 형태: A BC A 공백 B C <ENTER> 버퍼의 내용 대기하고 있다 %c 공백도 하나의 문자로 사용된다.
scanf()함수 ② 문자열의 입력 : scanf( ) 함수로 문자열을 받을 때는 문자 배열을 t h i s \0 선언한 후 입력 받아야 한다. t h i s \0 공백으로 채워짐 a[0] a[1] a[3] a[2] a[6] a[5] a[4] a[19] char a[20]; /*선언*/ scanf(“%s”, a) /*입력*/ printf(“%s”, a); /*출력*/ char a[20]; gets(a); puts(a); 입력 형태 this is a boy 결과 this 입력 형태 this is a boy 결 과 this is a boy
프로그램 예제 printf( )를 이용한 데이터의 출력 형태 결과 123456789012345 My name is: computer 123.46 C Answer is 1234 x = 5 and y = 8 00017 #include <stdio.h> void main( ) { char c[20]="computer"; printf("123456789012345\n"); printf("My name is:\n"); printf("%s\n", c); printf("%-15s\n", c); printf("%15s\n", c); printf("%6.2f\n", 123.456); printf("%c\n", 'C'); printf("Answer is %d\n", 1234); printf("x = %d and y = %d\n", 5, 8); printf("%05d\n", 17); }