인덕대 C++-출처 smile han

c++ 2주차

Plki 2024. 9. 9. 16:42

아래는 C 언어와 C++ 언어의 장단점 및 사용 분야를 비교한 표입니다.

항목 C 언어 C++ 언어
장점 - 간결하고 효율적인 문법 - 객체 지향 프로그래밍 지원

- 하드웨어와 가까운 저수준 프로그래밍 가능 - 코드 재사용성 및 유지보수 용이

- 다양한 플랫폼에서 사용 가능 - STL(표준 템플릿 라이브러리) 제공

- 빠른 실행 속도 - 강력한 추상화 및 다형성 지원
단점 - 객체 지향 개념 부재 - 복잡한 문법 및 개념

- 메모리 관리가 수동적 - 실행 속도 저하 가능성 (추상화로 인한)

- 에러 처리 및 예외 처리 기능 부족 - 컴파일 시간 증가
사용 분야 - 임베디드 시스템 - 게임 개발

- 운영체제 및 시스템 프로그래밍 - GUI 애플리케이션

- 저수준 드라이버 개발 - 대규모 소프트웨어 개발

- 성능이 중요한 응용 프로그램 - 과학적 계산 및 시뮬레이션

 

 

#include <iostream>
int main()
{
std::cout << "소프트웨어" << std::endl;
std::cout << "소프트웨어1\n"<<'\n';
return 0;
}

 

주어진 C++ 코드에서 두 줄 출력 방식에 대한 차이점은 다음과 같습니다.

  1. 첫 번째 출력:
    • std::endl: 이 부분은 출력 후 줄 바꿈을 수행하고, 출력 버퍼를 비우는 역할을 합니다. 즉, 출력된 내용을 즉시 화면에 표시합니다.
    • 결과적으로, "소프트웨어"라는 문자열이 출력되고, 그 뒤에 줄 바꿈이 이루어집니다.
  2.  
    std::cout << "소프트웨어" << std::endl;
    
  3. cpp

  4. 두 번째 출력:
    • \n: 이 부분은 줄 바꿈만 수행합니다. 즉, "소프트웨어1"이라는 문자열이 출력된 후 줄 바꿈이 이루어지지만, 출력 버퍼를 비우지는 않습니다.
    • '\n': 이 또한 줄 바꿈을 추가하는 역할을 합니다. 추가적인 줄 바꿈이 이루어져 결과적으로 두 번의 줄 바꿈이 발생합니다.
  5. cpp

    std::cout << "소프트웨어1\n" << '\n';
    

요약

  • std::endl은 줄 바꿈과 함께 출력 버퍼를 비우는 반면, \n은 단순한 줄 바꿈만 수행합니다. std::endl은 성능에 영향을 줄 수 있으므로, 버퍼 비우기가 필요하지 않을 때는 \n을 사용하는 것이 일반적입니다.

 

1번쨰 C++출력

#include <iostream>
int main()
{
std::cout << "소프트웨어" << std::endl;
std::cout << "소프트웨어1\n"<<'\n';
return 0;
}

 

2번쨰 C++출력

#include <iostream>
using namespace std;
int main()
{
cout << "소프트웨어" << endl;
return 0;
}

 

3번쨰 C++출력

#include <iostream>
using std::cout; //더 좋은 방법
using std::endl;
int main()
{
cout << "소프트웨어" << endl;
return 0;
}

 1,3변쨰 방법을 많이씀

 

 

 
 
 

c++로 변형
#include <iostream>
using std::cout
using std::endl;
int main(void)
{
int num;
cout << "숫자 하나를 입력하세요 = ";
std::cin >> num;
cout << "입력받은 수는"<<num<<"입니다.";
return 0;
}

 

 

#include <iostream>
using std::cout
using std::cin;
int main(void)
{
int num;
cout << "나이를 입력하세요. = ";
cin >> num;
cout << "입력받은 나이는"<<num<<"입니다.";
return 0;
}
 
 
#include <iostream>
using std::cout;
using std::cin;
int main(void)
{
int num1, num2;
num1 = 100;
num2 = -300;
cout << "두 수의 합은" << num1+num2 << "입니다.";
return 0;
}

 

