본문 바로가기

C\C++

배열 문제

개요

배열 days[] 를 아래와 같이 초기화하고 배열 원소의 값을 다음과 같이 출력하는 프로그램
을 작성하라.

목표

1월은 31일까지 있습니다.
2월은 29일까지 있습니다.
.....

Code

#include<stdio.h>

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

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

Output


개요

크기가 10인 1차원 배열에 난수를 저장한 후에, 최대값과 최소값을 출력하는 프로그램을 작성하라.
난수는 rand() 함수를 호출하여 생성하라.

Code

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

int main(void)
{
	int aRand[10] = { 0 }, i, j, temp;
	srand(time(NULL));
	for (int i = 0; i < 10; i++) {
		aRand[i] = rand() % 1000 + 1;
	}
	for (i = 0; i < 10; i++) {
		for (j = i + 1; j < 10; j++) {
			if (aRand[i] > aRand[j]) {
				temp = aRand[i];
				aRand[i] = aRand[j];
				aRand[j] = temp;
			}
		}
	}
	for (int i = 0; i < 10; i++) {
		printf("%5d", aRand[i]);
	}
	printf("\nMIN : %d\tMAX : %d",aRand[0],aRand[9]);
	
}

Output


개요

0부터 9까지의 난수를 100번 생성하여 가장 많이 생성된 수를 출력하는 프로그램을 작성하시오.
난수는 rand() 함수를 사용하여 생성하라.
힌트 0에서 9까지의 난수는 rand()%10으로 구할 수 있다.

 

 


Code

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

typedef struct randomNo
{
	int no;
	int times;
}ran_t;

void getRand(ran_t arr[]);
void sSort(ran_t arr[]);
void printArr(ran_t arr[]);

int main(void)
{
	ran_t aRand[10] = { 0 };

	getRand(aRand);
	sSort(aRand);
	printArr(aRand);
	
	printf("MAX rand No. %d : %d", aRand[9].no,aRand[9].times);

	return 0;
}

void getRand(ran_t arr[])
{
	srand((unsigned)time(NULL));
	for (int i = 0; i < 10; i++) {
		arr[i].no = i;
	}
	for (int i = 0; i < 100; i++) {
		arr[rand() % 10].times++;
	}
}

void sSort(ran_t arr[])
{
	int i, j, iMin, iIndexMin;
	ran_t temp;
	
	for (i = 0; i < 9; i++) {//0~8번까지 최소값을 구하면
							//9번은 자동적으로 최대값이므로 Sorting 불필요
		//최소값을 찾아 가장 왼쪽부터 최소값으로 채워 갈 때, 비교할 초기값 설정
		iMin = arr[i].times;
		for (j = i + 1; j < 10; j++) {
			if (iMin > arr[j].times) {//찾은 최소값과 최소값이 있는 index 저장
				iMin = arr[j].times;
				iIndexMin = j;
			}
		}
		temp = arr[iIndexMin];		//최소값을 스왑
		arr[iIndexMin] = arr[i];
		arr[i] = temp;
	}
}

void printArr(ran_t arr[])
{
	for (int i = 0; i < 10; i++) {
		printf("[No. %d] : %d times\n", arr[i].no, arr[i].times);
	}
}

Output


개요

다음과 같은 2차원 표를 베열로 생성하고, 각 행의 합계, 각 열의 합계를 구하여 출력하는 프로그램을 작성하라
12 56 32 16 98
99 56 34 41 3
65 3 87 78 21

 


Code

#include<stdio.h>

int main(void)
{
	int iArray[3][5] = {{12,56,32,16,98},{99,56,34,41,3},{65,3,87,78,21}};
	int iRowSum[3] = { 0 };
	int iColSum[5] = { 0 };

	for (int i = 0; i < 3; i++) {
		for (int j = 0; j < 5; j++) {
			printf("%4d", iArray[i][j]);
			iRowSum[i] += iArray[i][j];
			for (int k = 0; k < 3; k++) {
				iColSum[j] += iArray[k][j];
			}
		}
		printf("%4d\n", iRowSum[i]);
	}
	for (int i = 0; i < 5; i++) {
		printf("%4d", iColSum[i]);
	}

	return 0;
}

 


Output


개요

1부터 10까지의 정수에 대하여 제곱값과 세제곱값을 계산하여 출력하는 프로그램을 작성하라.
크기의 2차원 배열을 만들고 첫 번째 열에는 정수를, 두 번째 열에는 제곱값을, 세 번째 열에는 세제곱값을 저장하라.
추가로 사용자에게 세제곱값을 입력하도록 하고 이 세제곱값을 배열에서 찾아서 그것의 세제곱근을 출력하도록 하라

 


Code

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

int main(void)
{
	int iArray[3][10] = { 0 },iNum,iNum2;
	for (int i = 0; i < 10; i++) {
		iArray[0][i] = i + 1;
		printf("%5d", iArray[0][i]);
		iArray[1][i] = pow(iArray[0][i], 2);
		iArray[2][i] = pow(iArray[0][i], 3);
	}
	putchar('\n');
	for (int i = 0; i < 10; i++) {
		printf("%5d", iArray[1][i]);
	}
	putchar('\n');
	for (int i = 0; i < 10; i++) {
		printf("%5d", iArray[2][i]);
	}
	putchar('\n');
	printf("3제곱수 중 하나를 입력하세요 : ");
	scanf_s("%d", &iNum);
	for (int i = 0; i < 10; i++) {
		if (iNum == iArray[2][i]) {
			iNum2 = iArray[0][i];
		}
	}
	printf("%d의 3제곱근은 %d입니다.\n", iNum, iNum2);
}

Output

'C\C++' 카테고리의 다른 글

malloc, realloc 예제  (0) 2022.03.03
포인터 문제  (0) 2022.03.02
구조체 문제  (0) 2022.03.02
최대 최소 구하기(bubble sort)  (0) 2022.02.28
String 관련 예제  (0) 2022.02.27