[정답] 41. 반복문(while, do while, for)

◈ 기본 연습
1. 두 수를 입력받은 후 작은 수~큰 수 사이의 모든 수의 합을 구하는 프로그램을 작성하시오.
답:

//두 수를 입력받은 후 작은 수~큰 수 사이의 모든 수의 합을 구하는 프로그램
#include <stdio.h>
int main(void)
{
    int a, b;
    int sum;
    printf("두 개의 정수 입력:");
    scanf_s("%d%d", &a, &b);
    if (a > b)//a가 b보다 크면
    {
        //두 수를 교환
        int temp = a;
        a = b;
        b = temp;
    }
 
    printf("%d ~ %d =", a, b);
    for (sum = 0; a <= b; a++)
    {
        sum += a;
    }
    printf("%d\n", sum);
    
 
    return 0;
}

2. 1부터 100 사이에 있는 모든 6의 배수를 출력하는 프로그램을 작성하시오.
답:

//1부터 100 사이에 있는 모든 6의 배수를 출력하는 프로그램
#include <stdio.h>
int main(void)
{
    int n;
    for (n = 1; n <= 100; n++)
    {
        if (n % 6 == 0)//6으로 나누어서 나머지가 없으면
        {
            printf("%d ", n);
        }
    }
    printf("\n");
 
    return 0;
}

3. 한 자리의 정수를 입력받아 입력받은 수의 단을 출력하는 프로그램을 작성하시오.
예:
한 자리의 정수를 입력하시오.
7
7*1 = 7   7*2 = 14   7*3 = 21
7*4 = 28 7*5 = 35   7*6 = 42
7*7 = 49 7*8 = 56   7*9 = 63
답:

//3. 한 자리의 정수를 입력받아 입력받은 수의 단을 출력하는 프로그램
//예:
//한 자리의 정수를 입력하시오.
//7
//7 * 1 = 7   7 * 2 = 14   7 * 3 = 21
//7 * 4 = 28 7 * 5 = 35   7 * 6 = 42
//7 * 7 = 49 7 * 8 = 56   7 * 9 = 63
#include <stdio.h>
int main(void)
{
    int n;
    int i;
    printf("한 자리의 정수를 입력하세요.\n");
    scanf_s("%d", &n);
    if ((n <= 0) || (n> = 10))
    {
        printf("잘못 입력하였습니다.");
    }
    else
    {
        for (i = 1; i <= 9; i++)
        {
            printf("%d*%d= %2d ", n, i, n*i);
            if (i % 3 == 0)
            {
                putchar('\n');
            }
        }
    }
    return 0;
}

4. 다음을 반복하는 프로그램을 작성하시오.
“I: 추가 D: 삭제 S:검색 L:전체 출력 E:종료”를 화면에 출력
하나의 문자를 입력받음
입력받은 문자가 ‘i’ 혹은 ‘I’일 때는 추가, ‘d’ 혹은 ‘D’일 때는 삭제 , ‘s’ 혹은 ‘S’일 때는 검색, ‘l’,
L’일 때는 전체 출력이라고 화면에 출력
(단, E를 누르면 프로그램을 종료)
답:

//다음을 반복하는 프로그램
//하나의 문자를 입력받아 ‘i’ 혹은 ‘I’일 때는 추가, ‘d’ 혹은 ‘D’일 때는 삭제,
//‘s’ 혹은 ‘S’일 때는 검색, ‘l’, ‘L’일 때는 전체 출력이라고 화면에 출력
//단, E를 누르면 프로그램 종료
#include <stdio.h>
int main(void)
{
    char key='\0';
    while (key!='E')
    {
        printf("I:추가 D:삭제 S:검색 L:전체 출력\n");
        printf("메뉴 선택:");
        scanf_s(" %c", &key, 1); //엔터를 스킵하기 위해 앞에 공백을 포함
        switch (key)
        {
        case 'i': case 'I': printf("추가\n"); break;
        case 'd': case 'D': printf("삭제\n"); break;
        case 's': case 'S': printf("검색\n"); break;
        case 'l': case 'L': printf("전체 출력\n"); break;
        case 'E': break;
        default: printf("잘못 선택하셨네요.\n");  break;
        }
        
    }
    return 0;
}

5. 두 개의 양의 정수를 입력받아 공약수의 합을 계산하는 프로그램을작성하시오.
답:

//두 개의 정수를 입력받아 공약수의 합을 계산
#include <stdio.h>
int main(void)
{
    int a, b;
    int n;
    int sum=0;
    printf("두 개의 정수 입력:");
    scanf_s("%d%d", &a, &b);
 
    if (a > b)//a가 b보다 크면
    {
        //두 수를 교환
        int temp = a;
        a = b;
        b = temp;
    }
    printf("%d와 %d의 공약수:",a,b);
    for (n = 1; n <= a; n++)
    {
        if ((a%n == 0) && (b%n == 0))//n이 a와 b의 약수일 때
        {
            sum += n;
            printf("%d ", n);
        }
    }
    
    printf("\n%d와 %d의 공약수의 합:%d\n",a,b, sum);
 
    return 0;
}

6. 두 개의 양의 정수를 입력받아 공배수를 작은 순서부터 차례대로 10개를 출력하는 프로그램을 작성하시오.
답:

//두 개의 정수를 입력받아 공약수 10개를 차례대로 출력
#include <stdio.h>
int main(void)
{
    int a, b;
    int n;
    int count = 0;
    printf("두 개의 정수 입력:");
    scanf_s("%d%d", &a, &b);
 
    if (a > b)//a가 b보다 크면
    {
        //두 수를 교환
        int temp = a;
        a = b;
        b = a;
    }
    printf("%d와 %d의 공약수를 차례대로 (최대)10개 출력\n", a, b);
    for (n = 1; (n <= a)&&(count<10); n++)
    {
        if ((a%n == 0) && (b%n == 0))//n이 a와 b의 약수일 때
        {
            count++;
            printf("%d ", n);
        }
    }
    printf("\n");
    
 
    return 0;
}

7. ‘a’문자에서 ‘z’문자 사이의 모든 문자와 아스키 코드 값을 출력하는 프로그램을 작성하시오.
답:

//소문자의 아스키 코드값을 출력
#include <stdio.h>
int main(void)
{
    char ch;
    for (ch = 'a'; ch <= 'z'; ch++)
    {
        printf("%c:%d\n", ch, ch);
        
    }
    return 0;
}