내일배움캠프/강의 과제

C#문법 종합반 - 1주차 : 간단한 계산기 만들기

서보훈 2024. 9. 19. 16:12

1주차 과제로써, 콘솔창에 내용을 입력하고 해당 입력을 출력하거나 입력된 내용을 사용하여 계산후 출력하는 내용이 과제로 주어졌습니다.

 

이 과제 내용을 정리해보도록 하겠습니다.

문제 내용의 경우, 해당 강의주차의 강의자료에서 찾아볼 수 있습니다.


1-1 사용자로부터 입력 받기

이름과 숫자를 각각 입력받아 해당 내용을 기초로 문장을 출력해야하는 문제 입니다.

 

복잡한 내용은 아니기 때문에 바로 코드를 보도록 하겠습니다.

//사용자로부터 입력 받기
{
    //이름을 저장할 변수
    string name;
    //나이를 입력받아 저장할 변수
    string ageInput;
    //나이가 저장될 변수
    int age;

    Console.Write("이름을 입력하세요 : ");
    name = Console.ReadLine();

    Console.Write("나이를 입력하세요 : ");
    ageInput = Console.ReadLine();

    //만약, 입력된 나이를 int 형으로 변환하는데 실패하면, 그대로 프로그램 종료
    if (int.TryParse(ageInput, out age))
    {
        Console.WriteLine($"안녕하세요, {name}! 당신은 {age} 세 이군요.");
    }
}

저의 풀이 입니다.

Console.ReadLine() 을 통해 입력받은 값은 어떤 값을 쓰든 string 값으로 입력받게 됩니다.

이름을 입력받을경우, string 값을 그대로 사용하게 되지만, 나이의 경우 Int 값을 사용하여 받아주기 위해서 나이값을 입력받는 string 변수와, 이를 변환해 받아줄 int 변수를 선언하였습니다.

//나이를 입력받아 저장할 변수
string ageInput;
//나이가 저장될 변수
int age;

사실 출력만 하면 되기 때문에 해당 내용을 넘어가고 string 값 그대로 출력해도 결과에는 큰 문제가 없습니다.

 

이후 2개의 값을 각각 입력받아줍니다.

Console.Write("이름을 입력하세요 : ");
name = Console.ReadLine();

Console.Write("나이를 입력하세요 : ");
ageInput = Console.ReadLine();

 

입력받은 값을 변환하여, int 변수에 저장합니다.

//만약, 입력된 나이를 int 형으로 변환하는데 실패하면, 그대로 프로그램 종료
if (int.TryParse(ageInput, out age))
{
    Console.WriteLine($"안녕하세요, {name}! 당신은 {age} 세 이군요.");
}

이때, TryParse 문을 사용하여 변환에 성공했는지, 실패했는지를 판단하여 성공했을경우 보간법을 사용하여 변수 정보를 포함한 문자열을 출력하고 실패하면 문자열 출력 없이 프로그램을 종료하게 됩니다.

 

여기서 TryParse문은 변수의 형변환을 실행하는 함수로, 형변환에 성공하면 true, 실패하면 false를 반환하게 됩니다.

이 연산이 끝난후 out 에 입력된 변수에 성공했을경우 변환된 값을, 실패했을경우 실패값(이 경우, 0 저장)이 저장되게 됩니다.

 

위 코드를 해석하면 int.TryParse 를 사용하여 string 값인 ageInput 변수를 int 형태로 변환을 시도하고, 시도 결과를 if문으로 받아줍니다.

성공했을경우 true를 반환하고 int 변수인 age에 변환에 성공한 값을 저장하고 if문이 true이기 때문에 {} 내부의 내용을 실행합니다.

실패했을경우 false값을 반환하고 int 변수인 age에 0을 저장하게 됩니다.

if문의 경우 else문을 지정하지 않았기 때문에 false를 받아 아무런 행동을 하지 않게됩니다.

 

해당 과제의 풀이를 보도록 하겠습니다.

using System;

class Program
{
    static void Main()
    {
        Console.Write("이름을 입력하세요: ");
        string userName = Console.ReadLine();

        Console.Write("나이를 입력하세요: ");
        string userAge = Console.ReadLine();

        Console.WriteLine("안녕하세요, " + userName + "! 당신은 " + userAge + " 세 이군요.");
    }
}

 

제 풀이와 다르게, string 값을 그대로 사용하는것을 볼 수 있습니다.

이처럼 별개의 제한이나 계산을 요구하지 않는경우, 입력값을 그대로 사용하여도 무관할 수 있습니다.

 

또한 풀이에는 문자열을 더해서 출력하는것을 볼 수 있습니다.

이러한 출력은 사람마다 사용법이 다름으로, 자신이 편한 형태로 사용할 수 있습니다.

Console.WriteLine($"안녕하세요, {name}! 당신은 {age} 세 이군요.");
Console.WriteLine("안녕하세요, " + name + "! 당신은 " + age + " 세 이군요.");
Console.WriteLine("안녕하세요, {0}! 당신은 {1} 세 이군요.", name, age);

해당 3개의 코드는 모두 같은 출력을 발생시킵니다.


