25.06.18 개발일지 (C언어 간단한 프로그램 만들기)

2025. 11. 7. 09:36·6월 개발일지

 

25.06.18 개발일지

자료형 변환

큰 자료형을 작은 자료형으로 변환할 때는 형변환을 반드시 써줘야 한다.(명시적)

ex) char cNum = (char) iNum -> 이럴 경우 (char)를 반드시 써줘야 한다.

 

반대로 작은 자료형을 큰 자료형으로 변환할 때는 안 써줘도 된다.(묵시적)

 

char* p_chr = (char*) &iNum;

의 형태로 포인터 변수도 형변환이 가능하다.


실수형 상수 오차 줄이는 방법

1. 자료형 크기를 크게 하여 오차가 발생하는 부분을 뒤로 늦춘다.

2. 정수로 변환하여 계산한 후 다시 실수로 변환한다.

3. 오차를 제거해주는 좋은 라이브러리를 사용한다.


함수와 배열

메인 함수에 선언한 배열의 요소를 포인터를 사용하지 않고 함수에 바로 들고 올 수 있다.

 

메인에서 선언한 int iArr = {} 배열의 요소를 함수에서

%p -> iArr

%d -> *iArr

%p -> iArr + 0

%d -> *(iArr + 0)

%d -> iArr[0]

의 형태로 바로 불러올 수 있다.

#include <stdio.h>       

void func(char cArr[])  //void func(char *cArr)
{
    printf("%p %c\n", cArr, *cArr);                                                               
    printf("%p %p %p %p\n", cArr+0, cArr+1, cArr+2, cArr+3);
    printf("%c %c %c %c\n", *(cArr+0), *(cArr+1), *(cArr+2), *(cArr+3));
    printf("%c %c %c %c\n", cArr[0], cArr[1], cArr[2], cArr[3]);
}

void main ()
{
    char cArr[4] = {'A', 'B', 'C', 'D'};
    int num = 10;


    func( cArr );

    return 0;
}

//  메인에서 선언한 배열의 요소를 함수에서 바로 사용할 수 있다.
 

 

배열 함수 선언

void func(char cArr[])

void func(char *cArr) 둘 다 가능

배열 변수이름 : 주소값

-> *cArr 처럼 역참조 가능

 

포인터 주소값 사칙연산

printf("%p", arr)

printf("%p", arr+1)

printf("%p", arr+2)

-> 주소값에 사칙연산 가능하다.(주소값도 숫자이기 때문에 사칙연산 가능)


변수 구분

전역 변수 : 블록 외부에 선언(정적)

지역 변수 : 블록 내부에 선언(동적)

자동변수(auto) : 블록이 시작될 때 생성되고 블록이 끝날 때 소멸한다.

선언된 함수내에서만 사용 가능 -> 함수가 호출될 때 생성되고 반환될 때 소멸

정적변수(static) : 프로그램이 시작될 때 생성되고 프로그램이 끝날 때 소멸

한번 선언하면 모든곳에서 사용 가능

 

auto, static : 변수자료형 앞에 키워드 붙여 사용, 생략가능


간단한 프로그램 함수로 구현하기 18

 

로또 키오스크 만들기

방법은 개발자가 선택하세요.

입력받은 값은, 예외가 없도록 만들어 주세요.

#include <stdio.h>             // 로또
#include <time.h>
#include <stdlib.h>

#define RESETTEXT "\x1B[0m" // Set all colors back to normal.
#define FOREMAG "\x1B[35m"  // Magenta
#define FORERED "\x1B[31m"  // Red
 
#define DAY_OF_WEEK_SIZE 7
const static char *DAY_OF_WEEK[DAY_OF_WEEK_SIZE] = {
    "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"};

int lotto_logo()         // 로또 로고 함수
{
    time_t current;
    time(&current);
    struct tm *t = localtime(&current);
 
    printf("       💰 Lotto 6/45 💰");    // 발행일, 발행시간, 요일, 로또로고
    printf(FOREMAG);
    printf("\n");
    printf("발행일:");
    printf("%d", t->tm_year + 1900);
    printf("/");
    printf("%02d", t->tm_mon + 1);
    printf("/");
    printf("%02d", t->tm_mday);
    printf("(");
    printf("%s", DAY_OF_WEEK[t->tm_wday]);
    printf(") ");
    printf("%02d", t->tm_hour);
    printf(":");
    printf("%02d", t->tm_min);
    printf(":");
    printf("%02d", t->tm_sec);
    printf("\n");
    printf(RESETTEXT);

    return 0;
}

