"/>

코드업 기초 – [기초-조건/반복실행구조]1071~1077번까지 해설,정답

-오픈튜토리얼스에서 배우기-

 

1071 : [기초-반복실행구조] 0 입력될 때까지 무한 출력하기1

문제 설명

정수가 순서대로 입력된다.
(2147483648−2147483648 ~ 21474836472147483647, 단 개수는 알 수 없다.)

0이 아니면 입력된 정수를 출력하고

0이 입력되면 출력을 중단해보자.

입력

정수가 순서대로 입력된다.
(2147483648−2147483648 ~ 21474836472147483647, 단 개수는 알 수 없다.)

출력

입력된 정수를 줄을 바꿔 하나씩 출력하는데, 0이 입력되면 0을 출력하고 종료한다.

입력 예시

7 4 2 3 0 1 5 6 9 10 8

출력 예시

7 4 2 3 0

문제 해설(코드업 도움말)

goto 명령문을 사용하면 간단한 반복실행을 만들 수 있다.

반복실행 부분을 빠져나오기 위해(즉 무한 반복을 방지하기 위해) 반복실행 되는 도중에 조건을 검사해야한다.

goto 이름:
명령은 이름: 이 작성된 곳으로 프로그램의 실행 흐름을 바꾸어 준다.

이름:과 같이 콜론(:)이 붙어있는 부분을 이름표(label, 레이블/라벨)라고 한다.

레이블은 특별한 선언없이 사용할 수 있으며 언더바(_)나 영문자로 시작하면 된다.

레이블은 한 단어처럼 모두 붙여써야한다.

switch( )…case …:…break; 에서 case … : 도 일종의 레이블이라고 생각할 수 있다.

goto 레이블;
명령을 사용하면 반복되는 부분을 여러 개 자유롭게 만들 수 있다.

goto 명령은 반복실행을 만들어낼 수 있는 가장 간단한 명령이지만,

복잡하게 사용하는 경우, 이해가 어렵고 오류가 생기기 쉽니다.  스파게티코드라고도 한다.

예시
int n;
reload:                    //레이블은 콜론( : ) 으로 끝난다.
scanf(“%d”, &n);
printf(“%d”, n);
if(n!=0) goto reload; //reload라고 적혀있는 레이블로 실행 이동

정답

#include<stdio.h>
int main()
{
int n;
reload:
scanf(“%d”, &n);
printf(“%d\n”, n);
if(n!=0) goto reload;
return 0;
}

1072 : [기초-반복실행구조] 정수 입력받아 계속 출력하기

문제 설명

n개의 정수가 순서대로 입력된다.
(-2147483648 ~ 2147483647, 단 n의 최대 개수는 알 수 없다.)

n개의 입력된 정수를 순서대로 출력해보자.

입력

첫 줄에 정수의 개수 n이 입력되고,
두번째 줄에 n개의 정수가 공백을 두고 입력된다.
(-2147483648 ~ 2147483647, 단 n의 최대 개수는 알 수 없다.)

출력

n개의 정수가 한 개씩 줄을 바꿔 출력된다.

입력 예시

5
1 2 3 4 5

출력 예시

1 2 3 4 5

정답

#include<stdio.h>
int main()
{
int n,m;
scanf(“%d”, &n);
reget:
scanf(“%d”, &m);
printf(“%d\n”, m);
if(–n!=0) goto reget; //reget:으로 이동, n의 값 1만큼 감소
return 0;
}

1073 : [기초-반복실행구조] 0 입력될 때까지 무한 출력하기2

문제 설명

정수가 순서대로 입력된다.
(-2147483648 ~ 2147483647, 단 개수는 알 수 없다.)

0이 아니면 입력된 정수를 출력하고

0이 입력되면 출력을 중단해보자.

입력

정수가 순서대로 입력된다.
(-2147483648 ~ 2147483647, 단 개수는 알 수 없다.)

출력

입력된 정수를 줄을 바꿔 하나씩 출력하는데, 0이 입력되면 0을 출력하고 종료한다.

입력 예시

7 4 2 3 0 1 5 6 9 10 8

출력 예시

7 4 2 3 0

문제 해설

scanf

whitespace 라고 불리는 문자들(스페이스, 개행문자, 탭 등등)을 처리하는 방식 때문이죠.
scanf(“%c”, &ch); 같이 문자 하나만 읽어오는게 아닐 경우에, 즉, 정수나 문자열, 실수를 읽어오는 경우에.
whitespace 가 아닌 문자들이 나올 때까지 중간에 읽어들인 whitespace 문자들을 모두 버립니다. 그리고 whitespace 가 아닌 문자를 만나는 시점부터, 진짜 입력이 시작됩니다.

space 는 편의상 *로 표현하겠습니다. $는 엔터입니다. 둘 다 whitespace 문자들입니다.

