문제풀이/C언어

문제풀이 3. 반복구조

DDD Developer 2024. 8. 14. 21:04
728x90
반응형

연습문제

 

 

예제 17

1부터 10까지 출력하기(1)

 

1로 시작되는 변수 i 값을 1씩 증가하면서,

i 값이 10보다 작거나 같을때까지 반복하며 i 값을 출력한다.

#include<stdio.h>
int main(void)
{
    int i;


    printf("1부터 10까지 출력: \n");
    for(i = 1; i <= 10; ++i)
        printf("%d ",i);
}

 


예제 18

1부터 10까지 출력하기(2)

 

i가 1부터 1씩 증가하며 10이 될 때까지 반복하며 i 값을 출력한다.

#include<stdio.h>
int main(void)
{

    int i;

    

    for(i = 1; i <= 10; i++)
        printf("%d ",i);

    return 0;
}

 


예제 19

10부터 1까지 출력하기

 

i가 10부터 1씩 감소하며 1이 될 때까지 반복하며 i 값을 출력한다.

// 예제 19
#include<stdio.h>

int main()
{
    int i;

    printf("10부터 1까지 출력하기 for문\n");
    for(i=10; i >=1; i--)
    {
        printf("%d ",i);
    }
    printf("\n\n");

    return 0;
}


예제 20

1부터 100까지의 합 구하기

 

0으로 초기화되어 있는 변수 sum에 1부터 100까지 1씩 증가하는 변수 i 값을 더해 1부터 100까지의 합을 구한다.

// 예제 20
#include<stdio.h>

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

    printf("1부터 100까지의 합구하기\n");
    for(i=1;i<=100;i++)
    {
        sum = i+sum;
    }
    printf("sum: %d\n\n",sum);

    return 0;
}

 


예제 21

1부터 100까지의 수 중 짝수의 합 구하기(1)

 

 

i가 2부터 2씩 증가하며 100이 될 때까지 반복하며 sum에 i 값을 더한다.

#include<stdio.h>
int main(void)
{
    int i,sum;
    sum = 0;
    for(i = 2; i <= 100; i++)
    {
        if((i % 2) == 0)
            sum += i;
    }
    printf("1부터 100까지 수중 짝수만 더한 값 : %d\n",sum);

}


예제 22

1부터 100까지의 수 중 짝수의 합 구하기(2)

 

i가 1부터 100까지 1씩 증가하면서 i가 짝수인 경우 sum에 i를 누적한다.

#include<stdio.h>

int main(void)
{

    int i;
    int sum;

    sum=0;

    for (i=1; i<=100; i++)
        if(i%2 == 0)
            sum=sum+i;
            
    printf("%d",sum);

    return 0;
}


예제 23

1, -2, 3, -4, ..., 99, -100의 합 구하기

 

i가 1부터 1씩 증가하며 100이 될 때까지 반복하며 i가 홀수면 sum에 i 값을 더하고, i가 짝수면 sum에서 i 값을 뺀다.

 

//예제 23
//1, -2, 3, -4, ..., 99, -100의 합 구하기
#include <stdio.h>
int main(void)
{
    int i;
    int three;
    int other;
    int plus;
    i = 0;
    other = 0;
    three = 0;

    while(i < 100){
        i++;
        if(i % 2 == 0){
            three += i;

        //2의 배숫값의 합을 'three'로 저장
        }else{
            other += i;

        //나머지의 값을 'other'에 저장
        }
    }
    plus = other - three;
    printf("3의 배수를 음수화 한 \n1부터 100까지의 총합 : %d\n\n", plus);
}

 

 


예제 24

계승 구하기

 

계승이란 1부터 임의의 양의 정수 n까지의 수를 모두 곱한 것을 말하며 n!로 나타낸다.

예를 들어 5의 계승은 5!로 표시하며 1*2*3*4*5 이다. 그런데, 여기서 0!은 1로 정의한다.

// 예제 24
#include <stdio.h>

int main()
{
    int i, fact,n;

    fact = 1;
    
    printf("계승 구할 정수를 입력: ");
    scanf("%d",&n);

    for (i=1; i <= n; i++)
    {
        fact = fact * i;
    }
    printf("%d! 값: %d\n\n",n,fact);

    return 0;
}


예제 25

약수 구하기

 

임의의 수를 나누었을 때 나누어떨어지게 하는 수를 임의의 수의 약수라 한다.

