본문 바로가기
College Computer Science/C Language

[C 프로그래밍 실습] 배열 (Lab 04)

by 2den 2020. 11. 5.
728x90

<Lab 04 문제 유형 요약>

 

  • Program 1 : 배열의 크기, sizeof()
  • Program 2 : 반복문으로 배열 복사
  • Program 3 : 반복문으로 배열 같은지 검사
  • Program 4 : 배열 요소의 총합과 평균
  • Program 5 : 배열 입력, 요소 빈도 검사
  • Program 6 : 이차원 배열
  • Program 7 : 이차원 배열, 행렬, 행렬의 곱
  • Program 8 : 이차원 배열, 행렬, 행렬의 합과 차

 

 


 

Program 1

 

다음을 참고로 배열을 초기화하고 반복문을 사용하여 배열의 모든 원소를 출력하는 프로그램을 작성하시오.

 

  • 배열 double degree[] = {-5.34, 3.67, 19.76, 28.76, 35.63};
  • 배열의 크기를 계산( sizeof 함수 이용)하여 변수 size에 저장하고 반복문에서 사용
#include <stdio.h>

int main()
{
	double degree[] = { -5.34, 3.67, 19.76, 28.76, 35.63 };
	int size = sizeof(degree) / sizeof(double);

	for (int i = 0; i < size; i++)
	{
		printf("%.2lf ", degree[i]);
	}
	printf("\n");

	return 0;
}

 

 

 

Program 2

 

다음과 같이 일차원 배열을 복사하여 결과를 알아보는 프로그램을 작성하시오. 

 

  • int a[] = { 4, 7, 9, 3, 6 };
  • int b[] = { 10, 20, 30, 40, 50, 60 };
  • 배열 a의 첫 번째 원소부터 n번째 원소까지 같은 순서대로 배열 b로 값을 복사
  • 결과인 배열 b를 모두 출력

#include <stdio.h>

int main()
{
	int i = 0;

	int a[] = { 4,7,9,3,6 };
	int b[] = { 10,20,30,40,50,60 };

	int size_a = sizeof(a) / sizeof(int);
	int size_b = sizeof(b) / sizeof(int);

	for (i = 0; i < size_a; i++)
	{
		b[i] = a[i];
	}

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

	return 0;
}

 

 

 

Program 3

 

다음과 같이 일차원 배열의 동등함을 검사하여 그 결과를 알아보는 프로그램을 작성하시오. (배열 a와 b1, b2, b3에 대해 각각 검사하시오(함수 사용하지 말고 해볼 것))

 

  • int a[] = { 4, 7, 9, 3, 6 };
  • int b1[] = { 4, 7, 9, 3, 6 };   // 같은 경우
  • int b2[] = { 4, 7, 9, 3, 7 };   // 마지막 원소가 다른 경우
  • int b3[] = { 4, 7, 9, 3, 6, 8}; // 원소의 개수가 다른 경우

#include <stdio.h>

int main()
{
	int i = 0, dif = 0;
	int a[] = { 4, 7, 9, 3, 6 };
	int b1[] = { 4, 7, 9, 3, 6 };   // 같은 경우
	int b2[] = { 4, 7, 9, 3, 7 };   // 마지막 원소가 다른 경우
	int b3[] = { 4, 7, 9, 3, 6, 8 }; // 원소의 개수가 다른 경우

	int size_a = sizeof(a) / sizeof(int);

	// a - b1
	printf("a[]  : 4 7 9 3 6\n");
	printf("b1[] : 4 7 9 3 6\n");

	if (size_a != sizeof(b1) / sizeof(int)) {
		dif = 1;
	} else {
		for (i = 0; i < size_a; i++)
		{
			if (a[i] != b1[i])
			{
				dif = 1; break;
			}
		}
	}

	if (dif == 0) {
		printf("두 배열은 같다.\n\n");
	} else {
		printf("두 배열은 다르다.\n\n");
	}
	dif = 0;

	// a - b2
	printf("a[]  : 4 7 9 3 6\n");
	printf("b2[] : 4 7 9 3 7\n");

	if (size_a != sizeof(b2) / sizeof(int)) {
		dif = 1;
	}
	else {
		for (i = 0; i < size_a; i++)
		{
			if (a[i] != b2[i])
			{
				dif = 1; break;
			}
		}
	}

	if (dif == 0) {
		printf("두 배열은 같다.\n\n");
	}
	else {
		printf("두 배열은 다르다.\n\n");
	}
	dif = 0;

	// a - b3
	printf("a[]  : 4 7 9 3 6\n");
	printf("b3[] : 4 7 9 3 6 8\n");

	if (size_a != sizeof(b3) / sizeof(int)) {
		dif = 1;
	}
	else {
		for (i = 0; i < size_a; i++)
		{
			if (a[i] != b3[i])
			{
				dif = 1; break;
			}
		}
	}

	if (dif == 0) {
		printf("두 배열은 같다.\n\n");
	}
	else {
		printf("두 배열은 다르다.\n\n");
	}
	dif = 0;

	return 0;
}

 

 

 

