반응형
#include <stdio.h>
// 문제1 C언어를 사용하여 배열을 복사하는 함수를 작성해보세요.
void Practice1();
void copyArray(int* arr, int* arrCopy, int size);

// 문제2 C언어를 사용하여 두 배열의 내용을 교환하는 함수를 작성해보세요.
void Practice2();
void SwapArrays(int*, int*, int);

// 문제3 포인터를 이용한 배열의 특정 범위의 요소 뒤집기
void Practice3();
void ReverseRange(int*, int, int);

// 문제4 포인터를 이용한 배열의 특정 위치에 값 삽입
void Practice4();
int insertAt(int* arr, int size, int index, int value);

// 문제5 포인터를 이용한 배열의 특정 위치의 값 제거
void Practice5();
int RemoveAt(int* arr, int size, int index);

// 문제6 포인터를 이용한 배열의 특정 범위의 평균 계산
void Practice6();
double calculateRangeAverage(int* arr, int start, int end);

// 문제7 포인터를 이용한 배열의 특정 값보다 큰 요소의 개수 계산
void Practice7();
int countGreater(int* arr, int size, int value);

// 문제8포인터를 이용한 배열의 특정 값보다 작은 요소의 개수 계산
void Practice8();
int countLess(int* arr, int size, int value);

// 문제9 문제: 포인터를 이용한 배열의 특정 값보다 큰 첫 번째 요소 찾기
void Practice9();
int findFirstGreater(int* arr, int size, int value);

// 문제10 포인터를 이용한 배열의 특정 값의 마지막 위치 찾기
void Practice10();
int findLast(int* arr, int size, int value);


int main(void)
{
    Practice10();
    return 0;
}

// 문제1 C언어를 사용하여 배열을 복사하는 함수를 작성해보세요.
void Practice1()
{
    int arr[5] = { 0 };
    int arrCopy[5] = { 1,2,3,4,5 };
    int arrLen = sizeof(arrCopy) / sizeof(int);
    printf("원본 배열 : ");
    for (int i = 0; i < arrLen; i++)
        printf("%d ", arr[i]);
    printf("\n");
    copyArray(arr, arrCopy, arrLen);
    for (int i = 0; i < arrLen; i++)
        printf("%d ", arr[i]);


}
void copyArray(int* arr, int* arrCopy, int size)
{
    for (int i = 0; i < size; i++)
    {
        arr[i] = arrCopy[i];
    }
}

// 문제2 C언어를 사용하여 두 배열의 내용을 교환하는 함수를 작성해보세요.
void Practice2()
{
    int arr1[5] = { 1, 2, 3, 4, 5 };
    int arr2[5] = { 5, 4, 3, 2, 1 };
    int arrLen = sizeof(arr1) / sizeof(int);
    printf("원본 배열1 : ");
    for (int i = 0; i < arrLen; i++)
        printf("%d ", arr1[i]);
    printf("\n");
    printf("원본 배열2 : ");
    for (int i = 0; i < arrLen; i++)
        printf("%d ", arr2[i]);
    printf("\n");
    SwapArrays(arr1, arr2, arrLen);
    for (int i = 0; i < arrLen; i++)
        printf("%d ", arr1[i]);
    printf("\n");
    for (int i = 0; i < arrLen; i++)
        printf("%d ", arr2[i]);

}
void SwapArrays(int* arr1, int* arr2, int size)
{
    for (int i = 0; i < size; i++)
    {
        int temp = arr1[i];
        arr1[i] = arr2[i];
        arr2[i] = temp;
    }
}

// 문제3 포인터를 이용한 배열의 특정 범위의 요소 뒤집기
void Practice3()
{
    int arr[5] = { 1,2,3,4,5 };
    int arrLen = sizeof(arr) / sizeof(int);
    ReverseRange(arr,1, 4);
    for (int i = 0; i < arrLen; i++)
        printf("%d ", arr[i]);

}
void ReverseRange(int* arr, int start, int end)
{
    //if (end - start == 1)
    //{
    //    int temp = arr[start];
    //    arr[start] = arr[end];
    //    arr[end] = temp;
    //    return;
    //}
    //for (int i = 0; i <= end/2; i++)
    //{
    //    int temp = arr[start + i];
    //    arr[start + i] = arr[end - i];
    //    arr[end - i] = temp;
    //}
    for (int i = 0; i < (end - start) / 2 + 1; i++)
    {
        int temp = arr[start + i];
        arr[start + i] = arr[end - i];
        arr[end - i] = temp;
    }
}

