c언어 공부 - 거스름돈 프로그램, 계산기 프로그램, 숫자 확인 프로그램

2022. 1. 27. 01:32C언어

728x90

 

물건을 구매하고 일정금액을 지불하면 거스름돈을 내어주는 프로그램이다.

# 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씩 증가하기 때문이다.

 

이상입니다. 

 

728x90