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

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

꾸준함. 2017. 6. 7. 00:21

[1번 문제]

/*

커서 제어 함수인 gotoxy 이용하여 화면의 중앙부분에 다음 그림과 같은 모양으로 출력하는 프로그램을 작성하시오

*/

#include <stdio.h>

#include <stdlib.h>

#include <conio.h>

#include <Windows.h>

 

void gotoxy(int x, int y);

 

int main(void)

{

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

        {

               gotoxy(40 - 2 * i, 2 + 2 * i);

               for (int j = 0; j < 2 * (i + 1) - 1; j++)

               {

                       printf("* ");

               }

        }

        printf("\n");

        printf("다음 화면으로 넘기려면 아무키나 누르시오\n");

        getch();

        system("cls");

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

        {

               gotoxy(20, (2 * i) + 1);

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

               {

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

                       {

                              printf("* ");

                       }

               }

               else

               {

                       printf("* ");

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

                       {

                              printf(" ");

                       }

                       printf("*");

               }

        }

        printf("\n");

        printf("다음 화면으로 넘기려면 아무키나 누르시오\n");

        getch();

        system("cls");

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

        {

               if (i < 3)

               {

                       gotoxy(20 - (4 * i), 2 + (2 * i));

                       printf("*");

               }

               if (i != 0 && i < 3)

               {

                       gotoxy(20 + (4 * i), 2 + (2 * i));

                       printf("*");

               }

               if (i >= 3)

               {

                       gotoxy(20 - (4 * (4 - i)), 2 + (2 * i));

                       printf("*");

               }

               if (i == 3)

               {

                       gotoxy(20 + (4 * (4 - i)), 2 + (2 * i));

                       printf("*");

               }

        }

        printf("\n");

        return 0;

}

 

void gotoxy(int x, int y)

{

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

        SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), Pos);

}

 


[2번 문제]

/*

1.2.3절의 특수기호 코드와 함수 gotoxy 이용하여 다음 그림과 같은 모양으로 출력하는 함수를 각각 작성하시오

*/

#include <stdio.h>

#include <stdlib.h>

#include <Windows.h>

#include <conio.h>

 

void gotoxy(int x, int y);

 

int main(void)

{

        unsigned char a1 = 0xa1;

        unsigned char a2 = 0xe1; //검은 사각형

        unsigned char a3 = 0xe0; // 사각형

 

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

        {

               gotoxy(2, 2 + (2 * i));

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

               {

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

                       {

                              printf("%c%c ", a1, a2);

                       }

               }

               if (i == 1)

               {

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

                              printf("   ");

                       printf("%c%c", a1, a2);

               }

               if (i == 3)

                       printf("%c%c", a1, a2);

        }

        printf("\n");

        printf("아무키나 누르시면 다음 화면으로 넘어갑니다\n");

        getch();

        system("cls");

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

        {

               gotoxy(2, 2 + (2 * i));

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

               {

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

                       {

                              printf("%c%c ", a1, a2);

                       }

               }

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

               {

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

                              printf("   ");

                       printf("%c%c", a1, a2);

               }

        }

        printf("\n");

        printf("아무키나 누르시면 다음 화면으로 넘어갑니다\n");

        getch();

        system("cls");

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

        {

               gotoxy(2, 2 + (2 * i));

               if (i == 2)

               {

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

                       {

                              printf("%c%c ", a1, a2);

                       }

               }

               if (i != 2)

               {

                       gotoxy(2, 2 + (2 * i));

                       if (i == 0 || i == 1)

                       {

                              printf("%c%c ", a1, a2);

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

                                      printf("   ");

                              printf("%c%c", a1, a2);

                       }

                       else

                       {

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

                              {

                                      printf("   ");

                              }

                              printf("%c%c", a1, a2);

                       }

               }

        }

        printf("\n");

        printf("아무키나 누르시면 다음 화면으로 넘어갑니다\n");

        getch();

        system("cls");

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

        {

               gotoxy(2, 2 + (2 * i));

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

               {

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

                       {

                              printf("%c%c ", a1, a2);

                       }

               }

               if (i == 1)

               {

                       printf("%c%c", a1, a2);

               }

               if (i == 3)

               {

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

                              printf("   ");

                       printf("%c%c", a1, a2);

               }

        }

        printf("\n");

        printf("아무키나 누르시면 다음 화면으로 넘어갑니다\n");

        getch();

        system("cls");

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

        {

               gotoxy(2, 2 + (2 * i));

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

               {

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

                       {

                              printf("%c%c ", a1, a2);

                       }

               }

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

               {

                       printf("%c%c  ", a1, a2);

               }

               if (i == 3)

               {

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

                              printf("  ");

                       printf("%c%c", a1, a2);

               }

        }

        printf("\n");

        printf("아무키나 누르시면 다음 화면으로 넘어갑니다\n");

        getch();

        system("cls");

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

        {

               gotoxy(2, 2 + (2 * i));

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

               {

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

                       {

                              printf("%c%c ", a1, a2);

                       }

                       printf("   ");

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

                       {

                              printf("%c%c ", a1, a2);

                       }

               }

               else

               {

                       gotoxy(5, 2 + (2 * i));

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

                       {

                              printf("%c%c    ", a1, a2);

                       }

               }

        }

        printf("\n");

        printf("아무키나 누르시면 다음 화면으로 넘어갑니다\n");

        getch();

        system("cls");

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

        {

               gotoxy(2, 2 + (2 * i));

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

               {

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

                       {

                              printf("%c%c ", a1, a2);

                       }

               }

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

               {

                       gotoxy(5, 2 + (2 * i));

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

                       {

                              printf("%c%c ", a1, a2);

                       }

               }

               else

               {

                       gotoxy(5, 2 + (2 * i));

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

                       {

                              printf("%c%c    ", a1, a2);

                       }

               }

        }

        printf("\n");

        printf("아무키나 누르시면 다음 화면으로 넘어갑니다\n");

        getch();

        system("cls");

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

        {

               gotoxy(5, 2 + (2 * i));

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

               {

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

                       {

                              printf("%c%c ", a1, a2);

                       }

               }

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

               {

                       gotoxy(5, 2 + (2 * i));

                       printf("%c%c ", a1, a2);

                       printf("%c%c ", a1, a3);

                       printf("%c%c ", a1, a3);

                       printf("%c%c", a1, a2);

               }

               else

               {

                       gotoxy(8, 2 + (2 * i));

                       printf("%c%c ", a1, a3);

                       printf("%c%c", a1, a3);

               }

        }

        printf("\n");

        printf("아무키나 누르시면 다음 화면으로 넘어갑니다\n");

        getch();

        system("cls");

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

        {

               gotoxy(2, 2 + (2 * i));

               if (i == 0)

               {

                       gotoxy(5, 2 + (2 * i));

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

                       {

                              printf("%c%c ", a1, a2);

                       }

               }

               else if (i != 3)

               {

                       printf("%c%c", a1, a2);

                       gotoxy(14, 2 + (2 * i));

                       printf("%c%c", a1, a2);

               }

               else

               {

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

                       {

                              printf("%c%c ", a1, a2);

                       }

               }

        }

        printf("\n");

        printf("아무키나 누르시면 다음 화면으로 넘어갑니다\n");

        getch();

        system("cls");

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

        {

               gotoxy(2, 2 + (2 * i));

               if (i == 0)

               {

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

                       {

                              printf("%c%c ", a1, a2);

                       }

               }

               else

               {

                       gotoxy(8, 2 + (2 * i));

                       printf("%c%c", a1, a2);

               }

        }

        printf("\n");

        return 0;

}

 

