본문 바로가기
C++

[C++ 프로그래밍] 5주차 함수 기억클래스 구조체

by heeaeeeee 2023. 10. 5.

1. 이 코드가 오류가 나는 이유 

#include <iostream>
int main()
{
    std::cout << "Hello World!\n";
}
int main()
{
    std::cout << "Hello World!\n";
}

main 함수가 두 번 정의되어 있기 때문입니다. C++에서는 하나의 프로그램에 main 함수가 정확히 한 번만 정의되어야 합니다.

2. 매개변수, 인자(argument), 리턴값

3. void

4. 1~6까지 랜덤한 숫자가 나오는 C++ 소스

#include <iostream> // 입출력을 위한 헤더 파일
#include <cstdlib>  // rand(), srand() 함수를 사용하기 위한 헤더 파일
#include <ctime>    // time() 함수를 사용하기 위한 헤더 파일
int main()
{
    srand(time(0));  
    // 현재 시간을 이용해 난수 생성기 초기화. 이 작업으로 인해 매 실행마다 다른 결과가 나옴
    int random_number = rand() % 6 + 1; 
    // rand() 함수는 임의의 수를 생성하고, "% 6" 연산으로 그 결과를 0~5 사이로 제한하고, "+1"로 최종적으로 1~6 사이의 수가 됨 
    std::cout << "Random number: " << random_number << std::endl; // 랜덤 숫자 출력
    return 0;
}

5. 함수 정의, 호출, 선언

6. 함수 만들기 1 : 전광판 함수

//1번 소스 : display() 함수가 먼저 정의되어 있어서 정상적으로 호출
#include <iostream>
void display() //정의
{
    std::cout << "kha\n";
}
int main()
{
    std::cout << "Hello World!\n";
    display(); //호출(call)
}

//2번 소스 : display() 함수가 호출 위치보다 뒤에 정의되어 있어서 컴파일 오류가 발생
#include <iostream>
int main()
{
    std::cout << "Hello World!\n";
    display(); //호출(call)
}
void display() //정의
{
    std::cout << "kha\n";
}

//3번 소스 : display() 함수가 선언된 후에 호출되므로, 실제 정의 위치는 후순위이며 문제 없이 작동
#include <iostream>
void display(); //선언
int main()
{
    std::cout << "Hello World!\n";
    display(); //호출(call)
}
void display() //정의
{
    std::cout << "kha\n";
}

7. 함수 만들기 2 : 두 배 해서 출력하기

#include <iostream>
void doubleInt(int x); //선언
int main()
{
    doubleInt(3); //호출(call)
}
void doubleInt(int x) //정의
{
    std::cout << x * 2;
}

8. return문

9. 함수 만들기 3 : 두 배 해서 리턴하는 함수

#include <iostream>
int doubleIntReturn(int x); //선언
int main()
{
    int x;
    std::cout << doubleIntReturn(2);
    x= doubleIntReturn(4);
    std::cout << x;
}
int doubleIntReturn(int x) //정의
{
    return x * 2;
}

10. 함수 만들기 4 : 두 수를 더해서 리턴하는 함수

#include <iostream>
int add(int x, int y); //선언
int main()
{
    std::cout << add(3, 6);
}
int add(int x, int y) //정의
{
    return x + y;
}

11. 함수 만들기 5 : 자판기 함수

#include <iostream>
char vending(int x); //선언
int main()
{
    std::cout << vending(1);
}
char vending(int x) //정의
{
    if (x == 1) return 'A';
    else return 'B';
}

12. 함수 만들기 6 : 문자 리턴 자판기 함수

#include <iostream>
const char* vending1(int x); //선언
std::string vending2(int x);
int main()
{
    std::cout << vending1(1);
    std::cout << vending2(1);
}
std::string vending2(int x) //정의
{
    if (x == 1) return "커피";
    else return "핫초코";
}
const char* vending1(int x)
{
    if (x == 1) return "커피";
    else return "핫초코";
}

13. 함수 만들기 7

#include <iostream>
double devide(int x, int y); //선언
int main()
{
    std::cout << devide(10, 4);
}
double devide(int x, int y) //정의
{
    return (double)x / y;
}

14. 함수의 정의와 선언(원형, prototype)

15. add 함수를 만들 때 int형 매개변수 x, y를 더해서 리턴하는 c, c#, c++, 자바, 파이썬 소스

//c
#include <stdio.h>
int add(int x, int y) {
    return x + y;
}
int main() {
    printf("%d", add(3, 4));  // 출력: 7
    return 0;
}

//c#
using System;
class Program {
    static int Add(int x, int y) {
        return x + y;
    }
    static void Main() {
        Console.WriteLine(Add(3, 4)); // 출력: 7
    }
}

//c++
#include <iostream>
int add(int x, int y) {
    return x + y;
}
int main() {
    std::cout << add(3, 4); // 출력: 7
    return 0;
}

//Java
public class Main {
   public static int add(int x, int y) {
       return x + y;
   }
   public static void main(String[] args) {
       System.out.println(add(3, 4)); // 출력: 7
   }
}

//Python
def add(x, y):
    return x + y
print(add(3,4)) # 출력: 7

16. 구조체 변수

17. 변수/배열/구조체

18. C struct vs C++ class

19. 구조체 : C vs C++

c 구조체는 변수만 넣을 수 있고 c++ 구조체는 구조체 안에 함수도 넣을 수 있다.

20. Man형 구조체를 선언하고 변수를 만들어서 멤버에 접근

#include <iostream>
struct Man {
    int age;
    double weight;
    std::string name;
};
int main()
{
    int x = 10;
    Man hee = { 7, 77.7, "gmo" };
    Man kim;
    std::cout << hee.name << " 나이는 " << hee.age << "살, 몸무게는 " << hee.weight << "kg 입니다.\n";
    hee.age = 22; hee.weight = 50.5; hee.name = "Hee Ae";

    kim = hee;
    std::cout << kim.name << " 나이는 " << kim.age << "살, 몸무게는 " << kim.weight << "kg 입니다.\n";
    std::cout << hee.name<<" 나이는 "<<hee.age<<"살, 몸무게는 "<<hee.weight<<"kg 입니다.\n";
}

구조체의 장점 : 멤버들이 각각 복사됨

21. 구조체를 활용한 가위바위보 게임 c++ 소스

#include <iostream>
#include <string>
#include <cstdlib> // rand와 srand 함수를 위해
#include <ctime> // time 함수를 위해

// 플레이어 정보를 저장하는 구조체
struct Player {
    std::string name;
    int score;
};

int main() {
    srand(time(0)); // 랜덤 시드 초기화
    int target = rand() % 100 + 1; // 1부터 100 사이의 랜덤 숫자 생성

    Player player; 
    player.score = 0;

    std::cout << "Enter your name: ";
    std::cin >> player.name;

    int guess;
    
    do {
        std::cout << "Guess the number (1 to 100): ";
        std::cin >> guess;

        player.score++; // 시도할 때마다 점수 증가

        if (guess > target) {
            std::cout << "Too high!\n";
        } else if (guess < target) {
            std::cout << "Too low!\n";
        }
        
     } while (guess != target); // 정답을 맞출 때까지 반복

     std::cout << "Congratulations, " << player.name 
               << "! You found the number in " 
               << player.score << " tries.\n";

     return 0;
}

 

 

C++ 강의 자료 참고했습니다.