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

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

꾸준함. 2017. 8. 22. 15:11

[1번 문제]

/*

예제 6.1.2를 응용하여 화살표키로 사각형의 크기를 조절하는 프로그램을 작성하시오

*/

#include <stdio.h>

#include <stdlib.h>

#include <Windows.h>

#include <conio.h>

 

#define X_MAX 40

#define Y_MAX 20

 

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");

}

 

void move_arrow_key(char key, int *x1, int *y1, int x_b, int y_b)

{

        switch (key)

        {

        case 72:

               *y1 = *y1 - 1;

               if (*y1 < 1)

                       *y1 = 1;

               break;

        case 75:

               *x1 = *x1 - 1;

               if (*x1 < 1)

                       *x1 = 1;

               break;

        case 77:

               *x1 = *x1 + 1;

               if (*x1 > x_b)

                       *x1 = x_b;

               break;

        case 80:

               *y1 = *y1 + 1;

               if (*y1 > y_b)

                       *y1 = y_b;

               break;

        default:

               return;

        }

}

 

int main(void)

{

        char key;

        int x = 10, y = 10;

        printf("화살표키 ←, →로 직사각형의 가로 길이를 조절합니다\n");

        printf("화살표키 ↑, ↓로 직사각형의 세로 길이를 조절합니다\n");

        printf("준비가 되셨다면 키보드를 누르세요\n");

        getch();

        do

        {

               system("cls");

               draw_rectangle(x, y);

               key = getch();

               move_arrow_key(key, &x, &y, X_MAX, Y_MAX);

        } while (key != 27);

        return 0;

}


[2번 문제]

/*

예제 3.2.4와 예제 6.2.1를 이용하여 화면상의 문자위치를 슬라이드바로 제어하는 프로그램을 작성하시오

*/

#include <stdio.h>

#include <stdlib.h>

#include <conio.h>

#include <Windows.h>

 

void draw_horizontal_slide(int x, int y, int length, char *s);

void draw_vertical_slide(int x, int y, int length, char *s);

void draw_rectangle(int c, int r);

void draw_rectangle2(int c, int r, int y); //가로 슬라이드바를 위한 변형 사각형 함수

void move_arrow_key(char key, int *x1, int *y1, int x_b, int y_b);

void gotoxy(int x, int y);

 

int main(void)

{

        char *slide = "", key;

        int x = 1, y = 1;

        int h_slide_length, v_slide_length;

        printf("슬라이드바 표시\n\n");

        printf("수평 슬라이드바의 길이(최대 70)\n");

        printf("입력하고 Enter>");

        scanf("%d", &h_slide_length);

        printf("수직 슬라이드바의 길이(최대 19)\n");

        printf("입력하고 Enter>");

        scanf("%d", &v_slide_length);

        system("cls");

        do

        {

               system("cls");

               draw_vertical_slide(1, y, v_slide_length, slide);

               draw_horizontal_slide(x, v_slide_length + 3, h_slide_length, slide);

               gotoxy(x + 8, y+1);

               printf("A");

               key = getch();

               move_arrow_key(key, &x, &y, h_slide_length, v_slide_length);

        } while (key != 27);

        return 0;

}

 

void draw_horizontal_slide(int x, int y, int length, char *s)

{

        int real_length = length / 2;

        gotoxy(6, y);

        draw_rectangle2(real_length + 1, 1, y);

        gotoxy(x + 7, y + 1);

        printf("%s", s);

        gotoxy(real_length * 2 + 12, y - 1);

        printf("%2d", x);

}

 

void draw_vertical_slide(int x, int y, int length, char *s)

{

        gotoxy(x, 1);

        draw_rectangle(1, length);

        gotoxy(x + 2, y + 1);

        printf("%s", s);

        gotoxy(x + 2, length + 3);

        printf("%2d", y);

}

 

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");

}

 

void draw_rectangle2(int c, int r, int y)

{

        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");

        gotoxy(6, y + 1);

        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");

        }

        gotoxy(6, y + 2);

        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");

}

 

void move_arrow_key(char key, int *x1, int *y1, int x_b, int y_b)

