본문 바로가기
Language/C++

[C++_제 1장] 컴퓨터, 프로그램 및 C++ 입문

by 전전긍긍 2021. 9. 22.

본 포스팅은 C++로 시작하는 객체지향 프로그래밍 책을 바탕으로 작성하였습니다.

 

C++로 시작하는 객체지향 프로그래밍

『C++로 시작하는 객체지향 프로그래밍』은 구문보다는 문제 해결에 중점을 두는 문제 구동 방식을 사용한 프로그래밍에 대해 가르치고 있다. 여러 가지 상황에서 문제를 야기한 개념을 사용함

book.naver.com


 

check point

더보기

1.1

A computer is an electronic device that stores and processes data.

하드웨어 : 물리적으로 보이는 부분

소프트웨어 : 특정한 작업을 수행하기 위해서 보이지 않는 명령(instruction)으로 하드웨어를 제어

 

1.2 주요한 하드웨어 장치 : CPU, 메모리, 저장장치, 입력장치, 출력장치, 통신장치

 

1.3 CPU : Central Processing Unit

It is the brain of the computer.

 

1.4 CPU의 속도를 측정하기 위해서 사용되는 단위

clock속도 측정 단위 -> Hz(헤르츠)

*clock : 연산의 속도를 정하고 동기화하는 데 사용

The clock speed of a computer is usually stated in megahertz (MHz) (1 MHz is 1 million Hz).

 

1.5

비트( bit : binary digits ) : 0과 1을 이진수 시스템에서 숫자로 해석

바이트 ( byte ) : 컴퓨터에서의 최소 저장 단위. 8개의 비트로 구성

 

1.6 

메모리의 용도 : 프로그램을 실행하기 위한 컴퓨터의 작업 영역

(메모리 : 프로그램, 프로그램과 함께 동작하는 데이터를 저장하기 위해 연속적인 정렬된 바이트로 구성)

프로그램, 데이터 -> 메모리 -> CPU

 

RAM ? Random Access Memory

메모리 내 각 바이트는 임의의 순서로 접근이 가능 -> 메모리를 RAM이라고 함.

because a memory cell can be accessed directly

 

1.7 메모리의 크기를 측정하기 위해 사용되는 단위 : bytes

 

1.8 디스크의 크기를 측정하기 위해 사용되는 단위 : bytes

 

1.9 메모리와 저장 장치의 근본적인 차이점

메모리(RAM) : 휘발성이므로 전원이 꺼지면 메모리에 저장된 정보는 사라짐. 저장장치보다 속도가 빠르다.

저장장치 : 프로그램과 데이터를 영구적으로 저장하기 위함. 

 

1.10 CPU가 이해하는 언어 : 기계어(machine language)

 

1.11 어셈블리어 assembly language

각각의 기계어 명령을 나타내기 위해 니모닉(mnemonic)이라고 하는 짧은 단어 사용 

add 2, 3, result //add와 같은 것들을 mnemonic이라고 함

1.12 어셈블러(assembler) : 어셈블리어를 기계어로 변환

 

1.13 고급 프로그래밍 언어

고급 언어로 프로그램을 작성할 수 있고 이 프로그램을 다른 여러 종류의 컴퓨터에서 동작시킬 수 있음

The high-level languages are English-like and easy to learn and program.

 

1.14 소스 프로그램 : (=소스 코드) 고급 언어로 작성된 프로그램

 

1.15 인터프리터 : 소스 코드로부터 한 문장을 읽고 기계 코드 또는 가상 기계 코드로 변환한 후 즉시 실행

 

1.16 컴파일러 : 전체 소스 코드를 기계 코드 파일로 변환하고, 기계 코드 파일이 그 이후에 실행.

 

1.17 인터프리터로 실행된 언어와 컴파일러로 실행된 언어의 차이점

인터프리터는 한 번에 한 문장씩 프로그램을 변환하고 실행. 

컴파일러는 전체 소스 프로그램 실행을 위한 기계어 파일로 변환.

 

1.18

운영체제 (OS : Operating System) : 컴퓨터를 동작시키는 가장 중요한 프로그램. 컴퓨터의 실행을 관리하고 제어.

많이 사용되는 운영체제 : Microsoft Windows, Mac OS, Linux

 

