[ICON] C언어 멘토링 - 9차시 수업 : 중간 점검 및 과제 풀이

hhhhyelim·2022년 8월 18일
0

ICON

목록 보기
9/17
post-thumbnail

📆 일시

: 2022/08/11

📝 수업 내용

  • 중간 점검 및 과제 풀이

📚 과제 풀이

  1. 1~99 사이의 정수 중 하나를 컴퓨터가 가지고 있고, 사용자가 그 수를 알아맞히는 프로그램을 작성하시오. (사용자가 알아맞히는데 걸린 시도 횟수를 함께 출력한다.)

👉코드

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main(void)
{
	srand(time(NULL));
	int guess, count = 0;
	int answer = rand() % 99 + 1;
	
	do {
		printf("정답을 추측해 보시오: ");
		scanf("%d", &guess);

		if (guess > answer)
		{
			printf("더 작은 수를 말해봐\n");
			count++;
		}
		else if(guess < answer)
		{
			printf("더 큰 수를 말해봐\n");
			count++;
		}
	} while (guess != answer);

	printf("축하합니다. %d번만에 맞쳤네요\n", count+1);

	return 0;
}
  

👉실행 결과

정답을 추측해 보시오: 50
더 작은 수를 말해봐
정답을 추측해 보시오: 30
더 작은 수를 말해봐
정답을 추측해 보시오: 20
더 작은 수를 말해봐
정답을 추측해 보시오: 10
더 큰 수를 말해봐
정답을 추측해 보시오: 15
축하합니다. 5번만에 맞쳤네요
  1. 점수를 입력 받아 학생수, 총점, 평균, 가장 좋은 점수를 출력하는 프로그램을 작성하시오.

👉코드

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main(void)
{
	int score, max = 0, std = 0, total = 0;
	double avg;

	while (1)
	{
		printf("Enter a score(-1 for exit): ");
		scanf("%d", &score);

		if (score == -1)
			break;

		if (max <= score)
			max = score;

		total += score;
		std++;
	}
	avg = (double)total / std;
	printf("You've entered %d students.\n", std);

	if (std != 0)
	{
		printf("The total is %d.\n", total);
		printf("The average is %.1f.\n", avg);
		printf("The best score is %d.\n", max);
	}
	else
		printf("There is no data.\n");

	return 0;
}

👉실행 결과

Enter a score(-1 for exit): 30
Enter a score(-1 for exit): 50
Enter a score(-1 for exit): 30
Enter a score(-1 for exit): -1
You've entered 3 students.
The total is 110.
The average is 36.7.
The best score is 50.
  1. 정수를 2개 입력받아 두 수의 최대 공약수를 구하는 프로그램을 작성하시오.
    (단, 유클리드 호제법 사용해 푼다.)

👉코드

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

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

	printf("두 개의 정수를 입력하시오(큰수, 작은수): ");
	scanf("%d %d", &x, &y);

	while (y != 0)
	{
		r = x % y;
		x = y;
		y = r;		
	}
	
	printf("GCD = %d\n", x);
	return 0;
}

👉실행 결과

두 개의 정수를 입력하시오(큰수, 작은수): 18 12
GCD = 6
  1. 소문자를 입력받아 대문자로 변경하여 출력하는 프로그램을 작성하시오. (단, 대문다 'Q'를 입력하면 프로그램을 종료하도록 하며, 소문자와 대문자 'Q'가 아니면 다시 입력받는다.)

👉코드

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main(void)
{
	char ch;

	while (1)
	{
		printf("소문자를 입력: ");
		scanf(" %c", &ch);

		if (ch == 'Q')
			break;
		else if (ch >= 'a' && ch <= 'z')
			ch -= 32;
		else
			continue;

		printf("변환된 대문자는 %c\n", ch);		
	}
	return 0;
}
                                  

👉실행 결과

소문자를 입력: a
변환된 대문자는 A
소문자를 입력: 1
소문자를 입력: Q
  1. 정수 n을 입력받아 1~n 사이의 소수를 모두 구하여 출력하는 프로그램을 작성하시오. (단, 소수는 한줄에 10개씩 출력한다.)

👉코드

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main(void)
{
	int num, i, k, count = 0, enter = 0;

	printf("양의 정수? ");
	scanf("%d", &num);

	for (i = 2; i <= num; i++) {
		for (k = 2; k <= i; k++) {
			if (i % k == 0)
				count++;
		}
		if (count == 1)
		{
			printf(" %2d", i);
			enter++;

			if (enter % 10 == 0)
				printf("\n");
		}
		count = 0;
	}
	printf("\n");
	
	return 0;
}

👉실행 결과

