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

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

꾸준함. 2017. 8. 21. 12:00

[1번 문제]

/*

더 정교한 모양으로 디지털 숫자를 표현할 수 있도록 배열을 수정하라

*/

#include <stdio.h>

 

void number_check(int k, int i);

void digit_print(int dim[], int line);

 

int zero[20] = { 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1 };

int one[20] = { 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1 };

int two[20] = { 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1 };

int three[20] = { 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1 };

int four[20] = { 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1 };

int five[20] = { 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1 };

int six[20] = { 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1 };

int seven[20] = { 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1 };

int eight[20] = { 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1 };

int nine[20] = { 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1 };

 

int main(void)

{

        int num, line;

        printf("디지털 숫자 출력 프로그램\n");

        printf("1 이상의 정수만 입력합니다 \n\n");

        printf("\n정수 숫자입력 후 Enter> ");

        scanf("%d", &num);

        printf("\n\n");

        for (line = 0; line <= 4; line++)

        {

               number_check(num, line);

               printf("\n");

        }

        return 0;

}

 

void digit_print(int dim[], int line)

{

        int i;

        for (i = line * 4; i <= line * 4 + 3; i++)

        {

               if (dim[i] == 1)

                       printf("");

               else

                       printf("  ");

        }

        printf("    ");

}

 

void number_check(int k, int i)

{

        if (k >= 1)

        {

               number_check(k / 10, i);

               switch (k % 10)

               {

               case 0:

                       digit_print(zero, i);

                       break;

               case 1:

                       digit_print(one, i);

                       break;

               case 2:

                       digit_print(two, i);

                       break;

               case 3:

                       digit_print(three, i);

                       break;

               case 4:

                       digit_print(four, i);

                       break;

               case 5:

                       digit_print(five, i);

                       break;

               case 6:

                       digit_print(six, i);

                       break;

               case 7:

                       digit_print(seven, i);

                       break;

               case 8:

                       digit_print(eight, i);

                       break;

               case 9:

                       digit_print(nine, i);

                       break;

               }

        }

}



[2번 문제]

/*

소숫점을 포함하는 임의의 실수에 대해서도 디지털 숫자를 출력할 수 있도록 프로그램을 수정한다

*/

#include <stdio.h>

#include <Windows.h>

 

void number_check(int k, int i);

void digit_print(int dim[], int line);

 

int zero[20] = { 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1 };

int one[20] = { 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1 };

int two[20] = { 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1 };

int three[20] = { 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1 };

int four[20] = { 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1 };

int five[20] = { 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1 };

int six[20] = { 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1 };

int seven[20] = { 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1 };

int eight[20] = { 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1 };

int nine[20] = { 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1 };

int dot[20] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1 };

 

int main(void)

{

        int num, num2=0, line;

        printf("디지털 숫자 출력 프로그램\n");

        printf("\n실수의 자연수 부분 입력 후 Enter> ");

        scanf("%d", &num);

        printf("\n\n");

        printf("실수의 소숫점 부분 입력 후 Enter> (없다면 0 입력)");

        scanf("%d", &num2);

        system("cls");

        for (line = 0; line <= 4; line++)

        {

               number_check(num, line);

               if (num2 > 0)

               {

                       digit_print(dot, line);

                       number_check(num2, line);

               }

               printf("\n");

        }

        return 0;

}

 

void digit_print(int dim[], int line)

{

        int i;

        for (i = line * 4; i <= line * 4 + 3; i++)

        {

               if (dim[i] == 1)

                       printf("");

               else

                       printf("  ");

        }

        printf("    ");

}

 

void number_check(int k, int i)

{

        if (k >= 1)

        {

               number_check(k / 10, i);

               switch (k % 10)

               {

               case 0:

                       digit_print(zero, i);

                       break;

               case 1:

                       digit_print(one, i);

                       break;

               case 2:

                       digit_print(two, i);

                       break;

               case 3:

                       digit_print(three, i);

                       break;

               case 4:

                       digit_print(four, i);

                       break;

               case 5:

                       digit_print(five, i);

                       break;

               case 6:

                       digit_print(six, i);

                       break;

               case 7:

                       digit_print(seven, i);

                       break;

               case 8:

                       digit_print(eight, i);

                       break;

               case 9:

                       digit_print(nine, i);

                       break;

               }

        }

}


[3번 문제]

