본문 바로가기
C언어

C프로그래밍 10장 Programming

by haheehee 2022. 12. 22.

 2019. 9. 4. 21:05 작성

 

혼자 풀어본 쉽게 풀어쓴 C언어 Express 10장 Programming

10장 배열

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

31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31

**배열을 초기화하려면 int x[] = {1, 2};와 같이 한다.

#include <stdio.h>

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

	printf("\n");
	return 0;
}

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

**x[i] = rand(); //난수를 생성하여서 1번째 배열 원소에 대입한다.

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

int main() {

	int x[10];
	for (int i = 0; i < 10; i++) {
		x[i] = rand();
	}

	int max = 0; 
	for (int j = 0; j < 10; j++) {
		if (x[j] > max) {
			max = x[j];
		}
	}
	int min = 0;
	min = max;
	for (int j = 0; j < 10; j++) {
		if (x[j] < min) {
			min = x[j];
		}
	}
	printf("최대값은 %d입니다. \n최소값은 %d입니다. ", max, min);

	printf("\n");
	return 0;
}

3. 2개의 정수 배열 a, b를 받아서 대응되는 배열 원소가 같은지를 검사하는 함수 array_equal(int a[], int b[], int size)를 작성하고 테스트하라. 이 함수는 a[0]와 b[0], a[1]과 b[1], ..., a[size -1]와 b[size -1]가 같은지를 검사한다. 만약 전체 원소가 같다면 1을 반환하고 그렇지 않으면 0을 반환한다.

**반복 루프를 이용하여서 배열의 각 원소가 같은지를 검사한다. 만약 하나라도 다르면 0을 바로 반환하면 된다.

 


4. 2개의 정수 배열 a, b를 받아서 배열 a의 원소를 배열 b로 복사하는 함수 array_copy(int a[], int b[], int size)를 작성하고 테스트하라. 이 함수는 a[0]를 b[0]에, a[1]를 b[1]에, ... , a[size-1]을 b[size-1]에 대입한다. 이 함수의 반환값은 없다.

**반복 루프를 이용하여서 배열의 각 원소가 같은지를 검사한다. 만약 하나라도 다르면 0을 바로 반환하면 된다.

#include <stdio.h>

int array_equal(int a[], int b[], int size);
#define S 5
int main() {
	int a[S] = { 0 };
	int b[S] = { 0 };
	printf("%d ", array_equal(a, b, S));

	printf("\n");
	return 0;
}
int array_equal(int a[], int b[], int size) {
	for (int i = 0; i < S; i++) {
		if (a[i] != b[i]) {
			return 0;
		}
		else return 1;
	}
}

5. 0부터 9까지의 난수를 100번 생성하여 가장 많이 생성된 수를 출력하는 프로그램을 작성하시오. 난수는 rand()함수를 사용하여 생성하라.

**본문의 빈도수 구하는 예제를 참고한다. 0에서 9까지의 난수는 rand() % 10으로 구할 수 있다.

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

#define SIZE 10

void count_arr(int* a);
void print_arr(int* a);
void search_max_arr(int* a);

int main() {
	int arr[SIZE] = { 0 };

	count_arr(arr);
	print_arr(arr);
	search_max_arr(arr);

	return 0;
}

void count_arr(int* a) {
	int i, num, count = 0;
	srand((unsigned)time(NULL));

	while (1) {
		num = rand() % 10;
		for (i = 0; i < 100; i++)
			if (num == i)
				++a[i];
		count++;
		if (count == 100)
			break;
	}
}
void print_arr(int* a) {
	int i;

	for (i = 0; i < SIZE; i++)
		printf("%d는 %d번 생성 \n", i, a[i]);
}
void search_max_arr(int* a) {
	int i, max;

	max = 0;
	for (i = 0; i < SIZE; i++) {
		if (a[max] <= a[i])
			max = i;
	}
	printf("가장 많이 생성된 수는 %d이며, %d번 생성되었습니다. \n", max, a[max]);
}

(참고 :https://m.blog.naver.com/kbc91/220601213521 )

출력화면입니당


6. 다음과 같은 2차원 표를 배열로 생성하고, 각 행의 합계, 각 열의 합계를 구하여 출력하는 프로그램을 작성하라.

12
56
32
16
98
99
56
34
41
3
65
3
87
78
21

**2차원 배열을 주어진 표로 초기화한다. 각 행의 합계, 각 열의 합계를 중첩 반복문을 통하여 계산한다.

#include <stdio.h>

int main() {
	int array[3][5] = {
		{12, 56, 32, 16, 98},
	{99, 56, 34, 41, 3},
	{65, 3, 87, 78, 21},
	};
	for (int r = 0; r < 3; r++) {
		int rsum = 0;
		for (int c = 0; c < 5; c++) {
			rsum += array[r][c];
		}
		printf("%d행의 합계 : %d \t", r + 1, rsum);
	}
	printf("\n");
	for (int c = 0; c < 5; c++) {
		int csum = 0;
		for (int r = 0; r< 3; r++) {
			csum += array[r][c];
		}
		printf("%d열의 합계 : %d \t", c + 1, csum);
	}


	printf("\n");
	return 0;
}
 

 

 

 

 

 

 

 

 

 

 

 

(C프로그래밍 9장 Programming 원글 : https://blog.naver.com/hhahee/221638888167)

'C언어' 카테고리의 다른 글

C프로그래밍 9장 Programming  (0) 2022.12.22
C프로그래밍 8장 Programming  (0) 2022.12.22
C프로그래밍 7장 Programming  (0) 2022.12.22
C프로그래밍 6장 Programming  (0) 2022.12.22
C프로그래밍 5장 Programming  (0) 2022.12.22

댓글