본문 바로가기

정보처리기사

프로그래밍 언어 활용(C언어)

1. 프로그래밍을 위한 기본 사항

 

 

(1) 진수(Antilogarithm)

- 특정 개수의 숫자만을 이용하여 수를 나타내는 수 체계

- 10진수 이하일 때는 0~9 사용, 10진수 초과할 경우 10(A), 11(B), 12(C), 13(D), 14(E), 15(F) 알파벳으로 표현

- 아스키 코드(ASCLL; American Standard Code for Information Interchange): 미국 ANSI에서 표준화한 정보교환용 부호체계

- 주요 아스키 코드: 0(NULL, \0), 48(0), 65(A),  97(a)

 

 

2. C언어

 

 

(1) C언어 기본

- 전처리 부분과 본문으로 구성

- 헤더는 xxx.h 파일로 되어 있고, 헤더 안에는 프로그래밍에 필요한 함수 포함

- #전처리기(Preprocessor): 실행 파일을 생성하는 과정에서 소스 파일 내에 존재하는 전처리 지시문을 처리하는 작업

- 종류: #include, #define

 

 

#include <stdio.h>
#define A 5

int main(){
    printf("수제비 %d", A);
    return 0;
}

 

 

- 자료형(Data Type): 프로그래밍 언어에서 정숫값, 실숫값과 같은 여러 종류의 데이터를 식별하는 형태

- 자료형 유형: 문자(char), 정수(int), 부동 소수점(float, double)

- 식별자(Identifier): 변수, 상수, 함수 등 프로그램의 구성요소를 구별하기 위해 사용(대/소문자, 숫자, 밑줄(_) 사용 가능, 예약어 사용 불가)

- 식별자 표기법: 카멜 표기법(inputFunction), 파스칼 표기법(InputFunction), 스네이크 표기법(inpu_function), 헝가리안 표기법(nScore)

 

 

(2) 변수(Variable)

- 저장하고자 하는 어떠한 값이 있을 때, 그 값을 주기억장치에 기억하기 위한 공간

- 변수 선언 및 초기화: 자료형 변수명; / 자료형 변수명 = 초깃값;

- 변수 유효범위(Scope): 전역 변수, 지역 변수, static 변수

- 전역 변수: 어떤 블록에도 속하지 않는 변수로 프로그램이 시작되면 변수가 생성되고, 종료되면 소멸

- 지역 변수: 블록 내 선언하는 변수로 블록이 시작되는 부분에 바로 선언해주어야 하고, 해당 블록 안에서만 사용

- static 변수: static 키워드 사용하여 블록 내외부 상관없이 선언 가능한 변수로 프로그램 시작되면 변수가 생성되고, 종료되면 소멸(초기화 한 번만 수행)

 

 

(3) 표준 입출력 함수

- <stdio.h> 헤더 선언

- 표준 출력 함수(printf): 지정된 포맷 스트링으로 데이터를 출력하는 함수

- 단순 출력: printf("문자열");

- 이스케이프 문자 이용 출력: 개행(\n), 일정 간격 수평이동(\t)

- 포맷 스트링 이용 출력: printf("포맷_스트링이_포함된_문자열", 인자, …);

- 포맷 스트링 종류: 문자(%c), 문자열(%s), 10진수 정수(%d), 16진수 정수(%x/%X), 부동 소수점(%f)

- 표준 입력 함수(scanf): 키보드로 입력받은 문자열에서 지정된 포맷 스트링으로 데이터를 읽는 함수

- 포맷 스트링 이용 입력: scanf("포맷_스트링이_포함된_문자열", 변수의_주솟값, …);

 

 

(4) 연산자(Operator)

- 연산자 우선순위: 증감, 산술, 시프트, 관계, 비트, 논리, 삼항, 대입 연산자 (증산시 관비 논삼대)

- 항의 개수에 따른 연산자 우선수위: 단항→이항→삼항→ 대입 연산자