큰 따음표는 자동으로 null문자가 들어가 5byte필요.

 

 

아래는 정적 타입 언어와 동적 타입 언어의 차이점을 비교한 표입니다.

항목 정적 타입 언어 동적 타입 언어
타입 결정 컴파일 타임에 타입 결정 런타임에 타입 결정
예시 C, C++, Java, C# Python, JavaScript, Ruby, PHP
오류 검출 컴파일 과정에서 타입 관련 오류를 검출 실행 중에 타입 관련 오류를 검출
성능 일반적으로 더 빠른 실행 속도 런타임 타입 체크로 인해 상대적으로 느릴 수 있음
유연성 타입이 고정되어 있어 유연성이 낮음 타입이 유동적이어서 유연성이 높음
코드 작성 타입 선언이 필요하여 코드가 길어질 수 있음 타입 선언이 없어 코드가 간결해질 수 있음

 

전처리기(preprocessor)는 컴파일하기 전에 프로그램에 대한 일련의 작업을 수행.

표준<> 내가만든것 "  "

 

 

아래는 C, C++, Java, C#, Python의 주요 연산자의 차이점을 비교한 표입니다.

연산자 유형 C/C++ Java C# Python
산술 연산자 +,-,*,/,% +,-,*,/,% +,-,*,/,% +,-,*,/,%
증감 연산자 ++,-- ++,-- ++,-- 해당 없음
비교 연산자 ==,!=,<,>,<=,>= ==,!=,<,>,<=,>= ==,!=,<,>,<=,>= ==,!=,<,>,<=,>=
논리 연산자 &&, `
, !` &&, `
비트 연산자 &, ` , ^, ~, <<, >>` &, ` , ^, ~, <<, >>`
대입 연산자 =,+=,-=,*=,/=,%= =,+=,-=,*=,/=,%= =,+=,-=,*=,/=,%= =,+=,-=,*=,/=,%=
조건 연산자 ? : ? : ? : if-else,and
배열 인덱스 [] [] [] []
포인터 연산자 *,& 해당 없음 해당 없음 해당 없음
문자열 연결 strcat()사용 +(String 클래스) +(String 클래스) +

주요 차이점 요약

증감 연산자: C, C++, Java, C#에서는 사용 가능하지만 Python에서는 지원하지 않습니다.

논리 연산자: Python에서는and,or,not을 사용합니다.

문자열 연결: C에서는 함수 사용이 필요하지만, 다른 언어들은 연산자를 통해 직접 연결할 수 있습니다.

 

 

 

증가, 감소 연산자

 

 

 

아래는 여러 프로그래밍 언어에서의 캐스트 연산자에 대한 설명입니다.

언어 캐스트 연산자 설명
C ()를 사용하여 타입을 명시적으로 변환합니다. :(int) 3.14
C++ C와 유사하지만, 추가로static_cast,dynamic_cast,const_cast,reinterpret_cast를 지원하여 다양한 변환을 제공합니다.
Java (타입)을 사용하여 명시적 캐스트를 수행합니다. :(int) 3.14. 기본형과 객체 간의 변환이 가능합니다.
C# (타입)을 사용하여 캐스트합니다. :(int) 3.14. 또한as키워드를 사용해 안전한 타입 변환을 할 수 있습니다.
Python 타입()형태로 캐스트합니다. :int(3.14. 기본적으로 동적 타이핑을 지원하여 자동 캐스트가 이루어질 수 있습니다.

추가 설명

C/C++: 명시적 캐스트를 통해 데이터 타입을 변환하지만, 변환이 안전하지 않은 경우 주의가 필요합니다.

Java: 기본형과 객체 간의 변환이 가능하지만, 객체 캐스트 시ClassCastException이 발생할 수 있습니다.

C#:as키워드를 사용하면 변환이 실패할 경우null을 반환하여 예외를 방지할 수 있습니다.

Python: 동적 타이핑을 지원하므로 캐스트가 필요 없는 경우가 많지만, 명시적 변환도 가능합니다.

 

 

아래는 조건 연산자(?:) 연산자를 사용하는 여러 프로그래밍 언어의 예시를 포함한 표입니다.

언어 예시 코드 설명
C int result = (a > b) ? a : b; ab보다 크면 resulta, 아니면 b를 저장합니다.
C++ std::string message = (isError) ? "Error" : "Success"; isErrortrue이면 "Error", false이면 "Success"를 저장합니다.
Java int max = (num1 > num2) ? num1 : num2; num1num2보다 크면 maxnum1, 아니면 num2를 저장합니다.
C# string status = (isLoggedIn) ? "Logged In" : "Guest"; isLoggedIntrue이면 "Logged In", 아니면 "Guest"를 저장합니다.
JavaScript let result = (score >= 50) ? "Pass" : "Fail"; score50 이상이면 "Pass", 아니면 "Fail"을 저장합니다.
PHP $message = ($age >= 18) ? "Adult" : "Minor"; age18 이상이면 "Adult", 아니면 "Minor"를 저장합니다.
Swift let status = (isActive) ? "Active" : "Inactive" isActivetrue이면 "Active", false이면 "Inactive"를 저장합니다.

요약

각 언어에서?:연산자는 조건에 따라 서로 다른 값을 반환하는데 사용됩니다.

이는 코드의 가독성을 높이고 조건부 로직을 간결하게 표현할 수 있는 방법입니다.

 

아래는 여러 프로그래밍 언어에서의 관계 연산자를 정리한 표입니다.

언어 관계 연산자 설명
C ==,!=,<,>,<=,>= 두 값의 동등성 및 크기를 비교합니다.
C++ ==,!=,<,>,<=,>= C와 동일하게 사용됩니다.
Java ==,!=,<,>,<=,>= 기본형과 객체의 비교에 사용됩니다.
C# ==,!=,<,>,<=,>= Java와 유사하게 사용되며, 객체 비교 시 주의가 필요합니다.
JavaScript ==,===,!=,!==,<,>,<=,>= ==는 타입을 강제 변환하여 비교,===는 타입과 값을 모두 비교합니다.
PHP ==,===,!=,!==,<,>,<=,>= =====를 사용해 타입과 값을 비교합니다.
Python ==,!=,<,>,<=,>= 기본적으로 모든 값의 비교에 사용됩니다.
Swift ==,!=,<,>,<=,>= 모든 데이터 타입 간의 비교에 사용됩니다.

요약

관계 연산자는 주로 두 값의 동등성 및 크기를 비교하는 데 사용됩니다.

일부 언어에서는 타입 강제 변환을 고려해야 하며, 객체 비교 시 주의가 필요합니다.

 

 

 

C 언어에서 괄호 ()는 여러 용도로 사용됩니다. 아래에 주요 용도를 예시와 함께 설명하겠습니다.

1. 함수 호출

함수를 호출할 때 인자를 전달하기 위해 사용됩니다.

c

#include <stdio.h>

void sayHello() {
    printf("Hello, World!\n");
}

int main() {
    sayHello(); // 함수 호출
    return 0;
}

2. 수학적 표현식의 우선순위 지정

수학적 연산에서 연산의 우선순위를 명시하기 위해 사용됩니다.

c

#include <stdio.h>

int main() {
    int a = 5;
    int b = 10;
    int result = (a + b) * 2; // (a + b)의 결과를 먼저 계산
    printf("%d\n", result);   // 30 출력
    return 0;
}

3. 조건문 및 반복문

조건문(if, while, for)에서 조건을 작성할 때 사용됩니다.

c

#include <stdio.h>

int main() {
    int x = 10;
    if (x > 5) { // 조건을 괄호로 묶음
        printf("x는 5보다 큽니다.\n");
    }
    return 0;
}

4. 타입 캐스팅

변수의 타입을 변환할 때 괄호를 사용합니다.

c

#include <stdio.h>

int main() {
    double num = 9.7;
    int rounded = (int)num; // double을 int로 변환
    printf("%d\n", rounded); // 9 출력
    return 0;
}

5. 구조체 초기화

구조체를 초기화할 때도 괄호를 사용합니다.

c

#include <stdio.h>

struct Point {
    int x;
    int y;
};

int main() {
    struct Point p1 = { .x = 10, .y = 20 };
    struct Point p2 = (struct Point){ 30, 40 }; // 구조체 초기화
    printf("p1: (%d, %d), p2: (%d, %d)\n", p1.x, p1.y, p2.x, p2.y);
    return 0;
}

요약

C 언어에서 괄호 ()는 함수 호출, 연산자 우선순위 지정, 조건문 및 반복문에서의 조건, 타입 캐스팅, 구조체 초기화 등 다양한 용도로 사용됩니다. 각 용도에 따라 괄호의 사용법이 달라지므로, 적절한 상황에서 올바르게 사용하는 것이 중요합니다.

 

 

C 언어에서 중괄호 {}는 여러 용도로 사용됩니다. 아래에 주요 용도를 정리해 보았습니다.

1. 블록 정의

중괄호는 코드 블록을 정의하는 데 사용됩니다. 조건문, 반복문, 함수 등의 본체를 감싸는 역할을 합니다.

c

#include <stdio.h>

int main() {
    if (1) { // 조건문 블록
        printf("조건이 참입니다.\n");
    }
    return 0;
}

2. 함수 정의

함수의 본체를 정의할 때 중괄호를 사용합니다.

c

#include <stdio.h>

void greet() { // 함수 블록
    printf("안녕하세요!\n");
}

int main() {
    greet();
    return 0;
}

3. 구조체 및 공용체 정의

구조체(struct)와 공용체(union)의 정의에서 중괄호를 사용합니다.

c

#include <stdio.h>

struct Point { // 구조체 정의
    int x;
    int y;
};

int main() {
    struct Point p = {10, 20}; // 구조체 초기화
    printf("Point: (%d, %d)\n", p.x, p.y);
    return 0;
}

4. 배열 초기화

배열을 초기화할 때도 중괄호를 사용합니다.

c

#include <stdio.h>

int main() {
    int arr[] = {1, 2, 3, 4, 5}; // 배열 초기화
    for (int i = 0; i < 5; i++) {
        printf("%d ", arr[i]);
    }
    return 0;
}

5. 스위치문

스위치문 내 각 case에 대한 코드 블록을 정의할 때 중괄호를 사용할 수 있습니다.

c

#include <stdio.h>

int main() {
    int num = 2;
    switch (num) {
        case 1: {
            printf("숫자는 1입니다.\n");
            break;
        }
        case 2: {
            printf("숫자는 2입니다.\n");
            break;
        }
        default: {
            printf("숫자는 1도 2도 아닙니다.\n");
        }
    }
    return 0;
}

요약

C 언어에서 중괄호 {}는 주로 코드 블록, 함수 정의, 구조체 및 공용체 정의, 배열 초기화, 스위치문 내의 코드 블록 등을 정의하는 데 사용됩니다. 이를 통해 코드의 구조를 명확히 하고, 관련된 코드들을 그룹화할 수 있습니다.

 

C 언어에서 대괄호 []는 여러 용도로 사용됩니다. 주요 용도는 다음과 같습니다.

1. 배열 선언

대괄호는 배열을 선언할 때 사용됩니다. 배열의 크기를 지정할 수 있습니다.

c

#include <stdio.h>

int main() {
    int arr[5]; // 크기가 5인 정수형 배열 선언
    return 0;
}

2. 배열 초기화

배열을 선언하면서 동시에 초기화할 때 대괄호를 사용합니다.

c

#include <stdio.h>

int main() {
    int arr[] = {1, 2, 3, 4, 5}; // 배열 초기화
    return 0;
}

3. 배열 요소 접근

대괄호는 배열의 특정 요소에 접근할 때 사용됩니다.

c

#include <stdio.h>

int main() {
    int arr[] = {10, 20, 30};
    printf("%d\n", arr[1]); // 두 번째 요소에 접근 (20 출력)
    return 0;
}

4. 다차원 배열

대괄호는 다차원 배열을 선언할 때도 사용됩니다.

c

#include <stdio.h>

int main() {
    int matrix[2][3] = { {1, 2, 3}, {4, 5, 6} }; // 2x3 배열
    printf("%d\n", matrix[1][2]); // 6 출력
    return 0;
}

5. 포인터와 배열

대괄호는 포인터를 배열처럼 사용할 때도 사용됩니다.

c

#include <stdio.h>

int main() {
    int arr[] = {1, 2, 3};
    int *ptr = arr; // 배열의 시작 주소를 포인터에 저장
    printf("%d\n", ptr[1]); // 두 번째 요소에 접근 (2 출력)
    return 0;
}

요약

C 언어에서 대괄호 []는 배열의 선언, 초기화, 요소 접근, 다차원 배열 정의 및 포인터와 배열의 사용 등 다양한 용도로 사용됩니다. 배열을 다루는 데 있어 매우 중요한 역할을 합니다.

 
 

아래는 C 언어의 주요 개념인 식별자, 상수, 자료형, 변수, 전처리기, 연산자에 대한 설명과 예시를 포함한 표입니다.

개념설명예시
식별자 변수, 함수, 배열 등의 이름을 정의하는 규칙. 숫자로 시작할 수 없으며, 특수문자를 제외한 문자와 숫자의 조합으로 이루어짐. myVariable, sum, MAX_VALUE
상수 변하지 않는 값을 나타내며, 프로그램 실행 중 수정할 수 없는 값. 10, 3.14, 'A' (문자 상수), #define PI 3.14 (매크로 상수)
자료형 변수에 저장할 수 있는 데이터의 종류를 정의. 기본 자료형으로는 정수형, 실수형, 문자형 등이 있음. int, float, char, double
변수 데이터를 저장할 수 있는 메모리 공간을 가진 이름이 있는 식별자. 선언 후 값을 할당하고 사용할 수 있음. int age; (정수형 변수), float height; (실수형 변수)
전처리기 컴파일 전에 소스 코드를 처리하는 지시어로, 주로 헤더 파일 포함 및 매크로 정의에 사용됨. #include <stdio.h>, #define MAX 100
연산자 변수 및 상수에 대해 수행할 수 있는 연산을 정의. 산술 연산, 비교 연산, 논리 연산 등이 포함됨. +, -, *, / (산술 연산자), ==, != (비교 연산자), &&, `

