본문 바로가기

개인 스터디/정리

[정보처리기사 실기] 10. 프로그래밍을 위한 기본 사항~11. C언어

 

 

1. 진수

  • 진수 : 특정 개수의 숫자만을 이용하여 수를 나타내는 수 체계
  • 진수 변환
    • 10진수 -> n진수 : 10진수 값을 몫이 n보다 작을 때까지 n으로 나누고 나머지 값들을 읽기
    • n진수 -> 10진수 : 마지막 자리부터 n^0, n^1, n^2... 를 곱한 후 합산
  • 아스키 코드 : 미국 ANSI에서 표준화한 정보 교환용 부호체계
    • 예시 : NULL(0), 48(0), 65('A'), 97('a')

 


 

1. C언어 기본

  • C언어 기본 구조 : 전처리 부분과 본문으로 구성
  • 전처리기 : 실행 파일을 생성하는 과정에서 소스 파일 내에 존재하는 전처리 지시문을 처리하는 작업
  • 전처리기 종류
    • #include : c언어 프로그램에 헤더 파일을 포함할 때 사용
    • #define : 매크로를 정의할 때 사용. 상숫값을 지정
#include <stdio.h>
#define A 5

 

2. 자료형

  • 자료형 : 프로그래밍 언어에서 실숫값, 정숫값과 같은 데이터를 식별하는 형태
  • 자료형 유형
    • 문자(char) : 문자 하나를 저장
    • 정수(int) : 정숫값을 저장
    • 부동 소수점(float, double) : 실숫값을 저장
  • 자료형 변환 : 우선순위가 높은 자료형이 낮은 자료형으로 변환되면 자료 손실이 발생할 수 있다.
    • 우선순위 : char<int<float<double
    • 자동 형 변환(암시적 형 변환) : 데이터 형식을 자동으로 변환
    • 강제 형 변환(명시적 형 변환) : 직접 형식 변환
int c = (int)5.5; //자료 손실 발생

 

 

3. 식별자

  • 식별자 : 변수, 상수, 함수 등 서로 구분하기 위해 사용되는 이름
  • 식별자 명명 규칙
    • 사용 가능 문자 : 영문, 대문자/소문자, 숫자, 밑줄('_')
    • 변수 사용 규칙 : 첫 자리 숫자, 중간 공백 x
    • 변수 의미 부여 : 예약어 사용 x
  • 식별자 표기법
    • Camel Case : 첫 단어는 소문자로 표기하고, 이어진 각 단어의 첫글자는 대문자로 지정(inputFuntion)
    • Pascal Case : 각 단어의 첫 글자는 대문자로 지정(InputFunction)
    • Snake Case : 단어 사이에 언더바를 넣어 표시(input_function)
    • Hungarian Case : 두어에 자료형을 붙이는 표기법(nScore)

 

4. 변수

  • 변수 : 저장하고자 하는 값ㅅ을 주기억장치에 기억하기 위한 공간
  • 변수 선언 : 초기화 하지 않는 경우 쓰레기값 저장
  • 변수 유효범위
    • 전역 변수 : 어떤 블록에도 속하지 않으며, 아무 곳에서 사용 가능
    • 지역 변수 : 블록 내에서 선언하며, 해당 블록 내에서만 사용 가능
    • static 변수 : 블록 내외부 상관없이 선언할 수 있으며, 프로그램 시작시 생성되고, 종료시 소멸

 

5. 표준 입출력 함수

  • 표준 출력 함수(printf)
    • 단순 출력 : 큰따옴표로 묶여있는 문자열 출력
    • 이스케이프 문자를 이용한 출력 : \n, \t를 이용해 특수 기능 수행
    • 포맷 스트링을 이용한 출력 : %c, %s, %d, %f 등을 이용해 변수,값, 수식 등을 출력
    • 포맷 스트링을 이용한 상세 출력
      • - : 왼쪽 정렬
      • 0 : 전체 자릿수에서 앞에 빈공간 만큼 0으로 채움
      • 전체자리수 : [전체자리수]만큼 공간 확보
      • .소수점자리수 : [소수점자리수]만큼 소수점 출력
float a =1.234;
printf("%-05.1f\n", a);  // 1.2 출력

 

  • 표준 출력 함수(scanf) : printf와 동일한 포맷 스트링으로 키보드로 데이터 입력
  • gets 함수 : 키보드로 입력받은 문자열을 문자형 배열에 저장
char a[10];
gets(a);

 

 

6. 연산자

  • 연산자 : 프로그램 실행을 위해 연산을 표현하는 기호
  • 연산자 종류
    • 증감 연산자 : ++,--
    • 산술 연산자 : +, -, *, /, %
    • 시프트 연산자 : <<, >>
    • 관계 연산자 : >, <, >=, <=, ==, !=
    • 비트 연산자 : &, |, ^, ~
    • 논리 연산자 : &&, ||, !
    • 삼항 연산자 : (조건식)? (참):(거짓)
    • 대입 연산자 : =, +=, -=, *=, /=, %=
  • 연산자 우선 순위 : 괄호 -> 단항 연산자(증감 -> 논리 -> 비트) -> 산술 -> 시프트 -> 관계 -> 삼항 -> 대입

 