- 증감 연산자: ++x, x++, --x, x--

- 산술 연산자: +, -, *, /, %

- 시프트 연산자: ≪(2배 증가), ≫(2배 감소)

- 관계 연산자(참이면 1, 거짓이면 0 반환): >, <, >=, <=, ==, !=

- 비트 연산자: &(AND), Ι(OR), ^(XOR), ~(NOT 연산은 부호를 반대로 바꾼 값에 1을 뺀 값)

- 논리 연산자(참이면 1, 거짓이면 0 반환): &&, ΙΙ, !

- 삼항 연산자: 조건식 ? 참 : 거짓;

- 대입 연산자: =, +=, -=, *=, /=, %=

 

 

(5) 조건문

- if 문: 조건이 참인지 거짓인지에 따라 경로를 선택하는 명령문

 

 

if(조건문){
    명령문;
}
else if(조건문){
    명령문;
}
else{
    명령문;
}

 

 

- switch 문: 조건에 따라 여러 개의 선택 경로 중 하나를 취하고자 할 때 사용하는 명령문

- break가 존재하지 않을 경우 진입한 case부터 switch문 끝까지 동작

 

 

switch(식){
case 값1:
    명령문; break;
case 값2:
    명령문; break;
default:
    명령문;
}

 

 

(6) 반복문

- 특별한 조건이 없으면 무한 처리를 반복(무한 루프)

- while 문: 조건이 참인 동안에 해당 분기를 반복해서 실행하는 명령문

- do while 문: 참, 거짓과 관련 없이 무조건 한 번은 실행하고 그다음부터는 조건이 참인 동안에 해당 분기를 반복해서 실행하는 명령문

 

 

while(조건문){
    명령문;
}

do{
    명령문;
}while(조건문);

 

 

- for 문: 초기식, 조건식, 증감식 지정하여 반복하는 명령문

 

 

for(초기식; 조건식; 증감식){
    명령문;
}

 

 

- break 문: 반복문이나 switch 문을 중간에 탈출하기 위해 사용하는 명령어

- continue 문: 반복문에서 다음 반복으로 넘어갈 수 있도록 하는 명령어

 

 

(7) 배열(Array)

- 같은 자료형의 변수들로 이루어진 집합

- 1차원 배열 선언 및 초기화: 자료형 배열명[배열_요소_개수]; / 자료형 배열명[배열_요소_개수] = {초깃값};

- 2차원 배열 선언 및 초기화: 자료형 배열명[행의 개수][열의 개수]; / 자료형 배열명[행의 개수][열의 개수] = {초깃값};

- 배열 요소 개수보다 적은 개수만큼 초기화하면 0으로 저장

 

 

(8) 문자열

- char 형 배열로 표현

- 문자열 여러 개 정의할 때 char 형 2차원 배열 사용

- 문자열 초기화할 때 마지막에 NULL 문자가 삽입되므로 초기화하는 글자수보다 1 이상 큰 값으로 배열 선언

 

 

(9) 구조체(Structure Type)

- 사용자가 기본 자료형을 가지고 새롭게 정의할 수 있는 사용자 정의 자료형

 

 

struct 구조체명{
    자료형 변수명1;
    자료형 변수명2;
};

struct 구조체명 구조체변수; // 구조체 선언

 

 

(10) 함수

- main 함수: 프로그램이 제일 처음 실행되는 부분

- main 함수나 사용자 정의 함수는 return 만나면 즉시 함수 종료

 

 

void main(){
    return; // 생략 가능
}

int main(){
    return 반환값;
}

 

 

- 사용자 정의 함수(User-Defined Function)

- 매개변수나 생성된 변수는 사용자 정의 함수가 종료되면 소멸

- 전달인자(Agument): 실 매개변수(Actual Parameters)로 함수를 호출하는 쪽에서 전달하는 변수의 값 또는 주솟값

