오늘은 C언어 배우는 날이다
컴퓨터와 가까운 언어, 빠른 언어
그게 무슨 뜻이냐…
C발 졸라 빡세다는 거다
족같은 점은 나중에 따로 정리해보고
일단 오늘 공부한 거부터 정리해야겠다
무척 섬세한 언어로 대충 하다간 알 수 없는 오류로 전복 나서 몰살당한다
기능 문제나 에러 있어도 어지간해선
C는 아무말 안한다
걍 쓰레기 던져주니 말이다
그러니
프로그래머를 믿어라
1도 모르기에 기초적인 문법부터 하겠다
헤더 파일
함수선언
메인함수
가 기본 골자란다
#include <stdio.h> // [1] 헤더 파일 include
// [2] 함수 선언(필요할 경우)
// int add(int a, int b); // 예시
int main(void) // [3] main 함수(프로그램 시작점)
{
// [4] 변수 선언, 코드 작성
printf("Hello, World!\n");
return 0; // 프로그램이 정상 종료됨을 OS에 알림
}
// [5] 함수 정의(필요할 경우)
// int add(int a, int b) {
// return a + b;
// }
노력해서(GPT가) 업어온 코드니 이거로 기본 골자를 알아보자
#include <stdio.h>
표준 입출력을 하고 싶으면 불러와야 한다…
#include <파일명>
또는 #include "파일명"
입출력 같은 상당히 기본적인 (파이썬 기준) 동작을 위해 헤더 파일이 필수다
참으로 기합인 언어라 할 수 있다
함수가 main 앞 또는 뒤에 정의 될 수 있는데, main뒤에 정의 될떄 미리 ⌜선언⌟ 해줘야 한다
int add(int a, int b);
간단한 프로그램에서 생략하기도 한다
C 프로그램의 시발점 (무조건 있어야 함)
형태는 보통 int main(void)
또는 int main(int argc, char *argv[])
함수 안에 실제 동작 코드를 작성한다
이 기합찬 언어는 함수 쓰기전에 형태를 보고하고,
그 뒤에 함수를 사용하고, 그 다음 함수의 행위를 정의해야 한다
참으로 기합찬 컴퓨터 중첩문이다
ㅅㅂ
아무튼 이곳에서 유의한 곳은 그냥 함수 정의한 것과 main
함수가 무엇인지였다
main
함수란 정확히는 그냥 함수지만
가장 먼저 시작하는 함수에게 main
이란 이름을 붙여준다
말그대로 메인이다
천상천하 유아독존, 동서고금 유일무이, 공천절후의 함수 인 거시다!!!!
예제들과 함께 기초적인 것부터 알아보자
필요한건 나중에 살을 붙여가며 나아가면 된다 ㅇㅇ
;
(세미콜론);
를 붙여야 한다int a = 10; // 세미콜론 O
printf("hi"); // 세미콜론 O
({ ... })
, if/while 등 제어문의 괄호 뒤에는 ;
를 안 붙임int main(void) { // ; 없음
...
} // ; 없음
여긴 솔직히 나도 아직은 잘 구별 못하겠다;;
입력: scanf("...", &변수);
출력: printf("...");
#include <stdio.h>
int main(void) {
int num;
printf("숫자를 입력하세요: "); // 출력
scanf("%d", &num); // 입력 (정수)
printf("입력한 숫자: %d\n", num); // 출력
return 0;
}
%
붙은 저것들은 서식지정자라는 것으로 따로 다루겠다
지금은
%d
는 정수,
%lf
는 실수(double),
%c
는 문자,
%s
는 문자열이란 것… 까지만 알아두자
scanf
에선 반드시 변수 앞에 &(주소연산자1) 붙여야 한다
국룰을 C로 재현해보자
#include <stdio.h>
int main(void) {
printf("Hello, World!\n");
return 0;
}
참고로 \n
은 줄바꿈 문자다 ㅇㅇ
기호 | 이름 | 용도 | 예시 |
---|---|---|---|
( ) | 소괄호 | 1) 함수의 매개변수, 2) 제어문의 조건식, 3) 우선순위 | main(void) , for(...) , (a+b)*c |
{ } | 중괄호 | 코드 블록 시작~끝 (함수, 반복문, 조건문 등) | { ... } |
[ ] | 대괄호 | 배열(리스트)에서 인덱스 지정 | arr[0] , arr[i] |
#include <stdio.h>
int main(void) {
int i; // i라는 정수형 변수 선언
for(i = 1; i <= 9; i++) { // 1부터 9까지 반복
printf("2 x %d = %d\n", i, 2 * i);
}
return 0; // main함수 실행이 정상적으로 끝났음을 OS에 알림
}
for
문도 이상하다for (초기화; 조건식; 변화식) {
// 반복할 코드
}
초기화: 반복을 시작할 때 한 번만 실행 (i = 1;
)
조건식: 반복할지 판단, 참(true)이면 반복, 거짓(false)이면 탈출 (i <= 9;
)
변화식: 매 반복 끝날 때마다 실행 (i++
)
for문의 각 부분은 세미콜론(;)으로 구분, 쉼표 아님
참고사항
i = 1 i를 1로 함
i <= 9 i가 9이하
i++ i에 1더하기
#include <stdio.h>
int main(void) {
int num;
printf("정수 입력: ");
scanf("%d", &num); // 정수를 입력받아 num에 저장
if(num > 0) { // if문: 조건 분기
printf("양수입니다\n");
} else if(num < 0) {
printf("음수입니다\n");
} else {
printf("0입니다\n");
}
int j = 0; // 반복문 예제 (while)
while(j < num) {
printf("Hello!\n");
j++;
}
return 0;
}
● void
함수의 매개변수가 없음을 의미
int maint(void)
: main 함수는 “인수 없이” 시작함
다른 함수에서 void
는 “입력 없음”을 명시
void
자체는 “자료형 없음”의 의미로도 사용됨
● "%d"
포맷 문자열(format string)
%d
= decimal(십진수, 즉 정수)의 약자
scanf("%d", ...)
: 정수 입력받기
printf("%d", ...)
: 정수 출력하기
문자열 안에 %d
를 써야 해당 위치에 정수 값이 들어감
printf("입력한 값: %d\n", num);
다른 타입 쓸거면 %d
대신에 다른 거 넣으면 됨
포맷 | 의미 | 사용 예시 |
---|---|---|
%d |
int (정수) | int a; scanf("%d", &a); |
%i |
int (정수, 10진/8진/16진 지원) | int a; scanf("%i", &a); |
%ld |
long int (긴 정수) | long a; scanf("%ld", &a); |
%li |
long int (긴 정수) | long a; scanf("%li", &a); |
%u |
unsigned int | unsigned int a; scanf("%u", &a); |
%f |
float (실수) | float b; scanf("%f", &b); |
%lf |
double (실수) | double b; scanf("%lf", &b); |
%c |
문자 | char c; scanf("%c", &c); |
%s |
문자열 | char str[10]; scanf("%s", str); |
int j = 0;
while(j < num) {
printf("Hello!\n"); // \n 줄바꿈
j++; // j를 1씩 증가
}
while(조건) { ... }
: 조건이 참이면 반복
j++
: j값 1 증가
printf("Hello!\n");
: 매번 줄 바꿔서 “Hello!” 출력
(예: &x
는 x
의 메모리 주소를 나타냄)
변수의 메모리 주소 반환하는 연산자 ↩