[ICON] C언어 멘토링-과제 풀이(배열)

hhhhyelim·2022년 9월 12일
0

ICON

목록 보기
12/17
post-thumbnail

📚 과제 풀이

  1. 등차수열은 앞의 항에 항상 일정한 수(공차)를 더하여 만들어가는 수열이다.
    크기가 10인 정수형 배열에 대하여 등차수열로 값을 채우려고 한다. 첫 번째 항의 값과 공차를 입력받아 배열을 채우고 출력하는 프로그램을 작성하시오.

👉코드

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#define SIZE 10

int main(void)
{
	int arr[SIZE];
	int i;
	int diff; 

	printf("첫 번째 항? ");
	scanf("%d", &i);
	printf("공차? ");
	scanf("%d", &diff);

	for (int j = 0; j < SIZE; j++)
		arr[j] = i + diff * j;

	printf("등차수열: ");
	for (int j = 0; j < SIZE; j++)
		printf("%d ", arr[j]);
	printf("\n");

	return 0;
}  

👉실행 결과

첫 번째 항? 3
공차? 4
등차수열: 3 7 11 15 19 23 27 31 35 39
  1. n(<=20)명의 학생 성적을 별 막대그래프로 나타내는 프로그램을 작성하시오.

👉코드

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#define SIZE 20

int main(void)
{
	int num;
	int score[SIZE];

	printf("Enter the number of scores(<=20): ");
	scanf("%d", &num);

	for (int i = 0; i < SIZE; i++)
	{
		if (i == num)
			break;
		printf("Enter a score: ");
		scanf("%d", &score[i]);
	}

	for (int i = 0; i < SIZE; i++)
	{
		if (i == num)
			break;
		printf("Student %d: ", i + 1);
		for (int j = 0; j < score[i]; j++)
			printf("*");
		printf("\n");
	}
	
	return 0;
}

👉실행 결과

Enter the number of scores(<=20): 6
Enter a score: 7
Enter a score: 3
Enter a score: 4
Enter a score: 1
Enter a score: 9
Enter a score: 11
Student 1: *******
Student 2: ***
Student 3: ****
Student 4: *
Student 5: *********
Student 6: ***********
  1. 실수형 세 개의 배열 arrayA, arrayB, arrayC을 아래의 코드에서처럼 선언, 초기화한 후 다음과 같은 프로그램을 작성하시오.
    (arrayB는 arrayA 값을 복사한 값, arrayC는 arrayA 값의 역순을 복사한 값)

👉코드

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#define SIZE 10

int main(void)
{
	double arrayA[SIZE] = { 1.2, 3.1, 4.3, 4.5, 6.7, 2.3, 8.7, 9.5, 2.3, 5.8 };
	double arrayB[SIZE];
	double arrayC[SIZE];

	printf("arrayA: ");
	for (int i = 0; i < SIZE; i++)
		printf("%.1f ", arrayA[i]);
	printf("\n");

	printf("arrayB: ");
	for (int i = 0; i < SIZE; i++)
	{
		arrayB[i] = arrayA[i];
		printf("%.1f ", arrayB[i]);
	}
	printf("\n");

	printf("arrayC: ");
	for (int i = 0; i < SIZE; i++)
	{
		arrayC[i] = arrayA[SIZE - 1 - i];
		printf("%.1f ", arrayC[i]);
	}
	printf("\n");
	
	return 0;
}

👉실행 결과

arrayA: 1.2 3.1 4.3 4.5 6.7 2.3 8.7 9.5 2.3 5.8
arrayB: 1.2 3.1 4.3 4.5 6.7 2.3 8.7 9.5 2.3 5.8
arrayC: 5.8 2.3 9.5 8.7 2.3 6.7 4.5 4.3 3.1 1.2
  1. 상품 가격이 저장된 정수형 배열에 대하여 할인율(%)을 입력받아 할인된 가격을 계산해서 출력하는 프로그램을 작성하시오.

👉코드

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#define SIZE 5

