본문 바로가기
C/쉽게 풀어쓴 C언어 Express

[쉽게 풀어쓴 C언어 Express] 11장 programming

by 2_minggu 2022. 8. 17.

문제 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 sizeint search_value);
 
int main() {
    int a[10];
    for (int i = 0; i < 10; i++) {
        scanf("%d"&a[i]);
    }
    printf("월급이 200만원인 사람의 인덱스=%d", search(a, 10200));
    return 0;
}
 
int search(int* A, int sizeint 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

 

 

:)

댓글