c 질문이요! 배열을 막 공부하고 있는데.. 이 코드를 좀더 간결하게 가능할까요?
조회수 413회
#include <stdio.h>
int main(void) {
int aList[5];
int i = 0, nMin = 0, nMax = 0;
printf("Please input five numbers: ");
do {
scanf("%d", &aList[i]);
if(i==0) nMin = aList[0]; nMax = aList[0];
if(nMin > aList[i]) nMin = aList[i];
if(nMax < aList[i]) nMax = aList[i];
i++;
} while(i < 5);
printf("MIN: %d, MAX: %d\n", nMin, nMax);
}
5개의 정수를 입력받고 그중 최솟값과 최댓값을 출력하는 코드를 연습으로 만들어봤는데요..
좀더 간결하게 만들수 있을거같은데 떠오르지가 않아요.. 혹시 더 간결하게 만든다면 어떻게 일까요?!?!
입력 예:
1 5 2 4 3
출력 예 :
MIN: 1, MAX: 5
-
(•́ ✖ •̀)
알 수 없는 사용자
2 답변
-
아래 코드 참고하세요.
- 코드
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <limits.h> int main(void) { int aList[5]; int i = 0, nMin = INT_MAX, nMax = INT_MIN; printf("Please input five numbers: "); for (int i = 0; i < 5; i++) { scanf("%d", &aList[i]); if (nMin > aList[i]) nMin = aList[i]; if (nMax < aList[i]) nMax = aList[i]; } printf("MIN: %d, MAX: %d\n", nMin, nMax); }
- 결과
-
(•́ ✖ •̀)
알 수 없는 사용자
-
if(i==0) nMin = aList[0]; nMax = aList[0];
이 부분은 블록으로 묶여있지 않아서 정상동작하지 않습니다. 아래와 같이 블록으로 묶어주시기 바랍니다.
if(i==0) { nMin = aList[0]; nMax = aList[0]; };
간결(?)하게 수정한 코드는 아래와 같습니다.
#include <stdio.h> int main(void) { int aList[5] = {1,5,2,4,3}; int nMin = 0, nMax = 0; //printf("Please input five numbers: "); for(int i=0;i<5;i++){ int inputValue; //scanf("%d", &inputValue); inputValue = aList[i]; nMin = nMin>inputValue|!i?inputValue:nMin; nMax = nMax<inputValue|!i?inputValue:nMax; } printf("MIN: %d, MAX: %d\n", nMin, nMax); }
비트연산자와 삼항연산자를 사용하였습니다.
감사합니다.
-
(•́ ✖ •̀)
알 수 없는 사용자
-
댓글 입력