[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언어 프로젝트 안기수 저
*곰캠 무료버전이라 저렇게 로고가 뜨네요... 죄송합니다
'C > 명품 C언어 프로젝트(안기수 저)' 카테고리의 다른 글
명품 C언어 프로젝트 3.3장 연습문제 (0) | 2017.06.16 |
---|---|
명품 C언어 프로젝트 3.2장 연습문제 (0) | 2017.06.09 |
명품 C언어 프로젝트 2.3장 연습문제 (0) | 2017.06.02 |
[C언어] 시간과 날짜와 관련된 함수들 (4) | 2017.06.02 |
명품 C언어 프로젝트 2.2장 연습문제 (0) | 2017.05.31 |