세리프 따라잡기
WEEK05 - TIL C언어 기초 문법 본문
1. include와 헤더파일
- 헤더파일이란? c언어의 문법을 가지고 있는 프로그램. 헤더파일이 코드에 추가되어 있지 않다면, 컴퓨터는 아무것도 하지 못한다. (컴퓨터가 글자들을 알아볼 수가 없어서) == 헤더파일이 없다면 컴퓨터가 컴파일을 못한다.
#include <stdio.h> //stdio.h is inputed
#include <stdilb.h> //stdilb.h is inputed
2. main 함수
- c언어는 프로그램이 시작되면 무조건 main부터 찾기 때문에 main 함수 안에 코드를 짜야 명령어가 실행된다.
main 앞에 쓰는 int의 의미는 정수 '-21억' ~ '+21억'을 의미하는데, 이는 main의 반환값을 의미한다.
따라서 반환값에 따라 반환을 해야 하는 값이 다른데, 반환값을 정하지 않으면 무조건 0으로 반환된다. 이것을 바꾸려면 'return 반환값'을 쓰면 된다
#include <stdio.h>
#include <stdlib.h>
//문자열 변환, 의사 난수 생성, 동적 메모리 관리 등의 함수들을 포함
//동적 메모리 할당 함수인 malloc, calloc 함수도 이 헤더에 포함되어 있으며,
// 시스템 명령어나 프로세스 제어 함수도 포함되어 있다.
int main(){
// code write!
return 0;
}
3. 세미콜론과 주석 달기
- 2번에서 return 0;에서 ;(세미콜론)이 있는 것을 볼 수 있다. 함수 바깥에서는 예외가 있으나, 함수 안에서는 무조건 문장 하나가 끝날 때 세미콜론을 붙여주어야 한다. (그렇지 않으면 컴파일러가 컴파일을 못함)
// 주석 (이건 뒤에 함수 이어서 못 씀) printf("this is function")
/* 이것도 주석 (이거 뒤엔 함수 이어서 쓸 수 있음)*/ printf("this is function")
4. 변수
- 변수란 말 그대로 '변하는 수'를 이야기 한다.
int a; //a는 정수형 변수며, 값은 미정
float f = 0.123456; //f는 실수형 변수고, 값은 0.123456
char c = 'a'; //c는 문자형 변수고, 값은 a
char c = 65; //c는 문자형 변수고, 값은 65인데 이는 ascii코드를 가리키며 따라서 값이 A이다.
char s[6] = 'korea'; //s는 문자열이고, 값은 {k,o,r,e,a,null}이다.
// null은 빈 문자를 이야기 한다. [자세한 내용은 배열에서~]
ASCII코드 표 (아스키코드)
그리고 char s[5]의 s는 변수가 아니라 배열이다.
5. 변수의 형태들
- 컴퓨터는 '수'를 다양하게 쪼개서 나타낸다.
int | 정수 -21억 ~ +21억 |
double | 실수와 비슷한데, 한계가 소수점 14자리까지 (하지만 저장공간이 큼) |
unsigned int | 자연수 1 ~ 42억 |
long | double과 비슷하게 더 큰 수를 쓸 수 있으나, 저장공간이 큼 long 다음 int나 float같은 형태를 쓰면 21억보다 더 큰 값을 저장 가능 |
float | 실수 -21억 ~ +21억, 소수점 6자리까지만 가능 |
FILE | 연결리스트를 만드는데 사용하는 형태 |
char | 문자 한 개 ASCII, 문자의 번호를 이야기 |
||
string | 문자열 문자 여러 개 |
6. 변수의 값을 쉽게 변환시키는 방법
- 변수는 값을 변환시킬 수 있다 >> 변수의 값을 쉽게 변환시키는 방법들은 반복문이나 배열부분에서 잘 나온다.
int a = 1;
// a에 1을 더한다.
a = a+1;
a++;
// a에 2를 더한다
a = a+2;
a+=2;
// a에 1을 뺀다
a = a-1;
a--;
// a에 3을 뺀다
a = a-3;
a-=3;
// a에 2를 곱한다
a = a*2
a *= 2;
// a에 2를 나눈다
a = a/2;
a /= 2;
7. 알고 있으면 유용한 함수들
- 수학 연산 함수
#include <math.h>
이 함수들은 모두 double 형식을 사용한다. 변수는 항상 double로 cast해주어야 한다. (cast = 자료형을 변환해준다)
abs(x)는 x의 절댓값을 의미한다. 이것만 예외로 int를 사용한다.
만약 다른 형태가 들어가면 값이 이상하게 나올 수 있어서 double 형태의 fabs(x)를 사용하는 것이 더 편리하다.
pow(x,y)는 x의 y제곱이다. == x를 y번 곱한다는 것
sqrt(x)는 루트x이다. 두 번 곱해서 x가 되는 수를 말한다.
8. printf
- 화면에 수나 문자를 출력하는 함수. 소스는 다음과 같다.
printf("hello world!");
printf("123456"); //이건 문자로 취급
괄호 안 큰따옴표에 문자나 숫자를 쓸 수 있다.
9. 변환문자와 기호문자
- 이 둘은 printf문과 다른 함수에도 많이 사용되는 것이다. 변환문자는 %를 사용한다.
%d | int 정수 |
%f | float 실수, 0.1이여도 0.100000처럼 6자리로 강제로 늘림 |
%g | float 실수, %f와 달리 0.1로 출력 |
%c | char 문자 1개만 |
%s | string 문자열 |
printf("%d", 134); // 134
printf("%f", 0.1); // 0.100000
printf("%g", 0.1); // 0.1
printf("%c", 'a'); // a (+char는 ''이걸로, 문자열은 ""이걸로)
printf("%s", "hello"); // hello, 이건 딱히 필요없. 그냥 printf("hello");하면 된다.
기호문자는 printf문에서 줄바꿈이나 tab키 등을 대신해주는 문자 \를 사용한다.
\n | 줄바꿈 |
\t | tab |
\\ | \ |
\" | " |
\' | ' |
%% | % |
printf("hello\n"); // hello(enter key)
printf("hello \t hello"); // hello hello
printf("\"hello\""); // "hello"
printf("'hello'"); // 'hello'
printf("5%%"); // 5%
10. scanf
- 입력 함수를 말한다. 변수에 입력값을 넣는 방법을 알아보자
int a, b; // a, b라는 변수가 생겼고, a, b의 값은 미정
scanf("%d %d", &a, &b); // scanf 함수를 사용해 a, b의 값을 사용자의 입력값으로 정합니다.
printf("%d %d", a, b); // printf 함수로 a, b를 출력한다.
/* result
input: 1 3
output: 1 3
*/
scanf 함수는 따옴표 안에 변환문자를 넣고, 뒤에 입력할 변수를 쓴다. 이때 변수 앞쪽에 &을 붙인다.
→ 정리하면 scanf("변환문자", &변수); 로 쓸 수 있다.
scanf로 여러 개의 변수를 입력받을 수 있는데, 이럴 땐 변환문자 여러 개를 사용하면 된다.
+변환문자 사이에 있는 기호가 문제가 되는 것이 있다.
space: 모든 문자가 사이에 다 들어와도 된다.
%d %d면 입력할 때 : , . - = 같은 기호들을 쓸 수 있다.
나머지는 꼭 그 기호를 쓰셔야 합니다. %d-%d면 입력할 때 무조건 -를 붙여주어야 한다.
scanf 함수에서는 변환문자, 사이에 들어가는 기호만 있어야 한다. \n같은 기호문자는 변환문자로 인식해 에러가 뜰 수 있다 (제외: %%, \\)
11. cast 연산자
- 변수의 형태를 임시적으로 변환하는 함수
앞서 8번에서 언급했듯이 "123456"은 컴퓨터에서 문자로 취급한다. 이때 printf("%c", 9)를 하면 '9'가 나오는 것이 아니라, 다른 이상한 문자가 나온다. 이는 9에 따옴표가 안 붙어서 ASCII코드로 인식해서. → cast 연산자를 쓰면 해결된다.
int a = 9;
printf("%c", (char)a); //9 얘 근데 좀 이상함 ㅎㅎ....
cast 연산자는 변수 앞에 괄호를 놓고, 그 괄호 안에 내가 원하는 형태를 쓰면 된다. [근데 이거 난 왜 안되지?]
12. 조건식
- 조건문은 조건을 줘야 하기에, 무슨 조건인지 알려주는 조건식이 필요하다. 컴퓨터는 조건이 참일 때 1, 거짓일 때 0을 반환한다. 다른 수가 나와도 0만 아니면 참으로 인식한다.
두 변수나 상수를 비교하는 조건식을 알아보자, 비교 조건식은 다음과 같은 종류가 있다.
int a = 1, b = 10;
printf("%d\n", a == b); //0
printf("%d\n", a != b); //1
printf("%d\n", a > b); //0
printf("%d\n", a < b); //1
printf("%d\n", a >= b); //0
printf("%d\n", a <= b); //1
// 보다가 종료 참고 사이트
따라 치러 갑니다~
'SW사관학교 정글' 카테고리의 다른 글
WEEK05 - TIL Red-Black Tree (레드 블랙 트리) - 1 (0) | 2022.05.01 |
---|---|
WEEK05 - TIL C언어 포인터에 대해 (0) | 2022.04.29 |
WEEK05-TIL AWS-EC2 linux에 연동 / vscode C언어 연동 오류 / vscode c언어 디버그 (0) | 2022.04.29 |
WEEK04 - TIL 리눅스 편집기 사용 간단 정리 (0) | 2022.04.26 |
WEEK04 - TIL 그리디 알고리즘 (0) | 2022.04.25 |