TIL. C언어 입문

김지수·2022년 10월 22일
1

SW사관학교정글5기

목록 보기
2/13

1. 자료형

데이터 저장 단위

  • 비트 (Bit) - 두 가지 중 한 가지 값을 저장할 수 있는 단위
  • 바이트 (Byte) - 8개의 비트로 구성된 저장 단위
    ex) 4 Bytes = 32 bits

자료형 (Data Type) 실제로 메모리를 사용하는 단위

  • Built-Data type
    사용 빈도가 높은 자료형을 예약어로 제공

  • User-defined Data Type
    사용자가 만들어서 사용할 수 있는 문법 제공

  • 정수형 자료형
    C 언어 프로그램에서 정수 값을 ㅔ모리에 저장하기 위해 사용하는 자료형

  • 실수형 자료형
    C 언어 프로그램에서 실수 값을 메모리에 저장하기 위해 사용하는 자료형

정수를 표현하는 자료형 char(character)

  • signed char : 부호가 있는 1바이트 저장 공간
    signed char temperature;
    temperature = -2;    /* 영하 2도를 temperature 변수에 저장함 */
  • unsigned char : 부호가 없는 1바이트 저장 공간
    unsigned char age;
    age = 52;       /* 나이 52살을 age 변수에 저장함 */

정수를 표현하는 자료형 short (int)

  • signed short int : 부호가 있는 2바이트 저장 공간
    signed short dday;
    dday = -20 /* D-day가 -20일 남았다고 dday 변수에 저장함*/
    
  • unsigned short int : 부호가 없는 2바이트 저장 공간
    unsigned short int seconds;
    seconds = 35000; /* 3만 5000초를 seconds 변수에 저장 */
    

정수를 표현하는 자료형 (long) int

  • singed long int : 부호가 있는 4바이트 저장공간

    signed long int money;
    money = 7000000; /* 700만원을 money 변수에 저장함 */
    
  • unsigned long int : 부호가 없는 4바이트 저장 공간

    unsigned long int time_seconds;
    /* 1970년 1월 1일부터 현재까지 시간을 초단위로 환산한 다음
    time_seconds 변수에 저장함 */
    time_seconds = 145310624;

실수를 표현하는 자료형

  • 부동소수점
    실수를 표현할 때 소수점의 위치를 고정하지 않고 소수점의 위치를 나타내는 수를 따로 작성하는 방식이 부동소수점(floating-point) 표현 방식이다
    C 언어는 실수를 저장하기 위해 4바이트와 8 바이트 자료형을 제공한다

  • 고정소수점
    일정한 위치에 소수점의 위치를 고정하여 숫자를 나열하는 방법

  • float - 4 Byte

  • double - 8 Byte
    정확도를 높일 때는 double을 사용하는 것이 좋다

2. C언어와 함수

함수(Function) 란

  • 정해진 단위 작업을 수행하도록 명령문들을 하나의 그룹으로 묶은것
    o 작업 별 그룹으로 나누어 소스 코드를 작성하면 관리하기 편함
    o 소스 코드의 내용을 쉽게 이해 가능
  • '물 마시기 작업을 함수 형태로 표현
 물 마시기 (정수기) 
 {
 	컵을 가져온다;    // 1
     컵에 정수기 물을 따른다; // 2
     컵에 담긴 물을 마신다; // 3
 }
  /* '물 마시기' 함수를 실행하면 위의 1-2-3 순서대로 실행한다 */

함수 집합체

  • C 언어로 작성한 프로그램은 함수의 집합체
  • C 언어의 소스 파일에는 꼭 하나 이상의 함수가 존재
  • 함수들끼리 서로 호출하여 사용하는 형태로 프로그램이 진행

함수 정의

  • 함수 이름 : 하는 일을 짐작하기 쉽게 짓기
  • 매개변수(parameter) : 작업을 수행할 때 필요한 데이터가 있다면 변수 단위로 명시
  • 작업 내용 : 작업할 내용을 중괄호 { } 안에 명령문으로 나열
  • 반환값(result) : 작업한 결과 값을 반환해야 할 때 사용
int Sum (int value1, int value2)  // Sum - 함수 이름 /  value1,value2 - 매개변수
{
	int result = value1 + value2;
    return result;         // result - 반환값
}      //  {  } 작업내용

