C/명품 C언어 프로젝트(안기수 저)

명품 C언어 프로젝트 3.5장 연습문제

꾸준함. 2017. 6. 22. 23:27

[1번 문제]

/*

[예제 3.5.1]을 이용하여 다음의 [그림 A]와 같이 기본 정사각형 5개를 연속적으로 세로 방향으로 출력하는 프로그램을 작성합니다

*/

#include <stdio.h>

 

void draw_basic_square(void);

 

int main(void)

{

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

        {

               draw_basic_square();

               printf("\n");

        }

        return 0;

}

 

void draw_basic_square(void)

{

        unsigned char a = 0xa6, b[7], i;

        for (i = 1; i < 7; i++)

               b[i] = 0xa0 + i;

        printf("%c%c", a, b[3]);

        printf("%c%c", a, b[4]);

        printf("\n");

        printf("%c%c", a, b[6]);

        printf("%c%c", a, b[5]);

        printf("\n");

}

 


[2번 문제]

/*

[예제 3.5.1]을 이용하여 다음의 [그림 B]와 같이 기본 정사각형 5개를 연속적으로

가로 방향으로 출력하는 프로그램을 작성합니다

*/

#include <stdio.h>

#include <Windows.h>

 

void gotoxy(int x, int y);

void draw_basic_square(x, y);

 

int main(void)

{

        int x, y;

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

        {

               x = 1+(i)*4;

               y = 1;

               gotoxy(x, y);

               draw_basic_square(x, y);

        }

        printf("\n");

        return 0;

}

 

void gotoxy(int x, int y)

{

        COORD Pos = { x - 1, y - 1 };

        SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), Pos);

}

 

void draw_basic_square(x, y)

{

        unsigned char a = 0xa6, b[7], i;

        for (i = 1; i < 7; i++)

               b[i] = 0xa0 + i;

        gotoxy(x, y);

        printf("%c%c", a, b[3]);

        gotoxy(x + 2, y);

        printf("%c%c", a, b[4]);

        gotoxy(x, y+1);

        printf("%c%c", a, b[6]);

        gotoxy(x + 2, y + 1);

        printf("%c%c", a, b[5]);

}

 


[3번 문제]

/*

문제 1과 문제 2를 혼합하여 [그림 C]와 같이 출력하는 프로그램을 작성한다

*/

#include <stdio.h>

#include <Windows.h>

 

void gotoxy(int x, int y);

void draw_basic_square(x, y);

 

int main(void)

{

        int x, y;

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

        {

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

               {

                       x = 1 + (i) * 4;

                       y = (j + 1) + j;

                       gotoxy(x, y);

                       draw_basic_square(x, y);

               }

        }

        printf("\n");

        return 0;

}

 

void gotoxy(int x, int y)

{

        COORD Pos = { x - 1, y - 1 };

        SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), Pos);

}

 

void draw_basic_square(x, y)

{

        unsigned char a = 0xa6, b[7], i;

        for (i = 1; i < 7; i++)

               b[i] = 0xa0 + i;

        gotoxy(x, y);

        printf("%c%c", a, b[3]);

        gotoxy(x + 2, y);

        printf("%c%c", a, b[4]);

        gotoxy(x, y + 1);

        printf("%c%c", a, b[6]);

        gotoxy(x + 2, y + 1);

        printf("%c%c", a, b[5]);

}

 


[4번 문제]

/*

[예제 3.5.3]을 이요하여 다음의 [그림 D]와 같이 가로 10, 세로 1인 직사각형과 가로1, 세로 10인 직사각형을 동시에 출력하는 프로그램을 작성한다

*/

#include <stdio.h>

 

void draw_rectangle(int column, int row);

 

int main(void)

{

        draw_rectangle(1, 10);

        draw_rectangle(10, 1);

        return 0;

}

 

void draw_rectangle(int c, int r)

