C언어 기본 구조
- 본문(main 함수) 전에 처리하는 전처리 부분과 본문으로 구성
- 헤더는 xxx.h 파일로 되어있고, 헤더 안에는 프로그래밍에 필요한 함수들이 포함
전처리기(Preprocessor 먼저 처리하는 애) 개념
- 실행 파일을 생성하는 과정에서 소스 파일 내에 존재하는 전처리 지시문을 처리하는 작업
전처리기 종류
- #include : C언어 프로그램에 헤더 파일을 포함할 때 사용
- #define : 매크로 정의, 상숫값 지정을 위한 예약어로 구문의 상수로 치환할 때 사용
C언어 기본코드
#include <stdio.h>
#define A 5
int main(){
printf(“수제비 %d”, A);
return 0;
}
C언어는 main 함수부터 시작
- stdio : standard input output
- define : A를 5로 바꿔라
- print : 출력 / printf : 출력 함수
- %d는 십진수, 수제비 5가 출력됨
- return 값 : 함수가 끝나고 반환하는 값. / void main(){}은 void가 비어있다는 의미라 리턴 X
자료형 개념
- 프로그래밍 언어에서 실숫값, 정숫값과 같은 여러 종류의 데이터를 식별하는 형태
- 메모리 공간을 효율적으로 사용하고 2진수 데이터를 다양한 형태로 사용하기 위해 존재
자료형 유형
- 문자(Character → char) : 문자 하나를 저장하고자 할 때 사용 / 메모리에 저장은 숫자로 저장됨
- 정수(Integer → int) : 정숫값을 저장하고자 할 때 사용
- 부동 소수점(Floating Point → float(4byte), double(8byte))
: 소수점을 포함하는 실숫값을 저장하고자 할 때 사용
변수 유효범위 – 전역 변수(Global Variable)
- 어떤 블록{}에도 속하지 않는 변수
- 프로그램이 시작되면 변수가 생성되고, 프로그램이 종료되면 변수가 소멸
- 초기화하지 않으면 정수형은 0, 실수형은 0.0, 문자형은 NULL로 초기화
- 변수는 아무곳에서 사용가능
C언어 전역 변수
#include<stdio.h>
int a = 5; → 전역변수
void fn(){
a = a + 3; → 13이란 값을 a에다 저장(대입) void라 return값 없음. 다시 밑으로
}
void main(){ → 여기부터 실행, 이미 a라는 공간에 5가 저장된 상태임
a = a + 5; → 10이란 값을 a에다 저장(대입)
fn(); → 사용자 정의함수로 이동
printf(“%d”, a); → 10진수로 출력할거야. a라는 변수값을 : 13이 출력됨
}
변수 유효범위 – 지역변수(Local Variable)
- 블록 내에서 선언하는 변수
- 블록이 시작되는 부분에 바로 선언해주어야 하고, 중괄호가 닫히는 시점에 소멸
- 지역 변수는 해당 블록 안에서만 사용가능
C언어 지역 변수
#include<stdio.h>
void main(){
int a = 3, b = 4;
{
int a = 5;
printf(“%d%d\n”, a, b); → 5, 4 / 안에 있는 a인 5가 출력, b는 바깥의 4가 출력됨
}
printf(“%d%d\n”, a, b); → 3, 4 / 중괄호가 닫히면 소멸됨
}
변수 유효범위 – static 변수(Static Variable)
- 블록 내외부 상관없이 선언할 수 있는 변수, 변수 선언 시 static이라는 키워드를 붙여줌
- 블록 내외부 상관없이 프로그램이 시작되면 변수가 생성되고, 프로그램이 종료되면 변수가 소멸
- 전역 변수로 선언 시 프로그램 전체에서 사용가능, 블록 내 선언 시 블록 내에서만 사용가능
C언어 static 변수
#include<stdio.h>
void fn(){
static int a = 3; → 초기화 → 2번째는 이미 사용하고 있기 때문에 초기화 X
a = a + 1; → 4 → 5
printf(“%d\n”, a); → 4 → 5
}
void main(){ → 먼저 시작
fn();
fn(); → 프로그램 종료됨
}
이스케이프 문자를 이용한 출력
- \n : New Line : 커서를 다음 줄 앞으로 이동(개행)
- \t : Tab : 커서를 일정 간격만큼 수평 이동
- 이스케이프 문자 : 특수한 기능을 수행하는 문자
C언어 포맷 스트링을 이용한 변수 출력
#include <stdio.h>
void main(){
int a = 4, c = 5;
char b = ‘A’; → char이어도 아스키코드인 65로 저장됨
printf(“a는 %d, b는 %c입니다.”, a, b); → %d는 10진수 출력, %c는 문자 출력
printf(“%d”, a + c);
}
- 출력 : a는 4, b는 A입니다. 9
문자열끼리 연결하는 함수 string concatenate 문자를 연결한다.
- strcat(dest, src);
src의 문자열을 dest 문자열 뒤에 붙임 - strncat(dest, src, maxlen);
src의 문자열에서 maxlen의 개수만큼 dest 문자열 뒤에 붙임 / n은 number
C언어 strcat 함수
#include<stdio.h>
#include<string.h>
void main() {
char a[20] = “Hello”;
char b[10] = “Soojebi”;
char c[20] = “Hello”;
strcat(a, b); → a : HelloSoojebi / b : Soojebi
printf(“%s %s\n”, a, b); → HelloSoojebi Soojebi
strncat(c, b, 3); → c : HelloSoo / b : Soojebi
printf(“%s %s”, c, b); → HelloSoo Soojebi
}
strcpy 함수개념 : 문자열을 복사하는 함수
- strcpy(dest, src); src의 문자열을 dest 문자열에 복사
- strncpy(dest, src, maxlen); src의 문자열에서 maxlen의 개수만큼 dest 문자열에 복사
C언어 strcpy 함수
#include<stdio.h>
#include<string.h>
void main() {
char a[20] = “Hello”;
char b[10] = “Soojebi”;
char c[20] = “hello”;
strcpy(a, b); → a : Soojebi / b : Soojebi
printf(“%s %s\n”, a, b); → Soojebi Soojebi
strncpy(c, b, 3); → c : Soolo / b : Soojebi
printf(“%s %s”, c, b); → Soolo Soojebi
}
strcmp 함수개념 : 문자열을 비교하는 함수
- strcmp(s1, s2); s1, s2의 대소를 비교(아스키코드 비교) s1>s2 => 1 / s1==s2 => 0 / s1<s2 => -1
- strcmp(s1, s2, maxlen); maxlen의 길이만큼만 s1, s2의 대소를 비교
C언어 strcmp 함수
#include<stdio.h>
#include<string.h>
void main() {
char a[10] = “HelloA”; → A 65
char b[10] = “HelloB”; → B 66
int c = strcmp(a, b); → a<b, c = -1
printf(“%d\n”, c); → c = -1
c = strncmp(a, b, 3); → a==b, c = 0
printf(“%d”, c); → c = 0
}
strlen 함수개념 : 문자열의 길이를 알려주는 함수
- strlen(s); s의 길이를 알려줌
strrev 함수개념 : string reverse : 문자열을 거꾸로 뒤집는 함수
- strrev(str); str 내에 문자열을 거꾸로 뒤집음
strchr 함수개념 : 문자열 내에 일치하는 문자가 있는지 검사하는 함수
- strchr(str, c); str 내에 c가 존재하는지 알려줌 / 그 포인트부터 null 전까지 쭉 출력. 못 찾으면 null 출력
sqrt 함수개념 : 양의 제곱근을 계산하는 함수 / #include<math.h>
- sqrt(n); 루트n의 값을 계산
rand 함수개념 : 임의의 값을 생성하는 함수
- rand(); 임의의 정숫값 1개를 생성
srand 함수개념 : 난수 생성 알고리즘에 사용하는 seed를 정해주는 함수(프로그램 돌릴 때 같은 난수값 방지)
- : srand를 사용하면 rand 함수를 사용할 때 해당 seed 값에 해당하는 난수 패턴으로 생성
- srand(seed); seed값에 따라 난수 발생기를 초기화
time 함수개념 : 현재 시간을 가져오는 함수 1970년 1월 1일 이후로 몇 초가 경과했는지를 나타냄
- time(NULL); time 함수에 파라미터를 NULL로 하면 현재 시간을 반환
C언어 rand 함수
#include<stdio.h>
#include<stdlib.h> → standard library (rand, srand)
#include<time.h> → time
void main() {
int a;
int i;
srand(time(NULL)); → 현재시간에 맞는 난수표 생성됨
for(i=0; i<6; i++) {
a = rand()%45 + 1; → rand() 0 ~ 32767, 45로 나눈 나머지 0~44 > 1~45
printf(“%d”, a); → 17 42 18 32 7 21 로또 값 생성가능(하지만 중복값 허용되는 ver)
}
}
atoi 함수개념 : 문자열을 정수형으로 변환하는 함수 ASCII to Integer
- atoi(str); str을 정수형으로 변환
C언어 atoi 함수
#include<stdio.h>
#include<stdlib.h>
void main() {
char *a = “1”; → 포인터. a라는 주소와 1과 null을 갖고있는 문자열이 매핑됨
int num = atoi(a); → num = 1
printf(“%d”, num); → 1
}
atof 함수개념 : 문자열을 실수형으로 변환하는 함수 ASCII to Floating Point
- atof(str); str을 실수형으로 변환
C언어 atof 함수
#include<stdio.h>
#include<stdlib.h>
void main() {
char *str_num = “1.0”; → 포인터에 1.0이라는 문자열 저장.
double num = atof(str_num); → num = 1.0
printf(“%.2f”, num); → 1.00 .2f는 소수점 둘째자리까지 출력.
}
itoa 함수개념 : 정수형을 문자열로 변환하는 함수 Integer to ASCII
- itoa(value, str, radix); value를 변환하여 str에 radix 진수로 저장
C언어 itoa 함수
#include<stdio.h>
#include<stdlib.h>
void main() {
char buffer[4] = {NULL}; → 문자열의 경우 모두 null로 채워짐 / 정수는 초깃값 하나만, 나머지 0
int num = 123;
itoa(num, buffer, 10); → 123을 10진수로 변환하기.
printf(“%s”, buffer); → 123이 출력됨
}