즉, n의 약수는 1부터 n까지의 수 중 n을 나누어떨어지게 하는 수가 된다. 

 

예를 들면, 10의 약수는 1부터 10까지 수들로 10을 나누었을 때 나머지가 0이 되게 하는 수, 즉 1, 2, 5, 10이 된다.

#include<stdio.h>
int main(void)
{
    int i,n;
    
    printf("정수를 입력하시오: \n");
    scanf("%d",&n);

    for(i = 1; i <= n; ++i)
    {
        if((n % i) == 0)
            printf(" %d ",i);
    }
}

 


예제 26

약수 구하기

 

공약수란 0이 아닌 두 정수의 공통되는 약수를 말한다. 즉, 두 정수를 나누어떨어지게 하는 공통의 수를 의미한다.
n1과 n2의 공약수는 1부터 n1까지 1씩 증가하는 i로 n1과 n2 모두를 나누어떨어지게 하는수가 된다. 

단, n1이 n2보다 작다고 가정한다.

#include<stdio.h>

int main(void)
{

    int i, n1, n2;

    printf("정수를 입력하시오");
    scanf("%d %d",&n1,&n2);

    for (i=1; i<=n1; i++)
        if (n1%i==0 && n2%i==0)
        printf("%d ",i);

    return 0;



}

 


예제 27

최대공약수 구하기

 

두 정수의 공약수 중 가장 큰 것을 최대공약수라 한다. 

그러므로 n1과 n2의 최대공약수는 n1부터 1까지 1씩 감소하는 i로 n1과 n2 모두를 나누어떨어지게 하는 첫 번째 수가 된다. 단, n1이 n2보다 작다고 가정한다.

int main(void){
    int a;
    int b;
    int i;
    int o;
    int p;
    o = 1;
    i = 1;
    printf("공약수를 구할 두 정수를 입력하시오 : ");
    scanf("%d   %d", &a, &b);
    printf("공통되는 약수는이러합니다,\n");
    while(i < a || o < b){
        i++;
        o++;
        if(a % i != 0){
            continue;
            p = i;
        }
        if(b % o != 0){
            continue;

        }
        p = o;


    }
    printf("최대 공약수 :%3d\n", p);

}


예제 28

소수 판별하기

 

소수란 2, 3, 5, 7 …과 같이 1과 자기 자신 이외의 양의 약수를 가지지 않는 1보다 큰 자연수를 말한다.

임의의 수를

2부터, 자기 자신보다 1 작은 수까지의 수로

차례로 나누어서 나누어떨어지는 경우가 생기면 소수가 아니고, 

나누어떨어지는 경우가 생기지 않으면 소수이다.

// 예제 28
#include<stdio.h>

int main()
{
    int i, chk,num;
    chk = 1;

    printf("정수 입력 : ");
    scanf("%d",&num);

    for (i=2; i <=num-1; i++)
    {
        if(num % i == 0)
        {
            chk = 0;
            break;
        }
    }
    if (chk == 1)
    {
         printf("%d는 소수입니다.\n\n",num);
    }
    else
    {
         printf("%d는 소수가 아닙니다.\n\n",num);
    }

    return 0;
}

 


예제 29

피보나치수열 구하기

 

다음과 같은 수열이 있다.

 

이 수열의 두 번째 항 이후의 항들은 이전의 두 항을 더해 구해진다. 즉, 첫 번째 항과 두번째 항을 더한 값이 세 번째 항이 되고, 두 번째 항과 세 번째 항을 더한 값이 네 번째 항이 된다. 이와 같은 수열을 피보나치수열이라 한다.

 

피보나치수열을 구하는 과정은 다음과 같다.
전전 항을 저장하는 변수를 a, 전 항을 저장하는 변수를 b, 현재 항을 저장하는 변수를 c라 하고,

a에 첫 번째 항인 1을, b에 두 번째 항인 1을 저장하고 시작한다.

 

현재 항 c는 a 값과 b 값을 더한 값이 된다.

 

그 후 전 항 b값을 a에, 현재 항 c 값을 b 저장하고 현재 항 c를 새롭게 구하는 과정을 반복하며 피보나치수열을 구한다.

 

#include<stdio.h>
void fibonacci (int n)
{
    int a,b,c,i;
    a = 0;
    b = 1;

    if (n == 1)
        printf("%d",a);

    for(i = 1; i < n+1; i++)
    {
        c = a + b;
        printf(" %d",c);
        a = b;
        b = c;
    }
}
int main(void)
{

    int num;
    printf("출력하고 싶은 피보나치 수열 개수: ");
    scanf("%d",&num);

    if(num < 1)
    {
        printf("1이상의 수를 입력하세요\n");
        
        return 0;
    }
    fibonacci(num);
    
    return 0;

}


