Archive

C언어(1) 1-7주차 본문

데이터분석/CS 기초

C언어(1) 1-7주차

neonii 2024. 12. 27. 15:16
728x90

메가존아이티평생교육원 C언어(1) 참고

프로그래밍 언어

  • 컴파일 언어
    장점: 일반적으로 인터프리터를 이용해 실행하는 것보다 빠르게 동작
  • 인터프리터 언어
    장점: 별도의 컴파일 시간이 없어 처음 실행이 빠름, 한줄 번역 후 바로 실행하기 때문에 오류 수정이 쉬움
  • 어셈블리 언어: 명령어를 니모닉 기호로 표시
    • 니모닉 기호 mnemonic symbol: 기호와 명령어가 일대일 대응
    • 어셈블러 assembler: 니모닉 기호를 이진수로 변환하는 프로그램
  • 기계어: 명령어를 이진수로 표시

C언어 특징

  • 하드웨어를 직접 제어하는 저수준의 프로그래밍도 가능함
  • 이식성이 매우 뛰어남
  • 효율적이지만 초보자가 배우기 어려움

프로그램 작성 과정

1. 요구사항 분석

2. 설계 design

  • 알고리즘 개발: 프로그래밍 언어와 무관하게 다음을 활용하여 작성
    • 자연어 natural language
    • 순서도 flow chart
    • 의사 코드 pseudocode

3. 구현 및 테스팅

  • 코딩: 소스코드 작성해 소스파일 생성
  • 컴파일: 소스파일을 목적파일로 전환
  • 링크: 목적파일들을 라이브러리 파일들과 연결해 하나의 실행파일 생성
    ※ 라이브러리 파일은 프로그래머들이 자주 사용하는 기능을 미리 작성해둔 파일로, 컴파일러에 내장되어 있음.
  • 디버깅 debugging: 오류 수정 작업
    • 오류: 컴파일 또는 링크가 불가능한 상태
      • 컴파일 시간 오류 compile-time error: 컴파일하는 중에 발생, 대부분 문법 오류 syntax error
      • 실행 시간 오류 run-time error: 실행 중에 발생 (e.g. 0으로 나누기, 무한 루프)
      • 논리 오류 logic error: 프로그래머가 의도하지 않은 결과가 나오는 경우
    • 경고: 컴파일, 링크, 실행 모두 가능하지만 잠재적인 문제를 일으킬 수 있는 상태

4. 유지보수

  • 디버깅 후에도 버그가 남아있을 수 있고 사용자의 요구가 추가될 수 있기 때문에, 유지보수가 필요함
  • 유지 보수 비용이 전체 비용의 50% 이상을 차지하곤 함

통합 개발 환경 integrated development environmnet IDE

editor + compiler + debugger

  • visual studio
  • eclipse
  • dev-C++

프로그램 기본 구조

// 한줄로 된 주석

/*
여러 줄로 된 주석
*/
  • 컴파일러는 주석을 무시함, 따라서 아무리 많이 작성해도 실행 프로그램의 크기가 커지지 않음.
