프로그램과표준입출력 프로그램 (program) 자료를입력받아서이를처리하여출력을하는일을수행함 2 장 C 언어의기초 입력 프로그램 ( 처리 ) 출력 식별자, 예약어 자료형 상수와변수 수식 연산자 : 산술연산자 자료형변환 표준입출력 (standard input and output: stdio) 표준입력 : 키보드입력 표준출력 : 모니터또는터미널로출력 (cf) DOS, Windows 의 DOS 창 /command 창, UNIX/Linux 의터미널에서표준입출력가능 1 C 언어프로그래밍 2 출력프로그램 ( 예 2.1) 여러개의 printf() 가있는프로그램 printf("abcde"); printf("12345\n"); printf("abcde\n"); 출력 ABCDE12345 abcde 교과서 ( 개정판 ) 에한줄이빠졌음 printf("abcde12345\nabcde\n"); 와같음 계산을하는프로그램 ( 예 2.2) 계산을포함한프로그램 int x, y, z; x = 500; y = 125; z = x + y; printf("%d",z); [ 출력 ] 625 변수선언 : 정수자료형 치환문 : 변수값초기화 연산 : 덧셈 변수출력문 : 정수 printf("sum is %d.", z); [ 출력 ] Sum is 625. C 언어프로그래밍 3 C 언어프로그래밍 4
입력을포함한프로그램 변수값입력 scanf("%d", &a); a = ( 정수입력 ) scanf("%f", &x); x = ( 실수입력 ) ( 예 2.4) 변수값을입력받는프로그램 float r, s; 실수변수선언 [ 출력 ] Enter the radius of a circle : 4 Area is 50.265472 Diameter is 8.000000 printf("enter the radius of a circle : "); 입력안내문 scanf("%f",&r); 실수입력 s = 3.14159 * r * r; 원의넓이계산 printf("area is %f \n", s); 변수 s 값출력 printf("diameter is %f \n", 2*r); 수식 2*r 값출력 식별자 식별자 (identifier) 변수, 함수, 상수와같은프로그램구성요소의이름 식별자생성규칙 규칙 : 영문자, 숫자, 밑줄문자 (_) 로구성, 숫자로시작하지않음 올바른예 : sum, x2000, tax_rate1, tax_rate2, Table, table 잘못된예 : 4th, "x", tax-rate, id@host ANSI 표준은 31자까지구별, 일부컴파일러는 8자까지구별 tax_rate1 과 tax_rate2 는일부컴파일러에서는같은식별자로인식 식별자권장사항 의미를알수있도록부여하는것이바람직함 ( 예 ) tax 두단어를결합한식별자는밑줄문자또는대문자로구분함 ( 예 ) tax_rate TaxRate C 언어프로그래밍 5 C 언어프로그래밍 6 예약어 예약어 (reserved word) C 언어에서특별한용도로미리예약된이름 키워드 (keyword) 라고도함 식별자로서사용할수없음 예약어의예 자료형 : char short int long unsigned float double struct union typedef enum void const signed 제어문 : if else switch case default for while do break continue goto return 기억장소 : auto register static extern volatile 연산자 : sizeof 일부컴파일러에서사용하는예약어 ada fortran pascal asm entry near far huge 자료형 자료형 (data type) 정수 (integer) 실수 (floating point number): 부동소수점수 문자 (character) (cf) 정수 1 과실수 1 의컴퓨터내부표현은다르다. 문자는컴퓨터내부에서정수로표현된다. C 언어의기본자료형 int 정수 char 문자 float 실수 ( 보통정밀도 ) double 실수 (2배정밀도 ) double x; char c; x는 2배정밀도실수변수 c는문자변수 C 언어프로그래밍 7 C 언어프로그래밍 8
자료형의표현범위 자료형수정자 int 자료형 컴퓨터와컴파일러에따라서 16-bit 또는 32-bit로표현됨. 16-bit 정수 : -32,768 (2 15 ) 32,767(2 15-1) 32-bit 정수 : -2,147,483,648(2 31 ) 2,147,483,647(2 31-1) float, double 자료형유효숫자지수범위유효숫자 x 10 지수 float (32-bit 실수 ): 6자리 -38 38 double (64-bit 실수 ): 15자리 -308 308 char 자료형 문자는 8-bit로표기 (cf) 한글한글자는 16-bit로표기 char 자료형은 8-bit 정수표기에사용가능 8-bit 정수 : -128 127 자료형수정자 (modifier) 자료형앞에붙여서자료형의표현범위를변경 ( 예 ) long, short, unsigned long int 긴정수 (32-bit) short int 짧은정수 (16-bit) unsigned int 부호없는정수 양수의표현범위 2배증가 unsigned long int 부호없는긴정수 (32-bit) unsigned short int 부호없는짧은정수 (16-bit) 자료형수정자와함께사용하는 int는생략가능 long int a; 두변수선언은같은의미임 long a; unsigned 정수의표현범위 16-bit unsigned: 0 65,535 (2 16-1) 32-bit unsigned: 0 4,294,97,295(2 32-1) C 언어프로그래밍 9 C 언어프로그래밍 10 상수 정수상수 상수 (constant) 변하지않는명시적인자료 정수상수 : 12 056 0x4f 실수상수 : 3.14 1.0 1.5e5 문자상수 : 'A' '1' '\n' '@' ' 한 ' 문자열상수 : "Korea" " 대한민국 " " 한 " 정수상수 10진수 : 1 9로시작하여표현 ( 예 ) 789 8진수 : 0으로시작하여표현 ( 예 ) 064 16진수 : 0x 또는 0X로시작하여표현 ( 예 ) 0x3af 정수상수는기본적으로 int 형으로표현됨 정수상수가 int 형표현범위를넘어서면컴파일러판단에의해서 unsigned 또는 long 형으로표현됨 정수형지정접미사 U, L 1234 int형정수 1234L long형정수 40000U unsigned형정수 40000UL unsigned long형정수 C 언어프로그래밍 11 C 언어프로그래밍 12
실수상수 실수상수 소수점을포함한숫자 3.14 1.0 1. 소수부분 =0 이면소수점이하생략가능 0.12.12 정수부분 =0 이면정수부분생략가능 과학용표기법 6.2e3 (= 6.2 x 10 3 ) 6.2E3 4e-2 (= 4 x 10-2 ) 소수점이없어도실수상수 실수상수는기본적으로 double 형으로표현됨 float형지정접미사 F 6.2 double형실수 6.2F float형실수 문자상수 문자상수 영문자, 숫자, 특수문자를작은따옴표 (' ') 로묶어서표시 ( 예 ) 'A' 'b' '5' '@' '&' ASCII 코드 문자에대응되는정수값을정한미국표준코드 ASCII코드는 8-bit 정수로표현 ASCII코드의순서는숫자와알파벳순서와같음 '0' 과 0은다르다. '0' 은정수48과같음 C 언어프로그래밍 13 C 언어프로그래밍 14 백슬래시코드 백슬래시코드 ( 탈출순서표기 ) 제어용문자와문자표현에특수한용도로사용되는문자는 backslash(\) 와함께나타냄 ( 예 ) '\n' '\t' 컴퓨터내부적으로는한문자로표현됨 화면에출력되지않는제어용문자 \n new line: 개행문자 ( 다음줄로 ) \r carriage return: 줄처음으로 \t tab \b backspace \0 null 문자 ( 정수 0에대응되는문자 ) C언어에서특수한용도로사용되는문자 \" 큰따옴표 " \' 작은따옴표 ' \\ backslash \ 8, 16진수코드값표기 \101 8진수코드로표현된문자 (10진수 65, 'A') \x42 16진수코드로표현된문자 (10진수 66, 'B') 문자열상수 문자열상수 연속된문자들은큰따옴표 (" ") 로묶어서표시 ( 예 ) "Korea" 문자열의표현 문자열은컴퓨터내부에서 null 문자로끝나는연속적인문자들로표현 ( 예 ) "Korea" 'K' 'o' 'r' 'e' 'a' '\0' K o r e a \0 주의사항 "a" 는 'a', '\0' 로구성되므로 'a' 와같지않음 null 문자열 "" 은 '\0' 만으로구성되는문자열임 C 언어프로그래밍 15 C 언어프로그래밍 16
기호상수 기호상수 상수에부여한이름 #define 을사용하여기호상수정의 여러번사용하는상수나값이바뀔수있는상수에대해서유용함 ( 예 2.6) 기호상수를사용한프로그램 #define PI 3.14159 실수상수대신에 PI를사용 float r, s; 변수선언 printf("enter the radius of a circle : "); 입력안내문 scanf("%f",&r); 실수입력 s = PI * r * r; 원의넓이계산 printf("area is %f \n", s); 변수 s 값출력 C 언어프로그래밍 17 변수 변수 (variable) 값을저장할수있는, 이름이부여된기억장소 변수의선언 변수를사용하기전에반드시변수의자료형을선언해야함. int p; float a, b, c; 여러개의같은자료형의변수선언 변수를선언하면변수의메모리공간이확보됨 변수선언위치 : 함수의시작부분 ( 다른위치는나중에다룸 ) 변수선언프로그램실행문 (cf) C++ 언어에서는변수를사용하기전에만변수선언을하면됨 C 언어프로그래밍 18 변수의초기화 변수는초기값을지정한다음에사용해야함 int a; b = a; (X) a의값이정의되지않았으므로잘못 실행문에서초기화 int a; a = 25; 변수의초기화선언 int a = 25; float data, sum = 0.0, average; sum 만초기화 ( 권장하지않음 ) 주석 주석 (comment) /* This is a comment */ /* */ 로둘러싸인부분 설명문으로서컴파일러에의해서무시됨 프로그램저작권, 수정이력, 동작설명등의문서화용도로사용 예 /* hello.c * 내용 : 자료를순서대로나열한다. * ver 0.0: 03/6/10 작성자 : 홍길동여러줄에걸쳐서작성가능 */ int sum; /* 자료들의합 */ int max; /* 최대값 */ C++ 주석 // C++ comment... // 부터시작하여줄끝까지가주석 ( 예 ) int sum; // 자료들의합 C 언어프로그래밍 19 C 언어프로그래밍 20
수식 치환문 수식 (expression) 상수, 변수, 함수호출또는이들과연산자와의조합 10 상수 x 변수 sin(x) 함수호출 x + 10*y 이들과연산자와의조합 수식의값 대부분의수식은값을가짐 ( 예외 ) 반환값이없는함수호출 수식의연산들은정해진순서대로수행하며수식의최종연산결과가수식의값이됨. 치환문 c = a + 10; 치환연산자 (assignment operator) = C 언어에서는 = 도연산자로취급함 오른쪽수식의값을왼쪽변수에저장 = 을치환연산자또는배정연산자라고함 = 은수학적등호가아님 k = 5; k = k + 1; k에 6이저장됨 치환수식 치환수식 : 치환연산자를포함한수식 왼쪽변수에저장되는값이치환수식의값이다. k = 10 + 5; 치환수식값 = 15 C 언어프로그래밍 21 C 언어프로그래밍 22 연산자 연산우선순위와결합성 연산자 (operator) 변수, 상수, 함수호출값에대해서연산을수행하여결과를제공피연산자 (operand): 연산의대상 연산은기본적으로같은자료형에대해서수행함 정수들간의연산결과 정수 실수들간의연산결과 실수 산술연산자 + 덧셈 이항연산자 단항연산자 뺄셈, 부호반대 11 4 = 7 ( 뺄셈 ), 4 ( 부호반대 ) * 곱셈 / 나눗셈 11 / 4 = 2 ( 몫 ), 11.0 / 4.0 = 2.75 % 나머지 11 % 4 = 3 나머지연산은정수에대해서만사용가능 연산우선순위 (precedence) 수식에두종류이상의연산자가포함되어있을때에연산을평가 (evaluation) 하는순서 ( 예 ) a + b * c 곱셈 (*) 우선 결합성 (associativity) 같은우선순위의연산자에대한연산실행순서 좌결합성 : 앞 ( 왼쪽 ) 에서부터 ( 예 ) a + b c (a+b) c 우결합성 : 뒤 ( 오른쪽 ) 에서부터 ( 예 ) a = b = c a = (b=c) 주요연산자의우선순위와결합성 우선순위 연산자 결합성 1 괄호 ( ) 좌 2 단항 우 3 * / % 좌 4 + 좌 5 = 우 C 언어프로그래밍 23 C 언어프로그래밍 24
여러가지수식과다중치환문 ( 예 ) 수학식에대한 C 언어수식 b*b 4.0*a*c (a+b) / (c-d) 2.0*x + y/2.0 1.0/(z*z) 괄호사용에유의 다중치환문 y = 5; x = y = 5; x = (y = 5); x = y; x와 y에 5 저장우결합성 c = 10; a = b = c + 5; a와 b에 15 저장 자료형변환 자료형자동변환 1.0 + 2 1.0 + 2.0 = 3.0 자료형을같도록한후에연산수행 수식에서의자료형변환 먼저작은정수는보통정수로형변환 char, short int unsigned char, unsigned short unsigned 이항연산의피연산자는둘중큰자료형으로변환됨 int < unsigned < long < unsigned long < float < double ( 예 ) s / i + f / d i / i + f / d = i + f / d i + d / d = i + d d + d = d (s: short, i: int, f: float, d: double) C 언어프로그래밍 25 C 언어프로그래밍 26 자료형변환 치환문에서의자료형변환 왼쪽변수의자료형으로변환됨. /* 예 2.9 */ double d; /* 64-bit 실수 */ float f; /* 32-bit 실수 */ int a; /* 32-bit 정수 */ short b; /* 16-bit 정수 */ 형변환연산자 형변환연산자 수식의값의자료형을명시적으로변환하는연산자 (double) num (double) (a + b*c) 형변환연산자 (type) 은단항연산자우선순위 (double) a / 4 ((double)a) / 4 형변환후나눗셈 (double) (a / 4) 나눗셈후형변환 d = 123456.789012; f = d; /* f = 123456.789063 : 정밀도손실 */ a = f; /* a = 123456 : 소수부분손실 */ b = a; /* b = -7616 : 의미없는값 */ printf("%f %f %d %d", d, f, a, b); [ 출력 ] 123456.789012 123456.789063 123456-7616 C 언어프로그래밍 27 C 언어프로그래밍 28