본문 바로가기
IT/프로그래밍

누구나 쉽게 즐기는 C언어 콘서트 7장 실습문제 정답

by nutrient 2020. 12. 13.
728x90
728x170

 

누구나 쉽게 즐기는 C언어 콘서트 7장 실습문제 정답

 

누구나 쉽게 즐기는 C언어 콘서트 7장 실습문제 정답

 

1번

#include <stdio.h>

int main(void) {
	int i;
	int days[] = { 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };

	for (i = 0; i < 12; i++)
		printf("%d월은 %d일까지 있습니다.\n", i + 1, days[i]);

	return 0;
}

 

2번

#include <stdio.h>

int main(void) {
	int max, min, i, num[5];

	printf("정수를 입력하시오: ");
	scanf("%d", &num[0]);
	max = num[0];
	min = num[0];

	for (i = 1; i < 5; i++) {
		printf("정수를 입력하시오: ");
		scanf_s("%d", &num[i]);
		if (max < num[i]) {
			max = num[i];
		}
		if (min > num[i]) {
			min = num[i];
		}
	}

	printf("최대값 = %d 최소값 = %d", max, min);

	return 0;
}

 

3번

#include <stdio.h>

int main(void) {
	int table[3][3];
	int r, c, max[3] = { 0, }, aver[3] = { 0, }, sum, th = 1;

	for (r = 0; r < 3; r++) {
		printf("학번 %d인 학생의 시험1, 2, 3 점수 입력 : ", th++);

		sum = 0;

		for (c = 0; c < 3; c++) {
			scanf("%d", &table[r][c]);

			sum += table[r][c];

			if (max[c] < table[r][c])
				max[c] = table[r][c];
		}
		aver[r] = sum / (double)3;
	}
	printf("\n");
	printf("============================================\n");

	printf("%5s %6s %6s %6s\n", "학번", "시험#1", "시험#2", "시험#3");

	for (r = 0; r < 3; r++) {
		printf("%5d ", r + 1);

		for (c = 0; c < 3; c++)
			printf("%6d ", table[r][c]);

		printf("\n");
	}
	for (r = 0; r < 3; r++)
		printf("%d 학생의 평균 점수는 %d점입니다.\n", r + 1, aver[r]);

	return 0;
}

 

4번

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

int main(void) {
	int ran[10] = { 0, };
	int i, cnt, many = 0, rannum;
	srand((unsigned)time(NULL));

	// 난수 100번
	for (cnt = 0; cnt < 100; cnt++) {
		// 난수 범위: 0~9까지
		rannum = rand() % 10;
		ran[rannum]++;
	}

	for (i = 0; i < 10; i++) {
		// 0~9까지의 수가 몇 번 출력되는지 확인
		printf("%d: %d개\n", i, ran[i]);

		// i가 many보다 수가 클 경우 many에 i를 저장
		if (ran[i] > ran[many])
			many = i;
	}

	printf("\n가장 많이 생성된 수: %d\n", many);
	printf("%d가 생성된 개수: %d개\n", many, ran[many]);

	return 0;
}

 

5번

#include <time.h>
#include <stdlib.h>

int MAX = 100000;

int research(int(*tile)[20]);         
void where(int* n, int* m, int val);     
void move(int(*tile)[20], int n, int m);
void view(int(*tile)[20]);               

int main(void) {
	int n, m, i, j;
	int tile[20][20];
	int number;
	int count = 0;

	srand(time(0));

	for (i = 0; i < 20; i++) {
		for (j = 0; j < 20; j++) {
			tile[i][j] = 0;
		}
	}

	n = 9; m = 9;
	tile[n][m] = 1;

	for (; count < MAX && research(tile) != 1; ) {
		number = rand() % 8;
		where(&n, &m, number);
		move(tile, n, m);
		count++;
	}

	view(tile);

	printf("벌레가 범위를 전부 이동하는 동안 %d번의 이동이 있었습니다.\n", count);

	return 0;
}

void view(int(*tile)[20]) {
	int i, j;

	for (i = 0; i < 20; i++) {
		for (j = 0; j < 20; j++) {
			printf("%d  ", tile[i][j]);
		}
		printf("\n");
	}
}

int research(int(*tile)[20]) {
	int i, j;

	for (i = 0; i < 20; i++) {
		for (j = 0; j < 20; j++) {
			if (tile[i][j] == 0) return 0; 
		}
	}
	return 1; 
}

void where(int* n, int* m, int val) {
	switch (val) {
	case 0:
		if (*n == 0) return;
		*n -= 1;
		break;
	case 1:
		if (*n == 0 || *m == 19) return;
		*n -= 1;
		*m += 1;
		break;
	case 2:
		if (*m == 19) return;
		*m += 1;
	case 3:
		if (*m == 19 || *n == 19) return;
		*m += 1;
		*n += 1;
		break;
	case 4:
		if (*n == 19) return;
		*n += 1;
		break;
	case 5:
		if (*n == 19 || *m == 0) return;
		*n += 1;
		*m -= 1;
		break;
	case 6:
		if (*m == 0) return;
		*m -= 1;
		break;
	case 7:
		if (*m == 0 || *n == 0) return;
		*m -= 1;
		*n -= 1;
		break;
	}
}

