abc입력 받고 가장 큰 수 출력하기
문제 분석
1. abc 입력받는다
2. a>b 케이스 b>a 케이스 나눈다
3. a> b 인경우
-a>c면 a가 최대.
-아니면 c가 최대
b>a인 경우
-b>c면 b가 최대
-아니면 c가 최대
if문 이용
내가 작성한 코드
int main(void) {
int a, b, c;
printf("a,b,c를 입력하시오.");
scanf("%d%d%d", &a, &b, &c);
if (a > b) {
if (a > c) printf("최대값은 %d", a);
else printf("최대값은 %d", c);
}
if (b > a) {
if (b > c) printf("최대값은 %d", b);
else printf("최대값은 %d", c);
}
}
강의에서 작성한 코드
int main(void) {
int a, b, c;
printf("a,b,c를 입력하시오.");
scanf("%d%d%d", &a, &b, &c);
if (a > b) {
if (a > c) printf("최대값은 %d", a);
else printf("최대값은 %d", c);
}
else { // 여기에 else if 쓰면 오류남. 왜..??
if (b>c) printf("최대값은 %d", b);
else printf("최대값은 %d", c);
}
}
여기에서 식을 더 줄일 수 있다.
int main(void) {
int a, b, c;
printf("a,b,c를 입력하시오.");
scanf("%d%d%d", &a, &b, &c);
if (a > b) {
if (a > c) printf("최대값은 %d", a);
else printf("최대값은 %d", c);
}
else if (b>c) printf("최대값은 %d", b); //else와 if(b>c)를 하나로 합쳐 else if로 함.
else printf("최대값은 %d", c); //위 두개를 다 충족하지 않으면 c를 출력하도록 else 사용.
}
그러나 이 식은 한번에 식을 이해하기 어려워서 비추!
무조건 짧게 한다고 능사는 아니다. 남이 볼 때 한번에 알 수 있게 정갈하게 짜는 게 좋다.
중괄호 같은 것만 잘 정리하기..
if,else if, else 차이?
예를 들어
if문이 3개가 있으면 첫번째 조건이 참이더라도 나머지들도 다 확인하면서 내려옴. 나중에 프로그램을 짤 때 이렇게 짠다면 구동시간이 많이 길어질 것이다.
else if를 같이 쓰면 위의 if 조건이 맞지 않으면, 그 다음 것을 하나씩 확인하면서 내려오다가 맞는 조건에서 멈춤.
else는 if와 else if에 충족되지 않는 것들을 모두 출력시킴.
swich문
>>>>~~~~~
문제 분석
ㅡ1,2,3,4 중 무엇을 누르느냐에 따라 다르게 출력문 나오도록 프로그램 작성
ㅡ일단 1,2,3,4 누르면 뭐에 해당하는지 각각 설명.
ㅡ사용자가 숫자 입력(scanf 이용,그 값 받으려는 정수 변수 먼저 선언.)
ㅡ사용자가 번호 누르면 해당 번호에 맞는 문장 출력
int main(void) {
int num;
printf("번호를 선택해 주세요.");
printf("1 : ㄱ입니다.\n");
printf("2 : ㄴ입니다.\n");
printf("3 : ㄷ입니다.\n");
printf("4 : ㄹ입니다.\n");
scanf("%d", &num);
switch (num) {
case 1: printf("ㄱ"); break;
case 2: printf("ㄴ"); break;
case 3: printf("ㄷ"); break;
case 4: printf("ㄹ"); break;
default:break;
}
}
break 유무에 따라 출력이 어떻게 다른가?
1.
int main(void) {
int num;
printf("번호를 선택해 주세요.");
printf("1 : ㄱ입니다.\n");
printf("2 : ㄴ입니다.\n");
printf("3 : ㄷ입니다.\n");
printf("4 : ㄹ입니다.\n");
scanf("%d", &num);
switch (num) {
case 1: printf("ㄱ");
case 2: printf("ㄴ");
case 3: printf("ㄷ");
case 4: printf("ㄹ"); break;
default:break;
}
}
>> 1을 누르면, 1의 해당하는 ㄱ이 출력됨.
그런데 break가 없으므로 멈추지 않고 밑에 것까지 계속 읽으며 내려가서 줄줄이 출력하고
ㄱ,ㄴ,ㄷ,ㄹ까지 출력하고 ㄹ에서 braek 걸려서 멈춤
2.
int main(void) {
int num;
printf("번호를 선택해 주세요.");
printf("1 : ㄱ입니다.\n");
printf("2 : ㄴ입니다.\n");
printf("3 : ㄷ입니다.\n");
printf("4 : ㄹ입니다.\n");
scanf("%d", &num);
switch (num) {
case 1: printf("ㄱ");
case 2: printf("ㄴ");
case 3: printf("ㄷ");
case 4: printf("ㄹ");
default:break;
}
}
>>1을 입력하면, ㄱㄴㄷㄹ 출력되고
2를 입력하면 ㄴㄷㄹ 출력....
break가 없으므로 중간에 멈추는 게 없어서 그냥 아래까지 모조리 출력
3.
int main(void) {
int num;
printf("번호를 선택해 주세요.");
printf("1 : ㄱ입니다.\n");
printf("2 : ㄴ입니다.\n");
printf("3 : ㄷ입니다.\n");
printf("4 : ㄹ입니다.\n");
scanf("%d", &num);
switch (num) {
case 1: printf("ㄱ"); break;
case 2: printf("ㄴ");
case 3: printf("ㄷ");
case 4: printf("ㄹ");
default:break;
}
}
>>이런경우에 1을 입력하면 ㄱ만 출력되고 멈추지만
2를 입력했을 때는 마찬가지로 아래에 break가 없으므로 ㄴㄷㄹ이 출력된다
goto문을 이용해서 코드를 짤 수도 있음
int main(void) {
int num;
makenum: >>키를 입력받는 작업을 makenum 으로 묶음
printf("번호를 선택해 주세요.");
printf("1 : ㄱ입니다.\n");
printf("2 : ㄴ입니다.\n");
printf("3 : ㄷ입니다.\n");
printf("4 : ㄹ입니다.\n");
scanf("%d", &num);
switch (num) {
case 1: printf("ㄱ"); break;
case 2: printf("ㄴ");
case 3: printf("ㄷ");
case 4: printf("ㄹ");
default:
break;
goto makenum; >>만일 케이스 외의 경우가 들어오면 기본값인 'goto makenum' 실행.
다시 위로 올라가 makenum(키를 재입력)하게 함.
}
}
그러나 goto문을 쓰게 되면 스파게티 코드가 될 수 있다고 하셨음.... 쓰지 말라고 하심 쓰지 말것.
그리고 소괄호랑 중괄호 구분해서 코드 잘 짤 것.
복습 끝
'C언어' 카테고리의 다른 글
20230221 C언어 공부 (반복문, while문, do문, for문, 중첩반복문) (+break,continue) (0) | 2023.02.22 |
---|