1.19 운영체제의 주요 기능

  • 시스템 동작 제어 및 모니터링 : 입출력, 저장 장치에 있는 파일 및 폴더 관리, 주변 장치 제어, 여러 종류의 프로그램이 동시에 실행될 수 있도록 해 주는 기능, 여러 사용자가 동시에 시스템을 사용할 수 있도록 해 주는 기능, 보안 기능
  • 시스템 자원 할당 및 관리 : 프로그램이 실행되는 데 요구되는 컴퓨터 자원을 관리, 프로그램을 실행하기 위해 자원을 할당
  • 프로그램 스케줄링 : 시스템 자원을 효율적으로 사용하기 위함. 다중 프로그래밍, 멀티쓰레딩, 다중처리와 같은 기능을 제공하여 시스템의 성능을 극대화

* 스케줄링 : 여러 프로세스가 번갈아 사용하는 자원을 어떤 시점에 어떤 프로세스에 할당할지 결정

 

1.20 다중프로그래밍, 멀티쓰레딩, 다중처리

  • 다중프로그래밍 (multiprogramming) : 여러 종류의 프로그램들이 CPU를 공유하여 동시에 실행되도록 하는 것.       (CPU가 대기하는 동안=쉬는 동안 다른 프로그램을 사용)
  • 멀티쓰레딩 (multithreading) : 하나의 프로그램이 동시에 여러 개의 작업을 실행할 수 있도록 해준다.                    ex. 워드 프로세서에서 문서의 편집과 저장을 쓰레드로 동시에 실행
  • 다중처리 (multiprocessing) or 병렬처리 (parallel processing) : 두 개 이상의 CPU를 사용하여 동시에 서브 작업들을 수행하고 그 다음 전체 작업의 결과를 얻기 위해 각 서브 작업의 결과를 결합.                                              ex. 여러 명의 의사들이 한 명의 환자를 위해 함께 시술하는 외과 수술

 

1.21

C++는 C로부터 개발되었고, Java는 C++가 모델이 되었으며, C#은 C++와 비슷하면서 Java 언어의 특징을 가지고 있다. 

 

1.22 C++를 처음 개발한 사람 : 1983~1985년 동안에 벨 연구소의 비얀 스트로스트룹(Bjarne Stroustrup)

 

1.23 C++키워드(=예약어) : 컴파일러에게 특별한 의미를 부여

and cannot be used for other purposes in the program such as variables or function names.

ex. using, namespace, int, return

 

1.24 C++는 대소문자를 구별한다. C++키워드는 소문자를 사용한다.

 

1.25 C++ 소스 파일 이름 확장자 -> .cpp

windows 에서 C++ 실행 파일 이름 확장자 -> .sln  .exe

 

1.26 

주석 comment : 프로그램이 무엇이며 어떻게 작성되었는지에 대한 설명을 적는 부분

 

C++에서 주석을 위한 구문 

- 라인 주석 : 한 줄짜리 주석을 작성 //

- 블록 주석 : (=문단 주석) 여러 문장의 주석 작성 /* */

 

*주석은 컴파일러에 의해 무시된다.

 

1.27 cout <<"Hello C++"; : 콘솔에 문자열을 출력하기 위한 문장

 

1.28 std namespace : standard namespace 큰 프로그램에서 이름으로 인한 혼란을 피하기 위해 정의

Yes, as long as a C++ program can be compiled on the machine

 

1.29 b

 

1.30 d

+) a and b correct

 

1.31 

3.5 * 4 / 2 - 2.5 = 4.5

 

1.32

#include <iostream>
using namespace std;

int main() {
	cout << "C++" << "Java" << endl;
	cout << "C++" << endl << "Java" << endl;
	cout << "C++," << "Java," << "and C#" << endl;

	return 0;
}

/*
C++Java
C++
Java
C++,Java,and C#
*/

 

1.33

C++ 컴파일러는 전처리(preprocessing), 컴파일(compile), 링커(linker) 세 가지 순서로 컴파일을 수행한다.

Yes, as long as a C++ program can be compiled on the machine

 

1.34 

The input of a C++ program is a C++ source code file and the output is an executable file.

 

1.35

#include <iosteam> 
//#써주기
//전처리기 지시자는 C++문장이 아니기 때문에 세미콜론이 있으면 안됨
using namespace std;

int main() //main 옆에 ()
{
	cout << "welcome to C++!" << endl; //큰따옴표
    
    return 0;
 }

 

1.36

주석줄 //

주석 단락 /* */

 

1.37

#include <iostream>
using namespace std;

int main()
{
	cout << "2 + 3 =" << 2 + 3 << endl;
    return0 ;
 }

 

1.38

구문 오류 syntax error(컴파일 오류) : 키워드 잘못 입력, 필요한 구두점 빠뜨림

실행 오류 runtime error : 실행 중에 실행할 수 없는 연산을 만나게 되면 발생

논리 오류 logic error : 프로그램이 의도한 대로 실행되지 않는 오류

