AR삽질러

C로 시작하는 컴퓨터 프로그래밍4판 - 6장 반복문 본문

C

C로 시작하는 컴퓨터 프로그래밍4판 - 6장 반복문

아랑팡팡 2023. 3. 27. 16:23
728x90

혼자해보기 6-1

- 사용자에게 값을 입력받아 그 값만큼 반복하는 다음 소스코드를 실행해보시오.

#include<stdio.h>
#pragma warning(disable:4996)

int main(void) {

	int number, i;
	printf("반복 횟수를 입력하세요 : ");
	scanf("%d", &number);

	printf("for문 예제입니다.\n");
	
	for (i = 1; i < number; i++) {
		printf("%d번 반복합니다!!\n", i);
	}

	return 0;
}

for문의{}는 반복문을 실행할 문장이 1개일 때는 필요 없지만 여러개일 때는 반드시 필요하다. 하지만 반복할 문장이 1개이더라도 프로그램을 좀 더 명확하게 이해할 수 있도록{}를 사용하는것이 좋다.

 

혼자해보기6-2

- 아스키코드와 반복문을 이용하여 알파벳 소문자를 출력하는 프로그램을 작성하시오.

#include<stdio.h>

int main(void) {
	int i;

	for (i = 97; i <= 122; i++) {
		printf("%c", i);
	}
	printf("\n");

	return 0;
}

 

혼자해보기6-3

- 다중for문을 이용하여 아래와 같은 실행 결과가 나오도록 프로그램을 작성하시오.

#include<stdio.h>

int main(void) {

	int i, j;
	for (i = 6; i > 1; i--) {
		for (j = 0; j < i; j++) {
			printf("*");
		}
		printf("\n");
	}

	return 0;
}

 

혼자해보기6-4

- 다음 소스코드를 실행해보고 어떤 기능이 수행되는지 확인하시오.

#include<stdio.h>
#pragma warning(disable:4996)

int main(void) {

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

- 입력받은 수부터 1까지 반복하면서 1부터 자기 자신까지 나누어 지는 수의 개수를 세는 index를 사용한다. 즉 index가 2인 경우 소수로 판단되어 출력한다.

 

혼자해보기6-5

- do~while문을 이용하여[예제6-2]의 프로그램을 다시 작성하시오.

#include<stdio.h>

int main(void) {
	
	int i = 97;
	do {
		printf("%c", i);
		i++;
	} while (i <= 122);
	return 0;
}

 

혼자해보기6-6

- continue문을 이용하여 1부터 10까지의 정수 가운데 짝수만 더하는 프로그램을 작성하시오.

#include<stdio.h>

int main(void) {

	int sum = 0, i;

	for (i = 1; i <= 10; i++) {
		if (i % 2 != 0)
			continue;
		sum += i;
	}
	printf("%d", sum);


	return 0;
}

 

 

1. for문과 while문은 각각 어느 경우에 사용하는 것이 효과적인지 설명하시오.

for문은 반복 횟수가 정해져 있는 경우에 사용하는 것이 효과적이다.

while문은 특정 조건이 참인 경우 반복이 필요할 경우 사용하는 것이 효과적이다.

 

2. 다음 프로그램의 문법적인 오류나 논리적인 오류를 수정하시오.

1) 

#include<stdio.h>

int main(void) {

	int sum = 0, number = 1;
	printf("1에서 10까지의 합을 구합니다.\n");

	while (number <= 10) {
		
		sum += number;
		number++;
	}
	printf("합은 %d입니다.\n", sum);

	return 0;
}

2)

#include<stdio.h>

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

	printf("1에서 10까지의 합을 구합니다.\n");
	do {	
		sum += number;
		number++;

	} while (number < 11);

	printf("합은 %d입니다.\n", sum);

	return 0;
}

3)

#include<stdio.h>

int main(void) {

	int i, sum = 0;
	for (i = 1; i <= 10; i ++) {
		if (i % 2 == 0)
		sum += i;
	}
	printf("1부터 10까지 짝수의 합은 %d이다.\n", sum);

	return 0;
}

 

3. 다음과 같이 실행결과가 출력되도록 반복문을 이용하여 프로그래밍하시오.

1)

#include<stdio.h>

int main(void) {

	for (int i = 0; i <= 5; i++) {
		for (int j = 0; j < i; j++) {
			printf("*");
		}
		printf("\n");
	}

	return 0;
}

2)

#include<stdio.h>

int main(void) {

	for (int i = 5; i > 0; i-=2) {
		for (int j = 0; j < i; j++) {
			printf("*");
		}
		printf("\n");
	}

	return 0;
}

3)

#include<stdio.h>

int main(void) {

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

	return 0;
}

4)

#include<stdio.h>

int main(void) {

    for (int i = 5; i >= 0; i--) {
        for (int k = 0; k < 5 - i; k++) {
            printf(" ");
        }
        for (int j = 0; j < i; j++) {
            printf("*");
        }
        printf("\n");
    }

    return 0;
}

5)

#include<stdio.h>

int main(void) {

    for (int i = 0; i < 4; i++) {
        int sc = i;
        int st = 2 * (4 - i) - 1;

        for (int j = 0; j < sc; j++) {
            printf(" ");
        }

        for (int j = 0; j < st; j++) {
            printf("*");
        }
        printf("\n");
    }

    return 0;
}

 

4. while문을 이용해서 알파벳 소문자 하나를 입력받은뒤 'a'부터 입력받은 소문자까지 순서대로 출력하는 프로그램을 작성하시오.

