[열혈C] Chapter13 - 문제

김광일·2023년 2월 15일
0

열혈C

목록 보기
8/8

문제1

길이가 5인 int형 배열 arr을 선언하고 이를 1, 2, 3, 4, 5로 초기화한 다음,
이 배열의 첫 번째 오소를 가리키는 포인터 변수 ptr을 선언한다.
그 다음 포인터 변수 ptr에 저장된 값을 증가시키는 형태의 연산을 기반으로 배열요소에 접근하면서 모든 배열요소의 값을 2씩 증가시키고,
정상적으로 증가가 이뤄졌는지 확인하는 예제를 작성해보자.

#include <stdio.h>

int main(void){

    int arr[5] = {1, 2, 3, 4, 5};
    int * ptr = arr;

    // 정답
    // for(int i = 0; i < 5; i++){
    //     *(ptr++) += 2;
    //     printf("%p, %d ", ptr, arr[i]);
    // }

    // 광일 풀이

    for(int i = 0; i < 5; i++)
        printf("%d ", *(ptr+i));
    
    printf("\n");

    for(int i = 0; i <5; i++){
        *(ptr++)+=2;
    }

    for(int i = 0; i < 5; i++)
        printf("%d ", arr[i]);

    return 0;
}

문제2

문제 1에서는 포인터 변수 ptr에 저장된 값을 변경시켜가면서 배열쇼오세 접근하라고 하였다.
그런데 이번에는 포인텨 변수 ptr에 저장된 값을 변경시키지 않고,
ptr을 대상으로 덧셈연산을 하여, 그 결과로 반환되는 주소 값으 ㄹ통해서 모든 배열요소에 접근하여 값을 2씩 증가시키는 예제를 작성해보자.

#include <stdio.h>

int main(void){

    int arr[5] = {1, 2, 3, 4, 5};
    int * ptr = arr;

    // 정답
    // for(int i = 0; i < 5; i++){
    //     *(ptr+i) += 2;
    //     printf("%d ", arr[i]);
    // }

    // 광일 풀이
    for(int i = 0; i < 5; i++)
        printf("%d ", *(ptr+i));
    
    printf("\n");

    for(int i = 0; i <5; i++){
        printf("%d ", *(ptr+i) += 2);
    }

    printf("\n");

    return 0;
}

문제3

길이가 5인 int형 배열 arr을 선언하고 이를 1, 2, 3, 4, 5로 초기화한 다음
이 배열의 마지막 요소를 가리키는 포인터 변수 ptr을 선언한다.
그 다음 포인터 변수 ptr에 저장된 값을 감소시키는 형태의 연산을 기반으로 모든 배열요소에 접근하여,
배열에 저장된 모든 정수를 더하여 그 결과를 출력하는 프로그램을 작성해보자.

#include <stdio.h>

int main(void){

    int arr[5] = {1, 2, 3, 4, 5};
    int * ptr = &arr[4];

    int total = 0;

    for(int i = 0; i < 5; i++){
        total += *(ptr--);

    }

    printf("total : %d \n", total);

    return 0;
}

문제4

길이가 6인 int형 배열 arr을 선언하고 이를 1, 2, 3, 4, 5, 6으로 초기화한 다음,
배열에 저장된 값의 순서가 6, 5, 4, 3, 2, 1이 되도록 변경하는 예제를 작성해보자.
단, 배열의 앞과 뒤를 가리키는 포인터 변수 두 개를 선언해서 이를 활용하여 저장된 값의 순서를 뒤바꿔야 한다.

#include <stdio.h>

int main(void){

    int arr[6] = {1, 2, 3, 4, 5, 6};
    int * ptr1 = &arr[0];
    int * ptr2 = &arr[5];

    int temp = 0;

    for(int i = 0; i <3; i++){
        temp = *ptr1;
        *ptr1 = *ptr2;
        *ptr2 = temp;

        ptr1++;
        ptr2--;
    }

    for(int i = 0; i < 6; i++)
        printf("%d ", arr[i]);
    return 0;
}
profile
개발을 꿈꾸는 사람입니다.

0개의 댓글