쉽게 풀어쓴 C 프로그래밍 - SANG...

Preview:

Citation preview

제1장 기초 사항

1. C++ 언어의 역사와 특징에 대하여

살펴본다.

2. 입력과 출력에 대하여 학습한다.

3. 비주얼 스튜디오를 설치한다.

4. 간단한 예제 프로그램을 컴파일하고

실행한다.

5. 변수와 수식의 개념을 학습한다.

이번장에서만들어볼프로그램

소프트웨어의중요성

“우리 아이들의 상당수는 현재 존재하지 않는 일자리를 가질 것이다. 이런 시대에 대비하기 위해 반드시 필요한 것이 소프트웨어 교육이다.”

프로그램

프로그램은 작업지시서와 같다.

기계어

기계어(machine language): 0과 1로 구성되어 있는“001101110001010...”과 같은 형태

컴퓨터는 이러한 이진수 형태를 바로 이해할 수 있다.

C++ 언어의개발

C++는 1980년대 초에 AT&T 벨연구소의 Bjarne

Stroustrup에 의하여 개발

C++는 C언어를 유지, 확장한 것

C with Classes -> C++

C++는 C언어에 클래스 개념을 추가하고 이어서 가상 함수, 연산자 중복 정의, 다중 상속, 템플릿, 예외 처리 등이기능이 차례로 추가

C++ 버전

C++의설계철학

엄격한 타입 검사, 범용 언어, 효율적, 이식성

여러 가지의 프로그래밍 스타일을 지원 (절차 지향 프로그래밍, 데이터 추상화, 객체 지향 프로그래밍, 일반화 프로그래밍)

프로그래머가 자유롭게 선택할 수 있도록 설계

최대한 C와 호환

플랫폼에 의존적이거나 일반적이지 않은 특징은 제거

C++ 특징

C++ 특징

클래스(class) - 클래스를 이용하여 하나의 객체의 속성과 동작들을 한곳으로 모아서 정의할 수 있다.

상속(inheritance) - 클래스를 상속받아서 기존의 코드를 재사용할 수 있다.

연산자 중복(operator overloading) – 대상에 따라서 동일한연산자로 새로운 연산을 정의할 수 있다.

함수 중복(function overloading) – 매개 변수만 다르면 동일한 이름의 함수를 여러 개 만들 수 있다.

new와 delete 연산자 – 동적 메모리 할당과 해제를 담당하는연산자이다.

제네릭(generics) – 클래스 정의를 자료형에 상관없이 재사용하는 기술이다.

모던 C++

C++ 11과 C++ (14)는, 많은 새로운 기능을 도입

범위(range)-기반의 반복 루프

타입 자동 추론 기능

보편적인 초기화

람다식

C++는어디에사용되는가?

C++의실행속도

C++의장점

C++로 작성된 프로그램은 속도가 빠르다.

C++은 멀티패러다임 프로그래밍을 지원한다. 즉 절차지향, 객체 지향, 제네릭 방법을 동시에 지원한다.

하드웨어에 접근할 수 있다.

메모리를 효율적으로 사용한다.

C언어 프로그램을 그냥 가져다가 사용할 수 있다.

고성능의 게임이나 인공지능, 장치 드라이버에 적합하다.

절차적프로그래밍

절차 지향 프로그래밍(procedural programming)은 기본적으로 프로시저를 사용하여 프로그램을 작성하는 프로그래밍 방식이다.

객체지향프로그래밍

객체 지향 프로그래밍에서는 데이터와 알고리즘이 묶여있음.

중간점검문제

1. Java와 C#는 C++와 어떤 관계가 있을까?

2. C++ 언어가 C 언어의 상위집합이라면 C언어를 반드시배워야 할까?

C++ 프로그램개발단계

① 텍스트 에디터로 C++ 언어 프로그램을 작성하여 파일로저장한다.

② 소스 파일을 컴파일한다.

③ 프로그램을 실행한다.

비주얼스튜디오란?

통합 개발 환경(IDE: integrated development

environment)은 프로그램 개발에 필수적인 편집, 컴파일,

실행, 디버깅 기능을 하나로 통합한 도구

비주얼스튜디오버전

커뮤니티 버전(Visual Studio Community)

프로페셔널 버전(Visual Studio Professional)

엔터프라이즈 버전(Visual Studio Enterprise)

비주얼스튜디오설치

비주얼스튜디오설치

비주얼스튜디오설치

비주얼스튜디오설치

비주얼스튜디오설치

비주얼스튜디오설치

비주얼스튜디오사용

프로젝트란?

비주얼스튜디오사용

비주얼스튜디오사용

비주얼스튜디오사용

비주얼스튜디오사용

비주얼스튜디오사용

비주얼스튜디오사용

비주얼스튜디오사용

비주얼스튜디오사용

비주얼스튜디오사용