#include <stdio.h>
int main(void) {
    printf("Hello World!");
    return 0;
}
  • 전처리기 preprocessor: 프로그램이 컴파일되기 전에 수행되는 명령을 처리하는 도구
    (i.e. 소스코드에 포함된 전처리 지시문을 처리하여 컴파일러에 전달할 준비를 함)
    • 전처리 지시문 preprocessor directives: 세미콜론으로 끝나지 않으며 #으로 시작함
      (e.g. #include는 헤더파일을 소스코드의 #include 위치에 포함하라는 의미)
    • 헤더 파일 header file: 프로그램이 사용할 선언을 미리 정의해둔 파일
      (e.g. stdio.h는 standard input output으로, 표준 입출력에 대한 라이브러리 함수들의 정의를 포함하고 있음)
  • 함수 function: 특정한 작업을 수행하기 위해 작성된 독립적인 코드
    • 사용자 정의 함수와 라이브러리 함수로 구분됨
    • 헤더와 몸체로 구성됨
    • 반드시 한 개의 main 함수를 포함해야 하고,
      main 함수는 정수를 반환하는데 0을 반환할 경우 정상 종료를 의미하고 그 외에는 비정상 종료를 의미함
    • 표준 출력 라이브러리 함수 printf("형식 지정자", 출력할 값);
      • 형식 지정자의 개수와 출력할 값의 개수가 일치해야 함
        (i.e. 형식 지정자의 개수가 더 많으면 오류 발생, 출력할 값의 개수가 더 많으면 무시)
      • 문자 폭을 지정할 경우 오른쪽 끝에 맞춰 출력되며 printf("%8d\n", 12345); //    12345
        문자 폭과 함께 0을 지정하면 빈칸 대신 0으로 채워짐 printf("%08d\n", 12345); //00012345
      • 원래 실수는 소수점 이하 6자리로 출력되나,
        정밀도를 별도로 지정할 수 있음 printf( "%.2f\\n", 12.34567); // 12.35
        정수 출력에 정밀도를 지정한다면 printf( "%8.4d\\n", 123); //     0123
    • 표준 입력 라이브러리 함수 scanf("형식 지정자", &값을 저장할 변수의 주소);
      • 여러 변수를 입력하고자 한다면 공백으로 구분
    • 형식 지정자 format specifier
      • %d 10진 정수
      • %f float형 실수
      • %lf double형 실수
      • %c 문자
      • %s 문자열
  • 문장 statement: 프로그램을 이루는 가장 기본적인 단위로, 항상 세미콜론으로 끝나야 함
  • 변수 variable
    • int age = 25;
  • 상수 constant
    • const int MAX_AGE = 100;
    • 이름 없이 값 자체를 직접 사용할 경우 리터럴 상수 literal constant
  • 수식 expression
    • 피연산자
    • 연산자
      • 기능에 따라
      • 피연산자 수에 따라
        • 단항 연산자
        • 이항 연산자
        • 삼항 연산자
    • 피연산자가 모두 정수인 경우, 연산 결과도 정수가 됨
      피연산자 중 하나 이상이 실수인 경우, 연산 결과는 실수가 됨
  • 식별자 identifier: 변수명, 배열명, 함수명, 구조체명 모두 포함하는 개념
    • 변수명 작성 규칙: 영문자, 숫자, 밑줄 사용 가능하나 첫 번째 문자로 숫자 사용 불가능. 대소문자 구별 가능.
  • 제어 문자 escape sequence
    • \0 문자열의 끝
    • \n 줄바꿈
    • \t 다음 탭 위치로 커서 이동
    • \' 작은 따옴표 \" 큰 따옴표
    • \\ 역 슬러시

표준 자료형

  • 정수형 - short, int, long
    실수형 - double, float
    문자형 - char
  • 형 변환 type conversion
    • 자동 형 변환
      • 올림 변환 promotion (e.g. 정수형 상수를 실수형 변수에 저장 가능)
      • 내림 변환 demotion (e.g. 실수형 상수를 정수형 변수에 저장 가능, 단 소수점 이하를 버리면서 데이터 손실)
      • 정수 연산 시 char형이나 short형은 int형으로 변환하여 계산
      • 서로 다른 자료형을 혼합하여 사용하는 경우, 더 큰 자료형으로 통일하여 계산
    • 명시적인 형 변환 type cast (e.g. (int) 1.2345)

Structure Programming

중괄호를 사용하여 문장을 그룹핑하는 것을 복합문 compound statement 또는 블록 block이라고 함

  • 순차 구조 sequence: 위에서 아래로 순서대로 실행하는 구조
  • 선택 구조 selection: 조건에 따라 둘 중 하나의 명령을 선택하여 실행하는 구조
    • IF
      if (condition) {
      	statement;
      } else if {
      	statement;
      } else {
      	statement;
      }

      (condition) ? (true_statement) : (false_statement);

      • if문 안에 또 다른 if문이 있다면 중첩 if문 nested if
      • 서로 독립적인 조건을 여러 개 비교한다면 다중 if문 multiple if
    • SWITCH
      switch (condition) { 
      	case c1: statement1;
          break;
          case c2: statement2;
          break;
          default: statementn;
      }
      • break 및 default는 생략 가능, case는 반드시 하나 이상 있어야 함
      • 조건으로 정수 상수, 문자 상수만 가능함 (i.e. 실수 상수나 문자열 상수는 사용 불가)
      • SWITCH문은 모두 IF문으로 변경할 수 있음
        하지만 모든 IF문을 SWITCH문으로 변경할 수 있는 건 아님
    • GOTO: 조건 없이 특정 위치로 점프하게 만드는 제어문, 사용을 지양할 것
  • 반복 구조 iteration: 조건이 만족하는 동안 일정 처리 과정을 반복 실행하는 구조
    • WHILE
      while (condition) {
      	statement;
      }
    • DO WHILE
      do {
      	statement;
      } while (condition);


    • FOR
      for (initialization; condition; increment) {
      	statement;
      }


      • 초기식, 조건식, 증감식은 생략 가능
      • 반복문 안에 다른 반복문을 포함한다면 중첩 반복문 nested loop
        • 외부에 위치하는 반복문을 외부 반복문 outer loop
        • 내부에 위치하는 반복문을 내부 반복문 inner loop

 

 

 

728x90

'데이터분석 > CS 기초' 카테고리의 다른 글

알고리즘 총 정리  (1) 2025.02.21
자료구조 1-7주차  (0) 2025.02.21
알고리즘 1-7주차  (1) 2025.02.21