2024-소프트웨어과 1학년/C언어

[아기대학생김따루]C언어 기초-프로그래밍 언어(1)_1학기 중간고사 범위[개념어위주]

simless786-it 2024. 9. 4. 15:34

[수업 교재:C EXPRESS 4차 개정판]_중간고사 공부하면서 직접 정리함.

 

(1학기 중간고사 범위)

 

컴퓨터는 범용적인 기계이다->컴퓨터를 범용적으로 만드는 것은 프로그램 사용

 

 

계산기vs컴퓨터: 계산기는 정해진 기능만을 수행함. 기능 변경 불가. 컴퓨터는 수행하는 기능을 쉽게 바꿀 수 있다.

 

 

컴퓨터는 단순히 compute(계산)만 하는 기계가 아니다. 명령어들의 리스트에 따라 데이터를 처리하는 기계. 프로그램은 특정한 작업을 위한 작업 지시서.

 

 

프로그램: 컴퓨터에게 해야 할 작업의 내용을 알려주는 문서

 

 

프로그래밍이 가능한 최초의 기계: 찰스 배비지의 해석 기관.

배비지의 해석기관

-중앙 처리 장치(계산을 담당, mill)

-메모리(중간 단계에서 임시로 숫자가 저장, store)

-출력 장치(출력 숫자를 나타내는 다이얼)

-입력 장치(천공 카드)

 

 

 

초기 컴퓨터: 초기 컴퓨터인 애니악의 프로그램은 스위치에 의하여 기억됨. 프로그램이 바뀌면 스위치를 처음부터 다시 연결하여야함.

 

 

폰 노이만 구조: 프로그램은 메인 메모리에 저장된다, 쉽게 변경 가능.. 메인 메모리에 저장된 프로그램에서 명령어들을 순차적으로 가져와서 실행함.

 

 

최초의 프로그래머는 에이다 러브레이스이다. 에이다는 대문호 바이런의 친딸. 배비지의 해석 기관에 매료되어 해석 기관을 위한 프로그램을 개발하였다. 서브루틴, 루프, 점프 등의 핵심적인 컴퓨터 프로그래밍 기본 원리를 고안하였다.

 

 

컴퓨터는 상식이나 지능이 없기 때문에 아주 자세하고 구체적으로 일을 지시하여야 한다.

컴퓨터의 장점: 작업을 굉장히 빠르게 하고 정확하게 하며 몇 번을 반복시켜도 불평없음.

 

 

컴퓨터가 알아듣는 언어는 한가지. 기계어임. 기계어는 0과 1로 구성된 2진수이다.

프로그래밍 언어는 자연어와 기계어 중간쯤에 위치한다. 컴파일러가 프로그래밍 언어를 기계어로 통역함.

컴파일러: 인간과 컴퓨터 사이의 통역이라 할 수 있다.

기계어: CPU의 명령을 이진수로 표시한 것이다. 특정 CPU에 의존적, 하드웨어에 종속.

어셈블리어: 기계어의 이진수를 기호로 표시한다.ㅏ 특정 CPU에 의존적. 어셈블러는 기호를 이진수로 변환하는 프로그램. 기호와 CPU의 명령어가 일대일 대응.

고급 언어: 고수준의 명령을 사용함. CPU에 독립적. C, C++, JAVA, FORTRAN, PASCAL 등

인터프리터: 한 줄씩 실행

 

 

고급 언어 종류

-포트란: 수치 계산과 과학 기술 계산에 적합

-코볼: 비즈니스 사무 처리어. 구어체 문장 형태로 기술할 수 있게 설계.

-파이썬: 인터프리트어. 인공지능, 데이터 과학 분야에서 많이 사용

-C언어: 절차 지향 언어.

-C++: C언어에 클래스 개념과 객체지향적 특징 추가한 언어

-JAVA: 객체 지향어

 

 

C언어의 특징: 간결하고 효율적, 저수준과 고수준의 프로그래밍 모두 가능, 이식성이 뛰어남.

 

 

