C/C++ 변수초기화 과정질문이요

조회수 1141회
#include <iostream>
using namespace std;

int main() 

{ 

int num1, num2; // 사용자에게 두 수를 입력받아 저장할 변수 

int i; // 반복을 위한 변수 

int oddSum = 0; // 홀수 합을 저장할 변수 

int evenSum = 0; // 짝수 합을 저장할 변수 

cout << "두개의 수를 입력해주세요" << endl;
cin >> num1 >> num2;


if (num1 > num2)

{ 

i = num1; 

num1 = num2; 

num2 = i; 

} 

// i는 num1부터 num2까지 1씩 증가하며 반복합니다. 

for (i = num1; i <= num2; i++)// i는 num1 ~ num2의 값을 가짐. 

{ 

if (i % 2 == 1) // i를 2로 나눴을 때 나머지가 1이면 즉, 홀수이면 

oddSum += i; // oddSum에 해당하는 i의 값을 누적시킵니다. oddSum = oddSum + i; 

else // i를 2로 나눴을 때 나머지가 1이 아닌 경우 즉, 짝수이면 

evenSum += i; // evenSum에 해당하는 i의 값을 누적시킵니다. evenSum = evenSum + i; 

} 

cout << num1 << " 부터 " << num2 << "까지의 \n";

cout << "홀수합 : " << oddSum << endl;
cout << "짝수합 : " << evenSum << endl;
cout << "홀수 와 짝수의 합 : " << oddSum + evenSum << endl;

return 0; 

}

반복문전에 if문에서 num1이 더클경우 num1과 num2의 변수값을 서로바꾼다고하는데요, 왜 i변수안에 num1을 넣나요? 그냥 num1 = num2; 라고하면안디나요? i변수를 꼭 생성하여 값을 저장해야하는지 궁금합니다. 또한 for문 안에 int i는 앞서 저정된 i = num2;랑은 다른변수인가요?

글읽어주셔서 감사합니다.

1 답변

  • 좋아요

    1

    싫어요
    채택 취소하기

    예를 들어 아래와 같이 저장되어 있을 때,

    num1=1;
    num2=2;`
    

    두 수를 교환하기 위해서, 말씀하신대로 아래와 같이 하게 되면

    num1=num2;    // num1: 2, num2: 2
    num2=num1;    // num1: 2, num2: 2
    

    첫 줄에서 num1에는 num2의 값인 2가 저장되고, 두번째 줄에서 이제 num1의 값은 2이므로 num2에는 2가 저장됩니다. 따라서 두 수는 바뀌지 않고 모두 2가 되어 버립니다.

    그래서 보통 두 변수값을 바꾸고 싶을 때 별도의 변수를 하나 이용합니다. 질문 코드에서는 i를 이용했는데, 보통 temp라는 이름의 변수를 많이사용합니다.

    다시 아래와 같은 같이 저장되어 있을 때,

    num1=1;
    num2=2;`
    

    아래의 코드는 num1과 num2의 값을 바꿉니다.

    temp=num1;    // temp: 1, num1: 1
    num1=num2;    // num1: 2, num2: 2
    num2=temp;    // num2: 1, temp: 1
    

    코드를 한줄씩 보시면, 최종적으로 num1에는 2가 num2에는 1이 저장되어 원래의 숫자가 바뀌게 됩니다. 이 세줄은 두 변수의 값을 바꾸는 전형적인 코드이기 때문에, 외워두시면 두고두고 써먹게 됩니다.

    참고로 for 루프안에 있는 변수 i도 바꿀 때 사용한 변수 i와 같은 변수입니다. 코드 작성자가 그냥 재활용한 것으로 생각됩니다. 그러나 가급적 의미를 알 수 있도록 temp(임시라는 뜻) 등으로 변수명을 만들어 사용하는 게 좋습니다.

    • (•́ ✖ •̀)
      알 수 없는 사용자
    • 이해하기 쉬운답변 너무감사합니다. 질문 올리고 관련책을 봐도 이해가잘안되었는데, 차분한 설명 감사드립니다. 안성훈 2020.10.9 06:46
    • 한가지 더 질문할수있을까요 안성훈 2020.10.9 06:46

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)