본문 바로가기
  • 適者生存
WorkOut/정보처리기사

C언어 | 전처리기, 자료형, 식별자, 변수, 표준 입출력함수

by lcrvvxln 2024. 3. 16.

 
 

1. C언어 기본

- 전처리 부분 + 본문 구성
- 헤더 : xxx.h 파일 > 함수로 구성


(1) 전처리기 (Preprocessor)


- 전처리기 종류

1.  #include - 헤더 파일에 사용
2. #define - 매크로 정의에 사용 &  상숫값 지정 예약어


#include <stdio.h>
#define A 5

int main(){
   printf('honxypot %d', A);
   return 0;
 }
 
 
 # hoxypot A 
  • stdio.h 헤더 파일 읽기 > stdio.h 헤더 파일 내 printf 함수 존재
  • A를 5로 정의
  • main 함수 시작
  • printf로 hoxypot 문자열 + %d A 10진수 출력
  • int main() 이므로 return 으로 0 반환

 

2. 자료형 (Data Type)

- 실수, 정수 등 데이터 식별 형태

- 자료형 유형

1. 문자 (Character) > char
- 문자 하나 저장, 메모리에는 숫자로 저장
2. 정수 (Integer)> int
- 정숫값 저장
3. 부동 소수점 (Floating Point)> float, double
- 소수점 포함 실숫값 저장


3. 식별자 (Identifier)

- 변수, 상수, 함수 등
- 프로그램 구성요소 식별하기 위해 사용

(1) 식별자 명명 규칙

- 사용 가능 문자 : 영문 대문자/소문자, 숫자, 밑줄 '_'
- 변수 사용 규칙 : 첫 자리는 숫자 x, 변수 중간에 공백 x
- 변수 의미 부여 : 예약어 변수로 사용 불가
ex. int, short, long, for, while, do, if....

* 예약어
: 프로그래밍 언어에서 이미 문법 용도로 사용되고 있는 단어
ex. 자료형, 조건문, 반복문, 함수 반환 값 등

 

(2) 식별자 표기법


1. 카멜 표기법
첫 단어 시작은 소문자, 각 단어 첫 글자는 대문자로 지정
ex. inputFunction

2. 파스칼 표기법
각 단어 첫 글자는 대문자로 지정
ex. InputFunction

3. 스네이크 표기법
각 단어 사이에 언더바 삽입
ex. input_function

4. 헝가리안 표기법
식별자 두어에 자료형 삽입
int는 n, char은 c, 문자열은 sz
ex. nScore




4. 변수(Variable)

- 값을 주기억장치에 기억하기 위한 공간
- 자료형과 변수명으로 생성

int a = 10;

a : 데이터가 들어갈 공간, 변수명
10 : 데이터 값

(1) 변수 선언

- 초기화 O : 자료형 변수명 = 초깃값;
- 초기화 X : 자료형 변수명;

* 초기화
: 변수 선언과 동시에 값 지정



#include <stdio.h>

int main(){
   char a;
   int b=4;
   float c,d;
   double e=1.1, f=2.4;
   return 0;
}
  • stdio.h 헤더 파일 사용
  • main 함수 시작
  • 문자형 변수 a 선언
  • 정수형 변수 b 선언 후 4로 초기화, 실수형 변수 c,d 선언
  • double(실수형) 변수 e,f 선언 및 각각 1.1, 2.4로 초기화

 

(2) 변수 유효범위


1. 전역 변수 (Global Variable)
- 어떤 블록에도 속하지 않음
- 프로그램 시작 시 생성, 종료 시 소멸
- 초기화 X 시, 0 & NULL 로 초기화
- 어디든 사용


*블록
: 중괄호 { } 로 묶은 부분



#include <stdio.h>

int a=5;
void fn(){
   a=a+3;
}

int main(){
   a=a+5;
   fn();
   printf('%d',a);
   return 0;
}


