C언어는 메모리 주소에 직접 접근할 수 있다는 점에서 강력한 언어가 되며 다양한 운영체제 및 언어들의 기본이 되고 있다.
고급 언어에 속하면서도 거의 어셈블리어 취급을 받고 있다 ㅋㅎ ㅜ,,
C언어의 기초가 되는 부분들을 훑어보자 📖
#include <stdio.h>
int main(void)
{
printf("hello world\n");
return 0; // main 함수의 반환값을 int로 정했으니, 함수를 종료할 때 정수를 반환해줘야 한다.
}
main 함수는 프로그램이 실행될 때 가장 첫번째로 실행되는 부분이다.
int main(void)
와 return 0
을 약속처럼 동일하게 쓴다.
printf
같은 함수를 사용하려면 이 라이브러리를 추가해줘야 한다.
standard input output header file을 의미하는 stdio.h를 추가해야 printf, scanf
같은 입력 출력 함수를 사용할 수 있다.
main
앞에 작성한 int
가 main 함수의 반환값이다.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
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입니다. -> 최솟값이 되었다.
이 중에서 원시 자료형을 알아보자!
원시 자료형에는 char, int, float, double, void
이렇게 다섯가지가 있다.
char x = 'A';
printf("%c", x); // A
char y = 65;
printf("%c", y); // A
%c
를 적어주면 아스키코드에 해당하는 문자로 출력된다. int z = 65;
printf("%c", z); // A
%d
로 출력하면 정수형으로 출력된다. char a = 'B';
printf("%d", a); // 66
%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
#define MONTHS 12
#define 상수이름 값
으로 상수를 선언할 수 있다.
이름은 MONTHS, 값은 12인 상수가 선언된다.
조건 ? 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
pow(), abs()
등을 쓰려면 라이브러리를 먼저 불러주자#include <math.h>
pow()
예시 double x = pow(2.0, 20.0); // 2의 20제곱
printf("2의 20 제곱은 %.0f", x); // 2의 20 제곱은 1048576
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");
int i = 1, sum = 0;
while(i <= 1000)
{
sum = sum + i;
i++;
}
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;
}
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
}
}
scanf() 함수를 쓸 때 형식 지정자를 %c
로 하면, 엔터도 하나의 공백 문자로서 인식한다.
하나의 값만 입력받는다는 의미로 getchar();
를 추가해서 엔터를 처리해줘야 한다.
반환형태 함수명(매개변수)
{
실행
}
반환값이 없으면 반환형태에 void
를 적으면 된다.
main 함수 밖에 변수를 선언하면 전역 변수로 사용할 수 있다.
// 전역 변수: main 함수 밖에 선언
int hour;
int minute;
int minuteAdd;
void counter()
{
minute += minuteAdd;
hour += minute / 60;
minute %= 60;
hour %= 24;
}