1-2 간단한 사칙연산 계산기 만들기

두 수를 입력받아 계산을 수행하고 계산내용을 출력하는 프로그램입니다.

수를 입력받아 계산을 해야하기 때문에, 이번에는 형 변환이 필수적인 내용이 됩니다.

 

코드를 보도록 하겠습니다.

//간단한 사칙연산 계산기 만들기
{
    //입력값을 받아줄 두개의 문자열 변수
    string inputNum1;
    string inputNum2;

    //int형으로 변환한 뒤 저장할 변수
    int num1;
    int num2;

    //더하기, 빼기, 곱하기, 나누기 연산을 저장할 변수들
    int sum;
    int sub;
    int mul;
    float div;

    //입력받기
    Console.Write("첫번째 수를 입력하세요 : ");
    inputNum1 = Console.ReadLine();

    Console.Write("두번째 수를 입력하세요 : ");
    inputNum2 = Console.ReadLine();

    //두 수를 모두 int 값으로 입력했는지 검증
    if (int.TryParse(inputNum1, out num1) && int.TryParse(inputNum2, out num2))
    {
        sum = num1 + num2;
        sub = num1 - num2;
        mul = num2 * num1;
        div = num1 / (float)num2;

        Console.WriteLine($"더하기 : {sum}");
        Console.WriteLine($"빼기 : {sub}");
        Console.WriteLine($"곱하기 : {mul}");
        Console.WriteLine($"나누기 : {div}");
    }
    else
    {
        Console.WriteLine("잘못된 입력입니다.");
    }

}

 

역시 2개의 입력을 받아줄 string 변수와 이를 변환해 저장할 2개의 int 변수를 선언하였습니다.

그리고 4개의 결과값 변수를 선언하였는데, 이를 선언하지 않고 출력문에 직접 계산을 실행하여 출력할 수도 있습니다.

 

//입력값을 받아줄 두개의 문자열 변수
string inputNum1;
string inputNum2;

//int형으로 변환한 뒤 저장할 변수
int num1;
int num2;

//더하기, 빼기, 곱하기, 나누기 연산을 저장할 변수들
int sum;
int sub;
int mul;
float div;

 

다음 2개의 값을 입력받습니다.

해당내용은 위와 같으니 넘기겠습니다.

 

TryParse 함수를 사용하여 문자열을 int 값으로 변환해줍니다.

//두 수를 모두 int 값으로 입력했는지 검증
if (int.TryParse(inputNum1, out num1) && int.TryParse(inputNum2, out num2))
{
    sum = num1 + num2;
    sub = num1 - num2;
    mul = num2 * num1;
    div = num1 / (float)num2;

    Console.WriteLine($"더하기 : {sum}");
    Console.WriteLine($"빼기 : {sub}");
    Console.WriteLine($"곱하기 : {mul}");
    Console.WriteLine($"나누기 : {div}");
}
else
{
    Console.WriteLine("잘못된 입력입니다.");
}

 

이때, if문에 두개의 TryParse함수를 사용하고 이를 && 를 통해 묶어두었습니다.

이는 논리 연산자로, AND 연산을 하여 두 값이 모두 true일때만 true를 반환하게 됩니다.

이전 글에 해당 내용이 정리되어있습니다.

https://gamerscode.tistory.com/16

 

걷기반 Lv.2 숫자...인가요?

1. 숫자를 두번 입력받아서 두번 다 숫자인지 확인프로그램을 처음 시작하면 “첫번째 수를 입력해 주세요.” 메시지 출력메시지를 입력하고 Enter“두번째 수를 입력해 주세요.” 메시지 출력메

gamerscode.tistory.com

또한 결과에는 false가 반환될경우 "잘못된 입력입니다." 가 출력되고, 프로그램이 종료되게 됩니다.

 

이후 각 값에 맞도록 연산을 실행하여 변수에 해당값을 저장합니다.

여기서 나누기 연산에 (float) 를 붙인것이 있습니다.

div = num1 / (float)num2;

위 예시를 보면 나누기 연산값이 0.5로 표기되어있는것을 볼 수 있는데, 지금 두 숫자는 int형으로 선언되어 나누기를 시도시 int값인 0으로 계산된 뒤, float 변수에 저장되게 됩니다.

여기서 두 값중 하나를 float형으로 변경하여 나누기를 시도하면 계산결과가 float값인 0.5가되고, 이 내용이 변수에 저장됩니다.

 

즉, 해당 내용의 (float)는 int형인 num2를 float형태로 변환하는 역할을 합니다.

 

풀이를 보도록 하겠습니다.

using System;

class Program
{
    static void Main()
    {
        Console.Write("첫번째 수를 입력하세요: ");
        int num1 = int.Parse(Console.ReadLine());

        Console.Write("두번째 수를 입력하세요: ");
        int num2 = int.Parse(Console.ReadLine());

        Console.WriteLine("더하기: " + (num1 + num2));
        Console.WriteLine("빼기: " + (num1 - num2));
        Console.WriteLine("곱하기: " + (num1 * num2));
        Console.WriteLine("나누기: " + ((float)num1 / num2));
    }
}