{

        switch (key)

        {

        case 72:

               *y1 = *y1 - 1;

               if (*y1 < 1)

                       *y1 = 1;

               break;

        case 75:

               *x1 = *x1 - 1;

               if (*x1 < 1)

                       *x1 = 1;

               break;

        case 77:

               *x1 = *x1 + 1;

               if (*x1 > x_b)

                       *x1 = x_b;

               break;

        case 80:

               *y1 = *y1 + 1;

               if (*y1 > y_b)

                       *y1 = y_b;

               break;

        default:

               return;

        }

}

 

void gotoxy(int x, int y)

{

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

        SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), Pos);

}


[3번 문제]

/*

예제 6.1.2를 응용하여 화면에 좌표의 위치를 다음과 같은 십자형식으로 표시하는 프로그램을 작성한다

*/

#include <stdio.h>

#include <stdlib.h>

#include <conio.h>

#include <Windows.h>

 

void draw_horizontal_slide(int x, int y, int length, char *s);

void draw_vertical_slide(int x, int y, int length, char *s);

void draw_rectangle(int c, int r);

void draw_rectangle2(int c, int r, int y); //가로 슬라이드바를 위한 변형 사각형 함수

void draw_rectangle3(int c, int r); //슬라이드 바 안에 있는 사각형

void draw_line(int x, int y, int c, int r);

void move_arrow_key(char key, int *x1, int *y1, int x_b, int y_b);

void gotoxy(int x, int y);

 

int main(void)

{

        char *slide = "", key;

        int x = 1, y = 1;

        int h_slide_length, v_slide_length;

        printf("슬라이드바 표시\n\n");

        printf("수평 슬라이드바의 길이(최대 70)\n");

        printf("입력하고 Enter>");

        scanf("%d", &h_slide_length);

        printf("수직 슬라이드바의 길이(최대 19)\n");

        printf("입력하고 Enter>");

        scanf("%d", &v_slide_length);

        system("cls");

        do

        {

               system("cls");

               draw_vertical_slide(1, y, v_slide_length, slide);

               draw_horizontal_slide(x, v_slide_length + 3, h_slide_length, slide);

               gotoxy(8, 1);

               draw_rectangle3(h_slide_length/2 + 1, v_slide_length);

               draw_line(x, y, h_slide_length/2 +1, v_slide_length);

               key = getch();

               move_arrow_key(key, &x, &y, h_slide_length, v_slide_length);

        } while (key != 27);

        return 0;

}

 

void draw_horizontal_slide(int x, int y, int length, char *s)

{

        int real_length = length / 2;

        gotoxy(8, y);

        draw_rectangle2(real_length + 1, 1, y);

        gotoxy(x + 9, y + 1);

        printf("%s", s);

        gotoxy(real_length * 2 + 16, y + 2);

        printf("%2d", x);

}

 

void draw_vertical_slide(int x, int y, int length, char *s)

{

        gotoxy(x, 1);

        draw_rectangle(1, length);

        gotoxy(x + 2, y + 1);

        printf("%s", s);

        gotoxy(x + 2, length + 3);

        printf("%2d", y);

}

 

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");

}

 

void draw_rectangle2(int c, int r, int y)

{

        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");

        gotoxy(8, y + 1);

        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");

        }

        gotoxy(8, y + 2);

        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");

}

 

void draw_rectangle3(int c, int r)

{

        int i, j;

        int count = 2;

        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++)

        {

               gotoxy(8, count++);

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

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

                       printf("  ");

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

               printf("\n");

        }

        gotoxy(8, count);

        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");

}

 

void draw_line(int x, int y, int c, int r)

{

        int count1 = 0, count2 = 2;

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

        {

               gotoxy(10 + count1, y + 1);

               printf("");

               count1 += 2;

        }

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

        {

               gotoxy(x + 9, count2);

               printf("");

               count2++;

        }

        gotoxy(x + 9, y + 1);

        printf("");

        gotoxy(1, 20);

}

 

void move_arrow_key(char key, int *x1, int *y1, int x_b, int y_b)

{

        switch (key)

        {

        case 72:

               *y1 = *y1 - 1;

               if (*y1 < 1)

                       *y1 = 1;

               break;

        case 75:

               *x1 = *x1 - 1;

               if (*x1 < 1)

                       *x1 = 1;

               break;

        case 77:

               *x1 = *x1 + 1;

               if (*x1 > x_b)

                       *x1 = x_b;

               break;

        case 80:

               *y1 = *y1 + 1;

               if (*y1 > y_b)

                       *y1 = y_b;

               break;

        default:

               return;

        }

}

 

