문제 1
Switch문을 이용한 사칙연산 프로그램 작성하기
입력 : [정수1] [사칙연산 부호] [정수2]
출력 : [정수1] [사칙연산 부호] [정수2] = [연산 후의 값]
출력 결과 예시
풀이
#include <stdio.h>
int main(){
int num1, num2, result; //계산할 숫자와 결과값을 저장할 변수 선언
char calcul; //사칙연산 기호를 저장할 변수 선언
printf("수식을 입력하시오.: ");
scanf("%d %c %d", &num1, &calcul, &num2); //'1 + 2'의 형태로 입력값을 받음
switch (calcul)
{
case '+' : //calcul변수에 저장된 문자가 '+'일 때
result = num1 + num2;
break; //break문을 작성해 switch문에서 나감
case '-' :
result = num1 - num2;
break;
case '/' :
result = num1 / num2;
break;
case '*' :
result = num1 * num2;
break;
default:
printf("잘못된 입력입니다.");
break; //사칙연산 기호 외의 문자가 입력될 시 "잘못된 입력입니다." 출력
}
if (calcul == '+' || calcul == '-' || calcul == '*' || calcul == '/'){
printf("%d %c %d = %d", num1, calcul, num2, result); //출력
}
}
문제 2
세 정수를 입력받아 가장 큰 수 출력하기
입력 : [정수1] [정수2] [정수3]
출력 : [정수 1~3 중 가장 큰 수]
출력 결과 예시
풀이
#include <stdio.h>
int main(){
int num1, num2, num3, big; //정수 3개를 받을 변수와 가장 큰 수를 저장할 변수 선언
printf("정수 입력:");
scanf("%d %d %d", &num1, &num2, &num3);
if (num3 >= num2 && num3 >= num1) {
big = num3; //num3을 num1, num2와 비교했을 때 크다면 big에 num3을 저장
}
else {
if (num2 >= num1) {
big = num2; //num3보다는 작지만 num2가 num1보다 크다면 big에 num2를 저장
}
else {
big = num1; //num3, num2가 모두 num1보다 작다면 big에 num1 저장
}
}
printf("가장 큰 수 : %d", big);
}
느낀 점 / 배운 점
switch문에서 break문을 쓰지 않으면 모든 case문과 default문의 결과값이
출력된다는 것을 다시 한번 알게 됐다.
문제 1에서 default문으로 사칙연산 기호 외의 문자가 입력되면
"잘못된 입력입니다."를 출력하고 싶었다.
마지막 최종 출력 값에 result값이 출력되는 것 때문에
"잘못된 입력입니다.8 @ 5 = 32764"
이런 식으로 오류가 발생했다.
이 문제를 각 case문에 printf를 하는 구문을 넣어 해결할 수도 있었겠지만
똑같은 코드를 여러 번 쓰는 것이 싫었다.
그래서 어떻게 할까 고민하다가 if문을 하나 더 넣어
+, =, *, / 중 하나가 calcul에 할당되어있다면
printf를 하도록 작성하였다.
문제1과 2의 코드를 어떻게 하면 간단하게 짤 수 있을까 고민하고 고쳐보긴 했다.
그래도 더 짧게 만들 수 있는 좋은 방법이 있을 것 같은데 생각이 잘 안 난다...!
'Programming Language > C' 카테고리의 다른 글
C언어 멘토링 | 5주차 [과제] (0) | 2022.05.16 |
---|---|
C언어 멘토링 | 4주차 [과제] (0) | 2022.05.07 |
C언어 멘토링 | 3주차 [과제] (0) | 2022.05.03 |
C언어 멘토링 | 1주차 [과제] (0) | 2022.04.06 |
C언어 멘토링 - 1주차 (0) | 2022.04.06 |