상세 컨텐츠

본문 제목

C언어 기초 코드

C

by hyunjunstar 2026. 3. 3. 19:12

본문

main() 함수

// Main.c

#include <stdio.h>

int main(void)
{


	return 0;
}

printf() 함수

// Main.c

#include <stdio.h>

int main(void)
{
	printf("Hello, world!");

	return 0;
}

변수(Variable) <-> 상수(Constant)

자료형 변수명 = 값;

// Main.c

#include <stdio.h>

int main(void)
{
	// 자료형 변수명 = 값;
	int Num = 2147483647; // 선언과 동시에 초기화
	double PI;            // 선언

	printf("Num = %d\n", Num);

	PI = 3.141592;
	printf("PI = %lf\n", PI);

	return 0;
}

변수는 값을 저장하는 공간, 실행 중 값이 변경 될 수 있음
상수는 한번 정하면 변경할 수 없는 값

scanf() 함수

// Main.c

#define _CRT_SECURE_NO_WARNINGS 
	// scanf() 함수를 쓸때는 이걸 반드시 정의해줘야 합니다.
	// 다만 scanf() 함수는 stdio.h에 정의되어 있으므로, stdio.h 파일 인클루드 전에 정의해야 합니다.
	
#include <stdio.h>

int main(void)
{
	int Num;

	scanf("%d", &Num); // "Num에다가(&) %d 형식으로 입력받아라."

	printf("%d", Num); // "Num을 %d 형식으로 출력해라."

	return 0;
}

scanf() 함수는 문자열 길이 제한을 두지 않으면 버퍼 오버플로우 위험 및 입력값 검증을 안할시 예상치 못한 동작 발생 가능(바이러스 및 해킹 등)

#define _CRT_SECURE_NO_WARNINGS을 같이 붙여주거나 scanf_s()를 사용하는것이 안전

조건문 단순 if문

// Main.c

#include <stdio.h>

int main(void)
{
	int Num = 102;

	if (Num < 102)
	{
		printf("Num < 102");
	}

	return 0;
}

조건문 if-else문

// Main.c

#include <stdio.h>

int main()
{
	int Num = 102;

	if (Num < 105)
	{
		printf("Num < 105");
	}
	else
	{
		printf("105 <= Num");
	}

	return 0;
}

if()의 조건이 참일때만 {} 안의 코드가 실행 / 거짓이면 실행X

조건문 if-else if-else문

// Main.c

#include <stdio.h>

int main()
{
	int Num = 102;

	if (Num < 105)
	{
		printf("Num < 105");
	}
	else if (Num < 110)
	{
		printf("105 <= Num && Num < 110");
	}
	else
	{
		printf("110 <= Num");
	}

	return 0;
}

여러 조건을 순서대로 검사할 때 사용 및 제일 먼저 참인 if 조건만 실행 되며 나머지는 실행되지 않고 모두 거짓일 경우 else가 실행됨

조건문 중첩 if문

// Main.c

#include <stdio.h>

int main()
{
	int Num = 102;

	if (Num < 105)
	{
		printf("Num < 105\n");

		if (102 < Num)
		{
			printf("102 < Num && Num < 105");
		}
		else
		{
			printf("Num <= 102");
		}
	}

	return 0;
}

if문 안에 if문을 넣어 조건을 단계적으로 검사하는 코드
처음 입력한 if문의 조건이 참일때만 {} 안의 if문이 실행됨

조건문 switch-case문

// Main.c

#include <stdio.h>

int main()
{
	int Num = 101;

	switch (Num)
	{
	case 100:
		printf("Num == 100");
		break;

	case 101:
	case 102:
		printf("Num == 101 || Num == 102");
		break;

	default:
		printf("default");
		break;
	}

	return 0;
}

반복문 while문

// Main.c

#include <stdio.h>

int main(void)
{
	int i = 1;

	while (i < 5)
	{
		printf("%d ", i);

		++i;
	}

	return 0;
}

하나의 변수 값을 여러 경우(case)와 비교할 때 사용
값이 일치하는 case부터 실행, break가 없으면 아래로 계속 실행됨
모든 case가 일치하지 않으면 default가 실행됨

반복문 for문

// Main.c

#include <stdio.h>

int main(void)
{
	int i;

	for (i = 1; i < 5; ++i)
	{
		printf("%d ", i);
	}

	return 0;
}

초기식(i =1;) → 조건식 검사(i < 5) → 실행 → 증감식(++i) → 다시 조건 검사 순서로 동작

이중 반복문

// Main.c

#include <stdio.h>

int main(void)
{
	int i, j;

	for (i = 1; i <= 3; ++i)
	{
		for (j = 1; j <= 3; ++j)
		{
			printf("%c ", '*');
		}
		printf("\n");
	}

	return 0;
}

반복문 안에 다른 반복문을 입력하여 행과 열처럼 2차원 구조를 표현
i = 행 / j = 열 을 반복

배열 Array

// Main.c

#include <stdio.h>

int main(void)
{
	int i;
	int Array[4] = { 1, 2, 3, 4 };

	for (i = 0; i < 4; ++i)
	{
		printf("%d ", Array[i]);
	}

	return 0;
}

같은 자료형의 여러값을 하나의 이름으로 저장하는 자료 구조
배열은 항상 0번 부터 시작하며 인덱스 =/ 값
Array[4] = {1, 2, 3, 4}
Array[0] = 1, Array[1] = 2, Array[2] = 3, Array[3] = 4

