처음으로 배우는 C 프로그래밍 제5부 추가적인 화제들 제 12 장 부가 특성.

Slides:



Advertisements
Similar presentations
10-7 부동소수점 (Floating-Point) 계산  컴퓨터에서 숫자를 표기하는 방법  가수 (Fraction) : 부호화된 고정소수점 숫자 지수 (Exponent) : 소수점의 위치를 표시 ( 예 )10 진수 를 표기하면 Fraction Exponent.
Advertisements

Ⅰ. 연산자 Ⅱ. 제어 구조. 연산자 : 할당 연산자 - 사용자가 정의한 변수에 임의의 값을 저장하는 기능 strvar = strVar1+ “ Hello ”
Chapter 12. 배열. 배열  동일한 항목들이 동일한 크기로 연속적으로 메모리에 저장되는 구조  동일한 자료 유형이 여러 개 필요한 경우에 이용할 수 있는 자료 구조.
6 장. printf 와 scanf 함수에 대한 고찰 printf 함수 이야기 printf 는 문자열을 출력하는 함수이다. – 예제 printf1.c 참조 printf 는 특수 문자 출력이 가능하다. 특수 문자의 미 \a 경고음 소리 발생 \b 백스페이스 (backspace)
1 08 배열. 한국대학교 객체지향연구소 2 C 로 배우는 프로그래밍 기초 2 nd Edition 배열  동일한 자료유형의 여러 변수를 일괄 선언  연속적인 항목들이 동일한 크기로 메모리에 저장되는 구조  동일한 자료 유형이 여러 개 필요한 경우에 이용할 수 있는.
1. 2 차원 배열  배열은 동일한 데이터 유형으로 여러 개의 변수를 사용할 경우 같은 이 름으로 지정하여 간편하게 사용할 수 있도록 하는 것으로서 앞에서 1 차원 배열을 공부하였습니다.  2 차원 배열은 바둑판을 생각하면 되며, 1 차원 배열에서 사용하는 첨자를 2.
Part 03 상수, 변수, 자료형 ©우균, 창병모 © 우균, 창병모.
ㅎㅎ 구조체 구조체 사용하기 함수 매개변수로서의 구조체 구조체 포인터와 레퍼런스 구조체 배열.
ㅎㅎ 구조체 C++ 프로그래밍 기초 : 객체지향의 시작 구조체 사용하기 함수 매개변수로서의 구조체 구조체 포인터와 레퍼런스
2장. 프로그램의 기본 구성. 2장. 프로그램의 기본 구성 2-1"Hello, World!" 들여다 보기 /* Hello.c */ #include int main(void) { printf("Hello, World! \n"); return 0;
9장. C 언어의 핵심! 함수. 9장. C 언어의 핵심! 함수 9-1 함수의 정의와 선언 main 함수 다시 보기 : 함수의 기본 형태 { } 그림 9-1.
Chapter 7. 조건문.
제 9 장 구조체와 공용체.
11장 구조체와 열거형 구조체의 정의 구조체 변수의 선언 구조체 초기화 및 사용 구조체 재정의 포인터를 이용해서 구조체 사용
3장. 변수와 연산자. 3장. 변수와 연산자 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, / 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, /
윤성우의 열혈 C 프로그래밍 윤성우 저 열혈강의 C 프로그래밍 개정판 Chapter 12. 포인터의 이해.
제 6장. 생성자와 소멸자 학기 프로그래밍언어및실습 (C++).
Chapter 04 C 연산자의 이해.
4.1 자바 응용 프로그램 분석 4.2 식별자(identifier)와 예약어 4.3 변수와 자료형
11장. 포인터 01_ 포인터의 기본 02_ 포인터와 Const.
8장 함수 함수의 필요성 라이브러리 함수와 사용자 정의 함수 함수의 정의, 원형, 호출 배열을 함수 인자로 전달 재귀호출.
컴퓨터 프로그래밍 기초 #02 : printf(), scanf()
26. 매크로와 전처리기.
Part 05 순수한 연산자 ©우균, 창병모 © 우균, 창병모.
23장. 구조체와 사용자 정의 자료형 2.
6장. printf와 scanf 함수에 대한 고찰
2007 1학기 11 프로젝트 기초 실습.
프로그래밍 랩 – 7주 리스트.
14장. 포인터와 함수에 대한 이해.
11장. 1차원 배열.
* 07/16/96 처음으로 배우는 C 프로그래밍 제1부 기초 제3장 치환, 주소, 대화식 입력 *
C#.
C 프로그래밍 C언어 (CSE2035) (Chap11. Derived types-enumerated, structure, and union) (1-1) Sungwook Kim Sogang University Seoul, Korea Tel:
JA A V W. 03.
사용자 함수 사용하기 함수 함수 정의 프로그램에서 특정한 기능을 수행하도록 만든 하나의 단위 작업
C 언어 교육 02 주차 – scanf & 반복문과 조건문 교육부장 조하정.
어서와 C언어는 처음이지 제14장.
13. 포인터와 배열! 함께 이해하기 IT응용시스템공학과 김 형 진 교수.
3장 상수 변수 기본 자료형 키워드와 식별자 상수와 변수 기본 자료형 형변환 자료형의 재정의.
Java의 정석 제 5 장 배 열 Java 정석 남궁성 강의 의
쉽게 풀어쓴 C언어 Express 제14장 포인터 활용 C Express Slide 1 (of 22)
상수와 기본 자료형.
C 3장. 변수와 데이터형 #include <stdio.h> int main(void) { int num;
19. 함수 포인터와 void 포인터.
3장. 변수와 연산자 교안 : 전자정보통신 홈페이지 / 커뮤니티/ 학술세미나
Lesson 2. 기본 데이터형.
연산자 (Operator).
에어 조건문.
컴퓨터 프로그래밍 기초 - 10th : 포인터 및 구조체 -
2장. 변수와 타입.
컴퓨터 프로그래밍 기초 - 5th : 조건문(if, else if, else, switch-case) -
처음으로 배우는 C 프로그래밍 제4부 복합 데이터 형 제 7 장 배열.
컴퓨터 프로그래밍 기초 - 8th : 함수와 변수 / 배열 -
Chapter 02. 자바 기본 문법.
8주차: Strings, Arrays and Pointers
5장 선택제어문 if 선택문 switch-case 선택문 다양한 프로그램 작성 조건 연산자.
Choi Seong Yun 컴퓨터 프로그래밍 기초 #03 : 변수와 자료형 Choi Seong Yun
Fucntion 요약.
9장. C 언어의 핵심! 함수. 9장. C 언어의 핵심! 함수 9-1 함수의 정의와 선언 main 함수 다시 보기 : 함수의 기본 형태 { } 그림 9-1.
^^ Computer Programming 2 dmpr.cnu.ac.kr/~daygax.
4장. 데이터 표현 방식의 이해. 4장. 데이터 표현 방식의 이해 4-1 컴퓨터의 데이터 표현 진법에 대한 이해 n 진수 표현 방식 : n개의 문자를 이용해서 데이터를 표현 그림 4-1.
제 8장. 클래스의 활용 학기 프로그래밍언어및실습 (C++).
Numerical Analysis Programming using NRs
실습과제 (변수와 자료형, ) 1. 다음 작업 (가), (나), (다)를 수행하는 프로그램 작성
윤성우의 열혈 C++ 프로그래밍 윤성우 저 열혈강의 C++ 프로그래밍 개정판 Chapter 05. 복사 생성자.
제 29 강 스트링(string) 다루기 s a i s . s T i h t g r i n.
어서와 C언어는 처음이지 제21장.
개정판 누구나 즐기는 C언어 콘서트 제13장 동적 메모리 출처: pixabay.
13. 포인터와 배열! 함께 이해하기.
2019 2학기 9장 배열과 포인터 1. 주소, 주소연산자(&) 2. 포인터, 역참조연산자(*) 3. 배열과 포인터.
Presentation transcript:

