c++프로그래밍 수업내용 및 수업 후 과제

2024. 9. 10. 13:10C++프로그래밍/수업 내용 및 수업 후 과제

반응형
구분 C언어 C++
사용 예 - 임베디드 시스템 - 게임 개발
- 운영 체제 - GUI 애플리케이션
- 시스템 프로그래밍 - 웹 서버
- 컴파일러 및 인터프리터 - 데이터베이스 소프트웨어
장점 - 간단하고 빠른 성능 - 객체 지향 프로그래밍 지원
- 하드웨어와의 밀접한 연관성 - 코드 재사용성 및 유지보수 용이
- 작은 메모리 사용 - 강력한 표준 라이브러리
- 다양한 플랫폼에서 사용 가능 - 템플릿 및 STL 지원
단점 - 객체 지향 프로그래밍 미지원 - 복잡한 문법
- 메모리 관리 수동 - 컴파일 시간 증가
- 오류 처리 기능 부족 - 성능 저하 가능성 (추상화로 인한)

 

c언어와 c++언어의 사용 예시와 장,단점을 정리한 표

cout은 모니터라고 생각하면 된다. cout은 #include <iostream>에 있

#include <iostream>
int main()
{
std::cout << "aaaa\n";
return 0;
}
↑ 이렇게 쓴다.
 
\n과 <<std::endl;은 같지만 \n의 속도가 훨씬 빠르기 때문에(<<std::endl;은 청소까지 해줌) \n을 더 많이 사용한다
구분 \n std::endl
정의 새 줄 문자 새 줄 문자 + 출력 스트림 플러시
사용 예 std::cout << "Hello\n"; std::cout << "Hello" << std::endl;
장점 - 성능이 더 빠름 - 출력 버퍼를 즉시 비우므로 최신 상태 반영
- 단순하고 직관적임 - 디버깅 시 유용함
단점 - 출력 버퍼가 비워지지 않음 - 성능 저하 (버퍼링으로 인한)
- 출력 내용이 즉시 반영되지 않음 - 불필요하게 자주 사용하면 비효율적

\n과 <<std::endl;을 비교한 표이다.

::은 c언어에는 없는 연산자이다.

 

#include <iostream>
int main()
{
std::cout<<"소프트웨어"<<std::endl;
return 0;
} //std동네에 있는 cout
 

 

std에 있는 std를 지워서 한번에 지정해주는 방법을 사용할 수도 있다 ↓

#include <iostream>
using namespace std; //네임스페이스로 std 사용, 잘 쓰지 않음
int main()
{
cout<<"소프트웨어"<<endl;
return 0;
} // 확장자 .cpp

 

위쪽의 방법보다 좀 더 좋은 방법은 아래참고 ↓

#include <iostream>

using std::cout
using std::endl;//이제부터 cout은 std::cout을 참조하겠다!
int main()
{
cout<<"소프트웨어"<<endl;
return 0;
}

 

© smilehan의 c++프로그래밍

#include <stdio.h>
int main(void)
{
int num;
printf("숫자 하나를 입력하세요=");
scanf("%d", &num);
printf("입력받은 수는 %d 입니다.\n", num);
return 0;
}

의 코드를 std::을 사용해서 변경

 

#include <iostream>

int main() {
    int num;
    std::cout << "숫자 하나를 입력하세요=";
    std::cin >> num;
    std::cout << "입력받은 수는 " << num << " 입니다." << std::endl;
    return 0;
}

 

c언어로 나이를 키보드로 입력받아 출력받는 프로그램을 만듬

#include <stdio.h> // 입출력을 위한 헤더 파일 포함
int main(void)
{
int age; // 정수형 변수 선언
printf("나이를 입력하세요: "); // 사용자에게 입력 요청
scanf("%d", &age); // 사용자 입력을 age에 저장
printf("당신의 나이는 %d 입니다.\n", age); // 입력받은 나이 출력
return 0; // 프로그램 종료
}

 

c++언어로 나이를 키보드로 입력받아 출력받는 프로그램을 만듬

#include <iostream> // 입출력을 위한 헤더 파일 포함
int main()
{
int age; // 정수형 변수 선언
std::cout << "나이를 입력하세요: "; // 사용자에게 입력 요청
std::cin >> age; // 사용자 입력을 age에 저장
std::cout << "당신의 나이는 " << age << " 입니다.\n"; // 입력받은 나이 출력
return 0; // 프로그램 종료
}

 

