// Main.c
#include <stdio.h>
int main(void)
{
return 0;
}
// Main.c
#include <stdio.h>
int main(void)
{
printf("Hello, world!");
return 0;
}
자료형 변수명 = 값;
// 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;
}
변수는 값을 저장하는 공간, 실행 중 값이 변경 될 수 있음
상수는 한번 정하면 변경할 수 없는 값
// 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()를 사용하는것이 안전
// Main.c
#include <stdio.h>
int main(void)
{
int Num = 102;
if (Num < 102)
{
printf("Num < 102");
}
return 0;
}
// Main.c
#include <stdio.h>
int main()
{
int Num = 102;
if (Num < 105)
{
printf("Num < 105");
}
else
{
printf("105 <= Num");
}
return 0;
}
if()의 조건이 참일때만 {} 안의 코드가 실행 / 거짓이면 실행X
// 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가 실행됨
// 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문이 실행됨
// 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;
}
// 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가 실행됨
// 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 = 열 을 반복
// 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()로 수동으로 삭제 시켜주며 관리 해주는 메모리
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int* p;
p = malloc(sizeof(int));
*p = 10;
printf("%d\n", *p);
free(p);
}
필요한 자료형의 변수들을 묶어서 하나의 새로운 자료형을 만드는 것
// 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;
}
이미 정의되어 있는 자료형에 새로운 이름(별명)을 지어주는 것
// 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;
}
구조체(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언어 복습 문제 풀기 -2 (0) | 2026.03.04 |
|---|---|
| C언어 복습 문제 풀기 -1 (0) | 2026.03.03 |