홈 > IT > IT정보
IT정보

C언어 함수, 포인터, 동적할당 문제풀기 4-14

3 realdragonhead 0 400 0 0

4-14. (MxM) 크기의 2차원 배열의 값을 1차원 배열에 복사하는 함수를 작성하시오. main() 함수에서 이들 함수를 호출하여 결과를 출력하시오. 2차원 배열의 입출력 함수는 4-13의 결과를 이용하고, 1차원 배열을 출력하는 함수는 4-8의 결과를 이용하시오.

<CODE>

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


int** makecolumnrow(int , int);
void printcolumnrow(int ** ,int ,int);
void copyvalue(int **, int *, int, int );
void arrayprint(int *, int );
void main() {
        int same;
        int column=0, row=0;


        puts("정수 값을 가지는 (MxM) 크기의 2차원 정방 행렬을 만들고, 1차원 배열로 값을 옮깁니다.");
        fputs("M의 크기 결정 : ", stdout);
        scanf("%d", &same);
        column=same;
        row=same;


        int ** matrix = (int **)malloc(sizeof(int *)*column);
        int * usrarray = (int *)malloc(sizeof(int *)*(column*row));


        for(int i=0; i<column; i++) {
                matrix[i] = (int *)malloc(sizeof(int)*row);
        }


        matrix = makecolumnrow(same, same);


        puts("<2차원 배열 값>");
        printcolumnrow(matrix, same, same);


        copyvalue(matrix, usrarray, column, row);
        puts("<1차원 배열 값>");
        arrayprint(usrarray, column*row);


        for(int j=0; j<column; j++) {
                free(matrix[j]);
        }


        free(matrix);
        free(usrarray);
}


int** makecolumnrow(int fcolumn, int frow) {
        int ** fmatrix = (int **)malloc(sizeof(int *)*fcolumn);


        for(int k=0; k<fcolumn; k++) {
                fmatrix[k] = (int *)malloc(sizeof(int)*frow);
        }


        puts("행과 열에 하나씩 값을 입력합니다.");
        for(int l=0; l<fcolumn; l++) {
                for(int m=0; m<frow; m++) {
                        printf("%d행 %d열 값 입력 :",l+1,m+1);
                        scanf("%d", &fmatrix[l][m]);
                }
        }
        return fmatrix;
}


void printcolumnrow(int ** fmatrix, int pcolumn, int prow) {
        for(int n=0; n<pcolumn; n++) {
                for(int o=0; o<prow; o++) {
                        printf("%d ",fmatrix[n][o]);
                }
                puts(" ");
        }
}


void copyvalue(int ** umatrix, int * uarray, int ucolumn, int urow) {
        int fcount = 0;
        for (int q=0; q<ucolumn; q++) {
                for(int r=0; r<urow; r++) {
                        uarray[fcount] = umatrix[q][r];
                        fcount++;
                }
        }
}


void arrayprint(int * fun2array, int arraylength) {
        static int funcounter = 0;      //재귀함수 반복횟수 저장을 위한 변수 static 선언.
        if(funcounter >= arraylength) {
                puts(" ");      //개행
                return ;
        }
        printf("%d ", fun2array[funcounter]);
        funcounter++;
        arrayprint(fun2array, arraylength);
}


<RESULT>

[case 1]

정수 값을 가지는 (MxM) 크기의 2차원 정방 행렬을 만들고, 1차원 배열로 값을 옮겨 출력합니다.

M의 크기 결정 : 2

행과 열에 하나씩 값을 입력합니다.

1행 1열 값 입력 :1

1행 2열 값 입력 :2

2행 1열 값 입력 :3

2행 2열 값 입력 :4

<2차원 배열 값>

1 2

3 4

<1차원 배열 값>

1 2 3 4

[case 2]

정수 값을 가지는 (MxM) 크기의 2차원 정방 행렬을 만들고, 1차원 배열로 값을 옮겨 출력합니다.

M의 크기 결정 : 0

행과 열에 하나씩 값을 입력합니다.

<2차원 배열 값>

<1차원 배열 값>

[case 3]

정수 값을 가지는 (MxM) 크기의 2차원 정방 행렬을 만들고, 1차원 배열로 값을 옮겨 출력합니다.

M의 크기 결정 : 3

행과 열에 하나씩 값을 입력합니다.

1행 1열 값 입력 :1

1행 2열 값 입력 :2

1행 3열 값 입력 :3

2행 1열 값 입력 :4

2행 2열 값 입력 :5

2행 3열 값 입력 :6

3행 1열 값 입력 :7

3행 2열 값 입력 :8

3행 3열 값 입력 :9

<2차원 배열 값>

1 2 3

4 5 6

7 8 9

<1차원 배열 값>