처음으로 배우는 C 프로그래밍 제5부 추가적인 화제들 제 12 장 부가 특성

제 1 절 부가기능 typedef 선언문 이미 존재하는 C 자료형 이름을 다른 이름으로 사용할 수 있게 한다. 제 1 절 부가기능 typedef 선언문 이미 존재하는 C 자료형 이름을 다른 이름으로 사용할 수 있게 한다. typedef float REAL; REAL val; float val; 같은 의미를 갖는다.

제 1 절 부가기능 typedef의 확장 typedef struct { char name[100]; int id_num; 제 1 절 부가기능 typedef의 확장 는 와 같다. typedef struct { char name[100]; int id_num; }EMP_REC; EMP_REC employee[74]; struct { char name[100]; int id_num; } employee[75];

제 1 절 부가기능 enum 명세자 enum color a, b, c; a = red; b = a; 제 1 절 부가기능 enum 명세자 사용자가 정의한 값의 목록인 나열 자료형(enumeration data type)이다. enum color { red, green, blue}; color 라는 나열 자료형은 red, green, blue라는 값을 갖는다. 내부적으로 나열 자료형에 나열된 값들은 0에서부터 시작하여 양의 정수로 순서적으로 치환된다. 예) enum color a, b, c; a = red; b = a; if (c==yellow) printf("\nThe color is yellow");