// 문제4 포인터를 이용한 배열의 특정 위치에 값 삽입
void Practice4()
{
    int arr[5] = { 1, 2, 3, 4, 5 };
    int arrLen = sizeof(arr) / sizeof(int);
    insertAt(arr, arrLen, 2, 10);
    for (int i = 0; i < arrLen; i++)
    {
        printf("%d ", arr[i]);
    }
}
int insertAt(int* arr, int size, int index, int value)
{
    if (index == size - 1)
    {
        arr[index] = value;
        return size;
    }
    else
    {
        for (int i = size - 1; i > index; i--)
        {
            arr[i] = arr[i - 1];
        }
        arr[index] = value;
        return size;
    }
}

// 문제5 포인터를 이용한 배열의 특정 위치의 값 제거
void Practice5()
{
    int arr[5] = { 1,2,3,4,5 };
    int arrLen = sizeof(arr) / sizeof(int);
    int arrLen2 = RemoveAt(arr, arrLen, 4);
    for (int i = 0; i < arrLen2; i++)
    {
        printf("%d ", arr[i]);
    }
}
int RemoveAt(int* arr, int size, int index)
{
    for (int i = index; i < size-1; i++)
    {
        arr[i] = arr[i+1];
    }
    return size - 1;
}

// 문제6 포인터를 이용한 배열의 특정 범위의 평균 계산
void Practice6()
{
    int arr[5] = { 1,2,3,4,5 };
    printf("평균 : %f",calculateRangeAverage(arr, 0, 2));
}
double calculateRangeAverage(int* arr, int start, int end)
{
    double sum = 0;
    for (int i = start; i <= end; i++)
    {
        sum += arr[i];
    }
    return (double)(sum / (end - start + 1));
}

// 문제7 포인터를 이용한 배열의 특정 값보다 큰 요소의 개수 계산
void Practice7()
{
    int arr[5] = { 1, 2, 3, 4, 5 };
    int arrLen = sizeof(arr) / sizeof(int);
    printf("%d보다 큰값의 개수 :%d",4 ,countGreater(arr, arrLen, 4));
}
int countGreater(int* arr, int size, int value)
{
    int count = 0;
    for (int i = 0; i < size; i++)
    {
        if (arr[i] > value)
            count++;
    }
    return count;
}

// 문제8 포인터를 이용한 배열의 특정 값보다 작은 요소의 개수 계산
void Practice8()
{
    int arr[5] = { 1, 2, 3, 4, 5 };
    int arrLen = sizeof(arr) / sizeof(int);
    printf("%d보다 작은값의 개수 :%d", 4, countLess(arr, arrLen, 4));
}
int countLess(int* arr, int size, int value)
{
    int count = 0;
    for (int i = 0; i < size; i++)
    {
        if (arr[i] < value)
            count++;
    }
    return count;

}

// 문제9 포인터를 이용한 배열의 특정 값보다 큰 첫 번째 요소 찾기
void Practice9()
{
    int arr[5] = { 1,2,3,4,5 };
    int arrLen = sizeof(arr) / sizeof(int);
    printf("큰 첫번째 요소 : %d번째 인덱스", findFirstGreater(arr, arrLen, 4));
}
int findFirstGreater(int* arr, int size, int value)
{
    for (int i = 0; i < size; i++)
    {
        if (value < arr[i])
            return i;
    }
    return -1;
}

// 문제10 포인터를 이용한 배열의 특정 값의 마지막 위치 찾기
void Practice10()
{
    int arr[10] = { 1,1,2,2,3,3,4,4,5,5 };
    int arrLen = sizeof(arr) / sizeof(int);
    printf("%d번째 인덱스", findLast(arr, arrLen, 4));
}
int findLast(int* arr, int size, int value)
{
    int lastIndex = -1;
    for (int i = 0; i < size; i++)
    {
        if (arr[i] == value)
            lastIndex = i;
    }
    return lastIndex;
}

 

반응형

 

반응형

'연습문제' 카테고리의 다른 글

C언어 90도씩 회전하기  (0) 2023.05.22
C언어 tictactoe  (0) 2023.05.19
C 포인터 문제  (0) 2023.05.17
C언어 카드게임  (0) 2023.05.12
C언어 베이스볼 게임  (0) 2023.05.12

+ Recent posts