풀이에서는 int.Parse를 사용하여 입력된 내용을 즉시 int형으로 변경하여 변수에 저장하고, 출력에서 값을 연산하는것을 볼 수 있습니다.

해당방법을 사용할경우 짧게 int 값을 받아서 사용할 수 있지만, 변환이 불가능한 입력이 들어올경우 오류가 발생하여 프로그램이 멈추게 됩니다.

 


1-3 온도 변환기 만들기

입력된 내용에 계산을 실행해 계산된 내용을 출력하는 프로그램입니다.

코드를 보도록 하겠습니다.

//온도 변환기 만들기
{
    //입력받을 변수
    string input;
    //섭씨온도 - 입력받은 값을 float 로 변환
    float celsiusTem;
    //화씨온도가 저장될 변수
    float fahrenTem;

    Console.Write("섭씨 온도를 입력하세요 : ");
    input = Console.ReadLine();

    if (float.TryParse(input, out celsiusTem))
    {
        //float 변환 성공시, 화씨온도 변환
        fahrenTem = (celsiusTem * 1.8f) + 32;

        Console.WriteLine($"변환된 화씨 온도 : {fahrenTem}");
    }
}

마찬가지로 string 값으로 입력을 받고, 이를 변환하여 받아줄 float 변수를 선언해주었습니다.

이후 입력을 받아주는것까지 기존과 같습니다.

 

//입력받을 변수
string input;
//섭씨온도 - 입력받은 값을 float 로 변환
float celsiusTem;
//화씨온도가 저장될 변수
float fahrenTem;

Console.Write("섭씨 온도를 입력하세요 : ");
input = Console.ReadLine();

이후 if문을 통해 형변환시도의 결과에 따라 결과의 출력 여부를 결정합니다.

형변환에 성공할경우 입력된 내용에 공식을 적용하여 화씨온도에 저장한 후, 해당 내용을 출력합니다.

 

실패한경우 아무런 행동을 하지 않은채 프로그램이 종료됩니다.

if (float.TryParse(input, out celsiusTem))
{
    //float 변환 성공시, 화씨온도 변환
    fahrenTem = (celsiusTem * 1.8f) + 32;

    Console.WriteLine($"변환된 화씨 온도 : {fahrenTem}");
}

 

위의 내용과 다른점은 int가 아닌 float형으로 변환을 시도했다는점 입니다.

해당 내용 또한 사용시 int형과 크게 다르지 않기 때문에, 추가로 설명이 필요하지는 않을것 같습니다.

 

풀이를 보도록 하겠습니다.

using System;

class Program
{
    static void Main()
    {
        Console.Write("섭씨 온도를 입력하세요: ");
        float celsius = float.Parse(Console.ReadLine());

        float fahrenheit = (celsius * 9 / 5) + 32;
        Console.WriteLine("변환된 화씨 온도: " + fahrenheit);
    }
}

해당 내용에서도 큰 변화는 없습니다.

마찬가지로 float 변수에 입력한 값을 바로 변환을 시도하여 사용하는 모습이 보이는데, 위의 내용과 마찬가지로 변환이 불가능한 값이 입력될경우 오류가 발생하며 프로그램이 멈추게 됩니다.

 


1-4 BMI 계산기 만들기

2개의 입력을 받아서 내용을 계산한 뒤, 출력하는 프로그램입니다.

코드를 보도록 하겠습니다.

//입력값을 저장할 변수
string inputHeight;
string inputWeight;
//변환된 값을 저장할 변수
float height;
float weight;
//출력할 BMI 값
float bmi;

Console.Write("키(m) 를 입력하세요 : ");
inputHeight = Console.ReadLine();

Console.Write("몸무게(Kg) 를 입력하세요 : ");
inputWeight = Console.ReadLine();

if(float.TryParse(inputHeight, out height) && float.TryParse(inputWeight, out weight))
{
    bmi = weight / (height * height);
    Console.WriteLine($"당신의 BMI 는 {bmi} 입니다.");
}
else
{
    Console.WriteLine("잘못된 입력입니다.");
}

1-2의 내용과 유사하게, 2개의값을 입력받을 변수를 준비하고, 해당 내용을 저장할 변수또한 준비해주었습니다.

추가적으로 계산된 값을 저장할 변수또한 선언해주었습니다.

 

이후 1-2 내용과 같이 AND 연산자를 사용하여 두 값이 모두 변환에 성공했을때 계산을 수행하고, 결과를 출력하게 됩니다.

 

풀이 내용을 보도록 하겠습니다.

using System;

class Program
{
    static void Main()
    {
        Console.Write("체중(kg)를 입력하세요: ");
        float weight = float.Parse(Console.ReadLine());

        Console.Write("키(m)를 입력하세요: ");
        float height = float.Parse(Console.ReadLine());

        float bmi = weight / (height * height);
        Console.WriteLine("당신의 BMI: " + bmi);
    }
}

기존 1-2의 내용과 크게 다른부분은 없습니다.

마찬가지로 입력을 받는 즉시 float 형으로 변환을 시도하며, 계산결과를 저장할 float 변수를 새로 선언한 모습이 보입니다.