예제 30

최댓값 구하기

 

max 값과 새롭게 입력받은 a 값을 비교하여 큰 값을 max에 저장하는 동작을 반복해 최댓값을 구한다.

#include<stdio.h>

int main(void)
{

    int a,max;

    while (a!=0)
    {   
        printf("정수:");
        scanf("%d",&a);
        if (a>max)
            max=a;

    }
    printf("최댓값:%d\n",max);

    return 0;
    

    
}


예제 31

직각 삼각형 모양으로 수 출력하기

 

바깥쪽 반복문은 i 값을 1부터 5까지 반복하고, 안쪽 반복문은 j 값을 1부터 i까지 반복하며 j 값을 출력하면 다음과 같이 된다. 단, 안쪽 반복문을 마치면 “\n”을 이용해서 다음줄로 넘긴다.

//예제 31
//직각 삼각형 모양으로 수 출력하기
#include <stdio.h>
int main(void)
{
    int i, o;
    for(i = 1; i < 7; i++){
        for(o=1; o < i;o++){
            printf("%d ", o);
        }
        printf("\n");
    }
}


예제 32

1부터 10까지의 정수에 대한 약수 구하기

 

1부터 10까지의 정수에 대한 약수를 구한다.

// 예제 32
#include <stdio.h>

int main()
{
    int i,j;

    for( i= 1; i <= 10; i++)
    {
        printf("%d의 약수: ",i);
        for(j=1; j<=i; j++)
        {
            if(i % j == 0)
            {
                printf("%d ",j);
            }
        }
        printf("\n");
    }
    printf("\n");
    return 0;
}

 


예제 33

2부터 100까지의 소수 구하기

 

 

i가 2부터 1씩 증가하며 100이 될 때까지 반복하며 각 i 값이 소수인지 판별한다. 소수를 판별하는 방법은 예제 28에서 살펴보았다.

#include<stdio.h>
int main(void)
{
    int i,j,chk;
    printf("2부터 100까지 소수구하기: \n");
    for(i = 2; i <= 100; i++)
    {   
        for(j = 2; j < i; j++)
        {
            if(i % j == 0)
            break;
        }
        if(i == j)
            printf("%d ",i);
    }

    return 0;

}


예제 34

1, (1+2), (1+2+3), …, (1+2+…+10)의 합 구하기

 

i가 1부터 1씩 증가하며 10이 될 때까지 반복하며 n은 i 값을 누적하고, sum은 n 값을 누적하면서 원하는 값을 구한다.

#include<stdio.h>

int main(void)
{

    int i,n,sum;
    n=0;
    sum=0;

    for (i=1; i<=10; i++)
    {
        n=n+i;
        sum=sum+n;
    }
    printf("%d\n",sum);

    return 0;
}


예제 35

구구단

 

다음과 같은 형식으로 출력되는 구구단 순서도와 프로그램을 작성한다.

 

단에 해당하는 2부터 9까지의 수는 변수 i로, 곱하여지는 수 1부터 9까지는 변수 j로, 곱한 결과는 j*j로 나타낸다.

//예제35
//구구단
#include <stdio.h>
int main(void)
{
    int i, o;
    for(i = 1; i < 10; i++){
        for(o=1; o < 10;o++){
            printf("| %d x %d = %d | ", i, o, i*o);
        }
        printf("\n");
    }
}


 

과제

 

과제16

 

1부터 10까지 출력하는 다음 순서도의 ①과 ②를 채우고 C 프로그램을 작성하여라.

 

#include<stdio.h>
int main(void)
{
    int i;
    
    printf("1부터 10까지 출력 \n");
    for(i = 1; i <= 10; i++)
        printf("%d ",i);
}


과제17

5부터 15까지 출력하는 순서도와 C 프로그램을 작성하여라.

#include<stdio.h>
int main(void)
{

    int i;

    

    for(i = 1; i <= 15; i++)
        printf("%d ",i);

    return 0;
}


과제18

5부터 15까지 과제 출력하는 순서도와 C 프로그램을 작성하여라.

#include<stdio.h>

int main(void)
{

    int i;

    for(i=5 ; i<=15; i++)
        printf("%d\n",i);

}

 