1 2 3 4 5 6 7 8 9


4-14A. (MxN) 크기의 2차원 배열의 값을 1차원 배열에 복사하는 함수를 작성하시오. main() 함수에서 이 함수를 호출하고 배열 입출력 함수를 이용하여 결과를 출력하시오.

<CODE>

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


int** makecolumnrow(int , int);
void printcolumnrow(int ** ,int ,int);
void copyvalue(int **, int *, int, int );
void arrayprint(int *, int );
void main() {
        int column=0, row=0;


        puts("정수 값을 가지는 (MxN) 크기의 2차원 행렬을 만들고, 1차원 배열로 값을 옮깁니다.");
        fputs("M의 크기 결정 : ", stdout);
        scanf("%d", &column);
        fputs("N의 크기 결정 : ", stdout);
        scanf("%d", &row);


        int ** matrix = (int **)malloc(sizeof(int *)*column);
        int * usrarray = (int *)malloc(sizeof(int *)*(column*row));


        for(int i=0; i<column; i++) {
                matrix[i] = (int *)malloc(sizeof(int)*row);
        }


        matrix = makecolumnrow(column, row);


        puts("<2차원 배열 값>");
        printcolumnrow(matrix, column, row);


        copyvalue(matrix, usrarray, column, row);
        puts("<1차원 배열 값>");
        arrayprint(usrarray, column*row);


        for(int j=0; j<column; j++) {
                free(matrix[j]);
        }


        free(matrix);
        free(usrarray);
}


int** makecolumnrow(int fcolumn, int frow) {
        int ** fmatrix = (int **)malloc(sizeof(int *)*fcolumn);


        for(int k=0; k<fcolumn; k++) {
                fmatrix[k] = (int *)malloc(sizeof(int)*frow);
        }


        puts("행과 열에 하나씩 값을 입력합니다.");
        for(int l=0; l<fcolumn; l++) {
                for(int m=0; m<frow; m++) {
                        printf("%d행 %d열 값 입력 :",l+1,m+1);
                        scanf("%d", &fmatrix[l][m]);
                }
        }
        return fmatrix;
}


void printcolumnrow(int ** fmatrix, int pcolumn, int prow) {
        for(int n=0; n<pcolumn; n++) {
                for(int o=0; o<prow; o++) {
                        printf("%d ",fmatrix[n][o]);
                }
                puts(" ");
        }
}


void copyvalue(int ** umatrix, int * uarray, int ucolumn, int urow) {
        int fcount = 0;
        for (int q=0; q<ucolumn; q++) {
                for(int r=0; r<urow; r++) {
                        uarray[fcount] = umatrix[q][r];
                        fcount++;
                }
        }
}


void arrayprint(int * fun2array, int arraylength) {
        static int funcounter = 0;      //재귀함수 반복횟수 저장을 위한 변수 static 선언.
        if(funcounter >= arraylength) {
                puts(" ");      //개행
                return ;
        }
        printf("%d ", fun2array[funcounter]);
        funcounter++;
        arrayprint(fun2array, arraylength);
}


<RESULT>

[case 1]

정수 값을 가지는 (MxN) 크기의 2차원 행렬을 만들고, 1차원 배열로 값을 옮깁니다.

M의 크기 결정 : 2

N의 크기 결정 : 3

행과 열에 하나씩 값을 입력합니다.

1행 1열 값 입력 :1

1행 2열 값 입력 :2

1행 3열 값 입력 :3

2행 1열 값 입력 :4

2행 2열 값 입력 :5

2행 3열 값 입력 :6

<2차원 배열 값>

1 2 3

4 5 6

<1차원 배열 값>

1 2 3 4 5 6

[case 2]

정수 값을 가지는 (MxN) 크기의 2차원 행렬을 만들고, 1차원 배열로 값을 옮깁니다.

M의 크기 결정 : -1

N의 크기 결정 : 3

행과 열에 하나씩 값을 입력합니다.

<2차원 배열 값>

<1차원 배열 값>


[case 3]

정수 값을 가지는 (MxN) 크기의 2차원 행렬을 만들고, 1차원 배열로 값을 옮깁니다.

M의 크기 결정 : 1

N의 크기 결정 : 6

행과 열에 하나씩 값을 입력합니다.

1행 1열 값 입력 :1

1행 2열 값 입력 :2

1행 3열 값 입력 :3

1행 4열 값 입력 :4

1행 5열 값 입력 :5

1행 6열 값 입력 :6

<2차원 배열 값>

1 2 3 4 5 6

<1차원 배열 값>

1 2 3 4 5 6


4-14B. 1차원 배열의 값을 (MxN) 크기의 2차원 배열에 복사하는 함수를 작성하고, 배열 입출력 함수를 이용하여 main() 함수에서 결과를 출력하시오.