Ex) Array[4] = {10, 15, 20, 25}
Array[0] = 10, Array[1] = 15, Array[2] = 20, Array[3] = 25

함수 작성 방법

반환자료형 함수명(매개변수자료형 매개변수명) // 함수 선언(Declaration)이자, 정의(Definition)
{


	return 반환값;
}

int main(void)
{
	int num = 10;  // 자료형 변수명 = 값;
    // 매개변수자료형 매개변수명 = 함수명의 인자값;

	1. 함수명(인자값); // 함수 호출(Function Call)

	return 0;
}

예시 코드

// Main.c

#include <stdio.h>

int Add(int a, int b);    // 함수 선언 (이런 함수가 있다고 미리 알려줌)

int main(void)
{
    int num1 = 10;              // 자료형 변수명 (int형 변수 num1)
    int num2 = 20;              // 자료형 변수명 (int형 변수 num2)

    int result = Add(num1, num2);   // 함수 호출
                                    // num1, num2 → 인자
                                    // result는 반환값을 저장

    printf("%d\n", result);     // 결과 출력 (30)

    return 0;
}

// 함수 정의 (실제 기능 구현)
int Add(int a, int b)           // int → 반환자료형
                                // int a, int b → 매개변수 자료형 + 매개변수명
{
    return a + b;               // 계산 후 값 반환
}

int (앞에) → 반환자료형

int a, int b → 매개변수(자료형 + 이름)

Add(num1, num2) → 인자값 전달

result → 반환값 저장 변수

포인터

자료형 변수명 = 값;

자료형* 변수명 = 메모리주소값; // 자료형쪽에 Asterisk를 붙임.

주소 연산자와 역참조 연산자

// Main.c

#include <stdio.h>

int main(void)
{
	int X = 10;
	int* PtrToX = &X;

	printf("%d\n", *PtrToX);

	*PtrToX = 100;

	printf("%d\n", *PtrToX);

	return 0;
}

X = 10
PtrToX = X의 주소
PtrToX → 10 출력
PtrToX = 100 → X 값이 100으로 바뀜
*PtrToX → 100 출력

 

스택 메모리와 힙 메모리(malloc, free)

스택 메모리 - 함수 안에서 자동으로 만들어지는 메모리이며, 함수가 종료될 때 자동으로 삭제되는 메모리

힙 메모리 - 사용자가 직접 만드는 메모리 malloc()으로 메모리를 생성하며 함수 종료와 동시에 free()로 수동으로 삭제 시켜주며 관리 해주는 메모리

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    int* p;

    p = malloc(sizeof(int));

    *p = 10;

    printf("%d\n", *p);

    free(p);
}

 

구조체 struct

필요한 자료형의 변수들을 묶어서 하나의 새로운 자료형을 만드는 것

// Main.c

#include <stdio.h>

struct Player	// 구조체 생성
{
    int level;
    int hp;
    int mp;
};

int main(void)
{
    struct Player player;   // player 변수 선언

    player.level = 1;
    player.hp = 100;        // 접근 연산자에 값 저장
    player.mp = 50;

    printf("HP : %d\n", player.hp);
    printf("MP : %d\n", player.mp);
    printf("LEVEL : %d\n", player.level);

    return 0;
}

 

typedef

이미 정의되어 있는 자료형에 새로운 이름(별명)을 지어주는 것

// Main.c

#include <stdio.h>

struct Player	// 구조체 생성
{
    int level;
    int hp;
    int mp;
};

typedef struct Player plr;

int main(void)
{
    plr player;   // 구조체 player의 별명(plr)으로 player 변수 선언
    			  // struct Player player; = plr player;

    player.level = 1;
    player.hp = 100;        // 접근 연산자에 값 저장
    player.mp = 50;

    printf("HP : %d\n", player.hp);
    printf("MP : %d\n", player.mp);
    printf("LEVEL : %d\n", player.level);

    return 0;
}

 

구조체와 클래스(C++)

구조체(struct)는 여러 자료형의 변수들을 묶어 하나의 자료형을 만드는 것이며, C++에서는 클래스와 비슷하게 멤버 변수뿐만 아니라 멤버 함수도 선언할 수 있다.

// Main.cpp

#include <stdio.h>
#include <stdlib.h>

struct Player	// 구조체 생성
{
    int level;
    int hp;
    int mp;

    void MyStatus(void) // 구조체 안에 있는 멤버 함수
    {
        printf("MyStatus\n");
        printf("LEVEL : %d\n", level);
        printf("HP : %d\n", hp);
        printf("MP : %d\n", mp);

        return;
    }
};

typedef struct Player plr;

int main(void)
{
    plr* player1 = (plr*)malloc(1 * sizeof(plr));   // plr 타입의 메모리를 힙(heap)에 생성
                                                    // player1은 Player 구조체를 가리키는 포인터
                                                    // struct Player player; = plr player;

    player1 -> level = 1;
    player1 -> hp = 100;
    player1 -> mp = 50;

    player1->MyStatus();

    free(player1);      // malloc으로 생성한 힙 메모리 해제
    player1 = NULL;     // 포인터를 NULL로 초기화

    return 0;
}

'C' 카테고리의 다른 글

C언어 복습 문제 풀기 -2  (0) 2026.03.04
C언어 복습 문제 풀기 -1  (0) 2026.03.03

관련글 더보기