1.09k likes | 2.38k Views
C Programming Language. C ontents. Chapter 01 C 언어의 개요 Chapter 02 C 언어의 기본구성 Chapter 03 기본 데이터 타입 Chapter 04 기본 입출력 Chapter 05 연산자 Chapter 06 프로그램 제어문 Chapter 07 함수 Chapter 08 배열 Chapter 09 포인터 Chapter 10 문자열. C ontents. Chapter 11 구조체와 사용자 정의 Chapter 12 파일 I/O
E N D
Contents • Chapter 01 C언어의 개요 • Chapter 02 C언어의 기본구성 • Chapter 03기본 데이터 타입 • Chapter 04기본 입출력 • Chapter 05연산자 • Chapter 06프로그램 제어문 • Chapter 07함수 • Chapter 08배열 • Chapter 09포인터 • Chapter 10문자열
Contents • Chapter 11 구조체와 사용자 정의 • Chapter 12 파일 I/O • Chapter 13메모리 관리 • Chapter 14매크로와 전처리기 • Chapter 15 C 라이브러리 • Appendix A구조적 시스템 개발 방법론 • Appendix B개발 도구 사용법
Chapter01 C언어의 개요
직접적인 의사소통 불가능 X Compiler C언어 기계어 컴파일러를 통한 간접적인 의사소통 가능 C언어의 소개(I) • C언어란? • UNIX 운영체제를 설계하는 과정에서 탄생 • 상위수준의 프로그래밍 언어 O
C언어의 소개(II) • C언어의 특징 • 문법이 간결하다 • 효율적인 언어이다 • 강력하고 유연하다 • 이식성이 좋다 • 절차식 언어이다 • C언어의 사용 • UNIX운영체제 및 컴파일러 • 게임 및 영화제작(특수효과) • 마이크로프로세서 프로그래밍 • 임베디드 시스템(Embedded System)
프로그래밍 과정(I) 1. 프로그램 목적 정의 2. 프로그램 설계 3. 소스 코드 작성 4. 컴파일 & 링크 5. 프로그램 실행 6. 프로그램 검사와 디버그 7. 프로그램 유지와 보수
hello.h hello.exe hello.obj hello.c 프로그래밍 과정(II) Compiler Linker 목적 파일(*.obj) 실행 파일(*.exe) 소스 파일과 헤더 파일(*.c & *.h) 라이브러리 파일
Chapter02 C언어의 기본 구성
첫 만남, Hello, World~! /* HelloWorld.c */ #include <stdio.h> int main(void) { printf(“Hello, World~!\n”); return 0; }
프로그램 기본 요소들(I) • #include 지시자와 헤더파일 • #include문을 이용하여 헤더파일과 같은 특정 파일의 전체 내용을 그대로 붙여 넣는 효과를 나타낸다. • 헤더파일에는 상수가 정의되어 있거나, 함수 이름과 사용 방법에 대한 내용 등의 정보가 존재한다. • main()함수 • 모든 C프로그램의 시작과 끝 • 반드시 존재해야 하며 단 한번만 사용 가능하다. • 중괄호, 몸체, 블록 • 함수 몸체의 시작과 끝을 나타낸다. • 여러 문장을 하나의 단위(블럭)로 모으는데 사용된다.
프로그램 기본 요소들(II) • 선언(변수와 상수) • 식별자를 사용하여 컴퓨터 메모리상의 특정 위치에 연결하여 값을 저장하도록 한다. • 함수 • 모든 C프로그램은 여러 개의 함수로 구성되어 진다. • 필요한 기능들의 함수 정의 및 호출로 프로그램을 구성한다. • 연산자 • 계산을 지시하는 기호 • 기본적인 대입, 논리, 산술 연산자 이외에 포인터를 비롯한 복잡한 연산자들이 있다.
프로그램 기본 요소들(III) • 반환문 • 일반 함수에서의 반환문은 함수의 종료를 뜻하며 호출한 영역으로 특정 값을 반환한다. • main()함수에서의 반환문은 프로그램의 종료를 뜻하며 운영체제로 특정 값을 반환한다. • 주석 • 이해하기 쉽도록 설명을 위한 문자열을 프로그램 중간중간에 작성한다. • 코드를 임시적으로 삭제할 목적으로도 사용된다. • 프로그램의 실행에 아무런 영향을 미치지 않는다. • 단일 라인의 주석 처리 : // • 다중 라인의 주석 처리 : /* 와 */
프로그램 기본 요소들(IV) • 키워드(ISO/ANSI C)
Chapter03 기본 데이터 타입
정수형 데이터 타입(I) • 정수형 • 정수란 부호는 있고 소수점 이하를 갖지 않는 숫자를 표현하고 저장할 수 있는 데이터 타입 * 시스템 및 컴파일러에 따라서 표현 가능한 데이터의 범위가 달라진다.
정수형 데이터 타입(II) • 정수형 변수 선언 • 정수값의 출력 • printf()함수의 서식 문자 %d, %o, %x 등을 이용하여 출력 int num; int a, b, c; //한 문장에서 3개의 변수 선언 int age = 30; //선언과 동시에 초기화 printf(“I am %d years old. \n”, age); printf(“I am %o years old. \n”, age); printf(“I am %x years old. \n”, age);
문자형 데이터 타입 • 문자형 • 하나의 문자 혹은 하나의 기호를 표현하고 저장하는 데이터 타입 • 저장할 수 있는 값의 범위 : -127 ~ 128 (정수값의 표현이 가능) • 표준 ASCII 코드(0 ~ 127) 사용 • 문자의 표현시 반드시 작은 따옴표(‘ ’)로 묶어준다 • 출력되지 않는 문자(Escape Sequences)를 사용한다 • 문자형 변수 선언 • 문자값의 출력 • printf()함수의 서식 문자 %c를 이용하여 출력 char grade; char gradeA = ‘A’, gradeB = 66; //선언과 동시에 초기화 printf(“My grade is %c. \n”, gradeA); printf(“Your grade is %c. \n”, gradeB);
실수형 데이터 타입(I) • 실수형 • 소수점 이하를 가지는 실수를 표현하고 저장하는 데이터 타입 * 시스템 및 컴파일러에 따라서 표현 가능한 데이터의 범위가 달라진다.
실수형 데이터 타입(II) • 실수형 변수 선언 • 실수값의 출력 • printf()함수의 서식 문자 %f, %e, %a, %lf, %le 등을 이용하여 출력 float a = 10, b = 20; double percent = a/100; double c = 0.3; printf(“percent is %f. \n”, percent); printf(“percent is %e. \n”, percent); printf(“percent is %a. \n”, percent); printf(“a : %f , b : %e \n”, a, b);
데이터 타입의 크기 • 특징 • 데이터 타입의 크기는 시스템이나 운영체제, 컴파일러마다 달라질 수 있다. • 타입간의 크기 순서는 정해져 있다. • 1 sizeof(char) sizeof(short) sizeof(int) sizeof(long) • sizeof(float) sizeof(double) sizeof(long double) • sizeof 연산자를 이용하여 자료형의 크기를 확인할 수 있다.
데이터 타입의 변환(형 변환) • 암시적 형 변환(자동 형 변환) • 연산자를 기준으로 하여 왼쪽의 데이터와 오른쪽의 데이터의 타입이 서로 다른 경우에 연산을 수행하기 위하여 발생하는 형 변환 • Type Promotion(형 승격) 동일 종류의 데이터 타입에 대해 타입의 표현 범위가 큰 쪽으로 타입을 변환한다. (예) bool, char, short -> int • Standard Type Conversion(표준 형 변환) 기본 데이터 타입간의 가능한 형 변환을 이용하여 찾는다. (예) int <- -> double • 명시적 형 변환(강제 형 변환) • 프로그래머의 명시적인 선언에 의해서 발생하는 형 변환 (예) float f = (float)100;
변수와 상수(I) • 변수란? • 데이터를 저장할 수 있는 메모리 공간에 붙여진 이름 • 데이터 값이 필요에 따라 바뀐다. • 데이터의 종류에 따라 정수형, 문자형, 실수형, 포인터, 구조체 변수 등으로 나눌 수 있다. • 변수의 선언방법 • 필요로 하는 타입을 선택한다. • 유효한 문자들로 변수 이름을 선택한다. • 다음과 같은 형식으로 선언한다. 타입이름 변수이름; • 쉼표를 사용하면 같은 타입의 변수를 하나 이상 선언할 수 있다. • 선언문에 변수를 초기화할 수 있다. • 전역 변수인 경우 초기화를 하지 않으면 0으로 초기화된다.
변수와 상수(II) • 상수란? • 변하지 않는 데이터를 의미한다. • 데이터의 종류에 따라 정수형 상수, 문자형 상수, 실수형 상수 등으로 나눌 수 있으며, 이름이 있는 상수와 이름이 없는 상수로 나눌 수 있다. • 상수의 선언 int a = 123; //123이라는 숫자값이 정수형 상수 char gradeA = ‘A’ // A라는 문자값이 문자형 상수 double d = 3.141592 // 3.141592라는 값이 실수형 상수 const int MAXLEN = 20; //MAXLEN이라는 이름과 20이라는 값을 갖는 정수형 상수 const double PI = 3.141592 //PI라는 이름과 3.141592라는 값을 갖는 실수형 상수
Chapter04 기본 입출력
Monitor File Printer & etc. Keyboard Camera & etc. Program 입력 스트림 출력 스트림 스트림 스트림이란? • C프로그램에서 데이터의 흐름 • 바이트들이 순서대로 입출력 되는 논리적인 장치 • 내부에 입출력 버퍼를 갖고 있어 자동으로 관리됨 • <stdio.h> 파일에 선언됨
단일 문자 표준 입출력 단일 문자 입력 • getchar() • 표준 입력 스트림(stdin)으로부터 한 문자를 입력받아서 반환해주는 함수 단일 문자 출력 • putchar() • 표준 출력 스트림(stdout)으로 한 문자를 출력하는 함수 #include <stdio.h> int getchar(void); int putchar(int c); //오류가 발생하거나 입력의 끝을 만나게 되면 EOF를 반환
문자열 표준 입출력 문자열 입력 • gets() • 표준 입력 스트림(stdin)으로부터 문자열을 입력받아서 반환해주는 함수 • 문자들을 읽어들이다가 개행 문자(\n)를 만나면 개행문자 대신 널문자(\0)를 붙여서 프로그램에게 반환 문자열 출력 • puts() • 표준 출력 스트림(stdout)으로 문자열을 출력하는 함수 • 문자들을 출력하다가 널(\0)문자를 만나면 널문자대신 개행문자(\n)를 붙이고 출력을 끝낸다. #include <stdio.h> char* gets(char* s); int puts(const char* s); //오류가 발생하거나 입력의 끝을 만나게 되면 EOF를 반환
서식화된 문자열 표준 출력(I) 서식화된 문자열 출력 • printf() • 인수로 주어지는 문자열 및 변수의 데이터, 상수 등의 데이터를 서식화하여 표준 출력하는데 사용하는 함수 • 변환 지정자를 사용하여 서식을 정의 • 출력되지 않는 특수문자의 출력이 가능 #include <stdio.h> int printf (const char *format, ...);
서식화된 문자열 표준 출력(II) printf()를 위한 변환 지정자와 출력결과
서식화된 문자열 표준 출력(III) printf()를 위한 변환 지정 수정자 • 기본적인 변환 지정자의 서식에 적절한 옵션(수정자)를 넣어서 필드의 폭이나 정렬, 자릿수 등을 바꿀 수 있다.
서식화된 문자열 표준 입력(I) 서식화된 문자열의 표준 입력 • scanf() • 사용자로부터 데이터를 입력받는 기본 함수 • printf()와 거의 동일한 변환 지정자를 사용하여 데이터의 타입(서식)을 정의하여 표준 입력을 수행 • 입력된 정보를 분리하는데 공백문자(개행문자, 탭, 빈칸) 이용 #include <stdio.h> int scanf (const char *format, ...);
서식화된 문자열 표준 입력(II) scanf() 사용 규칙 • 읽어올 데이터의 타입이 기본 데이터 타입중 하나라면 변수 이름 앞에 &를 붙인다. • 읽어올 데이터의 타입이 문자 배열이라면 변수 이름 앞에 &를 붙이지 않는다. • %s 지정자를 사용하여 문자열을 읽을 때 공백이 포함되어 있으면 공백 바로 전까지만을 하나의 문자열로 인식한다.
연습문제 • 사용자로부터 단일문자를 입력 받아서 그 문자의 아스키 코드의 값을 출력하는 프로그램을 구현하시오. • 두개의 수를 입력받고 사칙연산(덧셈, 뺄셈, 곱셈, 나눗셈)의 결과를 출력하는 프로그램을 구현하시오. • fflush()함수의 용도를 알아보시오. • 사용자로부터 1문자를 입력받아서 그 문자가 대문자(A-Z)이면 1을, 소문자 (a-z)이면 2를, 숫자(0-9)이면 3을 출력하고 그 이외의 문자라면 0을 출력하는 프로그램을 구현해보자.(EOF가 되었을 때 프로그램을 종료) • A-Z의 아스키 코드 값을 구하시오.
Chapter05 연산자
산술연산자 • 산술 연산자 • 덧셈, 뺄셈, 곱셈, 나눗셈, 나머지 연산을 수행하는 가장 기본적이며 자주 사용하는 연산자
증감연산자 • 증감 연산자 • 피연산자를 1씩 증가 혹은 감소 시키는 단항 연산자 • 연산자의 위치에 따라 증감의 시점이 달라지게되어 수식내에서 사용시에 주의해야한다
대입연산자 • 기본 대입 연산자 (=) • 우변값을 좌변값에 대입하는 연산 • 기타 대입 연산자(+=, -=, *=, /=, %=, %=) • 기본 대입 연산자와 산술 연산자가 합해져서 다양한 형태의 대입 연산자를 정의 int num1, num2 = 0; num1 = 100; num1 = num1 + 20; num1 = num1 + num2; a += b; // a = a + b; a -= b; // a = a - b; a *= b; // a = a * b; a /* = b; // a = a / b; a %= b; // a = a % b;
비교연산자(관계연산자) • 비교 연산자 • 좌변값과 우변값을 비교하여 누가 큰지, 작은지, 같은지, 같지 않은지 등의 관계를 알려주는 연산자 • 비교 조건이 만족되면 true(=1), 만족하지 못하면 false(=0)를 반환
논리연산자 • 논리연산자 • 둘 이상의 비교(관계)식을 결합하는 연산자
비트 논리 연산자(I) • 비트단위 논리 연산자 • 비트 단위(0 또는 1)로 연산을 할 때 사용하는 연산자 • 정수 타입 데이터들만 사용할 수 있다 (char타입 포함)
비트 논리 연산자(II) • 비트단위 논리 연산자의 사용 • 마스크 : 특정 비트들은 가리고 몇 개의 비트들의 값만 사용하고 싶을 때 • 비트켜기 : 특정 비트들만을 1로 설정해서 사용하고 싶을 때 • 비트끄기 : 특정 비트들만을 0으로 설정해서 사용하고 싶을 때 • 비트 토글 : 모든 비트들을 0은 1로, 1은 0으로 토글시키고 싶을 때
00000000 00000000 00000000 00001111 00000000 00000000 00000000 0000111100 결과 : 60 비트 시프트 연산자 • 비트 시프트 연산자 • 비트를 왼쪽에서 오른쪽으로, 혹은 오른쪽에서 왼쪽으로 이동시키는 연산자 • 예: 정수 15의 왼쪽으로 2자리 이동(15 << 2)
변환연산자(캐스트연산자) • 변환 연산자 • 수식내에서 변수의 데이터 타입을 강제로 변환시키는 연산자(명시적 형변환) • 표기법 : (타입)변수 int a; double b = 10.25; a = (int)b; //b의 실수값이 정수형으로 변환된 후 a에 대입된다.
조건연산자 • 조건연산자 • if~else문의 효과를 내는 연산자 • 피연산자를 3개 취하기 때문에 삼항연산자라고도 불린다 • 표기법 : 조건 ? 값1 : 값2 int a = 10, b; b = (a > 0) ? 1 : 0; //a의 값이 0보다 크면 1을, 그렇지 않으면 0을 대입 a = (b == 1) ? 1 : 0; //b의 값이 1이면 1을, 그렇지 않으면 0을 대입
연습문제 • 사용자로부터 두개의 수를 입력받은 후 첫번째 수를 두번째 수로 나눈 나머지를 구하는 프로그램을 구현하시오. • 사용자로부터 하나의 정수를 입력 받아서 그 수의 제곱수를 출력하는 프로그램을 구현하시오. • 사용자로부터 하나의 정수를 입력 받아서 그 수를 왼쪽으로 3자리 시프트 연산한 결과를 출력하는 프로그램을 구현하시오. • 하나의 숫자를 입력받아서 오른쪽에서 3번째 자리의 비트가 0인지 1인지를 알려주는 프로그램을 구현하시오 • 사용자로부터 하나의 숫자를 입력 받아서 0xF120으로 ^연산을 한 값과 다시 ^연산을 한 값을 출력하는 기능을 구현하시오. • 사용자로부터 두개의 수를 입력받은 후 두 수의 부호에 따라 메시지를 출력하는 프로그램을 구현하시오. (조건연산자 사용) • 두수 모두 양수 : 모두 양수입니다. • 그렇지 않은 경우 : 모두 양수는 아닙니다.
Chapter06 프로그램 제어문
프로그램 제어문 • 조건에 따른 분기와 점프 • : 주어진 조건에 따라 다음에 오는 명령의 실행 여부를 결정하여 상황에 따라 다르게 동작시키는 문장 • if문 • switch문 • goto문 • 반복문 • : 비슷한 형태의 문장들을 여러 번 반복해서 실행하는 문장 • while문 • do while문 • for문 • continue & break