함수 호출하기

  • 함수가 다른 함수를 사용한다는 것 -> '함수를 호출한다'
  • C 언어 프로그램은 함수가 다른 함수를 호출하면서 프로그램이 진행
    호출자 (caller) : 함수를 호출하는 함수
    피호출자 (callee) : 호출 되는 함수

함수의 매개변수(parameter)

매개변수 : 호출자에게 전달하는 갑승ㄹ 피호출자에서 전달 받는 변수

  • 함수 내의 선언된 변수들은 해당 함수에서만 사용 가능
  • 호출자에서 전달한 순서대로 피호출자의 매개변수가 값을 전달 받음
  • 매개변수의 순서와 개수가 중요

!!! 함수의 매개변수가 없는 경우

  • 특별히 호출자로부터 넘겨받을 정보가 없다면 ( ) 안을 비워두건 ( ) 안에 'void'라고 적어
    인자가 없음을 명시

반환값

  • return : 함수를 종결 시키는 예약어
  • 함수의 반환값(Return Value) : return 뒤에 명시된 변수 값이나 상수 값
  • '함수가 값을 반환한다'는 의미 : 호출자의 어떤 변수에 값을 대입
  • 함수 이름 앞에 자료형이 없는 경우 : int 자료형이 생략된 것

!!! 반환값이 없는 경우

  • 모든 함수가 반환 값을 갖진 않음
  • 반환할 값이 없으면 함수 이름 앞에 void 명시
void Test (int A, int B)    // void를 쓸 경우 반환값이 없다
{
	int reuslt = A + B
    return result;			// void를 쓸경우는 return 이후 값을 쓰지 말아야한다
	A = A + 1;				// return에서 함수가 종료되었기 때문에 동작하지 않는다
}

함수 이름 짓는 방법

  • 함수 이름(Function Name) : 함수를 구별하는 기준
  • 변수 이름 짓는 법과 동일
  • 이름 전체를 숫자로 구성하거나 숫자로 시작하는 일므은 오류 발생
  • 공백 포함 불가
  • C언어 문법에서 이미 정의 해놓은 예약어는 함수의 이름으로 사용 불가
    ex) void, int 등등

함수 호출할 때 기억해야 할 것

  • 컴파일러는 소스 코드를 기계어로 번역할 때, 코드의 위쪽에서 아래쪽으로 내용을 읽으며 변경
int Sum(int A, int B)
{
	int res = A + B;
    return res;
}

void main()
{
	int s = Sum(2,3);  // Sum을 위에서 이미 읽고 내려왔기에 정상 작동
}	
  • 위에 함수의 원형을 선언해주면 정상으로 작동된다.
int Sum(int A, int B);  // 함수 원형을 선언 해주었기 때문에 정상으로 작동

void main()
{
	int s = Sum(2,3);  // Sum을 위에서 이미 읽고 내려왔기에 정상 작동
}

int Sum(int A, int B)
{
	int res = A + B;
    return res;
}

3. 표준 출력함수

라이브러리

  • 자신이 작업하는 소스 파일 목록 중에서 변경 가능성이 없는 파일들을 다른 곳에 보관해두고, 소스 파일 대신 목적 파일을 소스 목록에 포함시켜 작업하여 효율성을 높인다.
  • C 언어에서 좀 더 효과적으로 함수를 관리할 수 있도록 제공하는 기술
  • 지속적으로 업데이트가 필요한 함수들만 소스 파일에 유지하고 나머지 거의 내용이 바뀌지 않는 함수들을 따로 분리하여 라이브러리로 관리
  • 소스 코드를 공개하지 않고 자신이 만든 함수를 다른 프로그래머에게 제공하고 싶은 경우 사용
  • 라이브러리 파일은 '실제 사용하는 내용'만 실행 파일에 포함한다
/* OOO.lib 파일에 있는 함수를 사용하기 위해 각 함수 원형을 선언해야함*/
int Add(int A, int B)
int Sub(int A, int B)			// 함수가 존재하지만, 기계어로 변역되어 있어 내용을
int Mul(int A, int B)			// 확인할 수 없으므로 '함수 원형'을 선언해야한다
int Div(int A, int B)			// OOO.h 헤더파일로 만들어서 제공한다

void main()
{
	int res1, res2, res3, res4
    res1 = Add(2,4);
    res2 = Sub(2,4);
    res3 = Mul(2,4);
    res4 = Div(2,4);
}