7. 조건문

  • if문 : if(조건문) ~ else if(조건문) ~ else
  • switch문 : switch(식) { case 값: break; ~ default: ~}

8. 반복문

  • 반복문 종류 : while문, do~while문, for문
  • 루프 제어 명령어 : break문, continue문

 

9. 배열

  • 배열 : 같은 자료형의 변수들로 이루어진 집합
  • 배열 종류 : 1차원, 2차원 배열
int a[3] = {1,2}; // 나머지 값은 0으로 초기화
int b[2][3]; // 초기값을 선언하지 않으면 쓰레기값으로 초기화

 

 

10. 문자열

  • 배열과 문자열 : C언어에서 문자열은 char 형 배열로 표현. 여러 문자열을 정의할 때는 2차원 배욜 사용

 

11. 구조체

  • 구조체 : 사용자가 기본 자료형을 가지고 새롭게 정의할 수 있는 사용자 정의 자료형
  • 구조체 선언 : 
struct Stuent{
	char gender;
	int age;
}
struct student s = {'F', 20}; // 구조체 멤버 선언 순서대로 초기화
  • typeof 연산 : 기존 자료형에 새롭게 별칭을 부여

 

12. 공용체

  • 공용체(Union) : 모든 멤버 벼누가 하나의 메모리 공간을 공유하는 사용자 정의 자료형
union Student{
	int id;
	int age;
};
uniton Student s = {.age=20};

 

 

13. 함수

  • main 함수 : 프로그램이 실행하는 모든 프로그램의 시작점
void main(){
	return;
}

 

  • 사용자 정의 함수 : 사용자가 직접 새로운 함수를 정의하여 사용. 매개변수나 생성된 변수는 사용자 정의 함수가 종료되면 삭제
  • 매개변수 전달 방법 : 함수가 필요로 하는 값을 매개변수로 만들어 함수에게 전달
    • Call by Value : 변수의 값을 넘겨주고, 이 값은 새로운 공간에 할당. 실 매개변수에 영향 x
    • Call by Reference : 변수가 사용 중인 메모리 공가늬 주소를 넘겨주는 방식
  • 재귀 함수 : 함수 자신이 자신을 부르는 함수
  • 문자열 함수
    • strcat : 문자열끼리 연결
    • strcpy : 문자열 복사
    • strcmp : 문자열 비교 함수(ASCII 코드 비교)
    • strlen : 문자열 길이
    • strrev : 문자열을 거꾸로 뒤집는 함수
    • strchr : 문자열 내에 일치하는 문자가 있는지 검사
  • 수학 함수
    • sqrt : 제곱근 계산
    • ceil : 소수점 올림
    • floor : 소수점 내림 함수
  • 유틸리티 함수
    • rand : 임의의 값 생성
    • srand : 난수 생성 알고리즘에 seed를 정해주는 함수
    • time : 현재 시간 반환
    • atoi : 문자열을 정수형으로 변환하
    • atof : 문자열을 실수형으로 변환
    • itoa : 정수형을 문자열로 변환 
  • 문자 관리 함수
    • isalpha : 영문자인지 판단
    • isupper : 대문자인지 판단
    • islower : 소문자인지 판단
    • isdigit : 숫자인지 판단
    • isxdigit : 16진수에 포함되는 숫자인지 판단
    • isalnum : 영문자 또는 숫자인지 판단
    • tolower : 소문자로 변환하는 함수
    • toupper : 대문자로 변환하는 함수 

 

14. 포인터

  • 포인터 : 변수의 주솟값을 저장하는 공간
  • 포인터 선언
int a = 10;
int* b = &a; // *는 주소에 해당하는 변수 값, &는 주소값
printf("%d %d %d", a *b *(&a)); // 10 10 10 (*과 &은 상쇄)

 

  • 배열과 포인터 : 배열에서 배열명만 단독으로 사용할 경우 1차원 포인터와 동일
  • 구조체와 포인터 : 일반 구조체 변수로 접군할 때는 .으로, 구조체 포인터로 접근할 때는 ->로 접근
  • 함수 포인터 : 함수의 주소를 저장하고, 해당 주소의 함수를 호출

 

15. 상수

  • 상수 : 프로그램 내에서 변경되지 않는 값
  • 상수 선언
const int a= 10; // 자료형 앞이나 뒤에 키워드 붙이기
  • 포인터와 const
const int *a = arr; // 포인터가 가라키는 대상의 값을 변경하지 못하도록 제한
int const *b = arr; // "
int* const c = arr; // 포인터가 다른 주소를 가리키지 못하도록 제한

 

 

16. 메모리 할당/해제

  • 메모리 동적 할당 : 프로그램이 실행 중에 메모리 공간을 할당
  • 메모리 해제 : 실행 중에 할당된 메모리 공간을 해제
char tmp[10];
char *a;
scanf("%s", tmp);
a = (char*)malloc(sizeof(char)*strlen(tmp)+1)); // 강제 형 변환을 통해 메모리 할당
free(a); // 메모리 해제

 

 

 


# 회고

 

C언어 끝!

포인터가 굉장히 헷갈린다. 나머지는 뭐...