int main(void)
{
	int price[SIZE], ratePrice[SIZE];
	int rate; 

	printf("상품가 5개를 입력하세요: ");
	for (int i = 0; i < SIZE; i++)
		scanf("%d", &price[i]);
	
	printf("할인율(%%)? ");
	scanf("%d", &rate);

	for (int i = 0; i < SIZE; i++)
	{
		ratePrice[i] = price[i] - price[i] * rate / 100;
		printf("가격: %6d --> 할인가: %6d\n", price[i], ratePrice[i]);
	}
	return 0;
}

👉실행 결과

상품가 5개를 입력하세요: 10000 23000 39000 9900 19000
할인율(%)? 20
가격:  10000 --> 할인가:  8000
가격:  23000 --> 할인가: 18400
가격:  39000 --> 할인가: 31200
가격:   9900 --> 할인가:  7920
가격:  19000 --> 할인가: 15200
  1. 정수형 2차원 배열을 선언하여 그 안에 구구단의 결과를 9단까지 저장한 후 출력하는 프로그램을 작성하시오. 사용자 입력으로 숫자를 읽어들여서 선언한 2차원 배열을 이용하여 해당 구구단을 출력하는 프로그램을 작성하시오.

👉코드

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#define ROW 8
#define COL 9

int main(void)
{
	int gugudan[ROW][COL];
	int num;

	printf("--구구단 표는 다음과 같습니다.\n");
	for (int i = 0; i < ROW; i++)
	{
		for (int j = 0; j < COL; j++)
		{
			gugudan[i][j] = (i + 2) * (j + 1);
			printf("%4d", gugudan[i][j]);
		}
		printf("\n");
	}
	printf("--원하는 구구단은? ");
	scanf("%d", &num);

	for (int j = 0; j < COL; j++)
		printf("%4d", gugudan[num-2][j]);
	printf("\n");

	return 0;
}

👉실행 결과

--구구단 표는 다음과 같습니다.
 2   4   6   8  10  12  14  16  18
 3   6   9  12  15  18  21  24  27
 4   8  12  16  20  24  28  32  36
 5  10  15  20  25  30  35  40  45
 6  12  18  24  30  36  42  48  54
 7  14  21  28  35  42  49  56  63
 8  16  24  32  40  48  56  64  72
 9  18  27  36  45  54  63  72  81
--원하는 구구단은? 3
 3   6   9  12  15  18  21  24  27
  1. 한 학기 성적은 중간고사 30점, 기말고사 30점, 팀 프로젝트 30점, 출석 10점으로 계산된다. 학생이 모두 5명일 때, 각 학생별 총점을 구하고 중간고사, 기말고사, 팀프로젝트, 출석, 총점의 평균을 구하여 출력하는 프로그램을 작성하시오. 성적을 저장하는 2차원 배열은 다음과 같이 초기화해서 사용하시오.

👉코드

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#define SIZE 5 

int main(void)
{
 int scores[SIZE][SIZE] = { {28, 28, 26, 9}, {30, 27, 30, 10}, 
                            {25, 26, 24, 8}, {18, 22, 22, 5}, {24, 25, 30, 10} };
 double averages[SIZE] = { 0 };

 for (int i = 0; i < SIZE; i++)
    for (int j = 0; j < SIZE - 1; j++)
       scores[i][SIZE - 1] += scores[i][j];

 for (int i = 0; i < SIZE; i++)
 {
    for (int j = 0; j < SIZE; j++)
       averages[i] += scores[j][i];

    averages[i] /= SIZE;
 }

 printf("\t\t 중간\t기말\t팀플\t출석\t총점\n");
 for (int i = 0; i < SIZE; i++)
 {
    printf("학 생 %3d 번:", i + 1);

    for (int j = 0; j < SIZE; j++)
       printf("\t%4d", scores[i][j]);

    printf("\n");
 }

 printf("항목별 평균: ");
 for (int i = 0; i < SIZE; i++)
    printf("\t%4.1f", averages[i]);

 printf("\n");

 return 0;
}