/*

예제 6.1.1은 행렬을 이용하여 디지털 숫자를 표현한 것입니다.

같은 방법을 이용하여 입력한 단어에 대해 확대 영문자를 출력하는 프로그램을 작성하시오

*/

#include <stdio.h>

#include <string.h>

 

void alphabet_check(char *alpha, int length, int line);

void digit_print(int dim[], int line);

 

int a[25] = { 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1 };

int b[25] = { 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1 };

int c[25] = { 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1 };

int d[25] = { 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0 };

int e[25] = { 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1 };

int f[25] = { 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0 };

int g[25] = { 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1 };

int h[25] = { 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1 };

int I[25] = { 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1 };

int j[25] = { 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1, 0, 0 };

int k[25] = { 1, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 1 };

int l[25] = { 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1 };

int m[25] = { 1, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1 };

int n[25] = { 1, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 0, 1, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 1 };

int o[25] = { 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0 };

int p[25] = { 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0 };

int q[25] = { 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 1, 0, 1, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1 };

int r[25] = { 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, 0, 1 };

int s[25] = { 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1 };

int t[25] = { 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0 };

int u[25] = { 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1 };

int v[25] = { 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 };

int w[25] = { 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0 };

int x[25] = { 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1 };

int y[25] = { 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1 };

int z[25] = { 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1 };

 

int main(void)

{

        char word[10];

        int length, line;

        printf("디지털 알파벳 출력 프로그램\n");

        printf("영단어만 입력합니다.\n\n");

        printf("\n영단어 입력 후 Enter>");

        scanf("%s", word);

        printf("\n\n");

        length = strlen(word);

        //printf("%d\n", length);

        for (line = 0; line <= 4; line++)

        {

               alphabet_check(word, length, line);

               printf("\n");

        }

        return 0;

}

 

void digit_print(int dim[], int line)

{

        int i;

        for (i = line * 5; i <= line * 5 + 4; i++)

        {

               if (dim[i] == 1)

                       printf("");

               else

                       printf("  ");

        }

        printf("    ");

}

 

void alphabet_check(char *alpha, int length, int line)

{

        int num = 0;

        for (int idx = 0; idx<length; idx++)

        {

               switch (alpha[num])

               {

               case 'a':

                       digit_print(a, line);

                       break;

               case 'b':

                       digit_print(b, line);

                       break;

               case 'c':

                       digit_print(c, line);

                       break;

               case 'd':

                       digit_print(d, line);

                       break;

               case 'e':

                       digit_print(e, line);

                       break;

               case 'f':

                       digit_print(f, line);

                       break;

               case 'g':

                       digit_print(g, line);

                       break;

               case 'h':

                       digit_print(h, line);

                       break;

               case 'i':

                       digit_print(I, line);

                       break;

               case 'j':

                       digit_print(j, line);

                       break;

               case 'k':

                       digit_print(k, line);

                       break;

               case 'l':

                       digit_print(l, line);

                       break;

               case 'm':

                       digit_print(m, line);

                       break;

               case 'n':

                       digit_print(n, line);

                       break;

               case 'o':

                       digit_print(o, line);

                       break;

               case 'p':

                       digit_print(p, line);

                       break;

               case 'q':

                       digit_print(q, line);

                       break;

               case 'r':

                       digit_print(r, line);

                       break;

               case 's':

                       digit_print(s, line);

                       break;

               case 't':

                       digit_print(t, line);

                       break;

               case 'u':

                       digit_print(u, line);

                       break;

               case 'v':

                       digit_print(v, line);

                       break;

               case 'w':

                       digit_print(w, line);

                       break;

               case 'x':

                       digit_print(x, line);

                       break;

               case 'y':

                       digit_print(y, line);

                       break;

               case 'z':

                       digit_print(z, line);

                       break;

               }

               num++;

        }

}

 


[4번 문제]

/*

예제 6.1.1을 이용하여 저학년용 사칙연산 학습프로그램을 작성하시오

*/

#include <stdio.h>

#include <Windows.h>

 

void number_check(int k, int i);

void digit_print1(int dim[], int line);

void digit_print2(int dim[], int line);

 

int zero[20] = { 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1 };

int one[20] = { 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1 };

int two[20] = { 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1 };

int three[20] = { 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1 };

int four[20] = { 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1 };

int five[20] = { 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1 };

int six[20] = { 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1 };

int seven[20] = { 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1 };

int eight[20] = { 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1 };

int nine[20] = { 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1 };

int plus[25] = { 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0 };

int minus[25] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };

