[코딩도장] Unit 27 ~ 31
1. 반복문 사용하기
1. for 문 사용하기
for 문은 반복 횟수를 지정해서 반복할 수 있다
초기식에는 반복을 시작할 값을 지정한다
조건식에는 얼마나 반복할지 지정한다
변화식은 반복할 때마다 루프 인덱스 변수(i)가 얼마나 변화할지 지정한다
// 초기식 조건식 변화식
// ↓ ↓ ↓
for (int i = 0; i < 100; i++)
{
반복할 코드
}
for (;;) // 초깃값, 조건식, 변화식을 모두 생략하면 무한 루프
printf("Hello, world!\n");
for 문에서도 무한루프를 만들 수 있다
상황에 따라 초기식, 조건식, 변화식을 생략하여 무한루프를 만들 수 있다
for (int i = 0; i < 100; i++)
printf("Hello, world!\n"); // 반복할 코드가 한 줄이라면 중괄호 생략
반복할 코드가 한 줄이라면 중괄호를 생략할 수 있다
for (int i = 0; i < 10; i++) // 바깥쪽 루프
{
for (int j = 0; j < 10; j++) // 안쪽 루프
{
}
}
반복문 안에 반복문이 들어있는 형태를 중첩 루프라고 한다
루프 인덱스 변수는 i 부터 순서대로 짓는다 ex) i j k
주로 가로 x 세로인 2차원 평면을 다룰 때 사용한다
2. while 문 사용하기
while 문은 반복할 횟수가 정해져 있지 않을 때 사용한다
조건이 만족하면 계속 반복하고
조건이 맞지 않으면 반복을 멈춘다
초기식
while (조건식)
{
반복할 코드
조건식의 결과에 영향을 주는 코드(변화식)
}
while (1) // while에 1을 지정하면 무한 루프
printf("Hello, world!\n");
while 문에서도 무한루프를 만들 수 있다
while 에서 조건식에 1을 지정하면 무한루프를 만들 수 있다
true 값을 지정해줘도 가능하다
while (1)
printf("Hello, world!\n"); // 반복할 코드가 한 줄이라면 중괄호 생략
마찬가지로 반복할 코드가 한 줄이라면 중괄호를 생략할 수 있다
3. do while 문 사용하기
do while 문은 반복할 횟수가 정해져 있지 않을 때 사용한다
do 부분은 조건식과 상관없이 최초 한번은 실행한다
while 문의 조건식이 맞으면 계속 반복하고 아니면 멈춘다
초기식
do // ↓ 조건식과는 상관없이 한 번은 실행됨
{
반복할 코드
조건식의 결과에 영향을 주는 코드(변화식)
} while (조건식)
do
{
printf("Hello, world!\n");
} while (0); // while에 0을 지정하면 코드가 한 번만 실행됨
while 에서 조건식 대신 0을 지정하면 코드가 한 번만 실행된다
4. break, continue 사용하기
반복문에서 break 을 사용하면 반복문을 끝낼 수 있다
while (조건식1)
{
if (조건식2)
break; // 반복문을 끝냄
}
반복문에서 continue 를 사용하면 코드의 일부를 건너뛸 수 있다
반복문을 끝내지 않고 계속 반복한다
while (조건식1)
{
if (조건식2)
continue; // 아래 코드를 건너뛴 뒤 계속 반복함
코드;
}
2.심사문제
27.12 알파벳 순서로 출력하기
표준 입력으로 문자 하나가 입력됩니다. 입력된 문자부터 z까지 순서대로 출력하는 프로그램을 만드세요(scanf 함수 호출 전에 문자열을 출력하면 안 됩니다).
정답에는 C 언어 컴파일러에서 정상적으로 컴파일되는 전체 코드를 입력해야 합니다.
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main() {
char c1;
scanf("%c", &c1);
// a = 97 z = 122
for(int i = 0; c1 + i <= 122; i++) {
printf("%c", c1 + i);
}
return 0;
}
28.11 교통카드 잔액 출력하기
표준 입력으로 금액이 입력됩니다. 1회당 요금은 1,200원이고, 교통카드를 사용했을 때마다의 잔액을 각 줄에 출력하는 프로그램을 만드세요(scanf 함수 호출 전에 문자열을 출력하면 안 됩니다). 단, 최초 금액은 출력하지 않아야 합니다. 그리고 잔액은 음수가 될 수 없으며 잔액이 부족하면 출력을 끝냅니다.
정답에는 C 언어 컴파일러에서 정상적으로 컴파일되는 전체 코드를 입력해야 합니다.
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main() {
int money;
int charge = 1200;
scanf("%d", &money);
while (money >= 1200) {
money -= charge;
printf("%d\n", money);
}
return 0;
}
29.10 숫자의 합 구하기
표준 입력으로 정수가 입력됩니다(입력 값의 범위는 0~1000). 다음 소스 코드를 완성하여 0부터 입력된 숫자까지의 합이 출력되게 만드세요.
정답에는 밑줄 친 부분에 들어갈 코드만 작성해야 합니다.
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
unsigned int num1;
unsigned int sum = 0;
scanf("%d", &num1);
unsigned int i = 0;
do
{
_____________
_____________
} while (i <= num1);
printf("%d\n", sum);
return 0;
}
정답
sum += i;
i++;
30.7 두 수 사이의 숫자 중 7로 끝나지 않는 숫자 출력하기
표준 입력으로 정수 두 개가 입력됩니다(첫 번째 입력 값의 범위는 1~200, 두 번째 입력 값의 범위는 10~200이며 첫 번째 입력 값은 두 번째 입력 값보다 항상 작습니다). 다음 소스 코드를 완성하여 첫 번째 정수와 두 번째 정수 사이의 숫자 중 7로 끝나지 않는 숫자가 출력되게 만드세요.
정답에는 밑줄 친 부분에 들어갈 코드만 작성해야 합니다.
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
int num1;
int num2;
int i;
scanf("%d %d", &num1, &num2);
i = num1;
while (1)
{
________________
________________
________________
________________
________________
________________
________________
printf("%d ", i);
i++;
}
return 0;
}
정답
if (i > num2)
break;
if (i % 10 == 7) {
i++;
continue;
}
첫번째 입력값(i) 은 두번째 입력값(num2) 보다 항상 작기 때문에
i > num2 가 될 시 반복을 멈춘다
7로 끝나는 숫자는 출력을 하면 안되기 때문에
continue 를 이용해서 건너뛰어준다
건너뛸 때 아래에 있는 i++ 를 건너뛰고 처음으로 돌아가기 때문에
※ i++ 를 추가해서 무한루프에 빠지지 않도록 한다
31.7 산모양으로 별 출력하기
표준 입력으로 삼각형의 높이가 입력됩니다(입력 값의 범위는 3~10). 입력된 높이만큼 산 모양으로 별을 출력하는 프로그램을 만드세요(scanf 함수 호출 전에 문자열을 출력하면 안 됩니다). 이때 출력 결과는 예제와 정확히 일치해야 합니다. 모양이 같더라도 공백이나 빈 줄이 더 들어가면 틀린 것으로 처리됩니다.
정답에는 C 언어 컴파일러에서 정상적으로 컴파일되는 전체 코드를 입력해야 합니다.
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main() {
int num;
scanf("%d", &num);
for (int i = 1; i <= num; i++) {
for (int j = 1; j <= num - i; j++)
printf(" ");
for (int k = 1; k <= 2 * i - 1; k++)
printf("*");
printf("\n");
}
return 0;
}
첫번째 for 문을 이용해서 높이를 지정해준다
0부터 시작할 시 첫줄은 출력을 하지 않기 때문에
인덱스 변수는 1로 시작해야 한다.
두번째 for 문은 공백을 출력한다
세번째 for 문은 * 을 출력한다
'Coding > C' 카테고리의 다른 글
[C언어] 포인터, 메모리 사용하기 - 코딩도장 (0) | 2023.12.20 |
---|---|
[C언어] goto 사용하기 - 코딩도장 (0) | 2023.12.18 |
[C언어] switch 분기문 - 코딩도장 (0) | 2023.12.13 |
[C언어] 비트 연산자 - 코딩도장 (0) | 2023.12.13 |
[C언어] 삼항 연산자, bool 자료형 - 코딩도장 (0) | 2023.12.11 |