👉실행 결과

                중간    기말    팀플     출석    총점
학 생   1번:     28      28      26       9      91
학 생   2번:     30      27      30      10      97
학 생   3번:     25      26      24       8      83
학 생   4번:     18      22      22       5      67
학 생   5번:     24      25      30      10      89
항목별 평균:    25.0    25.6     26.4    8.4    85.4
  1. 음악 재생 프로그램에는 재생 목록에 있는 곡들을 임의의 순서로 뒤섞는 셔플 기능이 있다. 이 셔플 기능처럼 크기가 10인 정수형 배열의 원소를 임의의 순서로 뒤섞는 프로그램을 작성하시오. 크기가 10인 정수형 배열은 다음과 같이 초기화해서 사용한다.

👉코드

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

void print_array(int arr[], int size);

int main(void)
{
	int arr[MAX] = { 12, 43, 39, 98, 71, 63, 8, 16, 54, 85 };

	srand((unsigned int)time(NULL));
	printf("셔플 전: ");
	print_array(arr, MAX);

	for (int i = 0; i < MAX - 1; i++)
	{
		int shuffle1 = rand() % MAX;
		int shuffle2 = rand() % MAX;
		int tmp;

		tmp = arr[shuffle1];
		arr[shuffle1] = arr[shuffle2];
		arr[shuffle2] = tmp;
	}
	printf("셔플 후: ");
	print_array(arr, MAX);

	return 0;
}

void print_array(int arr[], int size)
{
	for (int i = 0; i < MAX; i++)
		printf("%2d ", arr[i]);
	printf("\n");
}

👉실행 결과

셔플 전: 12 43 39 98 71 63  8 16 54 85
셔플 후: 16 54 12 85  8 63 39 98 43 71
  1. 기차표 예매 프로그램을 작성하려고 한다. 간단하 구현을 위해 좌석은 모두 10개라고 하자. 예매할 좌석수를 입력받아 빈 자리를 할당한다. 에매할 때마다 각 좌석은 상태를 출력한다. 이면 예매 가능, x는 예매 불가를 의미한다. 더 이상 예매할 수 없으면 프로그램을 종료한다.

👉코드

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#define MAX_SEATS 10

void print_seat(char seats[], int size);

int main(void)
{
	char seats[MAX_SEATS] = { 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O' };
	int occupied = 0, want = 0;
	int empty = 0;
	
	while (1)
	{
		print_seat(seats, MAX_SEATS);

		printf("\n예매할 좌석수? ");
		scanf("%d", &want);

		empty = MAX_SEATS - occupied;
		if (want > empty)
		{
			printf("남은 좌석 수가 %d이므로 %d좌석을 예매할 수 없습니다\n", empty, want);
			break;
		}
		
		for (int i = 0; i < want + occupied; i++)
			seats[i] = 'X';
		
		for(int i = occupied; i < want + occupied; i++)
			printf("%d ", i+1);

		printf("번 좌석을 예매했습니다.\n");
		occupied += want;
	}
	return 0;
}

void print_seat(char seats[], int size)
{
	printf("-----------------------------------------\n");
	printf("현재 좌석: [ ");

	for (int i = 0; i < MAX_SEATS; i++)
		printf("%c ", seats[i]);

	printf("]\n");
	printf("-----------------------------------------\n");
}

👉실행 결과

-----------------------------------------
현재 좌석: [ O O O O O O O O O O ]
-----------------------------------------

예매할 좌석수? 5
1 2 3 4 5 번 좌석을 예매했습니다.
-----------------------------------------
현재 좌석: [ X X X X X O O O O O ]
-----------------------------------------

예매할 좌석수? 3
6 7 8 번 좌석을 예매했습니다.
-----------------------------------------
현재 좌석: [ X X X X X X X X O O ]
-----------------------------------------

예매할 좌석수? 5
남은 좌석 수가 2이므로 5좌석을 예매할 수 없습니다

0개의 댓글