int multiply[25] = { 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1 };

int divide[25] = { 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0 };

int equal[25] = { 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0 };

 

int main(void)

{

        int num1, num2, line;

        int sel;

        while (1)

        {

               system("cls");

               printf("사칙연산 프로그램\n\n");

               printf("다음 중 원하는 연산을 선택하세요: 1. 더하기 2. 빼기 3. 곱하기 4. 나누기 >");

               scanf("%d", &sel);

               printf("\n\n");

               system("cls");

               switch (sel)

               {

               case 1:

                       printf("더하기를 선택하셨습니다\n");

                       printf("첫 번째 숫자를 입력하세요 >");

                       scanf("%d", &num1);

                       printf("두 번째 숫자를 입력하세요 >");

                       scanf("%d", &num2);

                       Sleep(1000);

                       system("cls");

                       for (line = 0; line <= 4; line++)

                       {

                              number_check(num1, line);

                              digit_print2(plus, line);

                              number_check(num2, line);

                              digit_print2(equal, line);

                              number_check(num1 + num2, line);

                              printf("\n");

                       }

                       Sleep(1000);

                       break;

               case 2:

                       printf("빼기를 선택하셨습니다\n");

                       printf("첫 번째 숫자를 입력하세요 >");

                       scanf("%d", &num1);

                       printf("두 번째 숫자를 입력하세요 >");

                       scanf("%d", &num2);

                       Sleep(1000);

                       system("cls");

                       for (line = 0; line <= 4; line++)

                       {

                              number_check(num1, line);

                              digit_print2(minus, line);

                              number_check(num2, line);

                              digit_print2(equal, line);

                              number_check(num1 - num2, line);

                              printf("\n");

                       }

                       Sleep(1000);

                       break;

               case 3:

                       printf("곱하기를 선택하셨습니다\n");

                       printf("첫 번째 숫자를 입력하세요 >");

                       scanf("%d", &num1);

                       printf("두 번째 숫자를 입력하세요 >");

                       scanf("%d", &num2);

                       Sleep(1000);

                       system("cls");

                       for (line = 0; line <= 4; line++)

                       {

                              number_check(num1, line);

                              digit_print2(multiply, line);

                              number_check(num2, line);

                              digit_print2(equal, line);

                              number_check(num1 * num2, line);

                              printf("\n");

                       }

                       Sleep(1000);

                       break;

               case 4:

                       printf("나누기를 선택하셨습니다\n");

                       printf("첫 번째 숫자를 입력하세요 >");

                       scanf("%d", &num1);

                       printf("두 번째 숫자를 입력하세요 >");

                       scanf("%d", &num2);

                       Sleep(1000);

                       system("cls");

                       for (line = 0; line <= 4; line++)

                       {

                              number_check(num1, line);

                              digit_print2(divide, line);

                              number_check(num2, line);

                              digit_print2(equal, line);

                              number_check(num1 / num2, line);

                              printf("\n");

                       }

                       Sleep(1000);

                       break;

               default:

                       printf("잘못된 선택을 하셨습니다\n");

                       Sleep(1000);

               }

        }

        return 0;

}

 

void digit_print1(int dim[], int line)

{

        int i;

        for (i = line * 4; i <= line * 4 + 3; i++)

        {

               if (dim[i] == 1)

                       printf("");

               else

                       printf("  ");

        }

        printf("    ");

}

 

void digit_print2(int dim[], int line)

{

        int i;

        for (i = line * 5; i <= line * 5 + 4; i++)

        {

               if (dim[i] == 1)

                       printf("");

               else

                       printf("  ");

        }

        printf("    ");

}

 

 

void number_check(int k, int i)

{

        if (k >= 1)

        {

               number_check(k / 10, i);

               switch (k % 10)

               {

               case 0:

                       digit_print1(zero, i);

                       break;

               case 1:

                       digit_print1(one, i);

                       break;

               case 2:

                       digit_print1(two, i);

                       break;

               case 3:

                       digit_print1(three, i);

                       break;

               case 4:

                       digit_print1(four, i);

                       break;

               case 5:

                       digit_print1(five, i);

                       break;

               case 6:

                       digit_print1(six, i);

                       break;

               case 7:

                       digit_print1(seven, i);

                       break;

               case 8:

                       digit_print1(eight, i);

                       break;

               case 9:

                       digit_print1(nine, i);

                       break;

               }

        }

}



개발환경:Visual Studio 2017


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


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

반응형