int lotto_auto(int qnt)           // 로또 자동 함수 
{
    lotto_logo();
    int flag[45],i,j;
    srand(time(NULL));
    for (j=0; j<qnt; j++){
        for (i=0; i<45; i++){
        flag[i]=0;
        }
        printf("|");
        for (int i = 0; i < 6;)
        {
            int r = rand() % 45 + 1;
            if (flag[r-1])
                continue;
            printf("%3d |", r);
            flag[r-1] = 1;
            i++;
        }
        printf("\n");
    }
    return 0;
}

int lotto_select(int select_qnt)        // 로또 수동 함수
{
    int a, b, c, d, e, f;
    for (int j=0; j<select_qnt; j++)
    {
        printf("Lotto 1번 수동 입력 >>");
        scanf("%d", &a);
        printf("Lotto 2번 수동 입력 >>");
        scanf("%d", &b);
        printf("Lotto 3번 수동 입력 >>");
        scanf("%d", &c);
        printf("Lotto 4번 수동 입력 >>");
        scanf("%d", &d);
        printf("Lotto 5번 수동 입력 >>");
        scanf("%d", &e);
        printf("Lotto 6번 수동 입력 >>");
        scanf("%d", &f);

        lotto_logo();
        printf("|%3d |%3d |%3d |%3d |%3d |%3d |\n", a, b, c, d, e, f);
    }
    
    return 0;
}

int main(void)
{
    int qnt, auto_select, select_qnt;

    printf("- - - - - - Lotto - - - - - -\n");
    printf("System: 몇 개를 구매하시겠어요?\n");   // 로또 개수 입력
    scanf("%d", &qnt);

    while (qnt > 5)
    {
        printf("System: (min)1 ~ (max)5개를 입력해주세요.\n");
        printf("System: 다시 입력해주세요.\n");
        printf("System: 몇 개를 구매하시겠어요?\n");
        scanf("%d", &qnt);
    }

    printf("System: 1.자동 2.반자동 3.수동\n");     // 자동 수동 선택
    scanf("%d", &auto_select);

    while (auto_select > 3)
    {
        printf("잘못 입력하셨습니다.\n");
        printf("1~3번을 선택해주세요.\n");
        printf("System: 1.자동 2.반자동 3.수동\n");
        scanf("%d", &auto_select); 
    }

    if (auto_select == 2)
    {
        printf("System: 수동으로 몇 개를 구매하시겠어요?\n");
        scanf("%d", &select_qnt);
    }

    if (auto_select == 1)          //자동 선택했을때
    {
        lotto_auto(qnt);
    }

    else if (auto_select == 2)          //반자동 선택했을때
    {   
        lotto_select(select_qnt);
        
        lotto_auto(qnt - select_qnt);
    }

    else          //수동 선택했을때
    {
        lotto_select(qnt);
    }

    return 0;
}
 

간단한 프로그램 함수로 구현하기 19

트리 만들기

#include <stdio.h>       // 트리 만들기
#include <stdlib.h>
#include <unistd.h>  //유닉스 전용

int tree_1()
{
    printf("      ☆\n");
    printf("      ■■\n");
    printf("    ■■■■■■\n");
    printf("  ■■■■■■■■■■\n");
    printf("■■■■■■■■■■■■■■\n");
    usleep(100000);    //밀리초 단위 100000 0.01초
    system("clear");

    return 0;
}

int tree_2()
{
    printf("      ★\n");
    printf("      ■■\n");
    printf("    ■■■■■■\n");
    printf("  ■■■■■■■■■■\n");
    printf("■■■■■■■■■■■■■■\n");
    usleep(100000);   //밀리초 단위 100000 0.01초
    system("clear");

    return 0;
}

int main(void)
{
    while(1)
    {
        tree_1();
    
        tree_2();
    }
    
    return 0;
}
 

 

 