제 1 절 부가기능 프로그램 12-1 #include <stdio.h> void main(void) { 제 1 절 부가기능 프로그램 12-1 #include <stdio.h> void main(void) { enum color red, green, yellow; enum color crayon = red; /* crayon을 color 형으로 선언하고 red값으로 초기화함 */ printf("\f2 nThe color is %d", crayon); printf("Enter in a value: "); scanf("%d", &crayon); if (crayon == red) printf("The crayon is red. "); else if (crayon == green) printf("The crayon is green. "); else if (crayon == yellow) printf("The crayon is yellow. "); else printf("The crayon is not defined. "); }

제 1 절 부가기능 컴파일러에 의해 나열 자료형 값에 대한 정수는 나열 자료형이 생성될 때 특정 정수 값을 할당함으로써 변경될 수 있다. enum color {red, green = 7, yellow}; red는 정수 0으로 치환되지만, green과 yellow는 각각 정수 7과 8로 치환된다. 표준 C 자료형에 적용 가능한 유효범위 규칙(scope rule)이 나열 자료형에도 적용된다. 나열 자료형에서 사용자가 정의한 자료 값과 정수는 일대일로 대응되므로 cast 연산자를 사용하여 강제로 정수를 사용자 정의 자료 값으로 혹은 사용자 정의 자료 값을 동일한 정수로 변환시킬 수 있다.

제 1 절 부가기능 캐스트(casts) 표 12-1 산술 연산자의 변환 규칙 제 1 절 부가기능 캐스트(casts) 표 12-1 산술 연산자의 변환 규칙 규칙 1: 모든 문자와 short 정수 피연산자는 항상 정수로 변환된다. 모든 부동소수점 피연산자는 배정밀도 수로 변환된다. 규칙 2: 하나의 피연산자가 배정밀도 수이면 다른 피연산자는 배정밀도 수로 변환되며 수식의 결과도 배정밀도 수이다. 규칙 3: 하나의 피연산자가 long 형 정수이면 다른 피연산자는 long형 정수로 변환되며 수식의 결과도 long 형 정수이다. 규칙 4: 하나의 피연산자가 부호 없는 정수이면 다른 피연산자는 부호 없는 정수로 변환되며 이 수식의 결과는 부호 없는 정수이다. 규칙 5: 두 피연산자가 int 형이면 변환이 일어나지 않으며 이 수식의 결 과는 정수이다. 이들 규칙은 단계적으로 적용된다.

