programming/c

주말숙제

1. 다음 문제의 출력 결과를 쓰시오. (10)

(이 문제에서 double 타입의 크기는 8byte로가정, a : 0x1234)

voidmain()

{

    double a[10] = { 0 };

 

    printf("%p\n", a + 1);

    printf("%p\n", a + 2);

    printf("%p\n", a + 3);

    printf("%p\n", a - 1);

    printf("%p\n", a - 2);

}

1242 / 1250 / 1258/ 1226 / 1216

 

2. 다음과 같이 출력되도록 (////) 의 코드를 작성하시오. (10)

1 01 0 1

0 10 1 0

1 01 0 1

0 10 1 0

1 0 1 0 1

 

intmain()

{

    intarr[5][5] = { 0 };

    int i,j;

 

(///////////////////)

 

    for (i= 0; i < 5; ++i)

    {

        for (j= 0; j < 5; ++j)

           printf("%3d", arr[i][j]);

       printf("\n");

    }

}

 

        for (i = 0; i < 5;++i)

        {

               for (j = 0; j < 5;j++)

               {

                       if (i == 0 || i == 2|| i == 4)

                       {

                              if (j == 0 || j == 2|| j == 4)

                              {

                                      arr[i][j]= 1;

                              }

                              else if (j == 1 || j ==3)

                              {

                                      arr[i][j]= 0;

                              }

                       }

                       if (i == 1 || i ==3)

                       {

                              if (j == 0 || j == 2|| j == 4)

                              {

                                      arr[i][j]= 0;

                              }

                              else if (j == 1 || j ==3)

                              {

                                      arr[i][j]= 1;

                              }

                       }

               }

        }

 

3. 다음 출력결과를 보고 IncrementArray() 함수를 작성하시오. (10)

10  11   12   13  14

   11   12  13   14   15

   12   13  14   15   16

 

voidPrintArray(int arr[], int size)

{

    int i;

    for (i= 0; i < size; ++i)

       printf("%5d", arr[i]);

    printf("\n");

}

voidmain()

{

    intarr[5] = { 10,11,12,13,14 };

 

   PrintArray(arr, 5);

   IncrementArray(arr, 5);

   PrintArray(arr, 5);

   IncrementArray(arr, 5);

   PrintArray(arr, 5);

 

}

 

void IncrementArray(int arr[], int size)

{

        int i;

        for (i = 0; i < size; i++)

        {

               arr[i] += 1;

        }

}

 

4. 다음 문제의 출력 결과를 쓰시오. (10)

voidmain()

{

    int a =3;

    int f =0x4F;

 

    a = f<< 2 & 0x4F;

 

    printf("%x\n", a);

}

7c

 

5. 다음 ptr을 이용하여 elppa 가 출력되도록 (//////)에 코드를 작성하시오. (10)

void main(void)

{

 charfruit[] = "apple";

 char*ptr;

 

 ptr= fruit + strlen(fruit);

 

 (//////)

}

ptr = fruit +strlen(fruit);

while(--ptr >= fruit)

puts(ptr);

 

6. 다음 출력 결과는 모든 문자열을 소문자로 변환하는 LowerString() 함수의 결과를출력한 것이다. 다음 LowerString() 함수를 작성하시오. (10)

programming world

voidmain()

{

    chararr1[20] = "ProgramMING";

    chararr2[20] = "World";

 

   LowerString(arr1);

   LowerString(arr2);

    printf("%s %s\n", arr1, arr2);

}

void LowerString(char*array)

{

   For(int i = 0; I < 20; i++)

   {

     while(array[i] >= 65 &&array[i] <= 90)

     {

        array[i] += 32;

     }

   }

}

 

7. 다음 출력 결과는 콜백함수가 참을 반환하면 buf의해당 문자를 삭제하는 DeleteChar() 함수의 기능을 활용하여buf의 결과를 출력한 것이다. 다음 DeleteChar()함수를작성하시오. (20)

 

ABCEFGIK

 

intCallbackFunc(char c)

{

    return c == 'D' || c == 'H'|| c == 'J';

}

voidmain()

{

    charbuf[100] = "ABCDEFGHIJK";

   DeleteChar(buf, CallbackFunc);

 

    printf("%s\n", buf);

}

 

 

 

8. 다음 출력 결과는 3개의 원소를 스택에 입력하고 출력한 결과이다. 스택의 초기화, 마무리 함수, 원소를입력하고 출력하기 위한 함수(InitStack(), UninitStack(), Push(), Pop())를작성하시오. (10)

300

200

100

 

voidmain()

{

    intst[100];

    int top= 0;

 

   InitStack(st, &top);

    Push(st,&top, 100);

    Push(st,&top, 200);

    Push(st,&top, 300);

 

    printf("%d\n", Pop(st, &top));

    printf("%d\n", Pop(st, &top));

    printf("%d\n", Pop(st, &top));

   UninitStack(st, &top);

}

 

void Push(int *st, int *top, int a)

{

        if (*top >= 99)

        {

               printf("Overflow!\n");

        }

        st[++(*top)] = a;

        return a;

}

 

int Pop(int *st, int *top)

{

        if (*top < 0)

        {

               printf("Undeflow!");

        }

        return st[(*top)--];

}

 

void initStack(int *st, int *top)

{

        *top = -1;

}

 

void UninitStack(int *st, int *top)

{

        int i;

        for (i = 0; i <100; i++)

        {

               st[i] = 0;

        }

}

 

9. 다음은 strTable의 문자열을 출력한 결과다. PrintForwardString() 함수는 strTable의 문자열을 순서대로 출력하며 PrintBackwardString() 함수는 strTable의 문자열을반대 순서대로 출력하는 함수다. 두 함수를 작성하시오. (10)

 

123  234  345 678  789

789  678  345 234  123

voidmain()

{

    char*strTable[5] = { "123","234","345","678","789" };

 

   PrintForwardString(strTable);

    printf("\n");

   PrintBackwardString(strTable);

}

 

voidPrintfForwardString(char **st)

{

        int i;

        for (i = 0; i < 5;i++)

        {

               printf("%s\t", st[i]);

        }

}

 

voidPrintfBackwardString(char **st)

{

        int i;

        for (i = 4; i >=0; i--)

        {

               printf("%s\t", st[i]);

        }

}