양의 정수? 100
2  3  5  7 11 13 17 19 23 29
31 37 41 43 47 53 59 61 67 71
73 79 83 89 97
  1. 0~99까지의 숫자를 임의로 발생시켜 사용자가 원하는 만큼 덧셈문제를 연습할 수 있도록 프로그램을 작성하시오.

👉코드

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main(void)
{
	int x, y, answer, right_answer;
	char ch;

	do {
		srand(time(NULL));

		x = rand() % 100;
		y = rand() % 100;

		printf("%d + %d = ", x, y);
		scanf("%d", &answer);

		right_answer = x + y;

		if (answer == right_answer)
			printf("Your answer is right\n");
		else
		{
			printf("Your answer is wrong.\n");
			printf("%d is the right answer.\n", right_answer);
		}
		while (getchar() != '\n');
		printf("continue?(y/n): ");
		scanf("%c", &ch);
	
	} while (ch == 'y');

	return 0;
}

👉실행 결과

92 + 48 = 136
Your answer is wrong.
140 is the right answer.
continue?(y/n): y
21 + 80 = 101
Your answer is right
continue?(y/n): n
  1. num이 소수이면 1, 아니면 0을 반환하는 isPrime()을 이용하여 2부터 시작하여 차례대로 10개의 소수를 구하여 출력하는 프로그램을 완성하시오.

👉코드

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int isPrime(int n);

int main(void)
{	
	int num = 1;

	for (int i = 1;; i++)
	{
		if (isPrime(i))
		{
			printf("%d번째 소수는 %d\n", num, i);
			num++;
		}
		if (num == 11)
			break;
	}	
}

int isPrime(int n)
{
	int i, j, count = 0;

	for (i = 1; i <= n; i++)
		if (n % i == 0)
			count++;
	
	if (count == 2)
		return 1;
	else
		return 0;
}

👉실행 결과

1번째 소수는 2
2번째 소수는 3
3번째 소수는 5
4번째 소수는 7
5번째 소수는 11
6번째 소수는 13
7번째 소수는 17
8번째 소수는 19
9번째 소수는 23
10번째 소수는 29
  1. 입력받은 수식의 계산 결과를 출력하는 프로그램을 작성하시오.
    (단, "0 0"이 입력되면 프로그램을 종료한다.)

👉코드

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int accumulator(char op, int n, int prevResult);

int main(void)
{
	int result = 0, num;

	printf("%d ", result);

	char op = ' ';

	while (1)
	{
		scanf(" %c %d", &op, &num);
		if ((op == '0') && (num == 0))
			break;
		else {
			result = accumulator(op, num, result);
			printf("= %d", result);
		}
	}
	return 0;
}
int accumulator(char op, int n, int prevResult)
{
	if (op == '+')
		prevResult += n;
	else if (op == '-')
		prevResult -= n;
	else if (op == '*')
		prevResult *= n;
	else if (op == '/')
		prevResult /= n;

	return prevResult;
}

👉실행 결과

0 + 15
= 15 * 7
= 105 / 3
= 35 - 2
= 33 0 0

별 찍기

  1. 왼쪽 정열 직각삼각형

👉코드1

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main(void) {
	int num; 

	printf("rows? ");
	scanf("%d", &num);

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

	return 0;
}

👉코드2

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main(void) {
	int num;

	printf("rows? ");
	scanf("%d", &num);

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

	return 0;
}

👉실행 결과

rows? 4
*
**
***
****
  1. 왼쪽 정열 역삼각형

👉코드

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main(void) {
	int num;

	printf("rows? ");
	scanf("%d", &num);

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

	return 0;
}

👉실행 결과

 rows? 4
 ****
 ***
 **
 *
  1. 오른쪽 정열 직각삼각형

👉코드1

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main(void)
{
	int num;

	printf("rows? ");
	scanf("%d", &num);

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

	return 0;
}

👉코드2

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main(void)
{
	int row;

	printf("rows? ");
	scanf("%d", &row);

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

	return 0;
}

👉실행 결과

rows? 4
   *
  **
 ***
****
  1. 피라미드

👉코드1

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main(void)
{
	int num;

	printf("rows? : ");
	scanf("%d", &num);

	for (int a = 1; a <= num; a++){
		for (int b = (num - 1); b >= a; b--){
			printf(" ");
		}
		for (int c = 1; c <= 2 * a - 1; c++){
			printf("*");
		}
		printf("\n");
	}

	return 0;
}

👉실행 결과

rows? 4
   *
  ***
 *****
******* 
  1. 피라미드(2)

👉코드1

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main(void)
{
	int num;

	printf("rows? : ");
	scanf("%d", &num);

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

	return 0;
}

👉실행 결과

rows? 4
*
**
***
****
***
**
*

0개의 댓글