[ICON] C언어 멘토링-과제 풀이(포인터)

hhhhyelim·2022년 10월 4일
0

ICON

목록 보기
14/17
post-thumbnail

📚 과제 풀이

  1. 배열 원소를 가리키는 포인터를 이용하여 정수형 배열의 모든 원소를 츨력하고, 배열 원소의 합을 구하여 출력하는 프로그램을 완성하시오.

👉코드

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>

void printData();
int totalData();

int main(void)
{
    int data[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };

    printf("배열 원소 출력: ");
    printData(data);
    printf("배열 원소의 합 = %d\n", totalData(data));
}

void printData(int* pi)
{
    for (int i = 0; i < 10; i++)
        printf("%d ", *(pi + i));
    printf("\n");
}

int totalData(int* pi)
{
    int sum = 0;

    for (int i = 0; i < 10; i++)
        sum += *(pi + i);
   
    return sum;
}

👉실행 결과

배열 원소 출력: 1 2 3 4 5 6 7 8 9 10
배열 원소의 합 = 55
  1. 직사각형의 넓이와 둘레를 구하는 함수를 작성하시오. 이 함수를 이용하여 직사각형의 가로, 세로의 길이를 입력받아 넓이와 둘레를 구하여 출력하는 프로그램을 작성하시오.

👉코드

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#define SIZE

void get_rect_info(int w, int h, int* area, int* circumference);

int main(void)
{
	int area, circumference, w, h;

	printf("가로길이? ");
	scanf("%d", &w);

	printf("세로길이? ");
	scanf("%d", &h);

	get_rect_info(w, h, &area, &circumference);

	return 0;
}

void get_rect_info(int w, int h, int* area, int* circumference)
{
	*area = w * h;
	*circumference = 2 * (w + h);
	printf("넓이: %d, 둘레: %d\n", *area, *circumference);
}

👉실행 결과

가로길이? 5
세로길이? 3
넓이: 15, 둘레: 16
  1. 배열 원소를 가리키는 포인터를 이용하여 정수형 배열의 원소에 입력받은 정수를 더한 다음 출력하는 프로그램을 작성하시오. (배열의 크기는 10)

👉코드

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#define SIZE 10

void print_array(int* p, int size);
void add_array(int* p, int size, int n);

int main(void)
{
	int arr[SIZE] = { 10, 20, 30, 40, 50, 60, 70, 80, 90, 100 };
	int num;

	print_array(arr, SIZE);

	printf("더할 숫자입력: ");
	scanf("%d", &num);

	add_array(arr, SIZE, num);

	return 0;
}

void print_array(int* p, int size)
{
	printf("원본 데이터: ");
	for (int i = 0; i < SIZE; i++)
		printf("%d ", p[i]);
	printf("\n");
}

void add_array(int* p, int size, int n)
{
	printf("결과: ");
	for (int i = 0; i < SIZE; i++)
	{
		p[i] += n; 
		printf("%d ", p[i]);
	}
	printf("\n");
}

👉실행 결과

원본 데이터: 10 20 30 40 50 60 70 80 90 100
더할 숫자입력: 5
결과: 15 25 35 45 55 65 75 85 95 105
  1. 정수형 배열에 대하여 배열의 원소 중 최대값과 최소값을 구하는 get_min_max 함수를 정의하시오. 이 함수를 이용하여 배열의 최대값과 최소값을 출력한 프로그램을 작성하시오. (배열의 크기는 10)

👉코드

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#define SIZE 10

void print_array(int* p, int size);
void get_min_max(const int* arr, int size, int* min, int* max);

int main(void)
{
	int arr[SIZE] = { 55, 12, 45, 98, 23, 35, 28, 67, 52, 40 };

	print_array(arr, SIZE);

	int* min = &arr[0];
	int* max = &arr[0];

	get_min_max(arr, SIZE, min, max);

	return 0;
}

void print_array(int* p, int size)
{
	printf("배열: ");
	for (int i = 0; i < SIZE; i++)
		printf("%d ", *(p+i));   
	printf("\n");
}

void get_min_max(const int* arr, int size, int* min, int* max)
{
	for (int i = 0; i < SIZE; i++)
		if (*max <= *(arr + i)) 
			max = (arr + i); 
	
	for (int i = 0; i < SIZE; i++)
		if (*min >= *(arr + i)) 
			min = (arr + i); 

	printf("최대값: %d\n", *max);
	printf("최소값: %d\n", *min);
}

👉실행 결과

배열: 55 12 45 98 23 35 28 67 52 40
최대값: 98
최소값: 12
  1. 크기가 같은 2개의 정수형 배열을 매개변수로 전달받아 두 배열의 원소들의 값을 맞바꾸는 함수를 작성하시오. 이 함수를 이용해서 크기가 5인 두 배열의 값을 맞바꾸는 프로그램을 작성하시오.

👉코드

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#define SIZE 5

void print_array(int* p, int size);
void swap_array(int* x, int* y, int size);

int main(void)
{
	int a[SIZE] = { 1, 2, 3, 4, 5 };
	int b[SIZE] = { 6, 7, 8, 9, 10 };

	printf("a 배열 : ");
	print_array(a, SIZE);
	printf("b 배열 : ");
	print_array(b, SIZE);

	printf("<< swap_array 호출 후 >>\n");
	swap_array(a, b, SIZE);

	printf("a 배열 : ");
	print_array(a, SIZE);
	printf("b 배열 : ");
	print_array(b, SIZE);

	return 0;
}

void print_array(int* p, int size)
{
	for (int i = 0; i < SIZE; i++)
		printf("%3d", *(p + i));
	printf("\n");
}

void swap_array(int* x, int* y, int size)
{
	int temp;

	for (int i = 0; i < SIZE; i++)
	{
		temp = *(x + i);
		*(x + i) = *(y + i);
		*(y + i) = temp;
	}
}

👉실행 결과

배열 :   1  2  3  4  5
b 배열 :   6  7  8  9 10
<< swap_array 호출 후 >>
a 배열 :   6  7  8  9 10
b 배열 :   1  2  3  4  5
  1. 정수형 배열과 키 값을 매개변수로 전달받아 키 값과 같은 원소를 모두 찾은 다음, 찾은 원소의 인덱스를 배열에 저장해서 리턴하는 함수를 작성하시오.

👉코드

#define _CRT_SECURE_NO_WARNINGS
#define SIZE 10
#include <stdio.h>

void print_array(const int* arr, int size);
int find_array(const int* arr, int size, int key, int* found);

int main()
{
  int arr[SIZE] = { 11, 22, 33, 88, 22, 22, 33, 44, 55, 77 };
  int found[SIZE];
  int input;

  print_array(arr, SIZE);

  printf("찾을 값? ");
  scanf("%d", &input);

  int count = find_array(arr, SIZE, input, found);

  printf("찾은 항목은 모두 %d개입니다.\n", count);

  printf("찾은 항목의 인덱스 :");
  print_array(found, count);

  return 0;
}

void print_array(const int* arr, int size)
{
  for (int i = 0; i < size; i++)
      printf("%d ", *(arr + i));
  printf("\n");
}

int find_array(const int* arr, int size, int key, int* found)
{
  int count = 0;

  for (int i = 0; i < SIZE; i++) {
      if (*(arr + i) == key)
      {
          *(found + count) = i;
          count++;
      }
  }
  return count;
}

👉실행 결과

11 22 33 88 22 22 33 44 55 77
찾을 값? 22
찾은 항목은 모두 3개입니다.
찾은 항목의 인덱스 :1 4 5

0개의 댓글