<CODE>

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


int* makearray(int );
int** makecolumnrow(int , int);
void printcolumnrow(int ** ,int ,int);
void copyvaluefromarray(int **, int *, int, int );
void arrayprint(int *, int );
void main() {
        int column=0, row=0;


        puts("MxN 크기의 2차원 배열에 값을, 사용자가 입력한 1차원 배열로부터 받아 출력합니다.");
        fputs("M의 크기 결정 : ", stdout);
        scanf("%d", &column);
        fputs("N의 크기 결정 : ", stdout);
        scanf("%d", &row);


        int ** matrix = (int **)malloc(sizeof(int *)*column);
        int * usrarray = (int *)malloc(sizeof(int *)*(column*row));


        for(int i=0; i<column; i++) {
                matrix[i] = (int *)malloc(sizeof(int)*row);
        }


        usrarray = makearray(column*row);


        puts("<1차원 배열 값>");
        arrayprint(usrarray, column*row);


        copyvaluefromarray(matrix, usrarray, column, row);
        puts("<2차원 배열 값>");
        printcolumnrow(matrix, column, row);


        for(int j=0; j<column; j++) {
                free(matrix[j]);
        }


        free(matrix);
        free(usrarray);
}


int * makearray(int mlength) {
        int * marray = (int *)malloc(sizeof(int)*mlength);
        int usrvalue;
        puts("MxN 2차원 행렬에 들어갈 값을 1차원 행렬에 작성합니다.");
        for(int w=0; w<mlength; w++) {
                printf("%d번째 값 입력 : ",w+1);
                scanf("%d", &usrvalue);
                marray[w] = usrvalue;
        }
        puts(" ");
        return marray;
}


void printcolumnrow(int ** fmatrix, int pcolumn, int prow) {
        for(int n=0; n<pcolumn; n++) {
                for(int o=0; o<prow; o++) {
                        printf("%d ",fmatrix[n][o]);
                }
                puts(" ");
        }
}


void copyvaluefromarray(int ** umatrix, int * uarray, int ucolumn, int urow) {
        int fcount = 0;
        for (int q=0; q<ucolumn; q++) {
                for(int r=0; r<urow; r++) {
                        umatrix[q][r] = uarray[fcount];
                        fcount++;
                }
        }
}


void arrayprint(int * fun2array, int arraylength) {
        static int funcounter = 0;      //재귀함수 반복횟수 저장을 위한 변수 static 선언.
        if(funcounter >= arraylength) {
                puts(" ");      //개행
                return ;
        }
        printf("%d ", fun2array[funcounter]);
        funcounter++;
        arrayprint(fun2array, arraylength);
}


<RESULT>

[case 1]

MxN 크기의 2차원 배열에 값을, 사용자가 입력한 1차원 배열로부터 받아 출력합니다.

M의 크기 결정 : 2

N의 크기 결정 : 3

MxN 2차원 행렬에 들어갈 값을 1차원 행렬에 작성합니다.

1번째 값 입력 : 1

2번째 값 입력 : 2

3번째 값 입력 : 3

4번째 값 입력 : 4

5번째 값 입력 : 5

6번째 값 입력 : 6


<1차원 배열 값>

1 2 3 4 5 6

<2차원 배열 값>

1 2 3

4 5 6

[case 2]

MxN 크기의 2차원 배열에 값을, 사용자가 입력한 1차원 배열로부터 받아 출력합니다.

M의 크기 결정 : -1

N의 크기 결정 : 3

MxN 2차원 행렬에 들어갈 값을 1차원 행렬에 작성합니다.


<1차원 배열 값>


<2차원 배열 값>

[case 3]

MxN 크기의 2차원 배열에 값을, 사용자가 입력한 1차원 배열로부터 받아 출력합니다.

M의 크기 결정 : 1

N의 크기 결정 : 6

MxN 2차원 행렬에 들어갈 값을 1차원 행렬에 작성합니다.

1번째 값 입력 : 1

2번째 값 입력 : 2

3번째 값 입력 : 3

4번째 값 입력 : 4

5번째 값 입력 : 5

6번째 값 입력 : 6


<1차원 배열 값>

1 2 3 4 5 6

<2차원 배열 값>

1 2 3 4 5 6

0 Comments
Category
State
  • 현재 접속자 48 명
  • 오늘 방문자 716 명
  • 어제 방문자 794 명
  • 최대 방문자 948 명
  • 전체 방문자 180,465 명
  • 전체 게시물 1,951 개
  • 전체 댓글수 249 개
  • 전체 회원수 114 명
Facebook Twitter GooglePlus KakaoStory KakaoTalk NaverBand
PlusFriend Chat