임베디드 시스템: 특수 목적의 시스템. 한가지의 기능이 목적

 

 

알고리즘: 문제를 풀기 위하여 컴퓨터가 수행하여야 할 단계적인 절차를 기술한 것.

 

 

알고리즘의 기술: 자연어, 순서도(플로우차트), 의사코드

순서도(플로우차트): 처리는 사각형, 판단은 마름모, 입출력은 평행사변형.

의사 코드: 자연어보다는 체계적이고 프로그래밍 언어보다는 덜 엄격한 언어로서 알고리즘의 표현에 주로 사용되는 코드.

 

 

알고리즘의 중요성: 알고리즘에 오류가 없어야 컴퓨터 프로그램도 논리적 오류 없이 동작함.

 

 

알고리즘 만드는 법: 작은 크기의 문제들로 분해.

 

 

프로그램 개발 과정: 요구사항 분석->설계->구현->테스팅->유지보수

 

 

소스 프로그램: 알고리즘을 프로그래밍 언어의 문법에 맞추어 기술한 것. IDE(통합 개발 환경)등을 이용해 작성함

컴파일: 소스 프로그램을 오브젝트 파일로 변환하는 작업. 오브젝트 파일 이름은 ~~.obj

 

 

컴파일 오류: 문법 오류

 

 

링크: 컴파일된 목적 프로그램을 라이브러리와 연결해 실행 프로그램을 작성하는 것. exe확장자.

 

 

라이브러리: 프로그래머들이 많이 사용되는 기능을 미리 작성해 둔 것

 

 

링커: 링크를 수행하는 프로그램

디버깅: 소스에 존재하는 오류 수정

실행 시간 오류: 0으로 나누거나 잘못되니 메모리 주소에 접근하는 것,

논리 오류: 문법을 틀린 건 아니나 논리적으로 정확하지 않은 것

소프트웨어 유지보수: 디버깅 후에도 버그가 남아 있을 수 있고 사용자의 요구가 추가될 수 있기 때문이다. 유지 보수 비용이 전체 비용의 50%이상을 차지함.

 

 

통합 개발 환경: IDE(integrated development environment)=에디터+컴파일러+디버거

 

비주얼 스튜디오: 마이크로소프트

이클립스: 오픈 소스 프로젝트로 자바를 비롯한 다양한 언어를 지원하는 통합 개발 환경이자 프로그래밍 도구

비주얼 스튜디오 커뮤니티버전: 기업 외 개발자를 위한 확장 가능 무료 도구

비주얼 스튜디오 프로페셔널 버전: 개별 개발자 또는 소규모 팀으르 위한 전문적 개발자 도구 및 서비스

비주얼 스튜디오 엔터프라이즈 버전: 고급 테스트 및 DevOps를 포함한 고급 기능이 포함됨

솔루션: 문제 해결에 필요한 프로젝트가 들어 있는 컨테이너

프로젝트: 하나의 실행 파일을 만드는 데 필요한 여러 가지 항목들이 들어있는 컨테이너

 

 

#include <stdio.h>   -헤더 파일을 포함한다.

Int main(void)  -메인 함수 시작

printf(“hello world!”); -화면에 hello world!를 출력

return 0; -외부로 0값을 반환

#include는 소스 코드 안에 특정 파일을 현재의 위치에 포함

<stdio,h>는 헤더 파일임. 컴파일러가 필요로 하는 정보를 가지고 있는 파일. Stdio.h=standard input output header file.

주의: 전처리기 지사 문장 끝에는 세미콜론 붙이면 안됨.

 

 

함수: 특정한 작업을 수행하기 위해 작성된 독립적인 코드. 프로그램은 함수의 집합이다.

문장(명령문): 함수는 여러 개의 문장으로 이루어짐. 문장의 끝엔 반드시 ;있어야 함.

Printf()호출: 컴파일러가 제공하는 함수로써, 출력 담당. 큰따옴표 안의 문자열이 화면에 출력됨.

Return 0;: 함수의 결과값을 외부로 반환. 반환값은 0이다.