# 13
  • a 전역 변수에 5 대입
  • main 부터 시작
  • a=5+5=10
  • fn 사용자 정의 함수 호출
  • a=10+3=13
  • a인 13 출력


2. 지역 변수 (Local Variable)
- 블록 내 선언 변수
- 블록 시작 시 바로 선언, 중괄호 닫히면 소멸
- 블록 안에서만 사용


#include <stdio.h>

int main(){
   int a=3, b=4;
   {
     int a=5;
     printf('%d %d\n',a,b);
   }
   printf('%d %d\n', a,b);
   return 0;
}
 

# 5, 4
# 3, 4
  • main부터 시작
  • main 함수 안 a=3, b=4 지역 변수 생성
  • main 함수 안의 블록에서 a=5 지역 변수 생성 <> 위와 별개의 지역 변수
  • a,b 호출했으나 a는 가까운 2번 지역변수 호출로 5, b는 main 함수 안 지역변수인 4 호출
  • 블록 종료로 2번째 a 지역변수는 소멸
  • a 호출에 첫 번째 지역변수인 3, b는 main 지역 변수 4 호출
  • main 종료로 a,b 둘다 소멸


3. static 변수 (Static Variable)
- 블록 내외부 상관 없이 선언
- 변수 선언 시 앞에 static 붙이기
- 프로그램 시작, 종료와 동시에 생성/소멸
- 전역 변수로 선언 시, 프로그램 전체 / 지역 변수로 선언 시, 블록 내에서만 사용


#include <stdio.h>

void fn(){
   static int a=3;
   a=a+1;
   printf('%d\n',a);
}

int main(){
   fn();
   fn();
   return 0;
}

# 4
# 5
  • static 변수는 프로그램 시작과 동시 생성, a=3
  • main 부터 시작
  • fn 사용자 정의함수 호출
  • a=3+1=4, 4 출력  (*static 변수 생성과 함께 초기화 했으므로 더 이상 초기화 X)
  • fn 사용자 정의함수 호출
  • a=4+1=5, 5 출력 (*초기화 X)
  • 프로그램 종료와 함께 a 변수 소멸

 

static 변수는 생성과 함께 초기화 되고 더 이상 초기화되지 않는다
*초기화는 한 번만 수행*

 

5. 표준 입출력 함수

 

(1) printf 함수

- 지정 포맷 스트링으로 데이터 출력
- stdio.h 헤더 (Standard input output) 선언


1. 단순 출력
printf(문자열);
따옴표 안 문자열 출력

2. 이스케이프 문자 이용 출력
- 문자열 내 특수 기능 수행

  • 이스케이프 문자 종류

1. ₩n : 개행문자, 커서 다음 줄로 이동
2. ₩t : tab, 일정 간격 커서 이동 (리눅스 4칸, 윈도우 8칸)


#include <stdio.h>

int main(){
   printf('honxypot\tC\lcrvvxln');
   return 0;
}


#honxypot     C
#lcrvvxln



3. 포맷 스트링 이용 변수 출력
- 인자에 변수명, 값, 수식 등

* 포맷 스트링
scanf로 사용자 입력 받아들이기
printf로 결과 출력 에 사용

  • 포맷 스트링 종류

1. 문자 (Character) - %c
: 문자 1글자

2. 문자열 (String) - %s
: 문자 여러 개인 문자열

3. 정수 (Integer)
%u - unsigned decimal : 부호 없는 10진수 정수
%d - decimal : 10진수 정수
%o - octal : 8진수 정수
%x - hexa decimal : 16진수 정수, 영어 표기 소문자
%X - hexa decimal : 16진수 정수, 영어 표기 대문자

4. 부동 소수점 (Floating Point)
%e - exponent : e로 지수 표기
%E - exponent : E로 지수 표기
%f - floating point : 부동 소수점 표기
%lf - Long Floating Point : 부동 소수점 표기



#include <stdio.h>