Program 4

 

배열을 사용하여 98.56, 78.62, 78.69, 89.32, 95.29를 초기화하여 출력하고 배열의 총합과 평균을 구하여 출력하는 프로그램을 작성하시오.

 

#include <stdio.h>

int main()
{
	double set[] = { 98.56, 78.62, 78.69, 89.32, 95.29 };
	int size = sizeof(set) / sizeof(double);
	double sum = 0;

	for (int i = 0; i < size; i++)
	{
		sum += set[i];
	}

	printf("배열의 합 = %.2lf\n", sum);
	printf("평균 = %.2lf\n", sum / size);

	return 0;
}

 

 

 

Program 5

 

0에서 9까지의 정수 중에서 10개의 수를 입력 받아 가장 많이 입력 받은 빈도 수는 무엇이고, 몇 번인지 출력하는 프로그램을 작성하시오.

 

#include <stdio.h>

int main()
{
	int set[10] = { 0, };
	int cnt = 0, temp = -1, freq = -1;

	printf("0에서 9까지의 정수를 입력하시오.\n");

	while (cnt != 10) {
		scanf("%d", &temp);
		if (temp >= 0 && temp <= 9) {
			set[temp]++;
			cnt++;
		}
		else {
			printf("다시입력(0~9) :\n");
		}
	}
	
	cnt = 0;
	for (int i = 0; i < 10; i++)
	{
		if (set[i] > cnt) {
			cnt = set[i];
			freq = i;
		}
	}

	printf("\n0~9 중 가장 많이 나온 수는 %d이고, %d번 나왔습니다.\n", freq, cnt);

	return 0;
}

 

 

 

Program 6

 

다음 [C 프로그래밍] 점수를 이차원 배열에 저장하고, 각 학생의 합과 평균을 구하여 아래와 같이 출력하는 프로그램을 작성하시오.

 

  중간 퀴즈1 퀴즈2 기말
이현수 97 90 88 95
김기수 76 89 75 83
김범용 60 70 88 82
장기태 83 89 92 85
이명수 75 73 72 78

#include <stdio.h>

int main()
{
	enum _name { 이현수, 김기수, 김범용, 장기태, 이명수 } name;

	double score[5][6] = { {97, 90, 88, 95, 0, 0},
						{76, 89, 75, 83, 0, 0},
						{60, 70, 88, 82, 0, 0},
						{83, 89, 92, 85, 0, 0},
						{75, 73, 72, 78, 0, 0} };

	for (int i = 0; i < 5; i++)
	{
		for (int j = 0; j < 4; j++)
		{
			score[i][4] += score[i][j];
		}
		score[i][5] = score[i][4] / 4;
	}

	printf("=============================================\n");
	printf("  이름     중간   퀴1   퀴2  기말  합계  평균 \n");
	printf("=============================================\n");
	printf(" 이현수 ");
	for (int k = 0; k < 5; k++) printf("%6.0lf", score[이현수][k]);
	printf("%7.2lf\n", score[이현수][5]);
	printf(" 김기수 ");
	for (int k = 0; k < 5; k++) printf("%6.0lf", score[김기수][k]);
	printf("%7.2lf\n", score[김기수][5]);
	printf(" 김범용 ");
	for (int k = 0; k < 5; k++) printf("%6.0lf", score[김범용][k]);
	printf("%7.2lf\n", score[김범용][5]);
	printf(" 장기태 ");
	for (int k = 0; k < 5; k++) printf("%6.0lf", score[장기태][k]);
	printf("%7.2lf\n", score[장기태][5]);
	printf(" 이명수 ");
	for (int k = 0; k < 5; k++) printf("%6.0lf", score[이명수][k]);
	printf("%7.2lf\n", score[이명수][5]);
	printf("=============================================\n");

	return 0;
}

 

 

 