문장은 순차적 실행. 줄바꿈 문자인 \n은 화면에서 다음줄로 이동하게 함

 

 

 

에러: 심각한 오류

경고(warning): 경미한 오류

컴파일 시간 오류: 대부분 문법적인 오류

실행 시간 오류: 실행 중에 0으로 나누는 연산 같은 오류

논리 오류: 논리적으로 잘못되어서 결과가 의도한대로 나오지 않는 오류

 

 

디버거 명령어: F5(실행), F10(스텝오버, 한 문장씩 실행), F11(스텝인투, 한 문장씩 실행), F9(브레이크포인트, 현재 문장에 중단점을 설정)

 

 

주석(1): /* ~~~~  */ : 여러 줄 가능.

주석(2): // ~~~~~~ : 이 줄 전체가 주석. 여기서부터 줄의 끝까지가 주석이 됨.

 

 

전처리기: 외부 파일을 포함하라는 의미의 전처리기. #기호로 시작함.  Stdio.h는 표준 입출력에 대한 라이브러리 함수의 정의가 들어 있다.

 

변수: 프로그램이 사용하는 데이터를 일시적으로 저장할 목적으로 사용하는 메모리 공간

표준 자료형(정수형): short, int, long long

표준 자료형(실수형): float, double, long double

표준 자료형(문자형): char

변수선언: 컴파일러에게 어떤 타입의 변수가 사용되는지를 미리 알리는 것

식별자(identifier): 변수의 이름은 프로그래머가 마음대로 지을 수 있지만 규칙은 있음

식별자 규칙: 영문자와 숫자, 밑줄 문자_로 이루어진다. 중간에 공백 안됨. 첫글자는 반드시 영문자 또는 밑줄 문자_여야 함. 식별자는 숫자로 시작할 수 없다. 대문자와 소문자는 구별된다. Index, Index, INDEX는 모두 다른 변수. 키워드와 똑 같은 식별자는 허용안됨.

 

키워드: 예약어라고도 함. Auto, double, in, struct, break, else, long, switch, char

수식: 피연산자와 연산자로 구성된 식. 수식은 결과값을 가진다.

변수에 값 저장하기: 대입 연산=배정 연산=할당 연산

나머지 산술 연산자는 %임.

 

 

라이브러리 함수: 컴파일러가 프로그래머가 사용할 수 있도록 제공하는 함수

형식 지정자: %d는 10진 정수로 출력. %f는 실수로 출력. %c는 문자로 출력. %s는 문자열로 출력.

필드폭(width)과 정밀도(precision): printf()를 사용하여 출력할 때, 필드의 크기를 지정할 수 있다.

Scanf(): 키보드로부터 값을 받아서 변수에 저장한다. 변수의 주소를 필요로 한다.

Scanf()형식지정자: %d,%f는 같음. %lf는 double형의 실수를 입력. %c는 하나의 문자를 입력한다. %s는 문자열을 입력.

형식 지정자의 개수와 변수의 개수는 같아야 함.

 

비주얼스튜디오에서의 scanf()함수 오류. Scanf_s()를 쓰던가, 소스 코드 맨 첫 부분에 _CRT_SECURE_NO_WARNINGS를 정의하고 사용. <stdio.h>헤더 파일 사용 전에 정의해야됨.

변수는 메인 메모리에 만들어진다. 변수 이름을 사용하여 메모리 공간을 사용하게 됨.

변수(variavle): 저장된 값이 가능한 값.

상수(constant): 저장된 값의 변경이 불가능한 값.

 

Short, int, long: 정수형 데이터

double, float: 부동소수점형 데이터

char:문자형 데이터

short: 16비트.(-32768~32767)

int, long: 32비트(-2147483648~2147483647)

long long: 64비트

unsigned: 음수의 아닌 값만을 나타냄. signed보다 더 크게 담을 수 있음. 부호 비트 자리에 들어갈 수 있어서.

Signed: 부호를 가지는 값을 나타냄. 흔히 생략.

 

 

