C Language

C언어 Basic 반복문 while, for 개념

567Rabbit 2024. 6. 18. 18:09

 

 

while문

 

- 중괄호를 사용하여 문장들을 그룹핑해야한다.

#include <stdio.h>
int main(void)
{
	int i = 0;
    
    while(i < 5)      // 반복 조건 true일 때 반복함
    {
    	printf("Hello World! \n");   // 반복 내용
        i++                          // 반복 내용
    }
    
    return 0;
}
#include <stdio.h>

int main(void)
{
	int n;
    int i = 1;

    printf("출력하고 싶은 단: ");
    scanf("%d", &n)

	while(i <= 9)
    {
    	printf("%d * %d = %d \n", n, i , n*i);
        i++;
    }

    return 0;
}
// while문을 이용한 제곱값 출력 프로그램

#include <stdio.h>

int main(void)
{
    int n;

    printf("정수와 그 제곱값\n");
	
    n = 1;
    
    while (n <= 10) {
        printf("%5d   %5d\n", n, n*n);
        n++;
    }

    return 0;
}

 

// 1부터 입력한 숫자까지의 합계 구하기

#include <stdio.h>

int main(void)
{
    int i, n, sum;                 //변수 선언

    printf("정수를 입력하시오:");   //입력 안내 메시지 출력
    scanf("%d", &n);               //정수값 입력
    
    i = 1;                         //변수 초기화
    sum = 0;

    while (i <= n) {
        sum += i;  
        i++;       
    }

    printf("1부터 %d까지의 합계는 %d입니다.\n", n, sum);
    return 0;
}

 

// 홀수 합계만 구하기

#include <stdio.h>

int main(void)
{
    int i, n, sum;                 //변수 선언

    printf("정수를 입력하시오:");   //입력 안내 메시지 출력
    scanf("%d", &n);               //정수값 입력
    
    i = 1;                         //변수 초기화
    sum = 0;

    while (i <= n) {
        sum += i;  
        i = i + 2;       
    }

    printf("1부터 %d까지의 홀수합은 %d입니다.\n", n, sum);
    return 0;
}

 

// 팩토리얼 계산하기

#include <stdio.h>

int main() {
    int n;
    long long fact = 1; // 팩토리얼을 저장할 변수

    printf("정수를 입력하세요: ");
    scanf("%d", &n);

    int i = 1;

    // while 반복문을 이용하여 팩토리얼 계산
    while (i <= n) {
        fact *= i; // fact = fact * i; 와 동일하다
        i++;
    }

    // 결과 출력
    printf("%d!은 %d입니다.\n", n, fact);

    return 0;
}

 

 

 

 

센티널 

 

- 입력되는 데이터의 끝을 알리는 특수한 값

- 사용자가 입력한 값이 특정 조건을 충족할 때까지 반복문이 실행되며, 센티널 값이 입력되면 반복문이 종료된다.

 

- ex) "종료하려면 음수를 입력하시오"

#include <stdio.h>

int main(void)
{
    int number;
    int sum = 0;

    printf("정수를 입력하세요 (종료하려면 -1을 입력하세요):\n");

    while (1) {
        printf("정수 입력: ");
        scanf("%d", &number);

        if (number == -1) {
            break;  // -1이 입력되면 반복문을 종료합니다.
        }

        sum += number;  // 입력된 값을 sum에 더합니다.
    }

    printf("입력된 정수의 합계는 %d입니다.\n", sum);

    return 0;
}

 

 

 

 

 

EOP

 

- 유저가 Ctrl+Z (Windows) 또는 Ctrl+D (Unix/Linux/Mac) 를 누르면 EOF가 발생하여 프로그램이 종료된다.

#include <stdio.h>

int main(void)
{
    int number, min_value = INT_MIN;
    
    printf("정수를 입력하시오\n 종료는 Ctrl+Z\n");

    while (scanf("%d", &number) != EOF) {
        if(number < min_value)
        		min_value = number;
    }

    printf("최소값은 %d입니다.", min_value);

    return 0;
}

 

 

 

 

유클리드 알고리즘과 while문을 이용해 최대 공약수 찾기

 

유클리드 알고리즘 : 최대 공약수를 찾는 가장 일반적인 방법 중 하나

  1. 두 수 중 큰 수를 작은 수로 나눈 나머지를 구한다
  2. 작은 수와 나머지로 다시 이 과정을 반복한다
  3. 나머지가 0이 되면, 그때의 작은 수가 최대 공약수이다.
#include <stdio.h>

int main(void)
{
    int x, y, r; 

    printf("두 정수를 입력하세요 (큰수, 작은수): ");
    scanf("%d %d", &x, &y);

    // 유클리드 알고리즘을 이용한 최대 공약수 계산
    while (y != 0) {
        r = x % y;  // 나머지를 계산합니다.
        x = y;         // a에 b를 대입합니다.
        y = r;      // b에 나머지를 대입합니다.
    }

    printf("최대 공약수는 %d입니다.\n", x);

    return 0;
}

 

 

 

 

do...while문

 