#include<stdio.h>
#pragma warning(disable:4996)
int main(void) {

	char ch;
	printf("출력할 알파벳입력 : ");
	scanf("%c", &ch);

	int num = 'a';

	while (num <= ch) {
		printf("%c", num);
		num++;
	}

	return 0;
}

 

5. for문을 이용하여 1부터 순차적으로 더한 값이 처음으로 300이상이 되는 마지막 자연수 값을 찾고 그때의 합을 구하는 프로그램을 작성하시오.

#include<stdio.h>

int main(void) {

	int sum = 0;
	int i;

	for (i = 1; sum < 300; i++) {
		sum += i;
	}

	printf("마지막 자연수 : %d\n", i -1);
	printf("자연수 합 : %d", sum);

	return 0;
}

 

6. continue문과 break문을 이용하여 1부터 1000사이의 자연수 중 2의 배수이면서 6의 배수인 수를 출력하되 10개까지만 출력하는 프로그램을 작성하시오.

#include<stdio.h>

int main(void) {

	int count = 0;

	for (int i = 1; i <= 1000; i++) {
		if (i % 2 != 0 && i % 6 != 0) {
			continue;
		}
		printf("\t%d", i);
		count++;
		if (count == 10) {
			break;
		}
	}
	return 0;
}

 

7. 소수를 2부터 계속 더할 때 2000보다 작은 최대 합은 몇이고 마지막으로 더해지는 소수는 무엇인지 프로그래밍을 통해 알아보시오.

#include<stdio.h>

int main(void) {

    int sum = 0;
    int num;

    for (num = 2; num < 2000; num++) {
        int isnum = 1;

        for (int i = 2; i < num; i++) {
            if (num % i == 0) {
                isnum = 0;
                break;
            }
        }

        if (isnum) {
            sum += num;
            if (sum > 2000) {
                sum -= num;
                break;
            }
        }
    }
	printf("2000보다 작은 소수의 합 : %d\n", sum);
	printf("마지막으로 더한 소수 : %d", num -1 );

	return 0;
}

 

8. 정수 3개를 입력받아 가장 큰수와 가장 작은 수 사이(가장 큰수와 가장 작은 수는 제외)의 짝수를 곱한 결과를 출력하는 프로그램을 작성하시오.

#include<stdio.h>
#pragma warning(disable:4996)
int main(void) {

	int a, b, c;
	int max, min, sum = 1;

	printf("정수 3개를 입력 : ");
	scanf("%d %d %d", &a, &b, &c);

	min = a < b ? (a < c ? a : c) : (b < c ? b : c);
	max = a > b ? (a > c ? a : c) : (b > c ? b : c);

	for (int i = min + 1; i < max; i++) {
		if (i % 2 == 0) {
			sum *= i;
		}
	}

	printf("가장큰수 : %d\n", max);
	printf("가장작은수 : %d\n", min);
	printf("가장 큰수와 작은수의 짝수를 곱한 결과 : %d", sum);
	return 0;
}

 

9. 양의 정수를 입력받아 그 수보다 작은 값의 피보나치 수열을 출력하는 프로그램을 작성하시오. 피보나치 수열이란 첫 번째 값이 0이고 두번째 값이 1일때 이후의 값은 이전의 두 값을 더한 것이다. 즉 0, 1, 1, 2, 3, 5, 8, ...순으로 이뤄진 수열이다.

#include<stdio.h>
#pragma warning(disable:4996)

int main(void) {
    int num;
    printf("양의 정수를 입력하세요: ");
    scanf("%d", &num);

    int a = 0, b = 1, c;
    printf("0 1 ");
    while (a + b < num) {
        c = a + b;
        printf("%d ", c);
        a = b;
        b = c;
    }

    return 0;
}

 

10. 두사람 A와 B의 마음을 테스트하는 놀이가 있다고 하자. A에게 0~9사이의 있는 숫자를 하나 입력하라고 하고, B가 몇 번째에 그 숫자를 맞추는지를 실험하는 프로그램을 작성하시오. 이때 다섯 번까지 맞출 수 있는 기회를 제공하고 몇 번째에 맞추었는지를 알려준다.

#include<stdio.h>
#pragma warning(disable:4996)

int main(void) {
    
    int a, b, count = 5, tri = 0;
    srand(time(NULL)); 
    a = rand() % 10;

    printf("\n숫자하나를 입력 : ");

    while (count > 0) {
        scanf("%d", &b);
        tri++;
        if (a == b) {
            printf("%d번째에 맞추었습니다!", tri);
            break;
        }
        else {
            printf("틀렸습니다! 남은 횟수 : %d\n", --count);
            printf("다시입력 : ");
        }
        if (count == 0) {
            printf("게임오버...정답은 : %d",a);
        }
    }

    return 0;
}

 

11. 1부터 원하는 수 사이의 자연수 중에서 2의 배수이면서 6의 배수인 수의 산술평균을 구하는 프로그램을 작성하시오(산술평균은 값을 다 더한 후에 개수로 나눈 값이다.)

#include<stdio.h>
#pragma warning(disable:4996)

int main(void) {
    
    int num, sum = 0, count = 0;
    printf("수를 입력하세요 : ");
    scanf("%d", &num);

    for (int i = 0; i <= num; i++) {
        if (i % 2 == 0 && i % 6 == 0) {
            sum += i;
            count++;
        }
    }

    if (count == 0) {
        printf("2의 배수이면서 6의배수가 없습니다...");
    }
    else {
        double av = (double)sum / count;
        printf("2의 배수이면서 6의 배수의 산술평균은 : %.2f입니다.", av);
    }

    return 0;
}

 

 

 

 

 

 

 

 

 

 

728x90
반응형
LIST