int main(){
   int a=4, c=5;
   char b='A';
   printf('a는 %d, b는 %c입니다.' a,b);
   printf('%d', a+c);
   return 0;
}


# a는 4,b는 A입니다
# 9
  • main 부터 시작
  • a=4, c=5 정수형 변수 선언
  • b=A 문자형 변수 선언
  • 포맷 스트링 자리 %d는 10진수 정수 a , %c는 문자형 b 대입
  • 포맷 스트링 자리 %d에 a+c=9 인 10진수 정수 값 대입



4. 포맷 스트링 이용 변수 상세 출력
- 정렬
- 0 채우기
- 출력 공간 확보
- 소수점 자릿수 표기 지정

%[-][0][전체자리수].[소수점자리수] 스트링

1. [-] 정렬
: [-] 붙으면 왼쪽 정렬, 없고 [전체자리수] 있을 경우, 오른쪽 정렬

2. [0] 0 채우기
: [0] 붙으면 전체 자릿수에서 '앞' 빈공간 만큼 0 채우기

3. [전체자리수]
: [전체자리수] 만큼 공간 확보, 소수점도 한 가지로 포함

4. .[소수점자리수]
: [소수점자리수] 만큼 소수점 이하 자리수 출력, 실수형만 적용



#include <stdio.h>

int main(){
   float a=1.234;
   int b=10;
   printf('%.2f\n',a);
   printf('%5.1f\n',a);
   printf('%05.1f\n',a);
   printf('%-05.1f\n',a);
   printf('%5d\n',b);
   printf('%05d\n',b);
   printf('%-5d\n',b);
   printf('%-05d\n',b);
   return 0;
}


#1.23
#  1.2
#001.2
#1.2   
#   10   
#00010
#10   
#10   
  • 실수형 변수 a=1.234 선언
  • 정수형 변수 b=10 선언
  • 소수점 이하 2자리수이므로 1.234 반올림해서 1.23 출력
  • 전체 5자리에 소수점 이하 1자리수이므로 1.23 반올림한 1.2를 오른쪽 정렬해서 2칸 띄우고 1.2 출력
  • 전체 5자리에 소수점 이하 1자리수이므로 1.23 반올림한 1.2를 오른쪽 정렬하되 앞에 빈칸 2자리에 0 채운 001.2 출력
  • 전체 5자리에 소수점 이하 1자리수이므로 1.23 반올림한 1.2를 왼쪽 정렬해서 1.2 뒤에 2칸 띄우고 출력, 왼쪽 정렬이므로 0은 무시
  • 전체 5자리에 오른쪽 정렬이므로 3칸 띄우고 10 출력
  • 전체 5자리에 오른쪽 정렬하되 앞에 앞에 3자리에 0 채운 00010 출력
  • 전체 5자리에 왼쪽 정렬하여 10 뒤에 3칸 띄우고 출력
  • 전체 5자리에 왼쪽 정렬하여 10 뒤에 3칸 띄우고 출력, 왼쪽 정렬이므로 0은 무시

 

(2) scanf 함수

- 키보드 입력 문자열 포맷 스트링으로 데이터 읽는 함수

scanf(포맷 스트링 문자열, 변수 주솟값);


#include <stdio.h>

int main(){
   int a;
   char b;
   scanf('%d %c',&a, %b);
   printf('a는 %d, b는 %c입니다.', a,b);
   return 0;
}


# 입력 1 B
# a는 1, b는 B입니다.

 

  • 정수형 변수 a 선언
  • 문자형 변수 b 선언
  • scanf로 10진수 정수, 문자형 입력 받아 &a, &b에 저장하기
  • 입력된 1과 B 출력

 

(3) gets 함수

- 키보드로 입력받은 문자열 문자형 배열에 저장

gets(문자형 배열 변수);


#include <stdio.h>

int main(){
   char a[10];
   gets(a);
   printf('%s', a);
   return 0;
}

# 입력 1 B
# 1 B