아래의 코드는 c언어로 만든 식별자/상수/자료형/변수/함수 예제이다.

#include <stdio.h> //printf()함수 원형이 선언되어 있음, 전처리기
int main(void) //콘솔 기반 C프로그램의 시작점
{ //main()함수의 시작
int num1, num2; //변수 선언문, 실행문 보다 먼저 씀
/* 변수명: 영문자(A-Z, a-z), 숫자(0-9), 밑줄(_)로 구성
변수(variable):프로그램이 실행되는 동안 자료를
기억시키기 위한 기억장소의 이름 */
num1=100; //대문자와 소문자는 다른 변수로 인식
num2=-300; //변수에 상수 대입
printf("두 수의 합은 %d입니다.\n",num1+num2);
//표준 라이브러리 함수
return 0;
} //main()함수의 끝

 

위의 코드를 c++언어로 변경하면

#include <iostream> // 입출력을 위한 헤더 파일 포함
int main() // 콘솔 기반 C++ 프로그램의 시작점
{ // main() 함수의 시작
int num1, num2; // 변수 선언, 실행문보다 먼저 위치해야 함
/* 변수명: 영문자(A-Z, a-z), 숫자(0-9), 밑줄(_)로 구성
변수(variable): 프로그램이 실행되는 동안 자료를
기억시키기 위한 기억장소의 이름 */
 
num1 = 100; // num1에 100 대입
num2 = -300; // num2에 -300 대입
// 두 수의 합을 출력, std::cout을 사용하여 출력
std::cout << "두 수의 합은 " << (num1 + num2) << "입니다.\n"; // 두 수의 합 출력
return 0; // 프로그램 종료
} // main() 함수의 끝

이렇게 나온다.

 

이스케이프 시퀀스는 문자열 내에서 특별한 의미를 갖는 문자 조합이다.

아래 표는 일반적으로 사용되는 이스케이프 시퀀스와 그 설명을 정리한 것이다.

이스케이프 시퀀스 설명
\n 줄 바꿈 (new line)
\t 수평 탭 (horizontal tab)
\\ 백슬래시 (backslash)
\' 작은따옴표 (single quote)
\" 큰따옴표 (double quote)
\r 캐리지 리턴 (carriage return)
\b 백스페이스 (backspace)
\f 폼 피드 (form feed)
\a 경고음 (alert)
\v 수직 탭 (vertical tab)
\0 널 문자 (null character)

 

정적타입 언어와 동적타입 언어의 차이점

 

특징 정적 타입 언어 동적 타입 언어
타입 결정 시점 컴파일 시점 실행 시점
타입 선언 명시적 타입 선언 필요 암시적 타입 선언 (타입 추론) 가능
에러 발견 컴파일 시점에 타입 오류 발견 실행 시점에 타입 오류 발견
성능 일반적으로 더 빠름 성능이 떨어질 수 있음
유지보수 코드가 명확하고 유지보수가 용이 유연성이 있지만 타입 관련 버그 발생 가능
코드 작성 타입 선언으로 인해 코드가 장황해질 수 있음 코드가 간결하고 빠르게 작성 가능
예시 언어 C, C++, Java, Rust Python, JavaScript, Ruby
장점 - 타입 안전성 <br> - 성능 최적화 가능 <br> - IDE 지원 우수 - 유연성 <br> - 빠른 프로토타이핑 가능
단점 - 코드 작성 번거로움 <br> - 유연성 부족 - 런타임 에러 발생 가능 <br> - 성능 저하

 

○ 자동 형 변환
- 10/4, 10.0/4, 10/4.0, 10.0/4.0
- 1 + 'A' 가 가능할까?
- 자료형이 서로 다른 혼합 연산에서는 기억 장소의 크기가 큰 쪽으로 통일시켜 연산이 이루어짐
- 이것을 자동 형 변환(implicit arithmetic conversions)이라 함
-char(1바이트)형과 int(4바이트)형이 혼합 연산을 하게 되면 char형이 int형으로 변경되어 연산이 되고 결과도 int형으로 나옴
-int형(4바이트)과 double형(8바이트)의 혼합 연산에서는 int형이 double형으로 변경되어 연산이 되고 결과도 double형으로 나옴
-  char → unsigned char → int → unsigned int → long → unsigned long → float → double

 

 

전처리기는 컴파일하기전에 일어나는 동작이고, #으로 시작한다