void move(int(*tile)[20], int n, int m) {
	tile[n][m] = 1;
}

 

6번

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

int main(void) {
	int dice[6] = { 0, };
	int i, j;
	srand((unsigned)time(NULL));

	// 난수 6만번
	for (i = 0; i < 60000; i++)
		// 범위는 0~5
		dice[rand() % 6]++;
	printf("====================\n");
	printf("%5s %8s\n", "면", "빈도");
	printf("====================\n");

	// 면과 빈도를 출력
	for (j = 0; j < 6; j++)
		// i + 1이므로 범위는 1~6
		printf("%5d %10d회\n", j + 1, dice[j]);

	return 0;
}

 

7번

#include <stdio.h>
#include <stdlib.h>

int main(void) {
	char sel;
	int raser, i;
	// 예약 상태
	int SEAT[10] = { 0, 0, 0, 0, 0, 1, 1, 1, 0, 0 };

	while (1 == 1) {
		printf("좌석을 예약하시겠습니까? (y 또는n) ");
		sel = getchar();
		getchar();

		// 만약 예약을 하겠다고 한 경우 (y 입력)
		if (sel == 'Y'||'y') {
			// 현재 예약 상태 출력
			printf("\n현재의 예약 상태는 다음과 같습니다.\n");
			printf("---------------------------------------\n");
			printf("1 2 3 4 5 6 7 8 9 10\n");
			printf("---------------------------------------\n");

			// 예약 상태
			for (i = 0; i < 10; i++)
				printf("%d ", SEAT[i]);

			// 예약 과정
			while (1 == 1) {
				printf("\n몇 번째 좌석을 예약하시겠습니까? ");
				scanf("%d", &raser);

				// 1번째 좌석이 배열 0번째 요소에 저장돼 있음
				SEAT[raser - 1]++;

				// 만약 이미 예약이 된 경우라면 이미 있던 1에 ++가 되어 2가 되기 때문
				if (SEAT[raser - 1] >= 2)
					printf("이미 예약된 자리입니다.\n");
				// 예약이 되지 않았던 자리라면 0에서 1이 되어 예약 상태가 됨
				else {
					printf("\n예약되었습니다.\n");
					break;
				}
			}
			printf("---------------------------------------\n");
			printf("1 2 3 4 5 6 7 8 9 10\n");
			printf("---------------------------------------\n");

			for (i = 0; i < 10; i++)
				printf("%d ", SEAT[i]);
			printf("\n");
		}
		// 예약안함 (n 입력)
		else if (sel == 'N' || 'n') {
			printf("좌석 예약 종료\n");
			exit(0);
		}
	}

	return 0;
}

 

8번

#include <stdio.h>
#include <math.h>

int main(void) {
	int i;
	double num[5];
	double sum = 0, avg = 0, dev = 0;
	int count = 0;

	//실수 5개 입력받기
	printf("평균과 표준편차를 계산할 5개 이하의 실수를 입력해주세요.\n");
	while (scanf("\n%lf", &num[count]) != NULL) {
		sum += num[count];
		count++;
		if (count == 5) break;
	}

	//평균
	avg = sum / count;
	printf("평균 = %lf\n", avg);

	//표준편차
	sum = 0;
	for (i = 0; i < count; i++)
		sum += (num[i] - avg)*(num[i] - avg);
	dev = sqrt(sum / count);
	printf("표준편차 = %lf\n", dev);

	return 0;
}

 

9번

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <conio.h>
#define X 7
#define Y 7

int main(void) {
	char tile[Y][X] = { 0 };
	int x, y, i, j;
	int count = 0, remain;

	srand((unsigned)time(NULL));

	x = X / 2;
	y = Y / 2;
	tile[y][x] = 1;

	if (getch() != '\0')
		while (1 == 1) {

			for (i = 0; i < Y; i++) {
				for (j = 0; j < X; j++) {
					if (tile[i][j] == 1) printf("* ");
					else printf("_ ");
				}
				printf("\n");
			}
			printf("\n");

			remain = 0;

			for (i = 0; i < Y; i++)
				for (j = 0; j < X; j++)
					if (tile[i][j] == 1)
						remain++;

			if (remain == Y * X) break;

			switch (rand() % 8) {
			case 0:
				if (y == 0) break;
				tile[y--][x] = 1;
				count++;
				break;
			case 1:
				if (y == 0 || x == X - 1) break;
				tile[y--][x++] = 1;
				count++;
				break;
			case 2:
				if (x == X - 1) break;
				tile[y][x++] = 1;
				count++;
				break;
			case 3:
				if (y == Y - 1 || x == X - 1) break;
				tile[y++][x++] = 1;
				count++;
				break;
			case 4:
				if (y == Y - 1) break;
				tile[y++][x] = 1;
				count++;
				break;
			case 5:
				if (y == Y - 1 || x == 0) break;
				tile[y++][x--] = 1;
				count++;
				break;
			case 6:
				if (x == 0) break;
				tile[y][x--] = 1;
				count++;
				break;
			case 7:
				if (y == 0 || x == 0) break;
				tile[y--][x--] = 1;
				count++;
				break;
			}
		}

	printf("총 이동 수: %d번\n", count);

	return 0;
}

 

 

 

728x90
그리드형

댓글