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

C언어 본색 파트2 Chapter 2 연습문제 솔루션

by nutrient 2021. 5. 31.
728x90
728x170

 

 

1번

#include <stdio.h>

int main () {
	int arr1[2][4] = {1,2,3,4,5,6,7,8};
	int arr2[4][2];
	int i, j;

	for (i = 0; i < 2; i++) 
		for (j = 0; j < 4; j++) 
			arr2[j][1-i] = arr1[i][j];

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


	return 0;
}

 

2번

#include <stdio.h>

void main() {
	int i,j;
	int apart[3][3]={0};
	int tot=0;


	for(i=0; i<3; i++)
	{
		for(j=0; j<3; j++)
		{
			printf("%d층 %d호의 가족은 몇 명입니까? : ",i+1,j+1);
			scanf("%d",&apart[i][j]);
		}
	}

	for(i=0; i<3; i++)
	{
		for(j=0; j<3; j++)
		{
			tot += apart[i][j];
		}
	}

	printf("열혈아파트 총 주민수는 %d명입니다.\n",tot);
}


/*

다차원 배열의 이해를 묻는 문제입니다.
각 층마다 3호씩 있는 있는 3층 아파트에 사는 사람들을 다차원 배열 apart로 만들고
이중 for문을 이용하여 각 층, 각 호의 가족이 몇명인지 물어 배열에 저장해둡니다.
그리고 다시 한 번 이중 for문을 이용하여 계산을 한 뒤 출력하는 것이 정답입니다.
사실 tot을 scanf로 입력받자마자 계산하여 저장해두어도 되지만,
여기서는 다차원 배열에 값을 저장하고 그것을 이용하는 것이 목적이므로
위와 같은 정답이 여러분의 이해를 도울 수 있을 것입니다.

*/

 

3번

#include <stdio.h>

void main()
{
	int array1[9][9]={0};
	int i,j;


	for(i=0; i<8; i++)
	{
		for(j=0; j<9; j++)
		{
			array1[i][j] = (i+2)*(j+1);
		}
	}

	for(i=0; i<8; i++)
	{
		for(j=0; j<9; j++)
		{
			printf("%3d",array1[i][j]);
		}
		printf("\n");
	}
}

/*

다차원 배열을 이해하는 지 묻는 문제입니다.
문제에서는 9행 9열로 다차원 배열을 선언하라고 하였지만
사실 구구단은 2단부터 시작하므로 8행 9열로 선언하는 것이 맞습니다.
어쨌든 이중 for문을 이용하여 결과값을 계산하여 저장하고
이를 다시 한번 이중 for문으로 출력하는 문제입니다.

*/

 

4번

#include <stdio.h>

void main()
{
	int array1[4][3]={0};
	int array2[4][3]={0};
	int result[4][3]={0};
	int i,j,choice=0;

	printf("합과 차중 어떤것을 선택하시겠습니까? (1.합, 2. 차)\n");
	scanf("%d",&choice);

	switch(choice)
	{
	case 1:
		for(i=0; i<4; i++)
		{
			for(j=0; j<3; j++)
			{
				printf("%d행 %d렬에 들어갈 숫자를 입력해주십시오.",i+1,j+1);
				scanf("%d",&array1[i][j]);
			}

		}

		printf("\n");
		printf("2번째 행렬입니다.\n");
		for(i=0; i<4; i++)
		{
			for(j=0; j<3; j++)
			{
				printf("%d행 %d렬에 들어갈 숫자를 입력해주십시오.",i+1,j+1);
				scanf("%d",&array2[i][j]);
			}

		}

		for(i=0; i<4; i++)
		{
			for(j=0; j<3; j++)
			{ 
				result[i][j]=array1[i][j]+array2[i][j];
			}
		}

		printf("결과입니다. \n");
		for(i=0; i<4; i++)
		{
			for(j=0; j<3; j++)
			{ 
				printf("%3d",result[i][j]);
			}
			printf("\n");
		}
		break;

	case 2:

		for(i=0; i<4; i++)
		{
			for(j=0; j<3; j++)
			{
				printf("%d행 %d렬에 들어갈 숫자를 입력해주십시오.",i+1,j+1);
				scanf("%d",&array1[i][j]);
			}

		}

		printf("\n");
		printf("2번째 행렬입니다.\n");
		for(i=0; i<4; i++)
		{
			for(j=0; j<3; j++)
			{
				printf("%d행 %d렬에 들어갈 숫자를 입력해주십시오.",i+1,j+1);
				scanf("%d",&array2[i][j]);
			}

		}

		for(i=0; i<4; i++)
		{
			for(j=0; j<3; j++)
			{ 
				result[i][j]=array1[i][j]-array2[i][j];
			}
		}

		printf("결과입니다. \n");
		for(i=0; i<4; i++)
		{
			for(j=0; j<3; j++)
			{ 
				printf("%5d",result[i][j]);
			}
			printf("\n");
		}
		break;
	default:
		printf("잘못 입력하셨습니다.\n");
		break;
	} 

}

/*

이번 문제는 다양한 방법으로 풀 수 있겠지만,
위의 해답에서는 배열 값들을 미리 정의받지 않고
사용자에게 입력을 받는 방식으로 구현하였습니다.
이전 문제와 같이 배열에 데이터를 기록해두었다가
합인지 차인지에 따라 값을 계산하여
결과로 출력하도록 되어있습니다.

*/

 

5번

#include <stdio.h>

int main () {

	int array[2][3] = {1, 2, 3, 4, 5, 6};
	int i, j;
	
	for (i = 0; i < 2; i++) {
		for (j = 0; j < 3; j++) {
			printf("배열 array의 %d행%d열의 주소는 %x, 값은 %d입니다. \n", i, j, *(array+i)+j, *(*(array+i)+j) );
		}
	}
	
	return 0;
}
728x90
그리드형

댓글