1108강의 - kyagrd/cprog2018Fall GitHub Wiki

hw4 모범답안

hw5할때 hw4를 못 제출한 분들은 여기서부터 수정 시작해도 되겠습니다.

#include <stdio.h>

#define N1 10
#define N2 10
#define N  20

void printpoly(int, const int []);

int* multpoly(int dest[],
              int n1, const int poly1[],
              int n2, const int poly2[]);

int main()
{
    int poly1[N1];
    int poly2[N2];
    int poly[N] = {};

    for (int i=0; i<N1; ++i) scanf("%d", &poly1[i]);
    for (int i=0; i<N2; ++i) scanf("%d", poly2 + i);
    multpoly(poly, N1, poly1, N2, poly2);

    printf("  "); printpoly(N1, poly1); printf("\n");
    printf("* "); printpoly(N2, poly2); printf("\n");
    printf("------------------------------------------------------------\n");
    printf("  "); printpoly(N, poly); printf("\n");

    return 0;
}

int allz(int n, const int* p)
{
    int res = 0;
    while (n--) res |= *p++;
    return !res;
}

void printpoly(int n, const int poly[])
{
    if (allz(n,poly)) { printf("0"); return; }

    int first = 1;
    for (int i=0; i<n; ++i)
    {
        if (0 == poly[i]) continue;

        if (0  < poly[i])
        {
            if (first) first=0; else printf(" +");
            if (i==0) { printf("%d", poly[i]); continue; }
            if (1!=poly[i]) printf("%d",poly[i]);
        }

        if (0  > poly[i])
        {
            if (first) first=0; else printf(" ");
            if (i==0) { printf("%d", poly[i]); continue; }
            if (-1==poly[i]) printf("-"); else printf("%d",poly[i]);
        }

        switch (i) {
            case 0: break;
            case 1: printf("x"); break;
            default: printf("x^%d", i);
        }

    }
}

int* multpoly(int dest[], int n1, const int poly1[], int n2, const int poly2[])
{
    /*
    // dummy implementation just copying from poly1
    for(int i=0; i<n1; ++i) dest[i] = poly1[i];
    */
    for(int i=0; i<n1; ++i)
        for(int j=0; j<n2; ++j)
            dest[i+j] += poly1[i] * poly2[j];

    return dest;
}

이중 포인터와 아차원배열

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

int main(void)
{
    int m[3][4] = { { 1, 2, 3, 4},
                    {11,12,13,14},
                    {21,22,23,24} };
    // int *p0 = m[0]; // &(a0[0])
    // int *p1 = m[1];
    // int *p2 = m[2];

    int* pa[3] = {m[0],m[1],m[2]};
    printf("%d\n", pa[1][2]);  // *(p1+1)

    int** pp = pa;
    printf("%d\n", pp[1][2]);  // *(p1+1)
    /*
    int x = 3;
    int *p = &x;
    int **pp = &p;

    printf("x \tval: %d \t\t addr: %u\n", x, &x);
    printf("p \tval: %u \t addr: %u\n", p, &p);
    printf("pp \tval: %u \t addr: %u\n", pp, &pp);
    printf("ppp \tval: %u \t addr: %u\n", ppp, &ppp);
    */
    return 0;
}
⚠️ **GitHub.com Fallback** ⚠️