728x90
반복 알고리즘 ->while, for, do while 와 같은 반복문법을 사용한다.
while문
- 실행 전 반복할지 판단 = '사전 판단 반복 구조'
형태
while(조건) {
명령문
}
for문
- 하나의 변수를 사용할 때는 while보다 for문이 좋다.
형태
for(초기값: 조건값: 증감값) {
명령문
}
Q7: n에 따라 1부터 n까지의 합을 출력하는 프로그램 만들기.
ex) if n = 4, 1 + 2 + 3 + 4 = 10 형태로 출력
int main(void) {
int N;
int sum = 0;
scanf("%d", &N);
for (int i = 1; i < N; i++) {
printf("%d", i);
printf(" + ");
sum += i;
}
printf("%d = %d\n",N, sum + N);
return 0;
}
Q8: 가우스 덧셈으로 sum = (a + b)/ (b/2) 형태로 a, b에 값을 넣으면 된다.
Q9: 정수 합을 구하는 함수 만들기 -> 가우스 덧셈으로도 만들 수 있지만 for문으로 만들면 다음 코드와 같다.
int sumof(int a, int b) {
int sum = 0;
if (a < b) {
for (int i = a; i <= b; i++) {
sum += i;
}
}
else {
for (int i = b; i <= a; i++) {
sum += i;
}
}
return sum;
}
do while문
- 사후 판단 반복문
- while과 차이점: do while은 반드시 한번은 실행된다.
형태
do {
명령문
} while(조건)
Q11. 양의 정수를 입력하고, 자릿수 출력하는 프로그램 작성.
int main(void) {
int n;
int cnt = 0;
scanf("%d", &n);
do {
n = n / 10;
cnt++;
} while (n > 0);
printf("%d", cnt);
}
다중 루프
루프를 중첩시키는 것
이중 for 문일 때) 바깥 for문은 행, 안쪽 for문을 열이다. -> 배열에서도 중요하게 사용
Q15: 높이, 너비에 맞는 직사각형을 * 기호로 출력하기.
위에서 말했던 것처럼 높이는 행, 너비는 렬으로 따진다면 바깥 for문에 높이, 안쪽 for문에 너비를 넣으면 된다.
int main(void) {
int h, w;
scanf("%d", &h);
scanf("%d", &w);
for (int i = 0; i < h; i++) {
for (int j = 0; j < w; j++) {
printf("*");
}
printf("\n");
}
return 0;
}
Q17: n단 피라미드 함수 만들기.
오랜만이라 조금 어려웠다. 공백인 구간을 설정할 때, 그림을 그려서 활용했다. 다음 행으로 갈 때마다 공백이 하나씩 주는 것을 참고해서 if문을 만들었다.
void spira(int n) {
// i는 층수
for (int i = 1; i <= n; i++) {
// j는 같은 층에서 별 놓을 자리
// cnt는 별을 놓은 개수, max는 그 층에 최대 놓을 수 있는 별의 개수
int cnt = 0;
int max = (i - 1) * 2 + 1;
for (int j = 0; j < (n - 1)*2 + 1; j++) {
if (j < (n - i)) {
printf(" ");
}
else {
if (cnt < max) {
printf("*");
cnt++;
}
else {
break;
}
}
}
printf("\n");
}
}
Q18: Q17과 비슷하게 풀면 될 것 같다.
'C언어 > Do it! 개념 정리' 카테고리의 다른 글
#2-1. 기본 자료구조 - 배열(소수의 나열) (0) | 2022.02.20 |
---|---|
#2-1. 기본 자료구조 - 배열 (1) (0) | 2022.01.08 |
#1-1. 기본 알고리즘 (0) | 2021.12.28 |
#0. 시작 (0) | 2021.12.28 |