오늘은 C 언어를 배워봄. 근데 책이 아직 없어서 맛보기로다가 찍먹함 ㅎ

[C언어]
- 저급(low-level) 언어 (= 기계가 이해하기 쉬운 언어, 컴퓨터와 가까운 언어)
- 절차 지향 언어 ===> class가 없음.
- (프로젝트가 커지면 객체 지향이 좋다고 함. 왜인진 아직 모름ㅎ. class가 있으면 class 단위로 관리가 편하다구?? 그게 C++ 이라구??)
- 프로그램 없이 작동 ==> 컴파일 언어 ==> c코드를 컴파일을 하고 실행파일이 생성되면 그것을 실행함.
- 어려운 언어
- 컴파일 언어 ==> 빠름
- (컴파일러를 설치해서 컴파일 했을때 나온 실행파일을 실행함. A 컴퓨터에서 컴파일해서 나온 컴파일 파일을 컴파일러가 없는 B 컴퓨터에서도 작동함. 하지만 OS가 다르면 작동X. ===> 코드를 통으로 보내주는게 좋음.)
- (인터프리터는 A 컴퓨터에서 하고, 인터프리터가 없는 B 컴퓨터에서는 작동하지X)
[C 프로그램의 특징]
- C 프로그램의 기본 단위는 함수
- 함수 내의 한줄 한줄이 세미콜론(;)으로 구분되어야 함.
- 대소문자 구분 (Python과 동일)
- 주석 : //
- 여러 줄을 주석 처리하는 경우는 처음에 /* 를 쓰고 마지막에 */를 써주면 됨.
- C언어는 무조건 main 함수를 int로 선언해줘야 함!!!!!
- main 함수가 없으면 그 파일을 실행시킬 수 없음. main 함수는 1개만 존재해야 함.
- 전역 변수 선언만 main 함수 밖에서 선언
- main 함수는 실행될 때 자동으로 호출되기 때문에, 따로 호출하지 않아도 됨.
- 중괄호{}가 들어가야함. 그냥 들여쓰기는 의미가 없음. 중괄호 필수!!
- 덩어리를 구분하는 것은 중괄호, 줄이 끝난 것은 세미콜론
- 무조건 return 0;을 마지막에 적어줘야함. (종료코드임!)
[printf() 함수]
- 출력해주는 함수
- printf() 함수는 포매팅을 사용함. (python에서는 그냥 print 였는데, C언어는 printf인 것을 기억! f는 포매팅할 때 f임!)
#include <stdio.h> //pirntf를 가져와서 쓰기 위해 적어줘야 함. (standard input output) 헤더파일임.
// C는 무조건 main 함수를 int로 선언해줘야함.
// main 함수가 없으면 그 파일을 실행시킬 수 없음. main 함수는 1개만 있어야함.
// 전역 변수 선언만 main 함수 밖에서 지정
// main 함수는 실행될 때 자동 호출이 됨. ===> 호출하지 않아도 됨.
// 중괄호{}가 들어가야함. 들여쓰기가 의미가 없어짐.
// 덩어리를 구분하는 것은 중괄호, 줄이 끝난 것은 세미콜론;
// 무조건 return 0;을 해줘야함. (종료코드임.)
// printf() 함수
// %포매팅을 사용함.
int main() {
printf("Hello, C!\n");
printf("printf() 함수는 서식 지정자를 통해 출력할 데이터의 서식을 지정할 수 있어요!\n");
printf("변수에 저장된 숫자는 %d입니다.\n", 10);
printf("제 이름은 %s 입니다.\n", "Polibo");
printf("지금은 %d시 %d분 입니다.\n", 14, 36);
return 0;
}
- C언어도 python처럼 서식 지정자를 통해 출력 데이터 별로 출력 가능
서식 지정자 | 출력 데이터 형태 |
%c | 하나의 문자 |
%s | 문자열 |
%d | 부호 있는 10진 정수 |
%i | 부호 있는 10진 정수 (%d와 동일) |
%f | 고정 소수점으로 표현한 실수 (소수점 이하 6자리까지 표현) |
%o | 부호 없는 8진 정수 |
%u | 부호 없는 10진 정수 |
%x | 부호 없는 16진 정수 (소문자 사용) |
%X | 부호 없는 16진 정수 (대문자 사용) |
%e | 부동 소수점으로 표현한 실수 (e-표기법) |
%E | 부동 소수점으로 표현한 실수 (E-표기법) |
%g | 값에 따라 %f나 %e를 사용함. |
%G | 값에 따라 %f나 %E를 사용함. |
%% | 퍼센트(%) 기호 출력 |
[Table. 1] 서식 지정자
- [주의] python에서는 문자, 문자열을 나타낼 때 작은 따옴표('')와 큰 따옴표("") 모두 사용 가능했는데, C언어는 구분함!!
- 작은 따옴표는 문자를 나타낼 때 사용하고, 큰 따옴표는 문자열을 나타낼 때 사용!!
#include <stdio.h>
int main() {
// 작은 따옴표('')는 문자를 나타낼 때 사용
// 큰 따옴표("")는 문자열을 나타낼 때 사용
printf("%%c를 사용한 결과: %c\n", 'a'); // %c: 문자
printf("%%s를 사용한 결과: %s\n", "Polibo"); // %s: 문자열
printf("%%f를 사용한 결과: %f\n", 1.23456789); // 소수점 6자리까지만 표현
printf("%%f를 사용한 결과: %f\n", 5.1);
printf("%%o를 사용한 결과: %o\n", 123); // 8진 정수
printf("%%x를 사용한 결과: %x\n", 123); // 16진 정수
printf("%%g를 사용한 결과: %g\n", 0.001234); // 값에 따라 %f나 %e
printf("%%g를 사용한 결과: %g\n", 0.00000000000001234);
printf("%%G를 사용한 결과 : %G\n\n", 0.000001234); // 값에 따라 %f나 %E
printf(" %%d를 사용한 결과 : |%d|\n", 123);
printf(" %%7d를 사용한 결과 : |%7d|\n", 123);
printf(" %%+7d를 사용한 결과 : |%+7d|\n", 123);
printf(" %%-7d를 사용한 결과 : |%-7d|\n\n", 123);
printf(" %%f를 사용한 결과 : |%f|\n", 1.23);
printf(" %%.1f를 사용한 결과 : |%.1f|\n", 1.23);
printf(" %%7.2f를 사용한 결과 : |%7.2f|\n", 1.23);
printf("%%+7.2f를 사용한 결과 : |%+7.2f|\n", 1.23);
printf("%%-7.2f를 사용한 결과 : |%-7.2f|\n\n", 1.23);
return 0;
}
[scanf() 함수]
- scanf() 함수는 python에서 input 함수와 비슷하게 입력을 받는 함수임.
- & : int, float와 같은 숫자형을 받을 때, 변수 앞에 붙임.
- &를 붙이지 않고 실행하면 error 발생
#include <stdio.h>
int main() {
// scanf() 입력을 받는 함수
// %d로 받으면 int로 받음.
// & : int, float 같은 숫자형을 받을 때, 변수 앞에 붙임.
// & 붙이지 않고 실행하면 erorr 발생
int num_1, num_2;
printf("첫 번째 정수를 입력하세용 : ");
scanf("%d", &num_1);
printf("두 번째 정수를 입력하세용 : ");
scanf("%d", &num_2);
printf("입력하신 두 정수의 합 : %d\n\n", num_1 + num_2);
// ================================================
int num_3, num_4;
printf("두 개의 정수를 입력하세용 : ");
scanf("%d %d", &num_3, &num_4);
printf("입력하신 두 정수를 8진수로 나타내면 %o와 %o가 되고,\n", num_3, num_4);
printf("입력하신 두 정수를 16진수로 나타내면 %x와 %x가 됩니다.\n\n", num_3, num_4);
// ================================================
float num_5;
double num_6;
// scanf() 함수로 double형 실수를 입력받을 때는 반드시 '%lf'를 써야함.
printf("두 개의 실수를 입력하세요 : ");
scanf("%f %f", &num_5, &num_6);
printf("입력하신 두 실수는 %f와 %f 입니다.\n", num_5, num_6);
printf("입력받은 두 실수 중 두번째 double형 변수에는 전혀 다른 값이 저장되었습니다.\n\n");
printf("다시 한 번 두 개의 실수를 입력하세요 : ");
scanf("%f %lf", &num_5, &num_6);
printf("입력하신 두 실수는 %f와 %f입니다.\n", num_5, num_6);
printf("이번에는 두 실수 모두 제대로 저장되었습니다.\n\n");
return 0;
}
- 출력 결과 중 실수 입력하는 부분을 보면, double형인 num_6를 float형 %f에 받아 값이 이상해지는 것을 볼 수 있음.
- double형은 %lf를 사용하여 값을 받아야함!!
[변수]
- 변수(variable)란 데이터(data)를 저장하기 위해 프로그램에 의해 이름을 할당받은 메모리 공간을 의미함.
- 즉, 변수란 데이터(data)를 저장할 수 있는 메모리 공간을 의미하며, 이렇게 저장된 값은 변경될 수 있음.
- 정수형 변수와 실수형 변수로 구분
- 정수형 변수 : char형, int형, long형 변수
- 실형 변수 : float형, double형
- 변수 이름 생성 규칙
- 숫자로 시작X, 한글X(권장)
- 변수 이름 사이의 공백X
- Keyword 사용X
- (goto는 쓰지마세요. 쓰면 안좋아여,, 그렇다는데 이유는 모름 ㅎ)
auto | break | case | char | const | continue | default |
do | double | else | enum | extern | float | for |
goto | if | int | long | register | return | short |
signed | sizeof | static | struct | switch | typeof | union |
unsigned | void | volatile | while |
[Table. 2] C언어의 keyword
- 변수는 선언할 때 앞에 어떤 type인지 쓰고 변수이름을 적어줌.
- 변수를 선언만 하고, 초기화를 하지 않으면, 쓰레깃값이 들어가있음.
- 여러개의 변수 한 번에 선언도 가능함. (BUT, 선언하고자 하는 변수의 type이 다르면 동시 선언 불가능!!)
- num = 1에서 num 이라는 것은 변수라고 하고, 1은 리터럴(literal) 이라고 함.
#include <stdio.h>
int main() {
// 선언과 초기화
// int num_1; // 뒤에 세미콜론을 붙이면 선언, 이거는 초기화한 것이 아니기 때문에 쓰레깃값이 들어가 있음.
// num = 0; // num을 0으로 초기화, 이제 num은 int형만 됨. 한 변수 명에는 같은 자료형만 들어가야 함.
// print("선언만 하고 초기화는 안한 경우 : %d", num_1);
int num_1 = 0; // 이렇게 선언과 초기화를 한번에 할 수 있음.
printf("선언 및 초기화를 한 경우 : %d\n", num_1);
int num_2 = 10, num_3 = 100;
printf("%d, %d\n", num_2, num_3);
return 0;
}
[상수]
- 상수(constant)도 변수와 마찬가지로 데이터를 저장할 수 있는 메모리 공간을 의미함.
- 하지만, 상수는 프로그램이 실행되는 동안 상수에 저장된 데이터는 변경할 수 X
- 상수를 사용할 때에는 선언과 초기화를 동시에 해줘야 함.
- 아래 코드처럼 상수의 값을 변하게 하면 error 발생함.
#include <stdio.h>
int main() {
// int num = 0;
const int num = 0; // const는 상수임. 상수는 변하지 않아야 함.
// 상수를 쓸 때에는 선언과 초기화를 동시에 해줘야 함.
num++;
printf("%d", num);
return 0;
}
[정수형, 실수형, 문자형 타입]
- 1byte = 8bits ==> 2^8
- 범위가 벗어나는 값을 입력하면 제일 처음 값을 출력함.
- ex) (signed) short 에 32767+1을 넣으면 -32768이 출력됨.
정수형 타입 | 할당되는 메모리 크기 | 데이터의 표현 범위 |
(signed) short | 2byte | - 32,768 ~ 32,767 |
unsigned short | 2byte | - 0 ~ 65,535 |
(signed) int | 4byte | - 2,147,483,648 ~ 2,147,483,647 |
unsigned int | 4byte | - 0 ~ 4,294,967,296 |
(signed) long | 8byte | 엄청 큼.. |
unsigned long | 8byte | 엄청 큼.. |
#include <stdio.h>
int main() {
// 정수형 타입
// short // 2bytes ==> 2^16 (65536개)
// (unsigned 부호없음) short ==> 0 ~ 65535 (65536개)
// (signed) short ==> -32768 ~ 32767 (65536개)
// int // 4bytes ==> 2^32 음수21억 ~ 양수21억
// 만약 40억짜리를 써야한다 ==> unsigned int를 쓰면 됨
// long // 8bytes ==> 2^64 1844경
// 범위가 넘어가면 초기화됨
// ex) int의 2,147,483,647 에서 1이 넘어가게 되면 - 2,147,483,648이 됨.
// 부호가 있는 애들은 제일 앞의 bit가 부호 비트임.(0이면 (+), 1이면 (-))
unsigned short num_1 = 65535;
printf("unsigned short : %d\n", num_1);
num_1++;
printf("unsigned short : %d\n", num_1);
short num_2 = -32768;
printf("short : %d\n", num_2);
num_2--;
printf("short : %d\n", num_2);
unsigned int num_3 = 2147483647;
printf("unsigned int : %d\n", num_3);
num_3++;
printf("unsigned int : %d\n", num_3);
int num_4 = -2147483648;
printf("int : %d\n", num_4);
num_4--;
printf("int : %d\n", num_4);
unsigned long num_5 = 4294967296;
printf("unsigned long : %lu\n", num_5);
num_5++;
printf("unsigned long : %lu\n", num_5);
long num_6 = -9999999999999999999;
printf("long : %li\n", num_6);
num_6--;
printf("long : %li\n", num_6);
// 실수형 타입
float num01 = 3.1415926535897932; // float 타입의 유효 자릿수는 소수점 6자리
printf("변수 pi에 저장된 값은 %.20f입니다.\n", num01);
double num02 = 3.1415926535897932; // double 타입의 유효 자릿수는 소수점 16자리
printf("변수 pi에 저장된 값은 %.20f입니다.\n", num02);
// 문자형 타입
char ch = 'a';
printf("변수 ch에 저장된 값은 %c입니다.\n", ch);
printf("변수 ch에 저장된 값은 %d입니다.\n", ch);
return 0;
}
오늘 배운 찍먹 C언어를 열심히 정리해봤다! 이번 주말에는 C언어 반복문까지 예습하기!!!
내일 나와서 열심히 해봐야지~~~ 나의 주말을 반납하겠도다!!!

'C > 본수업' 카테고리의 다른 글
[2025.03.10] Ch.03_데이터와 C (0) | 2025.03.10 |
---|---|
[2025.03.10] Ch.02_C 첫걸음 (0) | 2025.03.10 |
[2025.03.10] Ch.02_C 첫걸음_연습문제 (0) | 2025.03.10 |
[2025.03.10] C언어 찍먹하기_2 (0) | 2025.03.10 |
[2025.03.07] 컴퓨터 구조 (0) | 2025.03.07 |