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(¤t);
struct tm *t = localtime(¤t);
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 |