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 |
댓글