제 1 절 부가기능 자동 형 변환 a = b * d - e % f; a, b : 정수형(int) e : short 정수형 제 1 절 부가기능 자동 형 변환 a = b * d - e % f; a, b : 정수형(int) e : short 정수형 f : long 정수형 b : 부동 소수점 변수 강제 형 변환 값을 다른 형으로 변환하기 위한 연산자는 캐스트(cast) 연산자이다. (int)(a * b) 주의 a,b는 배정밀도 변수 (int)a * b

제 1 절 부가기능 조건 수식(conditional expression) if (hours > 40) 제 1 절 부가기능 조건 수식(conditional expression) 형태 : expression1 ? expression2 : expression3 수식 expression1의 값이 0이 아니면, 즉 참(true)이면 수식 expression2의 값이 구해지고, 그렇지 않으면 수식 expression3의 값이 구해진다. if (hours > 40) rate = 0.045; else rate = 0.02; rate = (hours > 40) ? 0.045 : 0.02;

제 1 절 부가기능 goto 문 if (denom == 0.0) goto err; else 제 1 절 부가기능 goto 문 프로그램의 실행 제어를 아무 조건 없이 다른 곳으로 넘길 수 있다. if (denom == 0.0) goto err; else result = num / denom; err: printf("Error - Attempted Division by Zero");

제 1 절 부가기능 if (a == 100) goto first; else x = 20; goto sec; 제 1 절 부가기능 goto 문의 부적절한 사용 예 if (a == 100) goto first; else x = 20; goto sec; first: x= 50; sec: y= 10; if (a == 100) x = 50; else x = 20; y = 10;

제 2 절 비트별 연산자(bitwise operator) C 언어는 문자, 정수 상수 및 변수의 개개 비트를 조작할 수 있는 기능을 제공한다. 비트 조작을 실행하기 위해 사용된 연산자를 비트 연산자(bit operator)라 한다.

제 2 절 비트별 연산자(bitwise operator) AND연산자 (AND operator) AND 연산자는 두 피연산자간의 비트별 AND 비교를 수행한다. 각 비트별 비교 결과는 비교되어질 두 비트가 1인 경우 1이고 그 이외의 경우는 모두 0이다. 1 0 1 1 0 0 1 1 & 1 1 0 1 0 1 0 1 ----------------- 1 0 0 1 0 0 0 1

제 2 절 비트별 연산자(bitwise operator) #include <stdio.h> void main(void) { int op1 = 0325, op2 = 0263; printf("%o ANDed with %o is %o",op1,op2,op1&op2); } 실행 결과 => 325 ANDed with 263 is 221

제 2 절 비트별 연산자(bitwise operator) AND 연산은 임의의 피연산자로부터 선택된 비트를 제거하거나 혹은 마스킹(masking)하는데 유용하게 사용된다. op2에 있는 비트 0은 op1에 대응되는 비트를 마스크(mask) 시키고, op2에 있는 비트 1는 op1에 대응되는 비트를 여과시킨다(filtering). 변수 op2를 마스크라고 한다. op1= x x x x x x x x op2= 0 0 0 0 1 1 1 1 ----------------- 0 0 0 0 x x x x

제 2 절 비트별 연산자(bitwise operator) 포함 OR 연산자 (inclusive OR operator) 서로 비교되어질 두 비트들 중 하나라도 1이면 포함 OR 비교의 결과는 1이며, 그렇지 않으면 0이다. 1 0 1 1 0 0 1 1 | 1 1 0 1 0 1 0 1 ----------------- 1 1 1 1 0 1 1 1

