프로그래밍

 3198, 1/160 회원가입  로그인  
   izero
   C언어 반복제어문 질문이요

http://www.hackerschool.org/HS_Boards/zboard.php?AllArticle=true&no=6313 [복사]


1) 문제:

2부터 9까지의 수 중 2개를 입력받아 입력받은 수 사이의 구구단을 출력하는 프로그램을 작성하시오.
단, 반드시 먼저 입력된 수의 구구단부터 아래의 형식에 맞게 출력하여야 한다.

입력 예: 5 3

5*1=5   4*1=4 3*1=3
5*2=10 4*2=8 3*2=6
...


2) 코드:

  1 #include <stdio.h>
  2
  3 int main(void)
  4 {
  5         int num1;
  6         int num2;
  7         int i;
  8
  9          printf("enter first number:");
10         scanf("%d",&num1);
11
12         printf("enter second number:");
13         scanf("%d",&num2);
14
15         if(num1<num2){
16                 for(i=1;i<10;i++){
17                         for(;num1<=num2;num1++){
18                                 printf("%d*%d=%d", num1,i,num1*i);
19                         }
20                 }
21         }
22
23         else if(num1>num2){
24                 for(i=1;i<10;i++){
25                         for(;num1>=num2;num1--){
26                                 printf("%d*%d=%d ", num1,i,num1*i);
27                         }
28                 }
29         }
30
31         return 0;
32 }

위에 문제에 대한 답으로 이런 코드를 작성하였는데 실행하면

3*1 4*1 5*1 까지만 나오고 종료 됩니다.

제 생각에는      

for(;num1<=num2;num1++){
                          printf("%d*%d=%d", num1,i,num1*i);
                          }

이 문장이 끝나고 다시  이 for(i=1;i<10;i++)문으로 돌아가 i=2,i=3 ... 이렇게 되야 될거 같은데 아닌가요?

  Hit : 4601     Date : 2013/03/12 11:02



    
nsh009 for 문 안의 변수들을 반대로 사용하셧습니다.

if(num1<num2)
{
for(;num1<=num2;num1++)
for(i=1;i<10;i++)
{
printf("%d * %d = %d \n", num1, i, num1*i);
}
}

그리공~ 가독성 때문에 \n 을 붙엿습니다.
2013/03/12  
nsh009 이렇게 첫번째 if 문 까지 고치고 하면 정상작동합니다. 아랫쪽 까진 손안댓구요.. 감잡으셧으면 바로수정 ㄱㄱ 2013/03/12  
izero 답변 감사합니다. nsh009님이 쓰신거처럼 하면 원하는 답은 다 나오는데 제가 원하는것과 조금 다르네요.
출력이

5*1=5 4*1=4 3*1=3
5*2=10 4*2=8 3*2=6

이렇게 세줄로 나눠서 나오게 하고 싶어서 for(i=1;i<10;i++)를 먼저 쓴건데 어떤 논리적 오류가 있는거 같긴 한데 감이 안잡히네요..
2013/03/12  
izero 여러방법으로 시도해본 결과 제가 for문이 끝나면 num1가 처음 입력한수로 자동으로 돌아간다고 잘못 생각해서 잘못된 출력이 나온건 알겠는데

위에 말한것처럼 세줄로 출력하는 방법은 scanf함수를 통해 num1을 새로 입력 받는 방법 밖에 없나요?

if(num1<num2){
16 for(i=1;i<10;i++){
17 for(;num1<=num2;num1++){
18 printf("%d*%d=%d", num1,i,num1*i);
19 }
PRITNF("ENTER FIRST NUMBER:");
SCANF("%d",&num1);
20 }
21 }
2013/03/12  
izero 처음에 입력한 num1를 저장하는 save1 변수를 만들고 for문 초기화문에 넣어줘서 해결됬습니다.
생각보다 간단한거여서 허무하네요..

1 #include <stdio.h>
2
3 int main(void)
4 {
5 int num1;
6 int save1;
7 int num2;
8 int i;
9
10 printf("enter first number:");
11 scanf("%d",&num1);
12
13 printf("enter second number:");
14 scanf("%d",&num2);
15
16 save1=num1;
17 if(num1<num2){
18 for(i=1;i<10;i++){
19 for(num1=save1;num1<=num2;num1++){
20 printf("%3d*%3d=%3d ", num1,i,num1*i);
21 }
22 printf("\n");
23 }
24 }
25
26 else if(num1>num2){
27 for(i=1;i<10;i++){
28 for(num1=save1;num1>=num2;num1--){
29 printf("%3d*%3d=%3d", num1,i,num1*i);
30 }
31 printf("\n");
32 }
33 }
34
35 return 0;
36 }
2013/03/12