CHAPTER 04. 전처리와 입출력
1. 전처리
전처리기의 역할
; C 언어는 컴파일러가 컴파일 하기 전에 전처리기의 전처리 과정이 필요
전처리 과정은 컴파일 이전에 하는 작업
+ 전처리 지시자인 #include로 헤더파일 삽입
+ 전처리 지시자, #define에 의해 정의된 상수를 대체 시키기.
=> 전처리 과정에서 처리되는 문장을 전처리 지시자 라 한다.
전처리 지시자 #include
; 전처리 지시자 #include는 헤더파일을 삽입하는 지시자 이다.
대표적인 헤더파일인 stdio.h는 printf(), scanf(), putchar(), getchar() 등과 같은 입출력 함수의 정보가 정의된 헤더파일 이다.
전처리 지시자 #define
; 전처리 지시자 #define은 매크로 상수를 정의하는 지시자이다
#define에 의한 심볼릭 상수는 주로 대문자 이름으로 정의하는데, 이를 매크로 상수(macro constant)라고 부른다.
2. 출력함수 printf()
함수 printf() 의 인자는 크게 형식문자열과 출력할 목록으로 구분되어, 출력 목록의 각 항목을 형식문자열에서 %d, %f와 같이 %로 시작하는 형식지정자 순서대로 서식화하여 그 위치에 출력한다.
#include <stdio.h>
int main()
{
printf(" 1234567890\n");
int year = 1999;
printf("C99 %8d\n", year); // 폭 8 ; year 출력
printf("C99 %+8d\n", year); // 폭 8, 부호 표시 ; year 출력
printf("C99 %-8d\n", year); // 폭 8로 왼쪽 정렬 ; year 출력
printf("C99 %-+8d\n", year); // 폭 8, 부호 표시, 왼쪽 정렬 ; year 출력
float f = 3.141592F;
printf(" 1234567890\n");
printf("PI= %10f\n", f); // 폭 10; f 출력
printf("PI= %10.3f\n", f); // 폭 10, 소수점 3자리; f 출력
printf("PI= %.3f\n", f); // 소수점 3자리 ; f 출력 ; defalut 소수점 6자리 출력
printf("PI= %-10.4f\n", f); // 폭 10, 소수점 4자리, 왼쪽 정렬 ; f 출력
return 0;
}
/*
1234567890
C99 1999
C99 +1999
C99 1999
C99 +1999
1234567890
PI= 3.141592
PI= 3.142
PI= 3.142
PI= 3.1416
*/
3. 입력함수 scanf()
콘솔입력을 위한 함수 scanf()
* 주소연산자 &는 뒤에 표시된 피연산자인 변수 주소 값이 연산값으로, scanf()의 입력 값이 저장될 변수 목록에는 scanf() 함수 내에서 입력 값이 저장되는 변수의 주소 위치를 찾는다는 의미에서 반드시 변수 앞에 주소를 의미하는 &을 붙여 '&변수이름'으로 사용되어야 한다.
* 만일 주소 연산자를 빼고 변수 year만으로 기술하면 scanf() 함수 내에서 입력 값이 저장될 주소를 찾지 못해 오류가 발생한다.
* 함수 scanf()는 실행 시 , 지정된 형식 지정자에 맞게 적당한 값이 키보드에 입력된 후 [ENTER] 키를 누르기 전까지 실행을 멈춰 사용자의 입력을 기다림.
getchar()
; 영문 ' get character ' 의 의미로 문자 하나를 입력하는 함수
putchar()
; 'put character'로 반대로 출력하기 위한 함수
위 두 함수를 사용하기 위해서는 printf()와 scand()처럼 헤더파일 stdio.h가 필요하다.
CHAPTER 05. 연산자와 연산식
1. 연산식과 다양한 연산자
2. 관계와 논리, 조건, 비트연산자
비트 연산자
실습예제 5-9 변형
#include <stdio.h>
// 10진수 -> 2진수 변환 함수
void Binary_Trans(int x)
{
printf("%d (binary) : " , x);
for (int i = 7; i >= 0; i--)
{
int result = x >> i & 1;
printf("%d", result);
}
putchar('\n');
}
int main()
{
int x = 15; // binary 1111
printf("%9x\n", -1); // 폭 9, 16진수
printf("%3d\n", 10 & -1); // 폭 3
Binary_Trans(10);
Binary_Trans(2);
printf("%3d\n\n", 10 | 0); // 폭 3
Binary_Trans(10);
Binary_Trans(0);
printf("%3d %08x\n", x, x);
printf("%3d %08x\n", 1, x & 1);
printf("%3d %08x\n", 15, x | 1);
printf("%3d %08x\n", 14, x ^ 1);
printf("%3d %08x\n", ~x, ~x);
return 0;
}
/*
ffffffff
10
10 (binary) : 00001010
2 (binary) : 00000010
10
10 (binary) : 00001010
0 (binary) : 00000000
15 0000000f
1 00000001
15 0000000f
14 0000000e
-16 fffffff0
*/
실습예제 5-10 변형
#include <stdio.h>
// 16진수 -> 2진수 변환 함수
void Binary_Trans(int x)
{
printf("%d (binary) : " , x);
for (int i = 19; i >= 0; i--)
{
int result = x >> i & 1;
printf("%d", result);
if (i % 4 == 0){
putchar(' ');
}
}
putchar('\n');
}
int main()
{
int x = 0xffff; // 1111 1111 1111 1111
printf("%6d %08x\n", x, x); // x : 1111 1111 1111 1111
Binary_Trans(x);
printf("%6d %08x\n", x >> 1, x >> 1); // x : 0111 1111 1111 1111
Binary_Trans(x >> 1);
printf("%6d %08x\n", x >> 2, x >> 2); // x : 0011 1111 1111 1111
Binary_Trans(x >> 2);
printf("%6d %08x\n", x >> 3, x >> 3); // x : 0001 1111 1111 1111
Binary_Trans(x >> 3);
printf("%6d %08x\n", x << 1, x << 1); // x : 0001 1111 1111 1111 1110
Binary_Trans(x << 1);
printf("%6d %08x\n", x << 2, x << 2); // x : 0011 1111 1111 1111 1100
Binary_Trans(x << 2);
return 0;
}
/*
65535 0000ffff
65535 (binary) : 0000 1111 1111 1111 1111
32767 00007fff
32767 (binary) : 0000 0111 1111 1111 1111
16383 00003fff
16383 (binary) : 0000 0011 1111 1111 1111
8191 00001fff
8191 (binary) : 0000 0001 1111 1111 1111
131070 0001fffe
131070 (binary) : 0001 1111 1111 1111 1110
262140 0003fffc
262140 (binary) : 0011 1111 1111 1111 1100
*/
3.형변환 연산자와 연산자 우선순위
CHAPTER 06. 조건
1. 제어문 개요
제어문 (control statement)
: 프로그램의 실행 흐름에서도 순차적인 실행뿐만 아니라 선택과 반복 등 순차적인 실행을 변형하여 프로그램의 실행 순서를 제어한다.
제어문 종류
1. 조건 선택 구문
if
if else
if else if
nested if
switch
2. 반복 / 순환 구문
for
while
do while
3. 분기처리
break
continue
goto
return
2. 조건에 따른 선택 if 문
형식
if (condition){
stmt (실행문)
}
3. 다양한 선택 switch 문
switch 문은 연산식의 결과값에 따라 여러 경로 중에서 하나를 선택하는 구문
switch 문은 문장 if else가 여러 번 계속 반복되는 구문을 좀 더 간략하게 구현
switch 문은 주어진 연산식이 문자형 또는 정수형이라면 그 값에 따라 case의 상수 값과 일치하는 부분의 문장들을 수행하는 선택 구문
switch (exp) {
case value1:
stmt1;
break;
case value1:
stmt1;
break;
case value1:
stmt1;
break;
...
default:
stmt4;
break;
}
CHAPTER 07. 반복
1. 반복 개요와 while 문
반복(repetition)은 말 그대로 같거나 비숫한 일을 여러 번 수행하는 작업
반복과 같은 의미로 순환 또는 루프(loop)라는 표현도 함께 사용
C언어 에서는
while
do while
for
세가지 종류의 반복 구문을 제공
반복 조건을 만족하면 일정하게 반복되는 블록을 반복 몸체(repetition body)라 한다.
// while
while ( <반복조건> )
{
// 반복몸체(loop body)
<해야할 일>;
}
// do - while
do
{
// 반복몸체(loop body)
<해야할 일>;
} while ( <반복조건> );
// for
for ( <초기화>; <반복조건>; <증감> )
{
// 반복몸체(loop body)
<해야할 일>;
}
2. do while 문과 for 문
센티널 값 : 반복의 종료를 알리는 특정한 자료값
정상적인 데이터의 값에서는 절대 등장할 수 없는 값으로 선택하는 것이 좋다.
3. 분기문
4, 중첩된 반복문
CHAPTER 08. 배열
1. 배열 선언과 초기화
배열 (array)은 여러 변수들이 같은 배열이름으로 일정한 크기의 연속된 메모리에 저장되는 구조
배열을 이용하면 변수를 일일이 선언하는 번거로움이 없어지고, 배열을 구성하는 각각의 변수를 반복 구문으로 쉽게 참조할 수 있다.
배열 정의
배열은 동일한 자료유형이 여러 개 필요한 경우에 유용
배열은 한 자료유형의 저장공간인 원소를 동일한 크기로 지정된 배열크기만큼 확보한 연속된 저장공간
배열에서 중요한 요소
1. 배열이름
2. 원소 자료유형
3. 배열크기
2. 2차원과 3차원 배열
'C Programming' 카테고리의 다른 글
[C언어로 배우는 프로그래밍 기초 Perfect 3판] Chapter 08 프로그래밍 연습 (0) | 2022.06.29 |
---|---|
[C언어로 배우는 프로그래밍 기초 Perfect 3판] Chapter 07 프로그래밍 연습 (0) | 2022.06.29 |
[C언어로 배우는 프로그래밍 기초 Perfect 3판] Chapter 04 프로그래밍 연습 (0) | 2022.06.27 |
[C언어로 배우는 프로그래밍 기초 Perfect 3판] Chapter 03 프로그래밍 연습 (0) | 2022.06.27 |
[C언어로 배우는 프로그래밍 기초 Perfect 3판] Chapter 03 자료형과 변수 (0) | 2022.06.26 |