제 2 절 비트별 연산자(bitwise operator) #include <stdio.h> void main(void) { int op1 = 0325, op2 = 0263; printf("%o ORed with %o is %o",op1,op2,op1|op2); } 실행 결과 => 325 ORed with 263 is 367

제 2 절 비트별 연산자(bitwise operator) op2에 있는 비트 1은 항상 대응되는 결과 비트를 1로 만들고, 비트 0에 대해서는 대응되는 결과 비트를 변하지 않는 op1 비트로 만든다. op1 = x x x x x x x x op2 = 1 1 1 1 0 0 0 0 --------------------- 결과 = 1 1 1 1 x x x x

제 2 절 비트별 연산자(bitwise operator) 배타 OR 연산자 (exclusive OR operator) 비교될 두 비트가 서로 다르면 비교 결과는 1이고 그렇지 않으면 그 결과는 0이다. 1 0 1 1 0 0 1 1 ^ 1 1 0 1 0 1 0 1 ----------------- 0 1 1 0 0 1 1 0

제 2 절 비트별 연산자(bitwise operator) op2에 있는 1에 의해 원래 비트 값이 보수로 변했고, op2에 있는 0은 원래 비트 값을 그대로 유지한다. op1 = x x x x x x x x op2 = 0 1 0 1 0 1 0 1 --------------------- 결과 = x x x x x x x x

제 2 절 비트별 연산자(bitwise operator) 보수 연산자 (complement operator) 보수 연산자 ~는 단항 연산자로 피연산자에 있는 비트 1을 0으로, 비트 0을 1로 바꾼다. 변수 op1이 이진수로 11001010이면 ~op1은 00110101이다. 보수 연산자는 피연산자의 임의의 비트를 모두 0으로 만들기 위해 사용될 수 있다. 예를 들어, op1 = op1 & ~07; (간단하게 op1 &= ~07;)은 op1의 마지막 세 비트 값 모두를 0으로 만든다.

제 2 절 비트별 연산자(bitwise operator) 서로 다른 크기의 자료 항목 비트 연산자 &, |, ^이 서로 다른 크기의 피연산자를 사용하는 경우 길이가 짧은 피연산자의 길이를 증가 시킨다. 그림 12-4 16비트 부호 없는 자료를 32비트 자료로 확장

제 2 절 비트별 연산자(bitwise operator) 그림 12-4 16비트 부호 있는 자료를 32비트 자료로 확장

제 2 절 비트별 연산자(bitwise operator) 이동 연산자(Shift Operator) 좌측 이동 연산자(<<)는 피연산자에 있는 비트를 주어진 수만큼 좌측으로 이동시킨다. 부호 없는 정수에 대해 좌측 이동은 2를 곱한 것과 같다. 그림 12-6 좌측이동 예

제 2 절 비트별 연산자(bitwise operator) 우측 이동 연산자(>>)는 피연산자에 있는 비트를 주어진 수만큼 우측으로 이동시킨다. 그림 12-7a 부호 없는 수의 우측 이동 예

제 2 절 비트별 연산자(bitwise operator)

제 2 절 비트별 연산자(bitwise operator) 그림 12-7c 양수의 산술 우측 이동 예

제 2 절 비트별 연산자(bitwise operator) 산술 우측 이동에서 우측으로 한번 이동은 2로 나눈 것과 같다. 논리 이동(logical shift) 부호 있는 수에 대해 우측 이동 시 빈 비트를 부호 비트로 채우는 대신 빈 비트를 0으로 채우는 경우

제 3 절 매크로 동치 관계가 하나 이상의 값, 연산자 혹은 변수로 구성되는 경우 기호명을 매크로(macro)라고 부르고, 기호명 대신에 문장으로 치환하는 것을 매크로 확장(macro expansion) 혹은 매크로 치환(macro substitution)이라 한다. #define 전처리기가 상수와 연산자를 기호명(symbolic name)과 같게 하기 위해 사용된다. 예) #define SALESTAX 0.05 예) #define FORMAT “The answer is %f” printf(FORMAT, 15.2); #define 문은 직접적 문장 치환이외에도 인자를 사용하는 동치 문을 정의할 수 있다. 예) #define SQUARE(x) x * x y = SQUARE(num);와 같은 문장은 전처리기에 의해 y = num * num;으로치환된다.

