Chapter 2 Lexical Elements, Operators, and the C System

Slides:



Advertisements
Similar presentations
3. 자료형. 담당교수 : 이 성 우 C++ 프로그래밍 상수와 변수 (3) 1. 변수 (variable)  프로그램 수행 도중에 자료  변수를 위해 은 변하지 않음  선언 시에 반드시 그. ※ 저장 정보의 구성 ① 정보의 종류 ② 저장 값 ③ 저장 위치 int Num.
Advertisements

기본 자료형 순천향대학교 정보기술공학부 이 상 정. 자료형의 선언 컴퓨터프로그래밍 1 순천향대학교 정보기술공학부 이 상 정 3 자료형 선언 기본 자료형문자형 char 정수형 int 실수형 float double 형없음 void.
멘토링 2 주차 장 프로그래밍을 위한 자바의 자료형  값이 변하지 않는 상수  메모리 기억공간인 변수.
YES C 제 1 장 C 언어의 개요 1/34 제 1 장 C 언어의 개요 문봉근. YES C 제 1 장 C 언어의 개요 2/34 제 1 장 C 언어의 개요 1.1 프로그램과 C 언어의 특징 1.2 C 언어의 프로그램 구성 1.3 비주얼 C++ 통합 환경 들어가기.
C 언어 컴퓨터학과 C 언어 ( STS ) (Chap5. Selection-Making Decisions ) C 언어.
제6장 조건문.
제 3 장 변수와 자료형.
어서와 Java는 처음이지! 제2장 자바 프로그래밍 기초.
3주 강의 Lexical Elements, Operators, and the C System
C++ Espresso 제1장 기초 사항.
제 1장 C 언어의 소개.
C 언어 문자 집합과 토큰 C 프로그램의 구조 C 소스 코딩을 준비하는 방법
2014 ITA 8월 강의 C Programming -1주차- C언어 기초 정대진 ( )
강좌명 : C++프로그래밍 (C++ Programming)
제3장 추가 실습 3장 관련 C 언어 프로그래밍 실습.
4장: 자료형과 수식.
쉽게 풀어쓴 C언어 Express 제4장 변수와 자료형 C Express.
쉽게 풀어쓴 C언어 Express 제3장 C프로그램 구성요소 C Express.
프로그래밍언어론 2nd edition Tucker and Noonan
변수와 자료형.
기초C언어 제3주 C프로그램 구성요소, 변수와 자료형 컴퓨터시뮬레이션학과 2016년 봄학기 담당교수 : 이형원
쉽게 풀어쓴 C언어 Express 제3장 C프로그램 구성요소 C Express.
누구나 즐기는 C언어 콘서트 제2장 기초 사항.
변수와 자료형.
제2장 데이터 및 수식.
내용 프로그래밍 언어(programming language) C 언어란?? C 언어 역사 C 언어 특징 C 프로그램의 구조
제 2 장 변수와 상수.
Chapter 3 Flow of Control
제 3 장 상수와 변수
쉽게 풀어쓴 C언어 Express 제7장 반복문 C Express.
쉽게 풀어쓴 C언어 Express 제4장 변수와 자료형 C Express.
4장 제어문 선택문: if 문, if – else 문, switch 문
4주차: Data Types and Functions
쉽게 풀어쓴 C언어 Express 제4장 변수와 자료형 C Express.
adopted from KNK C Programming : A Modern Approach
제2장 데이터 및 수식.
제2장 데이터형과 표준 입출력문 문봉근.
2019년 2월 24일 오후 4시 59분 제2장 표준 입출력 함수
컴퓨터의 기초 제 2강 - 변수와 자료형 , 연산자 2006년 3월 27일.
adopted from KNK C Programming : A Modern Approach
제 6장 함수 Hello!! C 언어 강성호 김학배 최우영.
Formatted Input/Output
제 3 장 연산자 (Operators).
제 2장 어휘구조와 자료형 토 큰 리 터 럴 주 석 자 료 형 배 열 형.
컴퓨터 프로그래밍 기초 - 4th : 수식과 연산자 -
제어문 & 반복문 C스터디 2주차.
프로그래밍 원리 Chapter 04 자료 처리와 연산자 신한대학교 IT융합공학부 박 호 균.
Chapter 04 자료 유형.
3장. 변수와 연산자. 3장. 변수와 연산자 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, / 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, /
프로그래밍언어론 2nd edition Tucker and Noonan
Chapter 05. 입출력 함수.
제 3장 데이터형과 연산자 Hello!! C 언어 강성호 김학배 최우영.
연산자Operators C언어의 기본 구조 도서출판 한산 C언어의 기본 구조 1: #include <stdio.h>
Java 3장. 자바의 기본 구조 I : 변수, 자료형, 연산자 public class SumTest {
6장 반복제어문 for 문 while 문 do while 문 기타 제어문.
4. 어휘 분석(Lexical analysis)
누구나 즐기는 C언어 콘서트 제2장 기초 사항 IT응용시스템공학과 김형진 교수.
-Part1- 제7장 반복문이란 무엇인가.
쉽게 풀어쓴 C언어 Express 제3장 C프로그램 구성요소 C Express Slide 1 (of 25)
쉽게 풀어쓴 C언어 Express 제6장 조건문 C Express Slide 1 (of 28)
쉽게 풀어쓴 C언어 Express 제6장 조건문 C Express.
C언어 프로그래밍의 이해 Ch03. 기본 자료형, 변수와 상수.
제5장 디버깅과 추적 문봉근.
3주차: Control Flow and Others
박성진 컴퓨터 프로그래밍 기초 [03] 변수와 자료형 박성진
어서와 C언어는 처음이지 제16장.
C 4장. 연산자 #include <stdio.h> int main(void) { int num;
C.
printf("Global Korea\n");
Presentation transcript:

Chapter 2 Lexical Elements, Operators, and the C System 프로그래밍 기초와 실습 Chapter 2 Lexical Elements, Operators, and the C System

Contents Characters and Lexical Elements Comments Keywords Identifiers Constants String Constants Operators and Punctuators Precedence and Associativity of Operators Increment and Decrement Operator Assignment Operators

Characters and Lexical Elements Characters that can be used in a program Lowercases letters a b c d . . . z Uppercase letters A B C D . . . Z Digits 0 1 2 3 4 5 6 7 8 9 Other characters + - * / = ( ) { } [ ] < > ’” ! @ # $ % ^ & _ | \ . , ; : ? White space characters space, form feed and new-line, horizontal and vertical tab C-program은 이들 character의 집합인 ‘token’으로 구성되며 ‘token’은 compiler 에 의해 하나의 unit으로 해석된다.

Characters and Lexical Elements token의 종류 - identifier : letters, digits, ‘_’로 구성된 token - operator : 연산자 - punctuator : { } , ; ( ) - keyword : c에서 특별한 의미를 갖는 예약 어 Token사이의 white space는 허용되며 적절한 spaces의 사용으로 보다 readability의 향상 가능. Space, tab, new line, .. All legal statements printf(“Height : %d\n”, height); printf(“Height : %d\n”,height); /* no space */ printf (“Height : %d\n”, /* three lines */ Height) ;

/* Read in two scores and print their sum */ #include <stdio.h> int main(void) { int score_1 , score_2 , sum; printf("Input two scores as integers: "); scanf("%d%d", &score_1, &score_2); sum = score_1 + score_2; printf("%d + %d = %d\n", score_1, score_2, sum); return 0; }

Comments /* 와 */ 사이에 있는 문장. Compiler 에 의해 무시되는 문장. 프로그램의 수행과는 무관. 프로그램 흐름의 이해를 높이기 위한 문장. 프로그램 작성자, 작성일, 목적, 설명 등을 표시. [Ex] /* 2001년9월15일 * * 홍길동 작성 */ #include <stdio.h> main( ) { int n ; /* 정수형 변수 선언 */ n = 25 * 10; /* 대입문 */ printf(“%d”, n); /* 출력문 */ }

Keywords Keywords 는 하나의 token으로 간주되며 program에서 특별한 의미를 갖는 예약 어 입니다. auto do goto signed unsigned break double if sizeof void case else int static volatile char enum long struct while const extern register switch continue float return typedef default for short union

Identifiers 함수 명, 변수 명 등을 말한다. 영문자(a-z, A-Z), 숫자(0-9), underscore (_)로 구성 영문자 나 underscore(_) 로 시작. 대, 소문자 구별. 255자 까지 가능, 그러나 첫 31자 까지만 인식. Keywords 는 사용될 수 없다.

Identifiers [Ex1] /* Legal identifiers */ times10 get_next_char _done [Ex2] /* Illegal identifiers */ 10times /* 영문자나 _로 시작되어야 한다. */ get-next-char /* 특수문자 – 는 허용되지 않는다. */

Constants C는 여러 유형의 상수 값들을 조작. Integer Constants : Float Constants : C에서 정수형은 Decimal, Octal, Hexadecimal로 표현된다. Float Constants : Decimal point로 표현 Exponent로 표현 [Ex] 17 /* decimal integer constant */ 017 /* octal integer constant : 17(8) = 15 */ 0x17 /* hexadecimal integer constant 17(16)= 23 */ -17 /* negative decimal integer constant */ [Ex] 57.0 /* Decimal point로 표현 */ 5.70E1 /*Exponent로 표현 */ .57e+02 570.e-01

Constants Character Constants : Single Quote(’)로 둘러 싸인 문자 Escape Sequences : Character Escapes Numeric Escapes – ASCII Code값으로 표시 [Ex] ‘A’, ‘b’ Name Character Numeric (Oct) (Hex) new line \n \12 \x0a Alert \a \7 \x07 back space \b \10 \x08 horizontal tab (8cs) \t \11 \x09 Vertical tab \v \13 \x0b Double quote \” \42 \x22 Single quote \’ \47 \x27 Back slash \\ \114 \x5c ESC \33 \x1b Constant도 하나의 token으로 간주

String Constants Double quote marks(“)로 둘러 싸인 일련의 characters의 집합 Compiler에 의해 Array 형태로 저장 Character constants와 구분. white space에 의해 구분되는 두개의 string은 compiler에 의해 single string으로 간주 [Ex] “Hello!”, “123” [Ex] “a” /* String */ ‘a’ /* Character */ [Ex] “abc” “def”  “abcdef”

The C System Preprocessor #define #로 시작되는 모든 statement의 처리 syntax compile 전에 symbol을 모두 value로 바꾸어 준다. [Ex] #include<stdio.h> #define PI 3.14159 #define symbol value 수현아! Define문은 여기서 전혀 언급이 안되니? 간단히라도 언급하는 것이 좋지 않을까??? TAX_RATE이 바뀔 경우 program 전체를 수정하지 않고 #define 부분만 수정하면 된다. [Ex] #define TAX_RATE 0.1 : printf(“Tax rate is %f”, TAX_RATE); tax = income * TAX_RATE; compile전에 TAX_RATE는 모두 0.1로 바뀐다.

The C System #include compile전에 주어진 File의 복사본을 include문 대신 삽입 삽입되는 File은 Header File로 확장자명은 ‘~.h’ Header File의 주된 내용은 Function prototypes, #define [Ex] “stdio.h” contains : int printf(const char *format, …); /* printf의 prototype */ int scanf(const char *format, …); /* scanf의 prototype */ 수현아! Define문은 여기서 전혀 언급이 안되니? 간단히라도 언급하는 것이 좋지 않을까??? [Ex] #include <filename.h> #include “filename.h” System에서 지원하는 standard library가 있는 위치에서 검색. Current directory에서 Header File 검색

The C System The Standard Library [ 보다 신속한 수행을 위해 compile된 함수 제공 제공되는 함수 사용을 위해 함수 호출문과 그 함수를 호출하기 위한 function prototype의 제공 필요 standard library : compile된 함수들로 구성. standard header file : 주로 function prototypes들을 포함하는 file로 library함수를 사용하기 위해서는 그 function prototype이 정의된 header file의 include필요 [Ex] #include<stdio.h> /* scanf 사용을 위한 header file삽입 */ : scanf(“%d”, &a); /* data입력을 위한 library함수 호출 */ [

Operators and Punctuators Unary Operators : +, - : 양수, 음수 표현 Right associative (오른쪽에서 왼쪽방향으로 계산) [Ex] int a = 1, b ; b = -a + 3 ; /* b = (-1) + 3 = +2 */ b = -a + -+b;   b= (-1) + (-(+(+2))) = (-1) + (-(+2)) = (-1) + (-2) = (-1) – 2 = -3

Operators and Punctuators Binary operator : + , - , * , / , % *, /, % 가 +, - 보다 우선순위가 높다. Left associative (왼쪽에서 오른쪽 방향으로 계산) % operator 나머지를 계산 Operand의 type이 integer 가 아닌 경우 error 배수 구하기 등에 사용 [Ex] if ( n%3 == 0) /* n이 3의 배수라면 */

Operators and Punctuators [Ex] #include<stdio.h> main( ) { int a=3, k, b, sum, rem; k = 6; scanf( “%d”, &b) ; /* 5로 입력한다고 가정 */ sum = a + b * k ; /* Expression */ rem = sum % 10 ; printf ( “ %d + %d * %d = %d \n”, a, b, k, sum ) ; printf ( “ remainder = %d \n”, rem ) ; } 3 +5 * 6 = 33 reminder = 3

Precedence and Associativity of Operators Operator precedence and associativity. Operator Associativity ( ) ++(postfix) --(postfix) left to right +(unary) -(unary) ++(prefix) --(prefix) right to left * / % + - = += -= *= /= etc. [Ex] a = b += c++ - d + --e / -f ;  (a = (b += (c++) – d) + (--e) / (-f)) ⑧ ⑦ ① ⑤ ⑥ ③ ④ ②

Increment and Decrement Operators Increment operator Postfix k++ Prefix ++k Decrement operator Postfix k-- Prefix --k  k = k + 1 ; 와 동일  k = k - 1 ; 와 동일 Prefix : operand가 사용되기 전에 먼저 증가/감소 시킴   Postfix : operand가 사용된 후에 증가/감소 시킴  

Increment and Decrement Operators [Ex] int i = 4, j; j = ++i + 3; printf(“i : %d, j = %d\n”, i, j); j = i++ + 3; j = --i + 3; j = i-- + 3; i를 먼저 증가시킨 후, j는 그 값에 3을 더함 j는 i에 3을 더한 값이 되고 그 후에 i를 1증가시킴 새로 추가한 슬라이드 입니다. i = 5, j = 8 i = 6, j = 8 i = 4, j = 8

Increment and Decrement Operators [Ex] int i, j, k = 5; i = j = 0; ++j; i++; printf(“1: i=%d, j=%d, k=%d\n”, i, j, k); k = ++i; printf(“2: i=%d, j=%d, k=%d\n”, i, j, k); k = i++; printf(“3: i=%d, j=%d, k=%d\n”, i, j, k); k = --i + j++ ; printf(“4: i=%d, j=%d, k=%d\n”, i, j, k); i = i -1; k = i + j j=j+1; 새로 추가한 슬라이드 입니다. 1: i=1, j=1, k=5 2: i=2, j=1, k=2 3: i=3, j=1, k=2 4: i=2, j=2, k=3

Assignment Operators Compiler는 = 을 operator로 인식. variable = right_side : variable 을 위한 메모리 공간에 right_side 의 값이 할당된다. 모든 operators 중에서 우선순위가 가장 낮다. right to left의 Associativity를 갖는다. [Ex] b = 2; c = 3; a = b + c; /* a = (b = 2) + (c = 3) */ a = b = c = 0; /* a = ( b = (c = 0) ) ) */

Increment and Decrement Operators ++ , -- 는 오직 variables에 만 사용 가능하며, constants 나 일반 수식에는 사용될 수 없다. [Ex] 777++; /* constants 에 사용될 수 없다. */ ++(a * b – 1) /* expression 에 사용될 수 없다. */

Assignment Operators Compound Assignment Compound Assignment operators op= variable = variable op (expression) => variable op= expression [Ex] *=, -=, /=, %=, += Left와 right side에 동일 variable을 사용하는 경우 compound assignment 로 simplify 가능 [Ex] int k = 5; k += 2; /* k = k + 2, k=7 */ k -= 2; /* k = k - 2, k=5 */ k *= 2; /* k = k * 2, k=10 */ k /= 2; /* k = k / 2, k=5 */ k %= 2; /* k = k % 2, k=1 */

Assignment Operators [Ex] int i = 24; printf(“+ i : %d\n”, i); printf(“\n”); printf(“ i++ : %d\n”, i++); printf(“ ++i : %d\n”, ++i); printf(“i += i : %d\n”, i+=i); printf(“i : %d \n”, i); i의 현재 값인 24를 먼저 출력한 후 i의 값을 1증가시킴. i=25가 됨 i는 1을 증가시켜 26이 되고 26을 출력함 새로 추가한 슬라이드 입니다. + i : 24 - i : -24 i++ : 24 ++i : 26 i += i : 52 i : 52

Assignment Operators [Ex] int j = 1, k ; k = ++j ; j += k-- + 5 ; printf ( “value j = %d, k = %d”, j, k ); j=j+1; k=j;와 동일 : prefix이므로 먼저 j의 값이 increment j=2, k=2 j=j+k+5; k=k-1;와 동일 : postfix이므로 계산된 후에 Decrement compound assignment가 나오는 예제라서 뒤로 옮겼습니다. 이전에는 increment and decrement operators에 있던 예제입니다. j=9, k=1

먼저 exponent의 값이 incremented된 후 10과 비교 Computing Powers of 2 /* Some powers of 2 are printed */ #include <stdio.h> int main(void) { int exponent = 0, power_of_two = 1; while(++exponent <= 10) printf(“%5d”, power_of_two *= 2); printf(“\n”); return 0; } 먼저 exponent의 값이 incremented된 후 10과 비교 2 4 8 16 32 64 128 256 512 1024

Use of function in the library /* printing random numbers. */ #include <stdio.h> #include <stdlib.h> int main(void) { int i, n; printf(“\n%s\n%s”, “Some randomly distributed integers will be printed.”, “How many do you want to see? ”); scanf(“%d”, &n); for(i = 0; i < n; ++i) { if( i % 6 == 0) printf(“\n”); printf(“%9d”, rand()); } printf(“\n”); return 0; rand()함수는 0~32767사이의 난수, integer를 return해주는 library함수로 이 함수의 prototype은 stdlib.h에 정의됨 Some randomly distributed integers will be printed. How many do you want to see? 10 ꎠ 16838 5758 10113 17515 31051 5627 23010 7419 16212 4086 10을 입력 시

Style Space의 절약 보다 Readability 가 중요하다. Compound Assignment의 선호 z = 3; and x = ( y = 2) + (z = 3); x = y + z; Compound Assignment의 선호 a += 7; and a = a + 7; program readability의 향상을 위해 반드시 comment의 삽입 필요 Program의 작성일, 작성자, program의 목적, block단위 또는 line단위의 수행 방법 등을 반드시 표시 수현아! 왜 prefix가 더 선호 되는지 이유를 써 줄래? 내 생각에는 그다지 차이 없을 것 같은데… 단지 programmer의 선호 인지…..

Lexical Elements, Operators, and the C System 수고하셨습니다. Lexical Elements, Operators, and the C System