입력이 이렇게 들어오고, 입력버퍼에 저장됩니다.
>>입력버퍼상태 : 132*22*3563*432*5$

프로그램에 이런 문장들이 있다고 칩시다.
scanf(“%d”, &a);
scanf(“%d”, &b);
scanf(“%d”, &c);

scanf(“%d”, &a); 문이 실행되면, 첫 문자를 검사합니다. ‘1’이네요? whitespace가 아니므로 여기부터 입력이 시작됩니다.
10진수로 인식할 수 있는 한 최대한 많이 버퍼에서 읽어들입니다.
1, 3, 2를 차례로 읽습니다. 그 다음에 나오는 space는 당연히, 10진수 표현에서 배제되므로 읽지 않습니다. (버퍼에 남겨집니다.)
그리고 읽어들인 수들로 실제 값을 알아내서 변수 a에 저장합니다.

>>입력버퍼상태 : *22*3563*432*5$

scanf(“%d”, &b); 문이 실행되면, 첫 문자를 검사합니다. space네요. whitespace는 버립니다. (어디에도 저장되지 않습니다.)

>>입력버퍼상태 : 22*3563*432*5$

다음 문자인 ‘2’가  whitespace 가 아니므로 여기부터 입력이 시작됩니다.
10진수로 인식할 수 있는 한 최대한 많이 버퍼에서 읽어들입니다. …중략… 변수 b에 저장합니다.

>>입력버퍼상태 : *3563*432*5$

차례로 3563, 432 가 저장되고 이제,

>>입력버퍼상태 : *5$

이 상태로 왔습니다.

whitespace 버립니다. ‘5’는 숫자이므로 여기부터 입력이 시작됩니다. 그리고 다음 문자를 읽었더니 개행문자네요. 여기서 입력이 끝납니다.

>>입력버퍼상태 : $

최종적으로 입력버퍼에는 엔터만 남게 됩니다.

http://m.todayhumor.co.kr/view.php?table=total&no=7901303

정답

#include<stdio.h>
int main()
{
int n=1;
while(n!=0)
{
scanf(“%d”, &n);
printf(“%d\n”, n);
}
return 0;
}

1074 : [기초-반복실행구조] 정수 한 개 입력받아 카운트다운 출력하기1

문제 설명

정수 한 개가 입력되었을 때 카운트다운을 출력해보자.
(1 ~ 100)

입력

정수 한 개가 입력된다.
(1 ~ 100)

출력

1만큼 씩 줄여 한 줄에 하나씩 1이 될 때까지 출력한다.

입력 예시

5

출력 예시

5 4 3 2 1

정답

#include<stdio.h>
int main()
{
int n;
scanf(“%d”, &n);
while(n!=0)
{
printf(“%d\n”, n);
n–;
}
return 0;
}

1075 : [기초-반복실행구조] 정수 한 개 입력받아 카운트다운 출력하기2

문제 설명

정수 한 개가 입력되었을 때 카운트다운을 출력해보자.
(1 ~ 100)

입력

정수 한 개가 입력된다.
(1 ~ 100)

출력

1만큼 씩 줄여 한 줄에 하나씩 0이 될 때까지 출력한다.5

입력 예시

5

출력 예시

4 3 2 1 0

정답

#include<stdio.h>
int main()
{
int n;
scanf(“%d”, &n);
while(n!=0)
{
n–;
printf(“%d\n”, n);
}
return 0;
}

1076 : [기초-반복실행구조] 문자 한 개 입력받아 알파벳 출력하기

문제 설명

영문자 한 개가 입력되었을 때 그 문자까지의 알파벳을 순서대로 출력해보자.
(a ~ z)

입력

영문자 한 개가 입력된다.
(a ~ z)

출력

a부터 입력한 문자까지 순서대로 공백을 두고 출력된다.

입력 예시

f

출력 예시

a b c d e f

정답

#include<stdio.h>
int main()
{
char n,m=’a’;
scanf(“%c”,&n);
do
{
printf(“%c “, m);
m++;
}while(m<=n);
return 0;
}

1077 : [기초-반복실행구조] 정수 한 개 입력받아 그 수까지 출력하기

문제 설명

정수 한 개를 입력받아 0부터 그 수까지 순서대로 출력해보자.
(0 ~ 100)

입력

정수 한 개가 입력된다.
(0 ~ 100)

출력

0부터 그 수까지 줄을 바꿔 한 줄씩 출력한다.

입력 예시

4

출력 예시

0 1 2 3 4

정답

#include<stdio.h>
int main()
{
int n,i;
scanf(“%d”, &n);
for(i=0;i<=n;i++)
{
printf(“%d\n”,i);
}
return 0;
}

 

1 thought on “코드업 기초 – [기초-조건/반복실행구조]1071~1077번까지 해설,정답”

댓글 남기기

Scroll Up