Program 7

 

다음과 같이 3 x 2와 2 x 3의 두 행렬 a, b에서 행렬의 곱 c를 구하는 프로그램을 작성하시오.

3 5
4 2
5 7
3 8 2
2 4 6

#include <stdio.h>

int main()
{
	int mat1[3][2] = {3, 5, 4, 2, 5, 7};
	int mat2[2][3] = {3, 8, 2, 2, 4, 6};
	int result = 0;

	printf("행렬 a\n");
	for (int i = 0; i < 3; i++)
	{
		for (int j = 0; j < 2; j++)
		{
			printf("%d ", mat1[i][j]);
		}
		printf("\n");
	}

	printf("\n행렬 b\n");
	for (int i = 0; i < 2; i++)
	{
		for (int j = 0; j < 3; j++)
		{
			printf("%d ", mat2[i][j]);
		}
		printf("\n");
	}

	printf("\n행렬 c = a x b\n");
	for (int i = 0; i < 3; i++)
	{
		for (int j = 0; j < 3; j++)
		{
			for (int k = 0; k < 2; k++)
			{
				result += mat1[i][k] * mat2[k][j];
			}
			printf("%d ", result);
			result = 0;
		}
		printf("\n");
	}

	return 0;
}

 

 

 

Program 8

 

다음 4 x 3의 행렬에서 두 행렬 x 와 y의 합과 차를 구하는 프로그램을 작성하시오.

 

  • 배열에서 같은 첨자의 행과 열에 대응하는 원소의 합과 차를 구한다 
  • 행렬 x와 y는 아래 값들로 초기화 된다.
  • 합과 차를 구하는 연산에서 배열 포인터(px와 py)를 정의하여 사용 : int (*px)[COLS] = x;  int (*py)[COLS] = y;   // COLS == 3, ROWS == 4
  • 합을 구할 때는 배열 포인터의 px[i] 와 py[i] ([ ] 하나만으로 원소 접근) 사용
  • 차를 구할 때는 배열 포인터의 px  와 py ([ ]  사용 없이 원소 접근) 사용
46 79 78
35 57 28
43 68 76
56 78 98
78 35 99
85 82 34
58 69 29
34 59 35

#include <stdio.h>
#define COLS 3

int main()
{
	int i, j;
	int x[4][3] = { 46, 79, 78, 35, 57, 28, 43, 68, 76, 56, 78, 98 };
	int y[4][3] = { 78, 35, 99, 85, 82, 34, 58, 69, 29, 34, 59, 35 };
	int(*px)[COLS] = x; int(*py)[COLS] = y;

	printf("행렬 x\n");
	for (i = 0; i < 4; i++)
	{
		for (j = 0; j < 3; j++)
		{
			printf("%4d ", x[i][j]);
		}
		printf("\n");
	}

	printf("\n행렬 y\n");
	for (i = 0; i < 4; i++)
	{
		for (j = 0; j < 3; j++)
		{
			printf("%4d ", y[i][j]);
		}
		printf("\n");
	}

	printf("\nx + y\n");
	for (i = 0; i < 4; i++)
	{
		for (j = 0; j < 3; j++)
		{
			printf("%4d ", *(px[i] + j) + *(py[i] + j));
		}
		printf("\n");
	}

	printf("\nx - y\n");
	for (i = 0; i < 4; i++)
	{
		for (j = 0; j < 3; j++)
		{
			printf("%4d ", *(*(px + i) + j) - *(*(py + i) + j));
		}
		printf("\n");
	}

	return 0;
}

 

728x90

댓글