과제19

while형 반복 구조를 이용해서 10부터 1까지 출력하는 순서도와 C 프로그램을 작성하여라.

//과제 19
#include <stdio.h>

int main()
{
    int i;
    i = 10;
    while(i >= 1)
    {
        printf("%d ",i);
        i--;
    }
    printf("\n\n");
}


과제20

 

while형 반복 구조를 이용해서 1부터 100까지의 합을 구해 출력하는 순서도와 C 프로그램을 작성하여라.

#include<stdio.h>
int main(void)
{
    int i,sum;
    i = 0;
    sum = 0;

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

    printf("%d\n",sum);
}

 

 

과제21

1부터 입력받은 수까지의 합을 출력하는 순서도와 C 프로그램을 작성하여라.

#include<stdio.h>

int main(void)
{
    printf("정수를 입력하시오\n");
    int sum,num,i;
    scanf("%d",&num);
    sum =0;
    for(i=1; i<=num; i++)
        sum=sum+i;

    printf("%d",sum);
}

 

 

과제22

while형 반복 구조를 이용해서 1부터 100까지의 수 중 짝수의 합을 구해 출력하는 순서도와 C 프로그램을 작성하여라.

//과제 22
//1부터 100까지의 수 중, 짝수 끼리의 합
#include <stdio.h>
int main(void)
{
    int i;
    int n;
    n = 0;
    i = 1;
    while(i < 100)
    {
        i++;
        if(i % 2 == 0){
            n += i;
            
        }
    
    }
    printf("100까지의 수 중, 짝수끼리 더한 값 : %d\n", n);
    return 0;
}

 

과제23

1부터 100까지의 수 중 3의 배수의 합을 구해 출력하는 순서도와 C 프로그램을 작성하여라.

//과제 23

#include <stdio.h>

int main()
{
    int i,sum;
    sum = 0;
    
    for(i = 3; i<=100; i++)
    {
        if(i % 3 == 0)
        {
            sum = sum + i;
        }
    }
    printf("3의배수 합 >> %d",sum);
    printf("\n\n");

    return 0;
}


과제24

 

1부터 100까지의 수 중 3의 배수의 합을 출력하는 순서도와 C 프로그램을 작성하여라.

#include<stdio.h>
int main(void)
{
    int i,sum;
    sum = 0;
    for(i = 1; i <= 100; i++)
    {
        if((i % 3) == 0)
            sum += i;

    }
    printf("1부터 100까지의 수 중 3의 배수의 합: %d\n\n",sum);
}

 

과제25

while형 반복 구조를 이용해서 1, -2, 3, -4, ..., 99, -100의 합을 구해 출력하는 순서도와 C 프로그램을 작성하여라.

#include<stdio.h>

int main(void)
{

    int i,sum;

    sum=0;

    for(i=1; i<=100; i++)
    {
        if(i%2==0)
            sum=sum-i;
        if(i%2!=0)
            sum=sum+i;
    }
    printf("%d\n",sum);
}

 

과제26

1, 2, -3, 4, 5, -6, ..., -99, 100의 합을 구해 출력하는 순서도와 C 프로그램을 작성하여라.

//과제 26
//3의 배숫값을 음수화한 1부터 100까지의 총합
#include <stdio.h>
int main(void)
{
    int i;
    int three;
    int other;
    int plus;
    i = 0;
    other = 0;
    three = 0;

    while(i < 100){
        i++;
        if(i % 3 == 0){
            three += i;

        //3의 배숫값의 합을 'three'로 저장
        }else{
            other += i;

        //나머지의 값을 'other'에 저장
        }
    }
    plus = other - three;
    printf("3의 배수를 음수화 한 \n1부터 100까지의 총합 : %d\n\n", plus);
}

 

 

과제27

while형 반복 구조를 이용해서 계승을 구하는 순서도와 C 프로그램 작성하여라.

// 과제 27

#include<stdio.h>

int main()
{
    int i,num,fact;
    
    fact = 1
    ;
    i = 1;

    printf("정수 입력 >> ");
    scanf("%d",&num);

    while ( i <= num)
    {
        fact = fact * i;
        i++;
    }
    printf("%d의 계승 >> %d\n\n",num,fact);
    return 0;
}


과제28

 

약수와 약수의 개수를 출력하는 순서도와 C 프로그램을 작성하여라.