- 매개변수(Parameter): 형식 매개변수(Formal Parameters)로 함수를 호출하는 쪽에서 전달받는 변수의 값 또는 주솟값

- 매개변수 전달 방법 종류: Call by Value, Call by Reference

 

 

#include <stdio.h>

int fn(int x){ // 매개변수
    return 3;
}

void main(){
    printf("%d", fn(5)); // 전달인자
}

 

 

- 재귀 함수(Recursive Function): 함수 자신이 자신을 부르는 함수

 

 

자료형 함수명(자료형 변수명, …){
    함수명(변수명, …)
    return 반환값;
}

 

 

- 표준 함수: 문자열 함수, 수학 함수, 유틸리티 함수

- 문자열 함수 사용시 <string.h> 헤더 선언

 

 

① strcat(문자열 연결)

strcat(dest, src); src 문자열을 dest 문자열 뒤에 붙임
strncat(dest, src, maxlen); src 문자열 maxlen만큼 dest 문자열에 붙임
② strcpy(문자열 복사)

strcpy(dest, src); src 문자열을 dest 문자열에 복사
strcpy(dest, src, maxlen); src 문자열 maxlen만큼 dest 문자열에 복사
③ strcmp(문자열 비교)

strcmp(s1, s2); s1이 s2보다 크면 1, 동일 0, 작으면 -1 반환
strcmp(s1, s2, maxlen); maxlen 길이만큼만 s1, s2 대소 비교
④ strlen(문자열 길이) strlen(s); s 길이
⑤ strrev(문자열 거꾸로 뒤집음) strrev(str); str 문자열을 거꾸로 뒤집음
⑥ strchr(문자열 내 일치하는 문자 있는지) strchr(str, c); str 내 c 존재하는지 알려줌

 

 

- 수학 함수 사용시 <math.h> 헤더 선언

 

 

① sqrt(양의 제곱근 계산, 소수 확인시 사용) sqrt(n); √n 값 계산
② ceil(소수점 올림) ceil(n); 소수점 올림
③ floor(소수점 내림) floor(n); 소수점 내림

 

 

- 유틸리티 함수

- rand, atoi 함수 사용시 <stdlib.h> 헤더 선언

- time 함수 사용시 <time.h> 헤더 선언

 

 

① rand(Random) rand(); 임의의 정숫값 1개 생성
② srand(Seed Random) srand(seed); seed 값에 따라 난수 발생기 초기화
③ time(현재 시간) time(NULL); 파라미터 NULL 현재 시간 리턴
④ atoi(ASCll to Integer) atoi(str); 문자열(str)→정수형(int)
⑤ atof(ASCII to Floating Point) atof(str); 문자열(str)→실수형(float, double)
⑥ itoa(Integer to ASCII) itoa(value, str, radix) value→문자열(str) radix 진수로 저장

 

 

(11) 포인터(Pointer)

- 변수의 주솟값을 저장하는 공간

- 포인터 선언: 자료형* 포인터_변수명 = &변수명;

- 주소에 해당하는 값을 가리키는 * 연산과 변수에 주솟값을 나타내는 & 연산은 반대 기능으로 *(&) 두 연산을 같이 쓰면 서로 상쇄

- 배열 i번지 주소: 배열+i == &배열[i];

- 배열 i번지 값: *(배열+i) == 배열[i];

- 2차원 포인터 변수 선언: 자료형 (*포인터 변수)[열의 크기];

- 일반 구조체 변수로 접근(.), 구조체 포인터로 접근(->)

- 함수 포인터: 리턴타입 (*함수_포인터)(함수_파라미터);

 

 

 

'정보처리기사' 카테고리의 다른 글

프로그래밍 언어 활용(파이썬)  (0) 2023.04.17
프로그래밍 언어 활용(자바)  (0) 2023.04.14
인터페이스 구현  (0) 2023.04.07
통합 구현  (0) 2023.04.06
데이터 입출력 구현  (0) 2023.04.05