○ #define문 : 매크로
- 매크로 또는 매크로 상수는 프로그램 전체에서 하나의 기호 상수를 다른 이름으로 대치시키도록 전처리기에게 알려줌
- 실제 매크로가 호출되면 호출된 자리에 정의된 기호 상수로 대치됨
- `#define 매크로명 상수_또는_문자열`
- `#define PI 3.141592`
- 프로그램 중에 PI를 찾아서 컴파일하기 전에 모두 3.141592로 바꾸어 줌
- 그래서 컴파일되는 소스에는 더 이상 PI는 존재하지 않음
- `#define SIZE 100`
- `char ch[SIZE];` // `char ch[100];`
- `for(i=0;i<SIZE;i++)` // `for(i=0;i<100;i++)`
- 숫자 100을 그냥 쓰는 것 보다는 SIZE라는 매크로명이 더 많은 정보를 주며, SIZE값을 한꺼번에 바꾸기도 편리함
- 매크로명은 모두 대문자, 단어 사이는 언더스코어(_)
- PI, SIZE, ARRAY_SIZE, BUFFER_SIZE
 
프로그램중에 다른파일을 포함시킬때 사용하는것이 #include이다 ""을 사용하는 경우는 직접만든 헤더파일을 사용할때 ""사용하고  <>은 이미 만들어져 있는 표준헤더파일을 사용할때 <>을 사용한다.

많이 쓰는 언어들의 연산자 비교

연산자 C C++ Java C# JavaScript Python
덧셈 + + + + + +
뺄셈 - - - - - -
곱셈 * * * * * *
나눗셈 / / / / / /
나머지 % % % % % %
증가 ++ ++ ++ ++ ++ += 1
감소 -- -- -- -- -- -= 1
대입 = = = = = =
비교 (==) == == == == == ==
비교 (!=) != != != != != !=
논리 AND && && && && && and
논리 OR `   ` `   `
비트 AND & & & & & &
비트 OR ` ` ` ` ` `
비트 XOR ^ ^ ^ ^ ^ ^
비트 NOT ~ ~ ~ ~ ~ ~
시프트 왼쪽 << << << << << <<
시프트 오른쪽 >> >> >> >> >> >>

 

 

C와 C++ 언어의 문법을 설명하는 코드 예제를 주석과 함께 작성해드리겠습니다. 아래 코드는 식별자, 상수, 자료형, 변수, 전처리기, 연산자를 포함하고 있습니다.
c
#include <stdio.h> // 표준 입출력을 위한 헤더 파일 포함
// 상수 정의
#define PI 3.14 // PI라는 식별자에 3.14라는 값을 상수로 정의
// 메인 함수: 프로그램의 진입점
int main() {
// 변수 선언: int형 변수 a와 b, float형 변수 area
int a, b; // 정수형 변수 a와 b 선언
float area; // 실수형 변수 area 선언
// 사용자로부터 두 정수 입력 받기
printf("두 정수를 입력하세요: ");
scanf("%d %d", &a, &b); // 입력된 값을 a와 b에 저장
// 사각형의 면적 계산: area는 두 변 a와 b의 곱
area = a * b; // area에 a와 b의 곱을 저장
// 결과 출력
printf("사각형의 면적은: %f\n", area); // 면적을 실수형으로 출력
// 원의 면적 계산: area에 PI와 a의 제곱을 곱하여 저장
area = PI * a * a; // PI와 a의 제곱을 곱하여 면적 계산
// 결과 출력
printf("반지름이 %d인 원의 면적은: %f\n", a, area); // 면적을 출력
return 0; // 프로그램 종료
}
코드 설명
식별자: PI, a, b, area 등이 식별자로, 변수나 상수를 식별하는 이름입니다.
상수: #define PI 3.14로 정의된 상수로, 프로그램 내에서 변경되지 않는 값을 나타냅니다.
자료형: int와 float는 변수의 데이터 타입을 정의합니다. int는 정수를, float는 실수를 저장합니다.
변수: a, b, area는 데이터를 저장하는 공간으로, 선언된 자료형에 따라 값을 저장할 수 있습니다.
전처리기: #include <stdio.h>와 #define은 전처리 지시어로, 컴파일러에게 특정 작업을 수행하도록 지시합니다.
연산자: * (곱하기), = (대입), + (더하기) 등의 연산자가 사용되어 계산을 수행합니다.
이 코드는 C와 C++ 모두에서 사용될 수 있으며, 기본적인 문법 요소들을 잘 보여줍니다. 추가적인 질문이 있다면 언제든지 말씀해 주세요!