문제 02) 2개의 정수의 합과 차를 동시에 반환하는 함수를 작성하고 테스트하라. 포인터 매개 변수를 사용한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
#include<stdio.h>
void get_sum_diff(int x, int y, int* p_sum, int* p_diff);
int main() {
int a, b, sum, diff;
scanf("%d %d", &a, &b);
get_sum_diff(a, b, &sum, &diff);
printf("원소들의 합=%d\n", sum);
printf("원소들의 차=%d", diff);
return 0;
}
void get_sum_diff(int x, int y, int* p_sum, int* p_diff) {
*p_sum = x + y;
*p_diff = x - y;
return;
}
|
cs |
문제 03) 정수 배열을 받아서 요소들을 난수로 채우는 함수를 작성하고 테스트하라. 난수는 라이브러리 함수인 rand()를 사용하여 생성한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
void array_fill(int* A, int size);
int main() {
int a[10];
srand((unsigned)time(NULL));
array_fill(a, 10);
for (int i = 0; i < 10; i++) {
printf("%d ", a[i]);
}
return 0;
}
void array_fill(int* A, int size) {
int i;
for (i = 0; i < size; i++) {
A[i] = rand();
}
return;
}
|
cs |
문제 04) 정수 배열의 요소들을 화면에 출력하는 함수를 작성하고 테스트하라. 출력 형식은 A[]={ 1, 2, 3, 4, 5 }와 같은 형식이 되도록 하라.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
#include<stdio.h>
void array_print(int* A, int size);
int main() {
int a[5];
array_print(a, 5);
return 0;
}
void array_print(int* A, int size) {
int i;
printf("A[] = { ");
for (i = 1; i < size+1; i++) {
printf("%d ", i);
}
printf(" }\n");
return;
}
|
cs |
문제 05) 학생들의 평점은 4.3점이 만점이라고 하자. 배열 grades[]애 학생 10명의 학점이 저장되어 있다. 이것을 100점 만점으로 변환하여서 배열 scores[]에 저장하는 함수를 작성하고 테스트하라.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
#include<stdio.h>
void convert(double* grades, double* scores, int size);
int main() {
double grades[10], scores[10];
for (int i = 0; i < 10; i++) {
scanf("%lf", &grades[i]);
}
convert(grades, scores, 10);
for (int i = 0; i < 10; i++) {
printf("%02.2lf ", scores[i]);
}
return 0;
}
void convert(double* grades, double* scores, int size) {
for (int i = 0; i < size; i++) {
scores[i] = grades[i] * 100 * 10.0 / 43;
scores[i] += 0.005;
}
return;
}
|
cs |
문제 06) 정수 배열 A[]를 다른 정수 배열 B[]에 복사하는 함수를 작성하고 테스트하라.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
#include<stdio.h>
void array_copy(int* A, int* B, int size);
int main() {
int a[10], b[10];
for (int i = 0; i < 10; i++) {
scanf("%d", &a[i]);
}
array_copy(a, b, 10);
printf("B[] = ");
for (int i = 0; i < 10; i++) {
printf("%d ", b[i]);
}
return 0;
}
void array_copy(int* A, int* B, int size) {
for (int i = 0; i < size; i++) {
B[i] = A[i];
}
return;
}
|
cs |
문제 07) 직원들의 기본급이 배열 A[]에 저장되어 있다. 배열 B[]에는 직원들의 보너스가 저장되어 있다. 기본급과 보너스를 함하여 이번달에 지급할 월급의 총액을 계산하고자 한다. A[]와 B[]를 더하여 배열 C[]에 저장하는 함수를 작성하고 테스트하라. 즉 모든 i에 대하여 C[i] = A[i] + B[i]가 된다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
#include<stdio.h>
void array_add(int* A, int* B, int* C, int size);
int main() {
int a[10], b[10], c[10];
for (int i = 0; i < 10; i++) {
scanf("%d", &a[i]);
}
for (int i = 0; i < 10; i++) {
scanf("%d", &b[i]);
}
array_add(a, b, c, 10);
printf("A[] = ");
for (int i = 0; i < 10; i++) {
printf("%d ", a[i]);
}
printf("\n");
printf("B[] = ");
for (int i = 0; i < 10; i++) {
printf("%d ", b[i]);
}
printf("\n");
printf("C[] = ");
for (int i = 0; i < 10; i++) {
printf("%d ", c[i]);
}
return 0;
}
void array_add(int* A, int* B, int* C, int size) {
for (int i = 0; i < size; i++) {
C[i] = A[i] + B[i];
}
return;
}
|
cs |
문제 08) 직원들의 월급이 배열 A[]에 저장되어 있다고 가정하자. 이번 달에 회사에서 지급할 월급의 총액을 계산하고자 한다. 정수형 배열 요소들의 합을 구하여 반환하는 함수를 작성하고 테스트하라.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
#include<stdio.h>
int array_sum(int* A, int size);
int main() {
int a[10];
for (int i = 0; i < 10; i++) {
scanf("%d", &a[i]);
}
printf("월급의 합=");
printf("%d", array_sum(a, 10));
return 0;
}
int array_sum(int* A, int size) {
int sum = 0;
for (int i = 0; i < size; i++) {
sum += A[i];
}
return sum;
}
|
cs |
문제 09) 직원들의 월급이 저장된 배열에서 월급이 200만 원인 사람을 찾고 싶을 때가 있다. 주어진 값을 배열 A[]에서 탐색하여 배열 요소의 인덱스를 반환하는 함수를 작성하고 테스트하라.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
#include<stdio.h>
int search(int* A, int size, int search_value);
int main() {
int a[10];
for (int i = 0; i < 10; i++) {
scanf("%d", &a[i]);
}
printf("월급이 200만원인 사람의 인덱스=%d", search(a, 10, 200));
return 0;
}
int search(int* A, int size, int search_value) {
int a;
for (int i = 0; i < size; i++) {
if (A[i] == search_value)
a = i;
}
return a;
}
|
cs |
문제 10) 2개의 정수를 입력받아서 최대 공약수와 최소 공배수를 반환하는 함수를 작성하고 테스트하라. 최대 공약수는 유클리드의 방법을 사용하여서 계산한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
#include<stdio.h>
void get_lcm_gcd(int x, int y, int* p_lcm, int* p_gcd);
int main() {
int x, y, lcm = 1, gcd = 1;
printf("두개의 정수를 입력하시오: ");
scanf("%d %d", &x, &y);
get_lcm_gcd(x, y, &lcm, &gcd);
printf("죄소공배수는 %d입니다.\n", lcm);
printf("최대공약수는 %d입니다.", gcd);
return 0;
}
void get_lcm_gcd(int x, int y, int* p_lcm, int* p_gcd) {
int n;
if (x > y) n = x;
else n = y;
for (int i = 2; i <= n; i++) {
while (x % i == 0 && y % i == 0) {
*p_gcd *= i;
x /= i;
y /= i;
}
}
*p_lcm = *p_gcd * x * y;
}
|
cs |
문제 12) 우리가 프로그램을 하다보면 사용자로부터 2개의 정수를 받아오는 경우가 많다. 이것을 함수로 구현해두고 필요할때마다 사용하면 편리할 것이다. 하지만 한 가지 문제가 있다. C에서 함수는 하나의 값만 반환할 수 있다. 2개 이상의 값을 반환하려면 다른 방법을 사용해야 하는데 다음과 같이 포인터도 사용할 수 있다.
위와 같은 원형을 가지는 함수를 작성하고 이것을 이용해서 정수의 합을 계산하는 프로그램을 작성해보자.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
#include<stdio.h>
void get_int(int* px, int* py);
int main() {
int x, y;
get_int(&x, &y);
printf("정수의 합은 %d", x + y);
return 0;
}
void get_int(int* px, int* py) {
int x, y;
printf("2개의 정수를 입력하시오(예: 10 20): ");
scanf("%d %d", &x, &y);
*px = x;
*py = y;
return;
}
|
cs |
:)
'C > 쉽게 풀어쓴 C언어 Express' 카테고리의 다른 글
[쉽게 풀어쓴 C언어 Express] 13장 programming (1) | 2022.09.22 |
---|---|
[쉽게 풀어쓴 C언어 Express] 12장 programming (0) | 2022.08.21 |
[쉽게 풀어쓴 C언어 Express] 10장 programming (0) | 2022.08.14 |
[쉽게 풀어쓴 C언어 Express] 9장 programming (0) | 2022.08.11 |
[쉽게 풀어쓴 C언어 Express] 8장 programming (0) | 2022.08.08 |
댓글