제어문은 문법이 어려운 것이 아니라 구현이 어려워요. 다양한 제어문 문제 모음 [언제나 C언어]

안녕하세요. 언제나휴일의 언휴예요.

제어문은 문법이 어려운 것은 아니죠.

하지만 막상 문제를 표현하려고 할 때 어떠한 제어문을 어떻게 전개해야 할 지 막막합니다.

이는 문법보다는 문제 해결 능력에 관한 것이죠.

문제를 해결하기 위해 알고리즘, 자료구조를 비롯한 다양한 경험을 요구합니다.

이번에는 다양한 제어문을 연습할 수 있는 다양한 문제를 제시할게요.

여러분께서 먼저 해결해 본 후에 코드를 비교해 보길 권할게요.

여기에서는 별도의 설명은 생략합니다.

두 수를 입력받은 후 작은 수~큰 수 사이의 모든 수의 합을 구하는 프로그램을 작성하시오.

#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;
}

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;
}

한 자리의 정수를 입력 받은 후에 입력 받은 수의 단을 출력하는 프로그램을 작성하시오.

//예:
//한 자리의 정수를 입력하시오.
//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;
}

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

//두 개의 정수를 입력받아 공약수의 합을 계산
#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;
}

두 개의 양의 정수를 입력받아 공배수를 작은 순서부터 차례대로 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;
}

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

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

다음처럼 입력한 정수 높이의 삼각형을 출력하는 프로그램을 작성하시오.

C언어 삼각형 출력
C언어 삼각형 출력
//삼각형 출력
//입력
// 5                - n
//출력
//     *             1- 공백 4, 별1, 개행
//    ***           2- 공백 3, 별3, 개행 
//   *****          3- 공백2, 별5, 개행
//  *******        4- 공백1, 별7, 개행 
// *********       5- 공백0, 별9, 개행
 
//공백 = n-line
//별 = 2*line -1
//개행=1
 
#include <stdio.h>
 
int main(void)
{
    int n;
    int line,space,star;
    
    scanf_s("%d",&n);//입력
    for(line=1;line<=n;line++)//n개 라인
    {
        for(space=1;space<=(n-line);space++)//공백 n-line개
        {
            putchar(' ');
        }
        for(star =1; star<=(2*line -1); star++)//별 2*line -1개
        {
            putchar('*');
        }
        putchar('\n');//개행
    }
    return 0;
} 

다음처럼 입력한 정수의 높이에 맞게 다이아몬드를 출력하는 프로그램을 작성하시오.

C언어 다이아몬드 출력
C언어 다이아몬드 출력
// 다이아몬드 출력
// 입력
// 5                - n
//출력
//     *             1- 공백 4, 별1, 개행
//    ***           2- 공백 3, 별3, 개행 
//   *****         3- 공백2, 별5, 개행
//  *******        4- 공백1, 별7, 개행 
// *********      5- 공백0, 별9, 개행
//  *******        4- 공백1, 별7, 개행 
//   *****         3- 공백2, 별5, 개행
//    ***           2- 공백 3, 별3, 개행
//     *            1- 공백 4, 별1, 개행
 
//line:1~n
    //공백 = n-line
    //별 = 2*line -1
    //개행=1
//line:n-1 ~ 1
    //공백 = n-line
    //별 = 2*line -1
    //개행=1 
#include <stdio.h>
 
int main(void)
{
    int n;
    int line,space,star;
    
    scanf_s("%d",&n);//입력
    for(line=1;line<=n;line++)//line: 1~n
    {
        for(space=1;space<=(n-line);space++)//공백 n-line개
        {
            putchar(' ');
        }
        for(star =1; star<=(2*line -1); star++)//별 2*line -1개
        {
            putchar('*');
        }
        putchar('\n');//개행
    }
    for(line=n-1; line>=1;line--)//line:n-1 ~ 1
    {
        for(space=1;space<=(n-line);space++)//공백 n-line개
        {
            putchar(' ');
        }
        for(star =1; star<=(2*line -1); star++)//별 2*line -1개
        {
            putchar('*');
        }
        putchar('\n');//개행
    }
    return 0;
}

다음처럼 입력한 정수의 높이에 맞게 산봉우리를 출력하는 프로그램을 작성하시오.

C언어 산봉우리 출력
C언어 산봉우리 출력
//산봉우리 출력
//입력
//5                - n
//출력
//                    *                                      1                        공백(9+9),별1, 개행
//                   ***                                    2                        공백(9+8), 별3, 개행
//                  *****                                   3                        공백(9+7),별5, 개행
//                 *******                                 4                         공백(9+6), 별7, 개행
//                *********                                5                         공백(9+5), 별9, 개행
//     *         ***********          *                   6  공백4, 별1, 공백4, 공백4, 별11, 공백4, 공백4, 별1, 개행
//    ***      *************        ***                  7  공백3, 별3, 공백3, 공백3, 별13, 공백3, 공백3, 별3, 개행
//   *****    ***************     *****                8  공백2, 별5, 공백2, 공백2, 별15, 공백2, 공백2, 별5, 개행
//  *******  *****************  *******               9  공백1, 별7, 공백1, 공백1, 별17, 공백1, 공백1, 별7, 개행
// *************************************            10   공백0, 별9, 공백0, 공백0, 별19, 공백0, 공백 0, 별9,개행 
//line:1~2*n
//조건(line<=n)이 참일 때
     //공백= (2*n-1)+(2*n-line) = 4*n -1-line
     //별 = 2*line-1
     //개행
//조건(line<=n)이 거짓일 때
     //공백 = 2*n-line
     //별 = 2*(line-n)-1
     //공백 = 2*(2*n-line)     
     //별 = 2*line-1
     //공백 = 2*(2*n-line)
     //별 = 2*(line-n)-1
     //개행 
#include <stdio.h> 
int main(void)
{
    int n;
    int line,space,star;
    
    scanf_s("%d",&n);//입력
    for(line=1;line<=2*n;line++)//line: 1~2n
    {
        if(line<=n)//line is 1~n
        {
              for(space=1;space<=(4*n - 1 - line);space++)//공백 4*n - 1 - line개
              {
                  putchar(' ');
              }
              for(star =1; star<=(2*line -1); star++)//별 2*line -1개
              {
                  putchar('*');
              }
              putchar('\n');//개행
        }
        else//line is n+1 ~ 2n
        {
              for(space=1;space<=(2*n-line);space++)//공백 2n-line개
              {
                  putchar(' ');
              }
              for(star =1; star<=2*(line-n)-1; star++)//별 2*(line-n)-1개
              {
                  putchar('*');
              }
              for(space=1; space<=(2*(2*n-line));space++)//공백 2*(2*n-line) 개
              {
                  putchar(' ');
              }                  
              for(star =1; star<=(2*line-1); star++)//별 2*line-1개
              {
                  putchar('*');
              }
              for(space=1; space<=(2*(2*n-line));space++)//공백 2*(2*n-line) 개
              {
                  putchar(' ');
              }
              for(star =1; star<=2*(line-n)-1; star++)//별 2*(line-n)-1개
              {
                  putchar('*');
              }
              putchar('\n');//개행
        }
      
    }
    return 0;
}