반복문의 필요성
- 특정 명령을 반복적으로 사용해야 함
- 규칙적으로 반복하는 일
- 동일한 내용을 반복할 때
For
- 특정 문장을 일정한 횟수만큼 반복 시킬 때 사용
Example 1
#include <stdio.h>
int main() {
int i, Sum = 0;
for (i=1; i<=10; i++)
Sum += i;
printf("1부터 10까지의 합은 %d다.\n",Sum);
return 0;
}
// 프로세스가 시작되었습니다..
> 1부터 10까지의 합은 55다.
// 프로세스가 종료되었습니다.
Example 2
#include <stdio.h>
int main() {
int number, i;
printf("반복 횟수를 입력하세요 : ");
scanf("%d", &number);
for (i = 1; i <= number; i++)
{
printf("%d번 반복입니다!!\n", i);
}
return 0;
}
// 프로세스가 시작되었습니다..
> 반복 횟수를 입력하세요 : 7
1번 반복입니다!!
2번 반복입니다!!
3번 반복입니다!!
4번 반복입니다!!
5번 반복입니다!!
6번 반복입니다!!
7번 반복입니다!!
// 프로세스가 종료되었습니다.
Example 3
#include <stdio.h>
int main() {
int i;
for(i=65; i<= 90; i++)
{
printf("%c ",i);
}
printf("\n");
return 0;
}
// 프로세스가 시작되었습니다..
> A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
// 프로세스가 종료되었습니다.
Example 4
#include <stdio.h>
int main() {
int sum, i,j;
printf("다중 for문 예제입니다.\n");
for (i = 1; i<=3;i++)
{
for(j = 1; j<=3; j++)
{
sum = j + i;
printf("%d + %d = %d\n",i,j,sum);
}
}
return 0;
}
// 프로세스가 시작되었습니다..
> 다중 for문 예제입니다.
1 + 1 = 2
1 + 2 = 3
1 + 3 = 4
2 + 1 = 3
2 + 2 = 4
2 + 3 = 5
3 + 1 = 4
3 + 2 = 5
3 + 3 = 6
// 프로세스가 종료되었습니다.
Problem 5
#include <stdio.h>
int main() {
int i,j;
for (i = 1; i<6; i++)
{
for (j=0;j<i;j++)
{
printf("*");
}
printf("\n");
}
return 0;
}
// 프로세스가 시작되었습니다..
> *
**
***
****
*****
// 프로세스가 종료되었습니다.
problem 6
#include <stdio.h>
int main() {
int i, j, count = 0;
for (i = 2; i<=100; i++)
{
for (j = 2; j<i; j++)
{
if (i%j==0)
break;
}
if ( j == i){
count++;
printf("%2d%s", i, count % 5 ? " ":"\n");
}
}
return 0;
}
// 프로세스가 시작되었습니다..
> 2 3 5 7 11
13 17 19 23 29
31 37 41 43 47
53 59 61 67 71
73 79 83 89 97
// 프로세스가 종료되었습니다.
Problem 7
#include <stdio.h>
int main() {
int i,j,index,input;
printf("임의의 정수를 입력하세요: ");
scanf("%d", &input);
for(i=1; i<= input; i++)
{
index = 0;
for(j=1;j<=i;j++)
{
if (i % j ==0)
index++;
}
if (index == 2)
printf("%d\n", i);
}
return 0;
}
// 프로세스가 시작되었습니다..
> 임의의 정수를 입력하세요: 14
2
3
5
7
11
13
// 프로세스가 종료되었습니다.
While
- 횟수를 정확하게 알지는 못하지만 반복의 조건을 알고 있을 때 사용
For vs While
- 초기화의 위치가 다르다.
- for 문도 초기화를 앞에 할 수 있지만 모양이 없다.
Problem 1
#include <stdio.h>
int main() {
int sum = 0, number = 1;
printf("1에서 10까지 합을 구합니다.\n");
while(number <=10)
{
sum += number;
number++;
}
printf("합은 %d입니다.\n", sum);
return 0;
}
// 프로세스가 시작되었습니다..
> 1에서 10까지 합을 구합니다.
합은 55입니다.
// 프로세스가 종료되었습니다.
Problem 2
#include <stdio.h>
int main() {
int i = 65;
while (i <=90)
{
printf("%c ",i);
i++;
}
return 0;
}
//프로세스가 시작되었습니다..
> A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
// 프로세스가 종료되었습니다.
Problem 3
#include <stdio.h>
#define MAX 20
int main() {
int n = 0;
while(n <= MAX){
printf("%4d",n);
n += 3;
}
printf("\n");
return 0;
}
// 프로세스가 시작되었습니다..
> 0 3 6 9 12 15 18
// 프로세스가 종료되었습니다.
Problem 4
#include <stdio.h>
int main() {
int a = 1, sum = 0;
while (sum<300){
sum += a;
a++;
}
printf("합이 300이 넘는 a의 최솟값은 %d다.\n", a-1);
printf("sum = %d\n",sum);
return 0;
}
// 프로세스가 시작되었습니다..
> 합이 300이 넘는 a의 최솟값은 24다.
sum = 300
// 프로세스가 종료되었습니다.
For문과 While문에서 합구하기
#include <stdio.h>
int main() {
int max, i, sum;
printf("정수 입력 : ");
scanf("%d", &max);
for(i = 1, sum = 0; i <= max; i++)
{
sum += i;
}
printf("for 문 1에서 %d까지 합 : %3d\n", max, sum);
i = 1, sum = 0;
while(i<=max){
sum += i;
i++;
}
printf("while 문 1에서 %d까지 합 : %3d\n", max, sum);
return 0;
}
// 프로세스가 시작되었습니다..
> 정수 입력 : 10
for 문 1에서 10까지 합 : 55
while 문 1에서 10까지 합 : 55
// 프로세스가 종료되었습니다.
실습
Problem 1
#include <stdio.h>
int main() {
int i,j;
for(i = 5; i>0; i--)
{
for (j = i; j>0;j--)
{
printf("*");
}
printf("\n");
}
for (i = 5; i>0; i = i - 2)
{
for (j = i; j>0;j--)
{
printf("*");
}
printf("\n");
}
return 0;
}
// 프로세스가 시작되었습니다..
*****
****
***
**
*
*****
***
*
// 프로세스가 종료되었습니다.
Problem 2
// 구구단
#include <stdio.h>
int main() {
int num, i, j, k;
for (k =1; k<10;k++)
printf(" %d 단 ", k);
printf("\n");
for (i=1; i<10;i++)
{
for (j=1; j<10;j++)
{
printf("%dx%d=%2d ", i,j,i*j);
}
printf("\n");
}
return 0;
}
// 프로세스가 시작되었습니다..
1 단 2 단 3 단 4 단 5 단 6 단 7 단 8 단 9 단
1x1= 1 1x2= 2 1x3= 3 1x4= 4 1x5= 5 1x6= 6 1x7= 7 1x8= 8 1x9= 9
2x1= 2 2x2= 4 2x3= 6 2x4= 8 2x5=10 2x6=12 2x7=14 2x8=16 2x9=18
3x1= 3 3x2= 6 3x3= 9 3x4=12 3x5=15 3x6=18 3x7=21 3x8=24 3x9=27
4x1= 4 4x2= 8 4x3=12 4x4=16 4x5=20 4x6=24 4x7=28 4x8=32 4x9=36
5x1= 5 5x2=10 5x3=15 5x4=20 5x5=25 5x6=30 5x7=35 5x8=40 5x9=45
6x1= 6 6x2=12 6x3=18 6x4=24 6x5=30 6x6=36 6x7=42 6x8=48 6x9=54
7x1= 7 7x2=14 7x3=21 7x4=28 7x5=35 7x6=42 7x7=49 7x8=56 7x9=63
8x1= 8 8x2=16 8x3=24 8x4=32 8x5=40 8x6=48 8x7=56 8x8=64 8x9=72
9x1= 9 9x2=18 9x3=27 9x4=36 9x5=45 9x6=54 9x7=63 9x8=72 9x9=81
// 프로세스가 종료되었습니다.
Problem 3
#include <stdio.h>
int main() {
int i, j, max;
printf("1~9사이의 정수를 입력하시오 :");
scanf("%d", &max);
for (i=1; i<=max; i++)
{
for (j=1; j<=i; j++)
{
printf("%d",j);
}
printf("\n\n");
}
return 0;
}
// 프로세스가 시작되었습니다..
> 1~9사이의 정수를 입력하시오 :7
1
12
123
1234
12345
123456
1234567
// 프로세스가 종료되었습니다.
Problem 4
#include <stdio.h>
int main() {
int max, i, j;
printf("2 보다 큰 정수입력 : ");
scanf("%d", &max);
for (i = 2; i <= max; i++)
{
for (j = 2; j < i; j++)
{
if (i % j == 0)
{
break;
}
}
if (i == j)
{
printf("%4d", i);
}
}
return 0;
}
// 프로세스가 시작되었습니다..
> 2 보다 큰 정수입력 : 20
2 3 5 7 11 13 17 19
// 프로세스가 종료되었습니다.
Problem 5
#include <stdio.h>
int main() {
int number, divisor, limit, count = 0;
printf("2보다 큰 정수를 입력 :");
scanf("%d", &limit);
printf("\n 2부터 %d 까지의 소수 \n", limit);
for (number = 2; number <= limit; number++)
{
for (divisor = 2; number % divisor !=0; divisor++);
if(divisor == number)
{
printf("%3d%c", number, (++count % 10?' ':'\n'));
}
}
printf("\n");
return 0;
}
// 프로세스가 시작되었습니다..
> 22보다 큰 정수를 입력 :20
2부터 220 까지의 소수
2 3 5 7 11 13 17 19 23 29
31 37 41 43 47 53 59 61 67 71
73 79 83 89 97 101 103 107 109 113
127 131 137 139 149 151 157 163 167 173
179 181 191 193 197 199 211
// 프로세스가 종료되었습니다.