전처리기(Preprocessor)

  • 프로그래머가 원하는 사항을 컴파일러에게 직접 지시하는 문법
  • #기호로 시작하며 끝에 ; 세미콜론을 사용하지 않음
  • #include 전처리기는 컴파일러에 자신이 명시한 파일을 읽도록 지시
    !!! 헤더 파일 포함할 때 주의 사항!!!
  • #include <헤더 파일 이름> -> 비주얼 스튜디오 코드에서 제공하는 헤더 파일을 포함할 때
  • #include "헤더 파일 이름" -> 프로그래머가 정의해 사용하는 헤더 파일을 포함할 때
    ex) #include "OOO.h" -프로그래머가 정의한 경우 // # include <stdio.h>

#define 전처리기

  • #define 전처리기는 상수나 명령문을 치환하는 문법
  • #define 전처리기는 치환할 이름을 보통 '대문자'로 적는다
    ex) #define MAX_COUNT 3 -> 3이라는 상수를 MAX_COUNT로 치환
  • 유지 보수 할 때에 상수를 컨트롤하기 좋아진다.
  • #define 전처리기로 명령 치환하기
#define POW_VALUE(a) (a*a)    <----- 'Marco Function' 으로 불린다
in data = POW_VALUE(3);  /* int data = (3*3); 으로 번역됨 */

4. C 표준 라이브러리

C 언어 표준 함수

  • C언어 컴파일러를 만든 회사에서 운영체제 별로 다양한 기능을 구현하여 제공하는 함수

C 표준 라이브러리

  • C 언어 표준 함수들이 정의된 라이브러리

표준 출력

  • 표준 출력이란 해당 시스템이 가장 기본으로 사용하는 출력 방식을 말한다 (컴퓨턱 기준 모니터)
  • 프로그래머가 프로그램을 만들 때 해당 시스템에서 표준인 출력 방식 중 하나를 선택하여 원하는 정보를 전달 할 수 있다.

표준 출력함수

  • putchar, putc : 단일 문자 출력 함수
putchar(65);		/* 아스키 값 65에 해당하는 문자 A 출력 */
putchar('A');		/* 문자 A가 출력됨 */
  • puts : 문자열 출력 함수
puts("Hi~");		/* Hi~ 출력 후에 줄 바꿈이 일어난다 */

문자열 출력 함수 printf

  • 표준 출력 함수 중에 가장 많이 사용하는 함수
  • 형식화된 문자열을 출력할 수 있다
  • 서식 지정 키워드를 사용하여 변수 값을 일정한 형식으로 출력 할 수 있다
  • %d - 정수(10진수), %f - 실수, %c - 문자, %s - 문자열
    어떤 형식으로 출력하고 싶은가에 따라서 사용
int data1 = 5;
int data2 = 10;
printf("%d %d", data1, data2);		/*  data1에 저장된 5,  data2에 저장된 10 출력 */
  • %o는 8진수, %x는 16진수 형태로 정수를 출력
int d1 = 10;	/* 10진수 > 10진수로 10 */
int d2 = 010;	/* 8진수 > 10진수로 8*/
int d3 = 0x10;	/* 16진수 > 10진수로 16 */

/* data1은 16진수, data2는 10진수, data3dms 8진수로 출력함 */
print("%x, %d, %o, d1, d2, d3);
출력 결과 -  a, 8, 20
  • %e 는 실수를 지수형태로 출력
float data = 12.34;
printf("%f, %e, %E, data, data, data)
출력 결과 - 12.3400000, 1.234000e+01, 1.234000E+01    // e,E 는 소문자 대문자 차이
  • 출력 문자열 정렬 이유
    출력할 문자의 개수보다 칸을 더 사용하여 출력하면 빈칸과 숫자마 마치 그래프처럼 표시되어 값을 정확히 확인하지 않고도 어느정도 범위에 있는 값인지 알 수 있다.

  • 제어 코드 사용하기
    아스키 표에는 소리른 내거나 콘솔의 출력과 입력의 현재 위치를 알려주는 캐럿(Caret, 문자로 깜빡임) 위치를 변경할 수 있는 제어코드가 있다.
    \n - 캐럿을 다음 줄로 이동(Line Feed)
    \r - 캐럿을 해당 줄의 처음으로 이동(Carriage Return)
    \t - 캐럿을 한 탭만큼 이동
    \b - 캐럿을 바로 앞 칸으로 이동

0개의 댓글