- 한번 실행하고 나서, 더 실행할지 말지 조건을 체크해주고 만족하면 반복한다.

- 코드가 복잡해져서 많이 쓰지는 않는다.

#include <stdio.h>

int main(void)
{
    int number, sum = 0;

    do {
        printf("정수를 입력하시오: ");
        scanf("%d", &number);
        sum += number;       // 입력된 값을 sum에 더합니다.
    } while (number != 0);   // 입력된 값이 0이 아니면 계속 반복합니다.

    printf("입력된 숫자들의 합계는 %d입니다.\n", sum);

    return 0;
}

 

 

 

 

 

 

for문

 

#include <stdio.h>

int main(void) {
    int i; // 반복 횟수를 제어할 변수
    
    // for 반복문을 이용하여 5번 "Hello World" 출력
    for (i = 0; i < 5; i++) {
        printf("Hello World\n");
    }
    
    return 0;
}

 

#include <stdio.h>

int main(void) {
    int i, sum; 
    
    sum = 0;

    // 1부터 10까지의 정수를 더하는 반복문
    for (int i = 1; i <= 10; i++) {
        sum += i; 
    }

    printf("1부터 10까지의 정수의 합: %d\n", sum);

    return 0;
}

 

#include <stdio.h>

int main(void) {
    
    int i,n;
    
    printf("정수를 입력하세요: ");
    scanf("%d", &n);
    
    for (i = 1; i <= n; i++) 
        printf("%5d    5%d\n", i, i*i*i);

    return 0;
}

 

// 반복을 이용한 팩토리얼 구하기

#include <stdio.h>

int main(void) {
    int i, n;
    long long fact = 1;

    printf("정수를 입력하세요: ");
    scanf("%d", &n);

    // 입력된 정수의 팩토리얼 계산
    for (i = 1; i <= n; i++) {
        fact *= i;     // fact = fact * i; 와 동일하다
    }

    // 결과 출력
    printf("%d!은 %d입니다.\n", n, fact);

    return 0;
}

 

 

 

 

for문 :  다양한 증감수식의 형태

for(int i = 10 ; i > 0 ; i--)     //뺄셈 사용
	printf("Hello World!\n");
    
for(int i = 10 ; i > 0 ; i--, j++)  //여러 개 쓰는 것도 가능
	printf("Hello World!\n");

for(int i = 0 ; i < 10 ; i += 2)    //2씩 증가
	printf("Hello World!\n");

for(int i = 1 ; i < 10 ; i *= 2)    //2를 곱한다
	printf("Hello World!\n");

for(int i = 0 ; i < 100 ; i = (i*i) + 2 ) //어떤 수식이라도 가능하다
	printf("Hello World!\n");
    
for( ; ; )                         //무한 반복 루트도 가능하다
	printf("Hello World\n");

for( ; i < 100 ; i++)              //한 부분이 없을수도 있다
	printf("Hello World\n");

for( i = 0, k = 0 ; i < 100 ; i++)    //2개 이상의 변수 초기화
	printf("Hello World\n");

 

 

 

 

 

중첩 반복문(nested loop)

 

- 반복문 안에 다른 반복문이 위치한다.

#include <stdio.h>

int main(void) {
    
    int x, y;
    
    // 사각형 출력을 위한 중첩된 for문
    for (y = 0 ; y < 5 ; y++) {
        for (x = 0 ; x < 10 ; x++) {
            printf("*");
        }
        printf("\n");
    }

    return 0;
}

 

 

 

 

 

goto문의 사용

#include <stdio.h>

int main(void) {
    
    int x, y;

    for (y = 1; y < 10000; y++) {
        for (x = 1 ; x < 50 ; x++) {
            if ( _kbhit() ) goto OUT;
            printf("*")
  
        } 
        printf("\n");
    }

OUT:
    return 0;
}

 

 

 

 

continue문

// 문자열의 각 문자를 확인하여 소문자인 경우 대문자로 변경

#include <stdio.h>

int main(void) {
    
    char letter;
    
    while (1) {
    
    	printf("문자열을 입력하세요: ");
    	scanf("%c", &letter);
        
        if ( letter == 'Q' ) 
        	break;
        if( letter < 'a' || letter > 'z')
        	continue;
            
        letter -= 32;
        printf("변환된 대문자는 %c입니다.\n", letter);
    }

    // 변경된 문자열 출력
    printf("변경된 문자열: %c\n", letter);

    return 0;
}

 

 

 

 


복리에서 원리금 합계

 

원리합계 = 원금 x (1+이율)^기간

- 빨간 선은 복리, 파란 선은 단리이다.

 

// 복리이자 계산
#include <stdio.h>

#define RATE 0.07
#define INVESTMENT 10000000 //초기 투자금
#define YEARS 10

int main(void)
{
	int i;
    double total = INVESTMENT;  //원리금 합계
    
    printf("==============\n");
    printf("연도 원리금\n");
    printf("==============\n");
    
    for(i = 1 ; i <= YEARS; i++)
    {
    	total = total * ( 1 + RATE );  //새로운 원리금 계산
        printf("%d        %10.1f\n", i, total);
    }
    
    return 0;
}