{

        int i, j;

        unsigned char a = 0xa6;

        unsigned char b[7];

        for (i = 1; i < 7; i++)

               b[i] = 0xa0 + i;

 

        printf("%c%c", a, b[3]);

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

               printf("%c%c", a, b[1]);

        printf("%c%c", a, b[4]);

        printf("\n");

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

        {

               printf("%c%c", a, b[2]);

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

                       printf("  ");;

               printf("%c%c", a, b[2]);

               printf("\n");

        }

        printf("%c%c", a, b[6]);

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

               printf("%c%c", a, b[1]);

        printf("%c%c", a, b[5]);

        printf("\n");

}


[5번 문제]

/*

[예제 3.5.4]를 이용하여 [그림 E]와 같이 실제 바둑판(가로 줄 19, 세로 줄 19)모양으로 출력합니다

*/

#include <stdio.h>

 

void draw_check01(int column, int row);

 

int main(void)

{

        draw_check01(19, 19);

        return 0;

}

 

void draw_check01(int c, int r)

{

        int i, j;

        unsigned char a = 0xa6;

        unsigned char b[12];

        for (i = 1; i < 12; i++)

               b[i] = 0xa0 + i;

        printf("%c%c", a, b[3]);

        for (i = 0; i < c - 1; i++)

               printf("%c%c", a, b[8]);

        printf("%c%c", a, b[4]);

        printf("\n");

        for (i = 0; i < r - 1; i++)

        {

               printf("%c%c", a, b[7]);

               for (j = 0; j < c - 1; j++)

                       printf("%c%c", a, b[11]);

               printf("%c%c", a, b[9]);

               printf("\n");

        }

        printf("%c%c", a, b[6]);

        for (i = 0; i < c - 1; i++)

               printf("%c%c", a, b[10]);

        printf("%c%c", a, b[5]);

        printf("\n");

}

 


[6번 문제]

/*

[예제 3.5.5]를 이용하여 [그림 F]와 같이 4*4 격자 모양에 1~16까지의 숫자를 출력하는 프로그램을 작성합니다

*/

#include <stdio.h>

#include <Windows.h>

 

void draw_check02(int column, int row);

void gotoxy(int x, int y);

 

int main(void)

{

        int num = 1;

        draw_check02(4, 4);

        for (int i = 0; i < 4; i++)

        {

               for (int j = 0; j < 4; j++)

               {

                       gotoxy(4 * (i + 1)-1, 2*(j+1));

                       printf("%d", num++);

               }

        }

        printf("\n\n");

        return 0;

}

 

void gotoxy(int x, int y)

{

        COORD Pos = { x - 1, y - 1 };

        SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), Pos);

}

 

void draw_check02(int c, int r)

{

        int i, j;

        unsigned char a = 0xa6;

        unsigned char b[12];

        for (i = 1; i < 12; i++)

               b[i] = 0xa0 + i;

        printf("%c%c", a, b[3]);

        for (i = 0; i < c - 1; i++)

        {

               printf("%c%c", a, b[1]);

               printf("%c%c", a, b[8]);

        }

        printf("%c%c", a, b[1]);

        printf("%c%c", a, b[4]);

        printf("\n");

        for (i = 0; i < r - 1; i++)

        {

               printf("%c%c", a, b[2]);;

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

               {

                       printf("  ");

                       printf("%c%c", a, b[2]);

               }

               printf("\n");

               printf("%c%c", a, b[7]);

               for (j = 0; j < c - 1; j++)

               {

                       printf("%c%c", a, b[1]);

                       printf("%c%c", a, b[11]);

               }

               printf("%c%c", a, b[1]);

               printf("%c%c", a, b[9]);

               printf("\n");

        }

        printf("%c%c", a, b[2]);

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

        {

               printf("  ");

               printf("%c%c", a, b[2]);

        }

        printf("\n");

        printf("%c%c", a, b[6]);

        for (i = 0; i < c - 1; i++)

        {

               printf("%c%c", a, b[1]);

               printf("%c%c", a, b[10]);

        }

        printf("%c%c", a, b[1]);

        printf("%c%c", a, b[5]);

        printf("\n");

}

 



개발환경:Visual Studio 2017


지적, 조언, 질문 환영입니다! 댓글 남겨주세요~


[참고] 명품 C언어 프로젝트 안기수 저

반응형