void gotoxy(int x, int y)

{

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

        SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), Pos);

}


[4번 문제]

/*

문제 2를 응용하여 현재의 좌표를 원점으로 했을 경우 3사분면에 기호 ○를 채워서 표시하는 프로그램을 작성하시오

*/

#include <stdio.h>

#include <stdlib.h>

#include <conio.h>

#include <Windows.h>

 

void draw_horizontal_slide(int x, int y, int length, char *s);

void draw_vertical_slide(int x, int y, int length, char *s);

void draw_rectangle(int c, int r);

void draw_rectangle2(int c, int r, int y); //가로 슬라이드바를 위한 변형 사각형 함수

void draw_rectangle3(int c, int r); //슬라이드 바 안에 있는 사각형

void draw_circle(int x, int y, int c, int r);

void move_arrow_key(char key, int *x1, int *y1, int x_b, int y_b);

void gotoxy(int x, int y);

 

int main(void)

{

        char *slide = "", key;

        int x = 1, y = 1;

        int h_slide_length, v_slide_length;

        printf("슬라이드바 표시\n\n");

        printf("수평 슬라이드바의 길이(최대 70)\n");

        printf("입력하고 Enter>");

        scanf("%d", &h_slide_length);

        printf("수직 슬라이드바의 길이(최대 19)\n");

        printf("입력하고 Enter>");

        scanf("%d", &v_slide_length);

        system("cls");

        do

        {

               system("cls");

               draw_vertical_slide(1, y, v_slide_length, slide);

               draw_horizontal_slide(x, v_slide_length + 3, h_slide_length, slide);

               gotoxy(8, 1);

               draw_rectangle3(h_slide_length / 2 + 1, v_slide_length);

               draw_circle(x, y, h_slide_length / 2 + 1, v_slide_length);

               key = getch();

               move_arrow_key(key, &x, &y, h_slide_length, v_slide_length);

        } while (key != 27);

        return 0;

}

 

void draw_horizontal_slide(int x, int y, int length, char *s)

{

        int real_length = length / 2;

        gotoxy(8, y);

        draw_rectangle2(real_length + 1, 1, y);

        gotoxy(x + 9, y + 1);

        printf("%s", s);

        gotoxy(real_length * 2 + 16, y + 2);

        printf("%2d", x);

}

 

void draw_vertical_slide(int x, int y, int length, char *s)

{

        gotoxy(x, 1);

        draw_rectangle(1, length);

        gotoxy(x + 2, y + 1);

        printf("%s", s);

        gotoxy(x + 2, length + 3);

        printf("%2d", y);

}

 

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");

}

 

void draw_rectangle2(int c, int r, int y)

{

        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");

        gotoxy(8, y + 1);

        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");

        }

        gotoxy(8, y + 2);

        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");

}

 

void draw_rectangle3(int c, int r)

{

        int i, j;

        int count = 2;

        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++)

        {

               gotoxy(8, count++);

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

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

                       printf("  ");

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

               printf("\n");

        }

        gotoxy(8, count);

        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");

}

 

void draw_circle(int x, int y, int c, int r)

{

        int a = 10;

        int b = 2;

        for (int i = a; i <= x + 9; i += 2)

        {

               for (int j = b; j <= y + 1; j += 1)

               {

                       gotoxy(i, j);

                       printf("");

               }

        }

        gotoxy(1, 20);

}

 

void move_arrow_key(char key, int *x1, int *y1, int x_b, int y_b)

{

        switch (key)

        {

        case 72:

               *y1 = *y1 - 1;

               if (*y1 < 1)

                       *y1 = 1;

               break;

        case 75:

               *x1 = *x1 - 2;

               if (*x1 < 1)

                       *x1 = 1;

               break;

        case 77:

               *x1 = *x1 + 2;

               if (*x1 > x_b)

                       *x1 = x_b;

               break;

        case 80:

               *y1 = *y1 + 1;

               if (*y1 > y_b)

                       *y1 = y_b;

               break;

        default:

               return;

        }

}

 

void gotoxy(int x, int y)

{

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

        SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), Pos);

}


개발환경:Visual Studio 2017


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


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

반응형