C++ 1일차(캠프)

정혜창·2024년 12월 23일
0

내일배움캠프

목록 보기
10/43
post-thumbnail

드디어 캠프 본강의에서 C++을 진행하였다. 발제는 라이브세션으로 진행되었고 강의는 언제나 들을 수 있게 업로드되어 볼 수 있었다. 금요일까지 최대한 공부를 하여 도전문제까지 풀 수 있도록 최선을 다해보겠다.

우선 오늘은 프로그래밍 기초 강의를 모두 들었다. 대부분 C를 공부할 때 배웠던 내용이라 이해하는데 큰 어려움은 없었다. 그러나 C++에서의 입출력은 C와 다르기도 하고 새로 배우거나 개념이 애매했던 것을 정리하고자 한다.


새로운 전처리기와 string

#include <iostream>
#include <string>
using namespace std;

int main() {
    // 변수 선언
    string name;
    int age;
    float height;

    // 문자열 입력
    cout << "이름을 입력하세요: ";
    getline(cin, name);

    // 정수 입력
    cout << "나이를 입력하세요: ";
    cin >> age;

    // 실수 입력
    cout << "키를 입력하세요 (cm): ";
    cin >> height;

    // 출력으로 확인
    cout << "\n입력한 정보:" << endl;
    cout << "이름: " << name << endl;
    cout << "나이: " << age << endl;
    cout << "키: " << height << " cm" << endl;

    return 0;
}
  • 위에서 보면 C에서 못보던 것이 보인다. #include <iostream> >은 C++ 에서 입력 출력을 수행하는데 필요한 헤더이다. C에서 <stdio.h> 를 생각하면 된다. <string> 같은 경우 std::string 을 사용하기 위해 선언한 헤더이다. 사실 <iosteam><string>도 포함이 되어있으나 <iostream> 헤더가 필요 없어 져서 지웠다고 가정하면, <string> 헤더도 동시에 사라지므로 코드는 제대로 컴파일이 안될 것이다. 따라서 std::string 클래스는 항상 #include <string>에 있다는 것을 명심하고, 까먹을 것을 대비해서 써놓는 습관은 나쁘지 않다.

  • using namespace std std의 클래스에 있는 함수들을 쓰겠다는 말이다. std클래스에는 C++의 입출력인 cout, cin (console out, in), endl(end line) 등 자주쓰는 함수들이 정의되어 있다. 그래서 만약 using namespace std를 선언하지 않으면 std::cout, std::cin, std::string 등으로 써주어야 한다.

  • getline(cin, name)는 문자열의 입력을 받을 때 사용을 한다. 좀 더 알아본 결과 <iostream>에 속한 cin.getline() 함수와 <string>에 속한 getline()이 있어 각각의 상황에 맞에 써야한다.



실습

  • 학생 5명의 점수를 입력 받고 총점과 평균을 내는 프로그램을 작성해보자. (함수와, 배열을 사용)

이문제를 보았을 때 곧바로 생각난 것은 배열의 총점을 더하는 함수, 평균을 내는 함수를 만들고 main에서 호출하는 형식이 생각났다.

첫번째 시도

#include <iostream>
using namespace std;

int temp = 0;

int totalscore(arr[])
{

    for (i = 0; i < 5; i++)
    {
        temp += arr[i];
    }

    return temp;
}

int average()
{
    int avr = 0;

    avr = temp / 5;

    return = avr;
}

int main(void)
{
    int score[5];

    cout << "첫번째 학생의 점수를 입력하세요 : ";
    cin >> score[0];
    cout << "두번째 학생의 점수를 입력하세요 : ";
    cin >> score[1];
    cout << "세번째 학생의 점수를 입력하세요 : ";
    cin >> score[2];
    cout << "네번째 학생의 점수를 입력하세요 : ";
    cin >> score[3];
    cout << "다섯번째 학생의 점수를 입력하세요 : ";
    cin >> score[4];

    cout << "학생들 점수의 총합은 : " << totalscore(score[5]) << endl;
    cout << "학생들 점수의 평균은 : " << average() << endl;

    return 0;
}

처음 내가 생각했던 답이다. 당연히 돌아가지 않는다. 직접 작성해보니 내가 함수 호출에 대한 개념이 매우 약하다는 것을 알았다. 우선 함수 배열을 어떻게 선언해야하는지 모르겠다. 최대한 디버깅하여 다시 코드를 작성하였다.

두번째 시도

#include <iostream>
using namespace std;

int temp = 0;

int totalscore(int arr[])		// 배열의 자료형 잊지말기
{
    for (int i = 0; i < 5; i++)	// 변수 i 자료형 선언
    {
        temp += arr[i];
    }

    return temp;
}

int average()
{
    int avr = 0;

    avr = temp / 5;

    return avr;					// = 는 왜 붙였을까...
}

int main(void)
{
    int score[5];

    cout << "첫번째 학생의 점수를 입력하세요 : ";
    cin >> score[0];
    cout << "두번째 학생의 점수를 입력하세요 : ";
    cin >> score[1];
    cout << "세번째 학생의 점수를 입력하세요 : ";
    cin >> score[2];
    cout << "네번째 학생의 점수를 입력하세요 : ";
    cin >> score[3];
    cout << "다섯번째 학생의 점수를 입력하세요 : ";
    cin >> score[4];
							// 배열 함수 호출 시 인덱스 없이 이름만 해도 된다.
    cout << "학생들 점수의 총합은 : " << totalscore(score) << endl;	// 
    cout << "학생들 점수의 평균은 : " << average() << endl;

    return 0;
}

정말 기본 방향을 맞았다. 예상했던대로 함수 배열에 미숙하여 생긴 오류가 있었고 정말 어이없는 실수 (자료형 빼먹기, =을 이상한 곳에 붙이는 등)도 간간이 보였다. 포스트잇에 적어서 오늘 실수한 것을 리마인드를 계속 해야겠다. 다음은 이런 방향을 토대로 5명이 아닌 입력한 사람수에 따른 합과 평균을 내는 프로그램으로 응용 해보았다.


첫번째 응용 : 입력한 사람수에 따른 점수의 합과 평균

우선 사람수가 달라지면 배열의 크기가 달라진다. 따라서 totalscore 함수의 for의 범위 또한 배열의 크기만큼 해줘야 하므로 매개변수가 하나 더 필요하다고 생각했다. 일단 sizeof()가 먼저 생각나긴했지만 그냥 int 변수를 매개변수로 해보는 걸로 코드를 작성해보았다.

작성해주려고 우선 메인 함수의 score배열을 입력한 수를 받게하려고 변수를 주려했는데 아차.... 배열의 크기는 변수로 할당 할 수 없다는 것을 깜박했다. 그럼 어떻게 해야할까? 심각하게 고민했다. 극단적으로 학생수가 1000명이 되어버릴 때 합과 평균을 쉽게 구하기 위해서는 배열은 필수이다.

알아본 결과 동적배열이라는 것이 존재했다. 이것은 쉽지 않은 개념이기도 하고 이걸 정확하게 이해하기 위해서는 포인터와 배열을 알아야 되므로 따로 정리하고 다루고자한다. (포인터와 배열은 따로 다룰 만큼 매우 중요하니깐...)

	
profile
Unreal 1기

0개의 댓글

관련 채용 정보