[C언어] C언어 기초 :: main 함수, 메모리 크기, 자료형, 상수, 조건문, 반복문, 입출력, 사용자 정의 함수

2023. 3. 17. 22:51C언어

728x90
반응형

hello, C..! 😀

  • C언어는 메모리 주소에 직접 접근할 수 있다는 점에서 강력한 언어가 되며 다양한 운영체제 및 언어들의 기본이 되고 있다.
  • 고급 언어에 속하면서도 거의 어셈블리어 취급을 받고 있다 ㅋㅎ ㅜ,,

 

C언어의 기초가 되는 부분들을 훑어보자 📖

1. main 함수 작성하기

#include <stdio.h>

int main(void)
{
    printf("hello world\n");
    return 0; // main 함수의 반환값을 int로 정했으니, 함수를 종료할 때 정수를 반환해줘야 한다.
}
  • main 함수는 프로그램이 실행될 때 가장 첫번째로 실행되는 부분이다.
  • int main(void)return 0을 약속처럼 동일하게 쓴다.

 

<stdio.h> 라이브러리

  • printf 같은 함수를 사용하려면 이 라이브러리를 추가해줘야 한다.
  • standard input output header file을 의미하는 stdio.h를 추가해야 printf, scanf같은 입력 출력 함수를 사용할 수 있다.

 

return

  • main 앞에 작성한 int가 main 함수의 반환값이다.
    함수를 종료할 때 정수를 반환해줘야 한다.

 

2. 메모리 크기 확인하기

  • sizeof를 사용하면 변수가 차지하는 메모리 크기 리턴해준다.
printf("변수 x의 메모리 크기는 %d입니다." , sizeof(x)); // 변수 x의 메모리 크기는 4입니다.
  • int와 float는 4바이트를 차지하고, double은 8바이트를 차지한다.
  • 실수 123456789.123456789를 float과 double 변수에 담으면 출력 결과가 다르다.
    👉 float는 4바이트를 차지해 표현 가능한 범위가 작아서 쓰레기 값이 들어가 있고,
    👉 double은 8바이트를 차지해서, 값을 제대로 출력해주고 있다!
    float y = 123456789.123456789;
    double z = 123456789.123456789;
    printf("y = %.2f\n", y); // y = 123456792.00
    printf("z = %.2f\n", z); // z = 123456789.12

overflow

  • int형이 가질 수 있는 제일 큰 값 INT_MAX에 1을 더하면 최솟값이 되어버린다.
      int x = INT_MAX; // C언어에서 int형이 가질 수 있는 제일 큰 값.약 20억
      printf("int형의 최댓값 x는 %d입니다.\n", x); // int형의 최댓값 x는 2147483647입니다.
      printf("x+1은 %d입니다.\n", x+1); // x+1은 -2147483648입니다. -> 최솟값이 되었다.

 

3. Data Types

자료형의 종류

  • 사용자 정의 자료형 User defined
  • 파생 자료형 Derivied
  • 원시 자료형 Primitive

이 중에서 원시 자료형을 알아보자!

원시 자료형에는 char, int, float, double, void 이렇게 다섯가지가 있다.

char

  • char는 문자를 표현한다.
  • string 자료형은 따로 없다, string을 나타내려면 char 배열을 써야 한다.
    char x = 'A';
    printf("%c", x); // A
  • 내부적으로는 숫자(아스키 코드)로 구성되기 때문에 숫자를 넣으면 그에 해당하는 문자를 출력할 수 있다.
    char y = 65;
    printf("%c", y); // A
  • int로 변수를 만들어놓고, 출력할 때 %c를 적어주면 아스키코드에 해당하는 문자로 출력된다.
    int z = 65;
    printf("%c", z); // A
  • 반대로 char로 선언하고 %d로 출력하면 정수형으로 출력된다.
    char a = 'B';
    printf("%d", a); // 66

 