오버플로우: 변수가 나타낼 수 있는 범위를 넘는 숫자를 저장하려고 할 때 발생. 규칙성이 있다. 최고 넘으면 short의 경우 -32768로 돌아감. 하지만 unsigned short의 경우는 0으로 돌아간다.

숫자를 적으면 기본적으로 int형이 된다.

기호 상수: 기호를 이용하여 상수 표현한 것. won=EXCHANGE_RATE* dollar;

기호 상수의 장점: 값을 쉽게 변경할수있고 가독성이 높아진다.

음수를 표현하는 방법: 2의 보수로 음수를 표현함.

실수 표현하는 법: 정수 부분을 위하여 일정 비트를 할당함. 과학과 공학에서 필요한 아주 큰 수 를 표현할 수 없다.

부동소수점형: float(32비트), double(64비트), long double(64비트)

 

 

문자형: 문자는 컴퓨터보다는 인간에게 중요하다. 문자도 숫자를 이용하여 표현하고 공통적인 규격이 필요하다. 아스키 코드를 이용하며 문자 지정은 char형으로 함.

제어 문자: 인쇄 목적이 아니라 제어를 목적으로 사용되는 문자들. (줄바꿈 문자, 탭 문자, 벨소리 문자, 백스페이스 문자)

이스케이프 시퀀스….

산술 연산자: 사칙연산과 나머지 %

나눗셈 연산자: 정수형끼리의 나눗셈이라면 결과가 정수형. 부동소수점형끼리는 부동소수점값을 생성함. 정수형끼리의 나눗셈에서는 소수점 이하가 버려짐.

나머지 연산자를 이용해 짝수와 홀수를 구분할 수 있다. X % 2가 0이면 짝수.

부호 연산자: 변수나 상수의 부호를 변경. 10-20은 이항연산자이지만 -10은 단항연산자이다.

  • 는 이항 연산자이기도 하고 단항 연산자이기도 하다.

증감 연산자: ++,-- 변수의 값을 하나 증가시키거나 감소시키는 연산자.

++X: 수식의 값은 증가된 x값이다.

X++: 수식의 값은 증가되지 않은 원래의 X값이다.

  • -X: 수식의 값은 감소된 X값이다.

X--: 수식의 값은 감소되지 않은 원래의 X값이다.

증감연산자는 괄호가 있어도 맨 나중에 실행. 상수에 적용할 수 없다(10++)같은거. 수식에 적용할 수 없다(X+1)++같은거.

대입 연산자 주의점: =왼쪽에는 무조건 변수. 숫자나 식이 올 수 없음.

복합 대입 연산자:  +=처럼 대입연산자 =와 산술연산자를 합쳐 놓은 연산자. 소스를 간결하게 만들 수 있음.

X+=Y와 X=X+Y와 의미가 같음.

 

오류 주의!: 등호의 왼쪽은 항상 변수이어야 함. 등호는 무조건 오른쪽이다. =*안됨. *=가 맞음.

관계 연산자: 두개의 피연산자를 비교하는 연산자. 결과값은 참(1)아니면 거짓(0).

X=Y는 Y값을 X에 대입한다는 뜻. X==Y는 X와 Y가 같으면 1, 다르면 0이 수식의 값이 됨.

논리 연산자 X&&Y= AND연산. 둘다 참이면 참, 그렇지 않으면 거짓.

논리 연산자 X\\Y= OR 연산. X나 Y중 하나만 참이면 참, 모두 거짓이면 거짓.

논리 연산자 !X= NOT 연산이다. X가 참이면 거짓, X가 거짓이면 참.

NOT연산자 적용 시 음수는 거짓으로 판단한다.

단축 계산: &&연산자의 경우, 첫번째 피연산자가 거짓이면 다른 피연산자들을 계산하지 않음.

\\연산자의 경우, 첫번째 피연산자가 참이라면 다른 피연산자들을 계산하지 않음.

콤마 연산자: 콤마로 연결된 수식은 순차적으로 계산된다.