#include<stdio.h>
int main(void)
{
    int divisor,count,num,i,j;
    count = 0;

    printf("원하는 정수값을 입력하시오: \n");
    scanf("%d",&num);
    printf("약수는: ");
    for(i = 1; i <= num; i++)
    {
        if(num % i == 0)
        {
            printf("%d ",i);
            count = count +1;
        }
    }
    printf("\n약수개수는 %d 개입니다.",count);
}


과제29

세 수의 공약수를 출 과제 력하는 순서도와 C 프로그램을 작성하여라.

#include<stdio.h>

int main(void)
{

    int i, n1, n2,n3;

    printf("정수를 입력하시오");
    scanf("%d %d %d",&n1,&n2,&n3);

    for (i=1; i<=n1; i++)
        if (n1%i==0 && n2%i==0 && n3%i==0)
        printf("%d ",i);

    return 0;



}


과제30

1부터 자기 자신까지의 수로 차례로 나누어서 나누어떨어지는 경우 2번 발생하면 이 수는 소수이고,

그렇지 않으면 소수가 아니다.

이 방법을 이용해서 소수를 판별하는 순서도와 C 프로그램을 작성하여라.

//과제30
//입력받은 수가 소수인지 아닌지 판별하는 코드를 작성하시오.
#include <stdio.h>
int main(void){
    int a;
    int i;
    int sosu;
    printf("소수를 판별할 임의의 정수를 입력하시오 : ");
    scanf("%d", &a);
    for(i = 1; i <= a; i++)
    {
        if(a%i == 0){
            sosu += i;
        //2를 제외한 소수는 1과 홀수값이므로 해당 값이 짝수이면 소수
        }
    }
        if(sosu%2 == 0){
            printf("%d는 소수입니다.", a);
        }else if(a == 2){
            printf("%d는 소수입니다.", a);
        }else{
            printf("%d는 소수가 아닙니다.\n", a);
        }
}

 


과제31

피보나치수열의 20번째 항까지의 합을 구하는 순서도와 C 프로그램을 작성하여라.

// 과제 31

#include <stdio.h>

int main()
{
    int i,num1,num2,num3,sum;
    
    num1 = 1;
    num2 = 1;
    num3 = 0;
    sum = 0;

    sum = num1 + num2;
    //printf("%d %d",num1,num2);
    for(i = 0; i < 18; i++)
    {
        num3 = num1 + num2;
        //printf("%d ",num3);

        num1 = num2;
        num2 = num3;
        sum = sum + num3;

    }
    printf("sum >> %d\n\n",sum);
    return 0;
}


과제32

 

최솟값을 구하는 순서도와 C 프로그램을 작성하여라.

#include <stdio.h>

int main()
{
	int a;
	int i=0, sum = 0;
	int min;

	printf("정수를 입력하세요(0, 음수는 종료)\n");
	while (1)	// 무한 루프
	{
		scanf("%d", &a);
		if (a <= 0) 
            break;

		if (i == 0) 
            min = a;  // 첫 번째 최소값으로 초기화

		else
		{
			if (a < min) 
                min = a;   // 입력한 값이 더 작으면 이 값을 최소값으로 설정
		}

		i++;
	}
	printf("최소값: %d\n", min);

	return 0;
}


과제33

다음과 같이 과제 출력하는 순서도와 C 프로그램을 각각 작성하여라.

#include<stdio.h>

int main(void)
{
    int i,j;

    for (i=1; i<=5; i++)
    {
        for (j=1; j<i+1; j++)
            printf("%d ",j);
    
    printf("\n");

    }
    
    return 0;

    
}

 

 


과제34

1!, 2!, 3!, 4!, 5! 팩토리얼 5!까지의 합을 구하시오

//과제 34
//팩토리얼 5!까지의 합을 구하시오
#include <stdio.h>
int main(void)
{
    int i;
    int geasung;
    geasung = 1;
    printf("1부터 5까지의 계승을 구합니다...\n");
    for(i = 1; i <= 5; i++){
        geasung *= i;
    }
    printf("1부터 5까지의 계승 : %d\n\n", geasung);

}

 


과제35

다음과 같은 형식으로 출력되는 구구단 순서도와 C 프로그램을 작성하여라.

 

//과제 35

#include<stdio.h>

int main()
{
    int i,j ;
    
    for (i = 1; i < 10; i++)
    {
        for(j = 2; j < 10; j++)
        {
            printf("%d*%d = %d /",j,i,j*i);
        }
        printf("\n");
    }
}

728x90
반응형