정수형 int x,y,z 를 선언하였다.
정수형 int x,y 에는 계산 할 두 정수의 입력값을, z에는 정수를 계산한 계산값을 저장하고 정수형으로 표현 할 것이다.
또한 char은 문자형으로서 char order에 사칙연산을 대입 할 것이다. 연산기호 또한 문자에 포함된다.
변수의 이름은 사람마다 개인차가 있으며 꼭 예제처럼 변수 이름을 따라 할 필요는 없다.
여담으로 코드가 매우 길어지고 변수를 많이 사용 할 수록 프로그래머가 변수 이름을 무엇으로 정해야할지 많은 고민을 한다고 한다.
printf는 텍스트를 출력해주는 함수이다.
ex) printf("hello world!");
또한 printf("값 : %d", sum)은 풀어쓰자면,
값 : (정수를 표현) , sum(에서 값을 받아옴) 을 의미한다.
만약 sum이 아니라 x를 기입했다면 변수 x의 값을 가져오게 된다.
scanf는 입력을 가능하게 하고, 입력값을 변수에 저장시킬 수 있는 함수이다.
(물론 더 많은 용도로 사용될 수 있다)
ex) scanf("%d",&a);
scanf 다음에 printf와 동일하게 괄호와 큰따옴표를 열고 닫아주어야만 한다.
%d 는 정수를 입력받겠다는 것을 의미하고,
&a는 변수 a의 주소를 의미하는 것이다.
이런 식으로..
if와 else, else if는 "1"(진실) 혹은 "0"(거짓)으로 결과가 달리 나타나는 함수이다.
if (만약에)( a == 10 ) 이면
printf("값은 10이다.",sum)
이런 식으로 표현이 가능하다.
또한 else if는
else if ( a == 1) 이면
1이라는 값을 입력했을 때,
printf("값은 1이다.",sum)
처럼 if와 동일하게 사용이 가능하다.
하지만 주의해야 할 점은 프로그램은 위에서 아래로 실행되고 따라서 if문의 실행 순서는 항상 if 로 시작하게 된다.
else는 if와 else if 모두 거짓인 경우 실행된다.
예제를 예를 들어 설명해보겠다.
만약 char order 변수에 사칙연산이 아닌 다른 값 ?를 입력하였다고 가정하자.
?는 if와 else if 모두 포함되지 않기 때문에 if와 else if 조건이 참이 되지 않기 때문에, 계산을 하지 않는다.
이러할 때 else문을 사용하여
else
printf("지원하는 연산자가 아닙니다")
이런 식으로 표현이 가능하다.
더 자세하게 설명하자면
if ( a == 10) {
printf("값은 10이다.",sum)
}
else if ( a == 1) {
printf("값은 1이다.",sum)
}
else {
printf("known",sum)
}
이런 식으로 구성한다면,
10을 입력하게 된다면 "값은 10이다"라는 텍스트가 출력되고
1을 입력하게 된다면 "값은 1이다"라는 텍스트가 출력된다.
하지만 1과 10이 아닌 모든 수 "ex) 음수 양수 2~9 , 11 ~ inf" 는
"known"이라는 텍스트가 출력 될 것이다.
따라서 예제의 사칙연산 계산기는 if와 else if를 연산자 4개를 사용하였고
그 이외의 다른 기호를 기입하게 된다면 if문이 정상적으로 실행이 되지 않는다.
앞서 설명하였듯이 프로그램은 위에서 아래로 실행되며 if에서 참이 되지 않으면 else if로 넘어가게 되고 else if 또한 참이 되지 않으면 (있다면) 다음 else if문으로 넘어가는 것을 계속 반복한다.
else문은 if와 else if 그 어떠한 경우에도 참이 되지 못하는 경우 실행되는 것이다.
공지 목록
공지글
|
[실습] 계산기 만들기 (C, 1) 간단하게 용어를 정리하고 시작하겠습니다. '1 + 2'라는 수식에서 '+'는 연산자(operator)이고 '1'과 '2'는 '+' 연산자에 대한 피연산자(operand)라고 부릅니다. 첫 번째 정숫값을 입력 : 2 연산자 입력 (+, -, *, / 가능): * 두 번째 정숫값을 입력 : 8 2 * 8 = 16 계속하려면 아무 키나 누르십시오 . . .
#include <stdio.h> // printf, scanf_s 함수를 사용하기 위해! int main() { return 0; }
#include <stdio.h> // printf, scanf_s 함수를 사용하기 위해! int main() { // 연산자를 저장할 변수 char op_type; // 피연산자 두 개의 값을 저장할 변수 int num1, num2; return 0; }
printf("첫 번째 정숫값을 입력 : "); // 첫 번째 피연산자를 입력 받는다. scanf_s("%d", &num1); // 연산자와 함께 입력된 엔터키 제거 rewind(stdin); printf("연산자 입력 (+, -, *, / 가능): "); // 연산자를 입력 받는다. scanf_s("%c", &op_type, 1); // 연산자와 함께 입력된 엔터키 제거 rewind(stdin); printf("두 번째 정숫값을 입력 : "); // 두 번째 피연산자를 입력 받는다. scanf_s("%d", &num2);
첫 번째 정숫값을 입력 : 2 연산자 입력 (+, -, *, / 가능): / 두 번째 정숫값을 입력 : 0 오류가 발생했습니다! 0으로 나눌 수 없습니다! 계속하려면 아무 키나 누르십시오 . . . 그리고 나눗셈의 결과는 '%.3f 형식 지정자'를 사용하여 소수점 셋째 자리까지만 출력하도록 했습니다. 그리고 나눗셈 연산을 할 때는 실수 연산이 진행되도록 num2 변수를 double 자료형으로 형 변환을 시켜서
연산을 하도록 했습니다. switch (op_type) { case '+': // 덧셈 연산을 한다. printf("%d + %d = %d\n", num1, num2, num1 + num2); break; case '-': // 뺄셈 연산을 한다. printf("%d - %d = %d\n", num1, num2, num1 - num2); break; case '*': // 곱셈 연산을 한다. printf("%d * %d = %d\n", num1, num2, num1 * num2); break; case '/': // 나눗셈 연산을 한다. if (num2 == 0) printf("오류가 발생했습니다! 0으로 나눌 수 없습니다!\n"); else printf("%d / %d = %.3f\n", num1, num2, num1 / (double)num2); break; }
#include <stdio.h> // printf 함수와 scnaf_s 함수를 사용하기 위하여! int main() { // 연산자를 저장할 변수 char op_type; // 피연산자 두 개의 값을 저장할 변수 int num1, num2; printf("첫 번째 정숫값을 입력 : "); // 첫 번째 피연산자를 입력 받는다. scanf_s("%d", &num1); // 연산자와 함께 입력된 엔터키 제거 rewind(stdin); printf("연산자 입력 (+, -, *, / 가능): "); // 연산자를 입력 받는다. scanf_s("%c", &op_type, 1); // 연산자와 함께 입력된 엔터키 제거 rewind(stdin); printf("두 번째 정숫값을 입력 : "); // 두 번째 피연산자를 입력 받는다. scanf_s("%d", &num2); switch (op_type) { case '+': // 덧셈 연산을 한다. printf("%d + %d = %d\n", num1, num2, num1 + num2); break; case '-': // 뺄셈 연산을 한다. printf("%d - %d = %d\n", num1, num2, num1 - num2); break; case '*': // 곱셈 연산을 한다. printf("%d * %d = %d\n", num1, num2, num1 * num2); break; case '/': // 나눗셈 연산을 한다. if (num2 == 0) printf("오류가 발생했습니다! 0으로 나눌 수 없습니다!\n"); else printf("%d / %d = %.3f\n", num1, num2, num1 / (double)num2); break; } return 0; }
#include <stdio.h> // printf 함수와 scnaf_s 함수를 사용하기 위하여! int main() { // 연산자를 저장할 변수 char op_type; // 피연산자 두 개의 값을 저장할 변수 int num1, num2; printf("첫 번째 정숫값을 입력 : "); // 첫 번째 피연산자를 입력 받는다. scanf_s("%d", &num1); // 연산자와 함께 입력된 엔터키 제거 rewind(stdin); printf("연산자 입력 (+, -, *, / 가능): "); // 연산자를 입력 받는다. scanf_s("%c", &op_type, 1); // 연산자와 함께 입력된 엔터키 제거 rewind(stdin); printf("두 번째 정숫값을 입력 : "); // 두 번째 피연산자를 입력 받는다. scanf_s("%d", &num2); if (op_type == '+') { // 덧셈 연산을 한다. printf("%d + %d = %d\n", num1, num2, num1 + num2); } else if(op_type == '-') { // 뺄셈 연산을 한다. printf("%d - %d = %d\n", num1, num2, num1 - num2); } else if (op_type == '*') { // 곱셈 연산을 한다. printf("%d * %d = %d\n", num1, num2, num1 * num2); } else if (op_type == '/') { // 나눗셈 연산을 한다. if (num2 == 0) printf("오류가 발생했습니다! 0으로 나눌 수 없습니다!\n"); else printf("%d / %d = %.3f\n", num1, num2, num1 / (double)num2); } return 0; }
연산자 입력 : * 두 개의 연산할 값 입력 : 2 5 2 * 5 = 10 계속하려면 아무 키나 누르십시오 . . . 이렇게 하면 전체적으로 소스는 비슷하지만 scanf_s를 사용하는 부분만 달라지게 됩니다. 그리고 scanf_s 함수가
통합되어 rewind 함수는 이제 한 번만 사용하면 됩니다. #include <stdio.h> // printf 함수와 scnaf_s 함수를 사용하기 위하여! int main() { // 연산자를 저장할 변수 char op_type; // 피연산자 두 개의 값을 저장할 변수 int num1, num2; printf("연산자 입력 : "); // 연산자를 입력 받는다. scanf_s("%c", &op_type, 1); // 연산자와 함께 입력된 엔터키 제거 rewind(stdin); printf("두 개의 연산할 값 입력 : "); // 피연산자를 두 개 입력 받는다. scanf_s("%d %d", &num1, &num2); switch (op_type) { case '+': // 덧셈 연산을 한다. printf("%d + %d = %d\n", num1, num2, num1 + num2); break; case '-': // 뺄셈 연산을 한다. printf("%d - %d = %d\n", num1, num2, num1 - num2); break; case '*': // 곱셈 연산을 한다. printf("%d * %d = %d\n", num1, num2, num1 * num2); break; case '/': // 나눗셈 연산을 한다. if (num2 == 0) printf("오류가 발생했습니다! 0으로 나눌 수 없습니다!\n"); else printf("%d / %d = %.3f\n", num1, num2, num1 / (double)num2); break; } return 0; } 위 코드에서 정수가 아닌 실수를 연산하도록 변경하고 사칙 연산을 별도의 함수를 만들어서 사용하도록 재구성해보면 다음과
같습니다. #include <stdio.h> // printf 함수와 scnaf_s 함수를 사용하기 위하여! float Add(float x, float y) { return x + y; // x, y를 더한 결과를 반환한다! } float Sub(float x, float y) { return x - y; // x, y를 뺀 결과를 반환한다! } float Mul(float x, float y) { return x * y; // x, y를 곱한 결과를 반환한다! } float Div(float x, float y) { if (y == 0) { // 0으로 나누는 것을 방지한다! printf("[오류] : 0으로 나누면 안됩니다!\n"); return 0; } return x / y; // x에 y를 나눈 몫 값을 반환한다! } int main() { // 연산자를 저장할 변수 char op_type; // 피연산자 두 개의 값을 저장할 변수 float num1, num2; printf("연산자 입력 : "); // 연산자를 입력 받는다. scanf_s("%c", &op_type, 1); // 연산자와 함께 입력된 엔터키 제거 rewind(stdin); printf("두 개의 연산할 값 입력 : "); // 피연산자를 두 개 입력 받는다. scanf_s("%f %f", &num1, &num2); switch (op_type) { case '+': // 덧셈 연산을 한다. printf("%g + %g = %g\n", num1, num2, Add(num1, num2)); break; case '-': // 뺄셈 연산을 한다. printf("%g - %g = %g\n", num1, num2, Sub(num1, num2)); break; case '*': // 곱셈 연산을 한다. printf("%g * %g = %g\n", num1, num2, Mul(num1, num2)); break; case '/': // 나눗셈 연산을 한다. printf("%g / %g = %.3f\n", num1, num2, Div(num1, num2)); break; } return 0; } 만약, 연산 기능 자체를 함수화하고 싶다면 아래와 같이 구현해도 됩니다. 출력쪽은 단순화 시켰습니다. 만약 위와 같은 출력을 하고 싶다면 출력자체를 연산쪽으로 옮겨야 합니다. #include <stdio.h> // printf 함수와 scnaf_s 함수를 사용하기 위하여! float ProcessOP(float a_num1, float a_num2, char a_op_type) { float result; switch (a_op_type) { case '+': // 덧셈 연산을 한다. result = a_num1 + a_num2; break; case '-': // 뺄셈 연산을 한다. result = a_num1 - a_num2; break; case '*': // 곱셈 연산을 한다. result = a_num1 * a_num2; break; case '/': // 나눗셈 연산을 한다. if (a_num2 == 0) { // 0으로 나누는 것을 방지한다! printf("[오류] : 0으로 나누면 안됩니다!\n"); return 0; } result = a_num1/a_num2; break; default: result = 0; } return result; } int main() { // 연산자를 저장할 변수 char op_type; // 피연산자 두 개의 값을 저장할 변수 float num1, num2, result; printf("연산자 입력 : "); // 연산자를 입력 받는다. scanf_s("%c", &op_type, 1); // 연산자와 함께 입력된 엔터키 제거 rewind(stdin); printf("두 개의 연산할 값 입력 : "); // 피연산자를 두 개 입력 받는다. scanf_s("%f %f", &num1, &num2); result = ProcessOP(num1, num2, op_type); printf("result : %g\n", result); return 0; } |