2022. 1. 27. 01:32ㆍC언어
물건을 구매하고 일정금액을 지불하면 거스름돈을 내어주는 프로그램이다.
# include <stdio.h>
#include <conio.h>
#define ENTER 13
int main(void)
{
int price, a, sum=0, g_price, gt_price, omanone, manone, cheonone, backone;
int key;
//price는 상품 가격, a는 상품 개수(같은 제품), 총 가격, 손님이 낸 가격, 거스름돈,/ 오만원,만원,천원,백원의 개수
while (1)
{
printf("상품 가격과 그 상품의 개수를 입력해주세요 : \n");
scanf("%d%d", &price,&a);
printf("종료하려면 enter 키를 줄러주시고 계속하시려면 tab키를 눌러주세요 \n");
sum += price * a;
key = _getch(); // 키보드 입력을 얻는다.
if (key == ENTER)
{ // 엔터 키를 눌렀으면
break; // 종료한다.
}
else
{
continue;
}
}
printf("손님이 낸 가격을 입력해주세요 : ");
scanf("%d", &g_price);
gt_price = g_price - sum;
omanone = gt_price / 50000;
manone = gt_price % 50000 / 10000;
cheonone = gt_price % 50000 % 10000 / 1000;
backone = gt_price % 50000 % 10000 % 1000 / 100;
printf("손님이 낸 가격 %d , 거스름돈 %d입니다.", g_price, gt_price);
printf("거스름돈 5만원권 %d장, 만원권 %d장, 천원권 %d장, 백원권 %d개입니다.", omanone, manone, cheonone, backone);
}
_getch()함수는 키보드로 입력한 키에 대응하여 정해진 int형 값으로 반환해주는 함수이다.
위에서는 ENTER를 13으로 정의해준 것이다.
계산기 프로그램이다.(한 번 연산하고 끝나지 않고 사용자가 원할 때까지 계속 사용가능하다.)
# include <stdio.h>
int main(void)
{
int a, b, c;
char opp;
printf("다음과 같이 입력해주세요(2 + 1을 입력하고 엔터키를 눌러주세요)\n");
scanf("%d %c %d", &a, &opp, &b);
switch (opp)
{
case '+':
printf("%d\n", a + b);
c = a + b;
break;
case '-':
printf("%d\n", a - b);
c = a - b;
break;
case '*':
printf("%d\n", a * b);
c = a * b;
break;
case '/':
printf("%d\n", a / b);
c = a / b;
break;
}
while (1)
{
printf("계속 이용하고 싶다면, 2+1과 같이 입력해주세요\n");
printf("%d", c);
scanf(" %c%d",&opp,&b);
//scanf 함수의 특성: 그 줄 전체를 인식해서 입력을 받는다. 따라서 printf의 값을 이용하려면 scanf에 띄어쓰기를 포함 시켜 줘야한다.
switch (opp)
{
case '+':
printf("%d\n", c + b);
c += b;
break;
case '-':
printf("%d\n", c - b);
c -= b;
break;
case '*':
printf("%d\n", c * b);
c *= b;
break;
case '/':
printf("%d\n", c / b);
c /= b;
break;
}
}
return 0;
}
한 번 계산하고 사용한 값을 다음 계산 때 사용하게끔 하려고 프로그램을 만들었고, 그 과정에서 scanf함수에 대해서 배웠다.
10자리 미만의 숫자를 입력하여 0에서 9까지의 숫자가 몇 개씩 입력되었는 지 확인하는 프로그램이다.
# include <stdio.h>
#include <ctype.h>
int main(void)
{
char str[11];
int i;
int count0 = 0, count1 = 0, count2 = 0, count3 = 0, count4 = 0, count5 = 0, count6 = 0, count7 = 0, count8 = 0, count9 = 0;
scanf("%s", str);
for (i = 0; i < strlen(str); i++)
{
switch (str[i])
{
case '0':
count0 += 1;
break;
case '1':
count1 += 1;
break;
case '2':
count2 += 1;
break;
case '3':
count3 += 1;
break;
case '4':
count4 += 1;
break;
case '5':
count5 += 1;
break;
case '6':
count6 += 1;
break;
case '7':
count7 += 1;
break;
case '8':
count8 += 1;
break;
case '9':
count9 += 1;
break;
}
}
printf("0은 %d, 1은 %d, 2는 %d, 3은 %d, 4는 %d, 5는 %d, 6은 %d, 7은 %d, 8은 %d, 9는 %d", count0, count1, count2, count3, count4, count5, count6, count7, count8, count9);
return 0;
}
진짜 노가다성.. 어찌보면 머리에서 나온 생각을 그대로 코드로 옮겨봤다.
막상 작성하고 나니 너무 초라해서 더 나은 것이있나 생각...해본 결과!
# include <stdio.h>
# include <ctype.h>
int count_char(char* s, int i);
int main(void)
{
char str[11];
printf("10자리 이하의 수를 입력해주세요\n");
gets_s(str, sizeof(str));
int i;
for (i = 0; i < 10; i++)
{
printf("%d : %d\n", i, count_char(str, i));
}
return 0;
}
int count_char(char* str, int i)
{
int j;
int count = 0;
for (j = 0; str[j] != '\0'; j++)
{
if (i + '0' == str[j])
{
count++;
}
}
return count;
}
위에 프로그램을 짤 때 막혔던 부분을 설명하고자 한다.
첫 번째는 이부분이다.
둘의 차이에서 보면 알 수있듯이 gets_s함수는 입력한 문장 끝에 '\0'을 붙인다. 그 이후에는 위처럼 쓰레기 값들이 있다.
두번째로는
i + '0' == str[j] 이다.
정수를 문자로 바꿔야하는 것이 난관이었다.
처음에는 (char)을 했는데 이거는 없는 것이라네요 ㅠ
그래서 문자 0 을 더해버렸다.
왜 더했는 데 문자로 변하냐 그것은 바로 아스키코드표를 보면서 이해해보면 됩니다.
'0' -> 48 // '1' ->49 // '2' -> 50 처럼 1씩 증가할 때마다 1씩 증가하기 때문이다.
이상입니다.
'C언어' 카테고리의 다른 글
c언어 - 테트리스 만들기 초기 설정,4 블럭 낙하 (0) | 2022.02.12 |
---|---|
c언어-테트리스만들기3, 테트리스 블럭만들기, 다차원배열 (0) | 2022.02.09 |
c언어 -테트리스 만들기2 위치 지정하기, 키보드로 움직이기 (0) | 2022.01.28 |
c언어 - 테트리스 만들기1 - gotoxy함수 (0) | 2022.01.27 |
c언어 공부 - 소수출력 프로그램, 대소문자 변환 프로그램 (0) | 2022.01.26 |