int

  • %d는 10진수, %o는 8진수, %x는 16진수로 출력한다.
    int num = 100;
    printf("10진수: %d\n", num); // 10진수: 100
    printf("8진수: %o\n", num); // 8진수: 144
    printf("16진수: %x\n", num); // 16진수: 64

 

void

  • 자료형 자체가 없다는 의미이다.

 

4. 상수 선언

#define MONTHS 12
  • #define 상수이름 값으로 상수를 선언할 수 있다.
  • 이름은 MONTHS, 값은 12인 상수가 선언된다.

 

5. 조건 연산자

  • 조건 ? True일 때 : 거짓일 때;
  • JavaScript의 삼항 연산자와 똑같다. 반가워!!!!!!🥺
    int x = 50, y = 30;

    int absoluteX = (x > 0) ? x : -x;  
    printf("절댓값 : %d\n", absoluteX); // 절댓값 : 50

    int max = (x > y) ? x : y;  
    printf("최댓값 : %d\n", max); // 최댓값 : 50

    int min = (x < y) ? x : y;  
    printf("최솟값 : %d\n", min); // 최솟값 : 30

 

6. math 라이브러리

  • pow(), abs() 등을 쓰려면 라이브러리를 먼저 불러주자
#include <math.h>
  • pow() 예시
      double x = pow(2.0, 20.0); // 2의 20제곱
      printf("2의 20 제곱은 %.0f", x); // 2의 20 제곱은 1048576

 

7. 조건문

  • if ~ else if ~ else
  • 조건문도 JS랑 똑같다 ㅋㅎㅋㅎ굿굿
    int score = 85;

    if(score >= 90)
    {
        printf("A");
    }
    else if(score >= 80)
    {
        printf("B");
    }
    else
    {
        printf("C");
    }
  • 한 줄은 중괄호 안 써도 됨
    if(score >= 90)
        printf("A");

 

8. 반복문

while문

    int i = 1, sum = 0;
    while(i <= 1000)
    {
        sum = sum + i;
        i++;
    }

for문

  • for(;;), while(1) 는 무한루프!
  • break 사용 가능
#include <stdio.h>
#define N 10

int main(void)
{
    int i, j;
    for(i = 0; i < N; i++)
    {
        for(j = 0; j < N; j++)
        {
            printf("🥰");
                            // 🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰
                            // 🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰
                            // 🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰
                            // 🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰
                            // 🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰
                            // 🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰
                            // 🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰
                            // 🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰
                            // 🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰
                            // 🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰
        }
        printf("\n");
    }
    return 0;
}

 

9. 입력 받기

  • scanf("자료형", &변수명);
  • scanf로 입력을 받을 수 있다.
    입력 받을 때에도 %d, %c 등 데이터 타입을 지정해준다!
  • &는 메모리 주소를 의미한다.
    char o;
    int x, y;
    while(1)
    {
        printf("수식을 입력하세요.");
        scanf("%d %c %d", &x, &o, &y); // 사용자가 입력한 값이 순서대로 들어간다.
        if(o == '+')
        {
            printf("%d %c %d = %d\n", x, o, y, x+y); // 3 + 5 = 8
        }
    }

입력 받을 때 주의할 점 :: C언어의 버퍼 처리

  • scanf() 함수를 쓸 때 형식 지정자를 %c로 하면, 엔터도 하나의 공백 문자로서 인식한다.
  • 하나의 값만 입력받는다는 의미로 getchar();를 추가해서 엔터를 처리해줘야 한다.

 

10. 사용자 정의 함수

반환형태 함수명(매개변수)
{
    실행
}
  • 반환값이 없으면 반환형태에 void를 적으면 된다.
  • main 함수 밖에 변수를 선언하면 전역 변수로 사용할 수 있다.
// 전역 변수: main 함수 밖에 선언
int hour;
int minute;
int minuteAdd;

void counter()
{
    minute += minuteAdd;
    hour += minute / 60;
    minute %= 60;
    hour %= 24;
}

 

728x90
반응형