컴파일오류

첫번째프로그램의분석

// 첫번째예제프로그램

주석(comment)이란 코드를 설명하는 글

2가지 종류의 주석

/* … */

// …

#include <iostream>

현재의 위치에 iostream이라는 헤더 파일을 포함

using namespace std;

변수 이름이나 함수 이름과 같은 수많은 이름(식별자)들은 이름 공간(name space)이라고 하는 영역으로 분리되어 저장

식별자를사용하는 2가지방법

1. std::cout << "Hello World!" << std::endl;

2. using namespace std;

cout << "Hello World!" << endl;

int main()

위의 문장은 main() 함수를 정의하는 문장

cout << "Hello World! " << endl ;

콘솔 화면에 “Hello World!"라는 문자열을 출력하고 이어서 endl(end of line)을 출력하는 문장

Hello World!

return 0;

이 문장이 실행되면 main( ) 함수는 작업을 끝내고 외부로0값을 반환

변수와자료형

변수(variable)는 데이터(값)를 저장하는 상자

변수의선언

int i; // 변수 i를 선언한다.

i = 100; // 변수 i에 100을 저장한다.

int i = 100; // 변수 i를 선언하고 100으로 초기화한다.

int i { 100 }; // int i=100;과 동일하다.

string s { "hello" }; // string s="hello";과 동일하다.

자료형

자료형

정수형

부동소수점형

논리형

bool형의 변수는 참(true) 또는 거짓(false)만을 가질 수 있다.

#include <iostream>

using namespace std; // 지금부터 이름공간으로 std를 사용한다.

int main()

{

bool b;

b = true;

return 0;

}

문자형

char ch;

ch = 'a';

문자열

#include <iostream>

#include <string>

using namespace std;

int main()

{

string s1 = "Good";

string s2 = "Morning";

string s3 = s1 + " " + s2 + "!";

cout << s3 << endl;

return 0;

}

문자열연습

string s1 = "사과";string s2;

s2 = s1 + " " + to_string(10) + "개";cout << s2 << endl;

string s1 = "Good";

string s2 = "Bad";

bool b = (s1 == s2);

기호상수

const double TAX_RATE = 0.25; // 기호 상수 선언int income=1000;

income = income - TAX_RATE * income;

auto 키워드

자동 타입 추론(automatic type deduction)

auto d = 1.0;

auto add(int x, int y)

{

return x + y;

}

int main()

{

auto sum = add(5, 6); 된다.return 0;

}

출력

int i;

float f;

cout << i; // 정수 형식으로 i의 값이 출력된다.

cout << f; // 실수 형식으로 f의 값이 출력된다.

이름입력받아서출력하기

#include <iostream>

#include <string>

using namespace std;

int main()

{

string name;

cout << "이름을 입력하시오: ";

cin >> name;

cout << name << "을 환영합니다." << endl;

return 0;

}

입력

int i;

cin >> i; // 정수를 읽어서 i에 저장

double f;

cin >> f; // 실수를 읽어서 f에 저장

수식과연산자

Lab: 최대한의사탕사기

철수가 가지고 있는 돈으로 최대한의 사탕을 사려고 한다.

현재 1000원이 있고 사탕의 가격이 300원이라고 하자.

최대한 살 수 있는 사탕의 개수와 나머지 돈은 얼마인가?

#include <iostream>

using namespace std;

int main()

{

int money;

int candy_price;

cout << "현재 가지고 있는 돈: ";

cin >> money;

cout << "캔디의 가격: ";

cin >> candy_price;

// 최대한 살 수 있는 사탕 수int n_candies = money / candy_price;

cout << "최대로 살 수 있는 캔디의 개수=" << n_candies << endl;

// 사탕을 구입하고 남은 돈int change = money % candy_price;

cout << "캔디 구입 후 남은 돈=" << change << endl;

return 0;

}

Lab: 최대한의사탕사기

우리나라는 섭씨 온도를 사용하지만 미국에서는 화씨 온도를 사용한다. 화씨 온도를 섭씨 온도로 바꾸는 프로그램을 작성하여 보자.

#include <iostream>

using namespace std;

int main()

{

double f_temp = 60;

double c_temp;

c_temp = (5.0 / 9.0) * (f_temp - 32);

cout << "화씨온도 " << f_temp << "도는 섭씨온도 " << c_temp << "입니다." << endl;

return 0;

}

Lab: 주사위게임

2개의 주사위를 던져서 주사위의 합을 표시하는 프로그램을 작성해보자.

#include <iostream>

#include <ctime>

#include <cstdlib>

using namespace std;

int main()

{

srand(time(NULL));

int dice1 = (rand() % 6) + 1;

int dice2 = (rand() % 6) + 1;

cout << "두 주사위 합=" << dice1 + dice2 << endl;

return 0;

}

Q & A

Recommended