간단한 프로그램 함수로 구현하기 20

풍차 돌리기

#include <stdio.h>       // 풍차 만들기
#include <stdlib.h>
#include <unistd.h>  //유닉스 전용

int windmill_1()
{
    int i, j, k, l, m;
    for (i=0; i<6; i++)
    {
        printf("                                       ");
        for (j=0; j<i+1; j++)
            printf("*  ");
        printf("\n");
    }
    
    for (i=0; i<7; i++)
    {
        for (j=0; j<6-i; j++)
            printf("   ");
        for (k=0; k<(i*2)+1; k++)
            printf("*  ");
        for (l=0; l<6-i; l++)
            printf("   ");
        for (m=0; m<7-i; m++)
            printf("*  ");
        printf("\n");
    }

    for (i=0; i<7; i++)
    {
        for (j=0; j<12-i; j++)
            printf("   ");
        for (k=0; k<i+1; k++)
            printf("*  ");
        for (l=0; l<i; l++)
            printf("   ");
        for (m=0; m<13-(2*i); m++)
            printf("*  ");
        printf("\n");
    }

    for (i=0; i<6; i++)
    {
        for (j=0; j<i+7; j++)
            printf("   ");
        for (k=0; k<6-i; k++)
            printf("*  ");
        printf("\n");
    }
    usleep(100000);    //밀리초 단위 100000 0.01초
    system("clear");

    return 0;
}

int windmill_2()
{
    int i, j, k, l, m, n;
    for (i=0; i<3; i++)
    {
        printf("\n");
    }
    
    for (i=0; i<10; i++)
    {
        for (n=0; n<3; n++)
            printf("   ");
        for (j=0; j<i; j++)
            printf("   ");
        for (k=0; k<10-i; k++)
            printf("*  ");
        for (l=0; l<9-i; l++)
            printf("   ");
        for (m=0; m<i+1; m++)
            printf("*  ");
        printf("\n");
    }
    for (i=0; i<10; i++)
    {
        for (n=0; n<3; n++)
            printf("   ");
        for (j=0; j<10-i; j++)
            printf("*  ");
        for (k=0; k<i; k++)
            printf("   ");
        for (l=0; l<i+1; l++)
            printf("*  ");
        for (m=0; m<9-i; m++)
            printf("   ");
        printf("\n");
    }
    usleep(100000);   //밀리초 단위 100000 0.01초
    system("clear");

    return 0;
}

int main(void)
{
    while(1)
    {
        windmill_1();
    
        windmill_2();
    }
    
    return 0;
}
 

 

 

'6월 개발일지' 카테고리의 다른 글

25.06.20 개발일지(다중포인터, 다차원배열,콘솔게임)  (0) 2025.11.07
25.06.19 개발일지(배열, 함수, 포인터 응용)  (0) 2025.11.07
25.06.17 개발일지(C언어 간단한 프로그램 만들기 2)  (0) 2025.11.07
25.06.16 개발일지(C언어 간단한 프로그램 만들기 1)  (0) 2025.11.06
25.06.15 개발일지(C언어 배열 과제)  (0) 2025.11.06
'6월 개발일지' 카테고리의 다른 글
  • 25.06.20 개발일지(다중포인터, 다차원배열,콘솔게임)
  • 25.06.19 개발일지(배열, 함수, 포인터 응용)
  • 25.06.17 개발일지(C언어 간단한 프로그램 만들기 2)
  • 25.06.16 개발일지(C언어 간단한 프로그램 만들기 1)
dldmstj4378
dldmstj4378
dldmstj4378 님의 블로그 입니다.
  • dldmstj4378
    dldmstj4378 님의 블로그
    dldmstj4378
  • 전체
    오늘
    어제
    • 분류 전체보기 (136)
      • 비전 검사 (0)
      • 11월 개발일지 (6)
      • 10월 개발일지 (15)
      • 9월 개발일지 (26)
      • 8월 개발일지 (20)
      • 7월 개발일지 (26)
      • 6월 개발일지 (27)
      • 5월 개발일지 (16)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
dldmstj4378
25.06.18 개발일지 (C언어 간단한 프로그램 만들기)
상단으로

티스토리툴바