제 3 절 매크로 #define SQUARE(x) (x) * (x) 매크로 사용의 주의 제 3 절 매크로 매크로 사용의 주의 #define SQUARE(x) x * x val = SQUARE(num1 + num2); val = (num1+num2)*(num1+num2) val = num1 + num2 * num1 + num2; #define SQUARE(x) (x) * (x)

제 4 절 명령 행 인자(command line argument) 이 장에서 우리는 프로그램이 처음 실행될 때 main() 함수에 인자를 전달하고 저장하는 방법을 설명한다. 인자는 main() 함수를 포함하여 임의의 함수에 전달될 수 있다.

제 4 절 명령 행 인자(command line argument) 실행 파일이 showad.exe라면 명령 행 C>showad는 showad.exe라는 프로그램을 실행시킨다. 그림 12-8 showad 프로그램 실행

제 4 절 명령 행 인자(command line argument) 세 개의 문자열 인자 three blind mice를 main() 함수에 직접적으로 전달하기를 원한다고 가정해 보자. C>showad three blind mice 그림 12-9 메모리에 저장된 명령 행

제 4 절 명령 행 인자(command line argument) 함수 인자와 같이 main() 함수에 전달된 인자는 함수 정의 시에 선언되어 있어야 한다. main() 함수에 전달될 인자를 저장하기 위해 두 개의 항목, 즉 수와 배열이 요구된다. 수는 정수이며, 일반적으로 argc(argument counter의 약어)라는 이름을 갖는다. 배열은 문자열을 저장하기 위한 일차원 배열이며, 일반적으로 argv(argument values의 약어)라는 이름을 갖는다.

제 4 절 명령 행 인자(command line argument) main() 함수에 전달된 정수, argc는 명령 행의 입력된 항목의 개수를 의미한다. 그림 12-11 argv 배열에 저장된 명령 행의 입력 항목

제 4 절 명령 행 인자(command line argument) 프로그램 12-4 #include <stdio.h> void main(int argc, char *argv[]) { int I; printf("\f2 nThe number of items on the command line is %d", argc); for (i=0; I < argc; I++) printf("The address stored in argv[%d] is %p”, I, argv[i]); printf("The character pointed to is %c", *argv[i]); }

제 4 절 명령 행 인자(command line argument) 프로그램 12-4의 실행 C>showad three blind mice 실행 결과는 다음과 같다. The number of items on the command line is 4 The address stored in argv[0] is FFDA The character pointed to is s The address stored in argv[1] is FFEB The character pointed to is t The address stored in argv[2] is FFF1 The character pointed to is b The address stored in argv[3] is FFF7 The character pointed to is m

제 4 절 명령 행 인자(command line argument) 그림 12-12 메모리에 저장된 명령 행

제 4 절 명령 행 인자(command line argument) 프로그램 12-5 /* 명령 행 인자를 출력하는 프로그램 */ #include <stdio.h> void main(int argc, char *argv[]) { int I; printf("\f2 nThe following arguments were passed to main(): "); for (i=1; I < argc; I++) printf("%s ", argv[i]); printf(""); }

제 4 절 명령 행 인자(command line argument) 프로그램 12-6 /* 명령 행 인자를 수치 자료로 출력하는 프로그램 */ #include <stdio.h> void main(int argc, char *argv[]) { int I; int value; int sum = 0; printf("\f2 nThe following numerical data of the arguments passed to main(): "); for (i=1; I < argc; I++) value = atoi(argv[i]); sum += value; printf("%d ", value); } printf("\f2 nThe sum of the numerical data is %d", sum);