void gotoxy(int x, int y)

{

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

        SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), Pos);

}

 


[3번 문제]

/*

문자열에 대한 출력위치를 제어하는 함수 gotoxy_str 작성하시오.

예를 들어 gotoxy_str("time", 10, 10) 결과는 gotoxy(10, 10) 위치에 문자열 "time" 출력합니다

*/

#include <stdio.h>

#include <stdlib.h>

#include <Windows.h>

 

void gotoxy(int x, int y);

void gotoxy_str(char *str, int x, int y);

 

int main(void)

{

        char str[50];

        printf("문자열 입력: ");

        scanf("%s", str);

        system("cls");

        gotoxy_str(str, 10, 10);

        printf("\n");

        return 0;

}

 

void gotoxy(int x, int y)

{

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

        SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), Pos);

}

 

void gotoxy_str(char *str, int x, int y)

{

        gotoxy(x, y);

        printf("%s", str);

}


[4번 문제]

/*

함수 gotoxy 원점은 [그림 3-1] 같이 화면 좌측의 상단 모서리 부분입니다.

화면 좌측 하단 모서리를 원점으로 하여 커서의 위치를 제어하는 함수 my_gotoxy 작성하시오.

함수 my_gotoxy 원점은 gotoxy(1, 23) 해당한다고 가정합니다

*/

#include <stdio.h>

#include <stdlib.h>

#include <Windows.h>

 

void my_gotoxy(int x, int y);

 

int main(void)

{

        my_gotoxy(1, 1); //원래 gotoxy 원점

        printf("A");

        printf("\n");

        return 0;

}

void my_gotoxy(int x, int y)

{

        COORD Pos = { x - 1, (y - 1) + 23 };

        SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), Pos);

}


[5번 문제]

/*

현재 시간(예로 8 24) 대한 출력 위치를 제어하는 함수 gotoxy_time 작성하시오.

예를 들어 gotoxy_time(10, 10) 결과, gotoxy(10, 10) 위치에 현재 시간을 출력합니다

*/

#include <stdio.h>

#include <Windows.h>

#include <time.h>

#include <stdlib.h>

 

void gotoxy(int x, int y);

void gotoxy_time(int x, int y);

 

int main(void)

{

        gotoxy_time(10, 10);

        return 0;

}

 

void gotoxy(int x, int y)

{

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

        SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), Pos);

}

 

void gotoxy_time(int x, int y)

{

        time_t curr;

        struct tm *d;

        curr = time(NULL);

        d = localtime(&curr);

        gotoxy(x, y);

        printf("%d %d %d\n", d->tm_hour, d->tm_min, d->tm_sec);

}


[6번 문제]

/*

[예제 3.1.4] 이용하여 다음과 같이 가로방향의 구구단을 출력하되 아무키나 누르면 화면을 지우고

다음 단을 출력하는 프로그램을 작성하시오

*/

#include <stdio.h>

#include <stdlib.h>

#include <conio.h>

 

int main(void)

{

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

        {

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

               {

                       printf("%d*%d=%d\t", i + 1, j + 1, (i + 1)*(j + 1));

               }

               printf("\n");

               printf("아무키나 누르시오");

               getch();

               system("cls");

        }

        return 0;

}


개발환경:Visual Studio 2017


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


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


*곰캠 무료버전이라 저렇게 로고가 뜨네요... 죄송합니다

반응형