[CS 50トレーナー]第5週


第一題


デュアルポインタ:2 D配列(6 x 5)を宣言し、ポインタを使用して順番に出力します。


[ソースコード]

/*
    이중 포인터
    arr[i] = *(arr+i) -> P = *(arr+i)로 치환
    p[j] = *(p+j) = *(*(arr+i)+j)
*/

#include <stdio.h>

int main()
{
    int arr[6][5] =
    {
        {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}
    };
    
    int col = sizeof(arr[0]) / sizeof(int);
    int row = sizeof(arr) / sizeof(arr[0]);
    
    printf("[ 출력값 ]\n");
    for (int i = row-1; i >= 0; i--)
    {
        for(int j = 0; j < col; j++)
        {
            printf("%d\t", *(*(arr+i)+j));
        }
        printf("\n");
    }
    return 0;
}

[結果画面]



[参考資料]


[Developer Rhino]二重ポインタと二次元配列の関係(Rhino)https://lsoovmee-rhino.tistory.com/24

第三題


ポインタを使用したバブルソートプログラム


[ソースコード]

// 포인터를 활용한 버블 정렬 프로그램
#include
void sort(int n, int *arr);
int main()
{
int n = 7;
int arr[7] = { 0, 25, 10, 17, 6, 12, 9 };
sort(n, arr);

return 0;
}
void sort(int n, int *arr)
{
int temp = 0;
for (int i = 0; i < n; i++)
{
    for (int j = i+1; j < n-1; j++)
    {
        if (*(arr+i) > *(arr+j))
        {
            temp = *(arr+i);
            *(arr+i) = *(arr+j);
            *(arr+j) = temp;
        }
    }
}

printf("출력값 :");
for (int i = 0; i < n; i++)
{
    printf(" %d", *(arr+i));
    
    if (i == n-1) break;
    
    printf(",");
}
printf("\n");
}