ex. 9 / 5 != 9.0 / 5 정수의 나눗셈은 몫으로만 계산되고, 소수점 이하는 잘려나가기 때문

 

Compile errors are detected by compilers.

Runtime errors occur during execution of the program.

Logic errors results in incorrect results.

 

1.39 구문 오류

 

1.40 논리 오류 실행 오류 (파일이 존재하지 않기 때문에 실행X)

 

1.41 실행 오류 논리 오류 (잘못 작성했으니까 논리 오류)

 

1.42 

#include <iostream>
using namespace std;

int main() //main은 소문자로
{
    //큰따옴표 생략, endl(마지막줄 의미) 작성 안함
	cout << "Welcome to C++!" << endl; 
    return 0;
}

 

Quiz

 

총 30개 문제

programming practice

 

1. 3개의 메시지 출력

#include <iostream>
using namespace std;

int main() {

	cout << "Welcome to C++" << endl;
	cout << "Welcome to Computer Science" << endl;
	cout << "Programming is fun" << endl;

	return 0;
}

2. 5개의 메시지 출력

#include <iostream>
using namespace std;

int main() {

	cout << "Welcome to C++" << endl;
	cout << "Welcome to C++" << endl;
	cout << "Welcome to C++" << endl;
	cout << "Welcome to C++" << endl;
	cout << "Welcome to C++" << endl;

	return 0;
}

3. 패턴 출력

#include <iostream>
using namespace std;

int main() {

	cout << "  CCCC      +            +" << endl;
	cout << " C          +            +" << endl;
	cout << "C        +++++++      +++++++" << endl;
	cout << " C          +            +" << endl;
	cout << "  CCCC      +            +" << endl;

	return 0;
}

4. 표 출력

#include <iostream>
using namespace std;

int main() {

	cout << " a     a^2    a^3 " << endl;
	cout << " 1     1      1   " << endl;
	cout << " 2     4      8   " << endl;
	cout << " 3     9      27   " << endl;
	cout << " 4     16     64   " << endl;

	return 0;

}

5. 수식 계산

#include <iostream>
using namespace std;

int main() {

	cout << (9.5 * 4.5 + 2.5 * 3) / (45.5 - 3.5) << endl;

	return 0;
}

6. 연속 숫자 합계

#include <iostream>
using namespace std;

int main() {

	cout << 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 << endl;

	return 0;
}

7. 파이값 근사치

#include <iostream>
using namespace std;

int main() {

	cout << 4 * (1.0 - 1.0 / 3 + 1.0 / 5 - 1.0 / 7 + 1.0 / 9 - 1.0 / 11) << endl;
	cout << 4 * (1.0 - 1.0 / 3 + 1.0 / 5 - 1.0 / 7 + 1.0 / 9 - 1.0 / 11 + 1.0 / 13) << endl;

	return 0;
}

8. 원의 면적과 둘레

#include <iostream>
using namespace std;

int main() {

	int r = 5.5;

	cout << "원의 둘레 : " << 2 * r * 3.14159 << endl;
	cout << "원의 면적 : " << r * r * 3.14159 << endl;

	return 0;
}

9. 직사각형의 면적과 둘레

#include <iostream>
using namespace std;

int main() {

	int width = 4.5;
	int height = 7.9;

	cout << "직사각형의 면적 : " << width * height;
	return 0;
}

10. 평균 마일 속도

#include <iostream>
using namespace std;

int main() {

	cout << (14.0 / 45.5) * (60 / 1.6) << endl;

	return 0;
}

11. 인구 계획

#include <iostream>
using namespace std;

int main() {

	int people = 312032486;
	int yearplus = (360.0 / 7) * 24;
	int yearminus = ((1.0 / 45) * 3600 * 24 * 365) + ((1.0 / 13) * 3600 * 24 * 365);

	int year = people + yearplus - yearminus;

	cout << "1년 미국 인구 수" << year << endl;
	cout << "2년 미국 인구 수" << year * 2 << endl;
	cout << "3년 미국 인구 수" << year * 3 << endl;
	cout << "4년 미국 인구 수" << year * 4 << endl;
	cout << "5년 미국 인구 수" << year * 5 << endl;

	return 0;
}

12. 평균 킬로미터 속도

* 어찌저찌 풀었지만 답이 이해가 안된다.

왜 1을 더하는거지? 

#include <iostream>
using namespace std;

int main() {

	//답  (24 / (1 + (40 + 35.0 / 60) / 60)) * 1.6 이해가 안됨
	cout << "시간 당 킬로미터의 평균 속도 : " << 24.0 / ((40 + 35.0) / 60) * 1.6 << endl;

	return 0;
}