본문 바로가기

C\C++

포인터 문제

개요

2개의 정수의 합과 차를 동시에 반환하는 함수를 작성하고 테스트하라. 포인터 매개 변수를 사용한다.
x=100
y=200
void get_sum_diff(int x, int y, int *p_sum, int *p_diff) {
}

목표

원소들의 합= 300
원소들의 차= -100

Code

#include<stdio.h>

void get_sum_diff(int x, int y, int* p_sum, int* p_diff);

int main(void)
{
	int x = 100, y = 200, sum, diff;
	get_sum_diff(x, y, &sum, &diff);
	printf("원소들의 합 : %d\n",sum);
	printf("원소들의 차 : %d\n",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;
}

 


Output


개요

정수 배열의 크기가 10인 원소들을 난수로 채우는 함수를 작성하고 테스트하라.
난수는 라이브러리 함수인 rand()를 사용하여 생성한다.
void array_fill(int *a, int size) {}

void array_print(int *A, int size){}

 


Code

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

#define MAXSIZE 10
void array_fill(int* a, int size);
void array_print(int* A, int size);

int main(void)
{
	int iArr[MAXSIZE] = { 0 };
	array_fill(iArr, MAXSIZE);
	array_print(iArr, MAXSIZE);

	return 0;
}

void array_fill(int* a, int size)
{
	srand((unsigned)time(NULL));
	for (int i = 0; i < size; i++) {
		a[i] = rand() & 100 + 1;
	}
	
}
void array_print(int* A, int size)
{
	for (int i = 0; i < size; i++) {
		printf("%4d", A[i]);
	}
}

Output


개요

학생들의 평점은 4.3점이 만점이라고 하자. 배열 grades[]에 학생 10명의 학점이 저장되어 있다.
이것을 100점 만점으로 변환하여서 배열 scores[]에 저장하는 함수를 작성하고 테스트하라.
double grades[10] = { 0, 0.5, 1.0, 1.5, 2.0, 2.5, 3.0, 3.5, 4.0, 4.3 };
double scores[10] = { 0 };
void convert(double *grades, double *scores, int size) {}

 


Code

#include<stdio.h>
#define MAXSIZE 10

void convert(double* grades, double* scores, int size);
void outCon(double* grades, double* scores, int size);

int main(void)
{
	double grades[10] = { 0, 0.5, 1.0, 1.5, 2.0, 2.5, 3.0, 3.5, 4.0, 4.3 };
	double scores[10] = { 0 };
	convert(grades, scores, MAXSIZE);
	outCon(grades, scores, MAXSIZE);
}

void convert(double* grades, double* scores, int size) 
{
	for (int i = 0; i < size; i++) {
		scores[i] = grades[i] * 100 / 4.3;
	}
}

void outCon(double* grades, double* scores, int size)
{
	for (int i = 0; i < size; i++) {
		printf("Grade : %0.1lf >> %0.1lf\n", grades[i], scores[i]);
	}
}

Output


개요

직원들의 월급이 저장된 배열에서 월급이 200만원인 사람을 찾고 싶을 때가 있다.
주어진 값을 배열 A[] 에서 탐색하여 배열 원소의 인덱스를 반환하는 함수를 작성하고 테스트하라.
int data[10] = { 100, 200, 300, 400, 500, 600, 700, 800, 900, 1000 };
int search (int *A, int size, int search value) {
int i;
for(i=0 ; i<size ; i++){
if( A[i] == search_value ) return i;
}
return -1;
}

 


Code

#include<stdio.h>

#define MAXSIZE 10
int search(int* A, int size, int search_value);

int main(void)
{
	int data[10] = { 100, 200, 300, 400, 500, 600, 700, 800, 900, 1000 };
	int iVal, indexNum;
	printf("찾고자 하는 금액을 입력하세요 :");
	scanf_s("%d", &iVal);
	indexNum = search(data, MAXSIZE, iVal);
	if (indexNum == -1) { printf("찾는 값이 없습니다.\n"); }
	else printf("%d의 인덱스는 %d번입니다.", iVal, indexNum);

	return 0;
}

int search(int* A, int size, int search_value) {
	int i;
	for (i = 0; i < size; i++) {
		if (A[i] == search_value) 
		return i;
	}
	return -1;
}

Output


개요

2개의 정렬된 정수 배열 A[]와 B[]가 있다고 가정하자.
이 2개의 배열을 합쳐서 하나의 정렬된 배열 C[]로 만드는 함수를 작성하고 테스트한다.
다음과 같은 함수 원형을 가진다고 가정하라.

int A[] = { 2, 5, 7, 8};
int B[] = { 1, 3, 4, 6};

void merge(int *a, int *B, int *C, int size) {
.....................
}

여기서 배열 A[], B[]는 똑같은 크기로 정의되어 있다고 가정한다.
배열 C[] 에는 충분한 공간이 확보되어 있다고 가정하자.
합치는 알고리즘은 다음과 같다.
먼저 A[0] 와 B[0]를 비교한다.
만약 A[0] 가 B[0] 보다 작으면 A[0] 를 C[0] 에 복사한다.
다음에는 A[1] 과 B[0]를 비교한다.
이번에는 B[0] 가 A [1] 보다 작다면 B[0] 를 C[1] 에 저장한다.
똑같은 방식으로 남아있는 원소들을 비교하여 더 작은 원소를 C[]로 복사한다.
만약 A[] 나 B[] 중에서 어느 하나가 먼저 끝나게 되면 남아있는 원소들을 전부 C[]로 이동한다.

Code

#include<stdio.h>

void merge(int* A, int* B, int* C, int size);

int main(void)
{
	int A[] = { 2, 5, 7, 8 };
	int B[] = { 1, 3, 4, 6 };
	int C[8] = { 0 };
	merge(A, B, C, 8);
	return 0;
}

void merge(int* A, int* B, int* C, int size)
{
	int aIndex = 0, bIndex = 0, cIndex = 0;
	while (!(aIndex==4 && bIndex==4)) {
		if (aIndex == 4 && bIndex!=4) 
		{ C[cIndex++] = B[bIndex++]; }
		if (bIndex == 4 && aIndex!=4) 
		{ C[cIndex++] = A[aIndex++]; }
		else if (A[aIndex] < B[bIndex]) {
			C[cIndex++] = A[aIndex++];
		}
		else if (A[aIndex] > B[bIndex]) {
			C[cIndex++] = B[bIndex++];
		}
	}
	for (int k = 0; k < size; k++) {
		printf("C[%d] = %d\n", k, C[k]);
	}
}

Output

 

'C\C++' 카테고리의 다른 글

Linked List 회원관리 프로그램  (0) 2022.03.04
malloc, realloc 예제  (0) 2022.03.03
배열 문제  (0) 2022.03.02
구조체 문제  (0) 2022.03.02
최대 최소 구하기(bubble sort)  (0) 2022.02.28