자세한 설명

  1. 식별자:
    • C 언어에서 식별자는 프로그램의 구성 요소를 구분하기 위해 사용됩니다. 대소문자를 구별하며, 예약어(예: int, return 등)는 식별자로 사용할 수 없습니다.
  2. 상수:
    • 상수는 코드 내에서 변하지 않는 값을 의미합니다. 상수를 사용하면 코드의 가독성을 높이고, 값의 변경을 방지할 수 있습니다. 매크로 상수는 #define을 통해 정의하며, 코드 내에서 해당 이름으로 사용됩니다.
  3. 자료형:
    • C 언어는 다양한 자료형을 제공하여 각기 다른 형태의 데이터를 저장할 수 있습니다. 기본 자료형 외에도 구조체(struct), 공용체(union), 열거형(enum) 등 복합 자료형이 존재합니다.
  4. 변수:
    • 변수는 데이터를 저장하기 위한 메모리 공간을 할당받는 것이며, 사용하기 전에 반드시 선언해야 합니다. 선언된 변수는 값을 변경할 수 있으며, 프로그램 내에서 재사용 가능합니다.
  5. 전처리기:
    • 전처리기는 컴파일러가 소스 코드를 컴파일하기 전에 처리하는 지시어입니다. 주로 코드의 재사용을 위한 헤더 파일 포함이나, 특정 값을 매크로로 정의하는 데 사용됩니다.
  6. 연산자:
    • 연산자는 변수와 상수에 대해 수행할 수 있는 작업을 정의합니다. 산술 연산자는 수치 계산을, 비교 연산자는 값의 비교를, 논리 연산자는 논리적 관계를 평가합니다.

이러한 개념들은 C 언어 프로그래밍의 기본적인 요소로, 각각의 역할과 사용법을 이해하는 것이 중요합니다. 추가적인 질문이나 더 알고 싶은 내용이 있다면 언제든지 말씀해 주세요!

 

'인덕대 C++-출처 smile han' 카테고리의 다른 글

C++ 4주차  (0) 2024.10.01
C++ 3주차  (0) 2024.09.23
C++ 3주차 예습과제  (0) 2024.09.22
C++ 2주차 예습과제  (0) 2024.09.07
c++ 1주차  (1) 2024.09.02