# 문자를 만날 때까지 입력을 읽고, 읽은 스페이스의 수, 읽은 개행문자의수, 읽은 기타 모든 문자들의 수를 출력하는 프로그램을 작성하라.
#include <stdio.h>
int main(void)
{
char ch;
int space = 0;
int newLine = 0;
long o_ch = 0;
while ((ch = getchar()) != '#')
{
switch(ch)
{
case ' ':
space++;
break;
case '\n':
newLine++;
break;
default:
o_ch++;
break;
}
}
printf("공백문자 %d개, 개행문자 %d개, 그 외 문자 %ld개\n",
space, newLine, o_ch);
return 0;
}
# 문자를 만날 때까지 입력을 읽는 프로그램을 작성하라. 각각의 입력 문자와 그 문자에 해당하는 ASCII 코드값을 10진수로 출력하라. 이 문자-코드쌍을 한 라인당 8개 출력하라. (힌트 : 문자 카운트와 모듈로 연산자(%)를 사용하여 루프의 매 8사이클마다 한 번 개행 문자를 출력하라.)
#include <stdio.h>
int main(void)
{
char ch;
for(int i = 1; (ch = getchar()) != '#'; i++)
{
if(ch == '\n') continue;
printf("%c-%d ", ch,ch);
if(i % 8 == 0)
putchar('\n');
}
return 0;
}
0을 입력할 때까지 정수들을 읽는 프로그램을 작성하라. 입력이 종료된 후, 프로그램은 입력된 정수 중에서 짝수(0은 제외)의 개수와 평균, 홀수의 개수와 평균은 보고해야 한다.
#include <stdio.h>
int main(void)
{
int num;
int odd = 0, even = 0;
int oddTotal = 0, evenTotal = 0;
while (scanf("%d", &num) && num != 0)
{
if(num%2)
odd++, oddTotal += num;
else
even++, evenTotal += num;
}
printf("홀수의 개수 : %d, 평균 : %.2f\n",
odd, (float)oddTotal / odd);
printf("짝수의 개수 : %d, 평균 : %.2f\n",
even, (float)evenTotal / even);
return 0;
}
# 문자를 만날 때까지 입력을 읽고, if else문을 사용하여 마침표는 느낌표로, 느낌표는 두 개로 대체하고, 대체한 횟수를 끝에 출력하는 프로그램을 작성하라.
#include <stdio.h>
int main(void)
{
char ch;
int stopConvert = 0;
int exclamConvert = 0;
while ((ch = getchar()) != '#')
{
if(ch == '.')
{
putchar('!');
stopConvert++;
}
else if(ch == '!')
{
printf("!!");
exclamConvert++;
}
else putchar(ch);
}
printf(". -> ! 횟수 : %d\n", stopConvert);
printf("! -> !! 횟수 : %d\n", exclamConvert);
return 0;
}
switch를 사용하여 연습04를 다시 작성하라.\
#include <stdio.h>
int main(void)
{
char ch;
int stopConvert = 0;
int exclamConvert = 0;
while ((ch = getchar()) != '#')
{
switch(ch)
{
case '.':
putchar('!');
stopConvert++;
break;
case '!':
printf("!!");
exclamConvert++;
break;
default:
putchar(ch);
break;
}
}
printf(". -> ! 횟수 : %d\n", stopConvert);
printf("! -> !! 횟수 : %d\n", exclamConvert);
return 0;
}
# 문자를 만날 때까지 입력을 읽고, 문자 시퀸스 ei가 나타난 횟수를 출력하는 프로그램을 작성하라.
#include <stdio.h>
int main(void)
{
char ch;
char p_ch = '\n';
int eiCount = 0;
while ((ch = getchar()) != '#')
{
if(p_ch == 'e' && ch == 'i')
eiCount++;
p_ch = ch;
}
printf("문자 시퀸스 ei가 나타난 횟수 : %d\n", eiCount);
return 0;
}
사용자에게 일주일 동안 노동한 시간을 입력할 것을 요구하고, 총소득(gross pay), 세금(taxes), 순소득(net pay)을 출력하는 프로그램을 작성하라. 임금 체계는 다음과 같이 계산한다고 가정한다.
예시
a. 기본급 = 시간당 $10.00
b. 초과근무수당(40시간을 초과한 노동) = 노동 시간 X 기본급의 1.5배
c. 소득세율 = 처음 $300까지 15%
다음 $150까지 20%
나머지는 25%
답안
#include <stdio.h>
#define HOURLYWAGE 10.0
#define OVERTIMEPAY (HOURLYWAGE * 1.5)
#define INCOME1 300
#define TAXES1 0.15
#define INCOME2 150
#define TAXES2 0.20
#define TAXES3 0.25
int main(void)
{
int playTime;
float grossPay = 0, taxes = 0, netPay = 0;
printf("일주일 동안 노동한 시간을 입력해주세요 : \n");
scanf("%d", &playTime);
grossPay = (playTime > 40 ?
(playTime - 40) * OVERTIMEPAY
: playTime * HOURLYWAGE);
if(grossPay > INCOME1)
taxes += INCOME1 * TAXES1;
else
taxes += grossPay * TAXES1;
if(grossPay > INCOME1 + INCOME2)
taxes += (INCOME1 + INCOME2) * TAXES2;
else
taxes += (grossPay - INCOME1) * TAXES2;
if(grossPay > INCOME1 + INCOME2)
taxes += (grossPay - INCOME1 - INCOME2) * TAXES3;
netPay = grossPay - taxes;
printf("총소득 : $%.2f\n", grossPay);
printf("세금 : $%.2f\n", taxes);
printf("순이익 : $%.2f\n", netPay);
return 0;
}
연습 07에서, 가정 a.를 수정하여 기본급을 선택할 수 있는 메뉴를 사용자에게 제공하라. 기본급 선택에는 switch문을 사용하라. 프로그램의 실행은 다음과 같은 모습으로 시작되어야 한다.
예시
************************************************************
자신의 기본급에 해당하는 번호를 선택하시오(끝내려면 5번을 선택하시오):
1) 시간당 $8.75 2) 시간당 $9.33
2) 시간당 $10.00 4) 시간당 $11.20
5) 종료
************************************************************
사용자가 1, 2, 3, 4 중 하나를 산택하면, 노동한 시간을 다시 요청해야 한다. 이러한 과정은 사용자가 5를 산택할 때까지 계속된다. 1, 2, 3, 4, 5 이외의 것이 입력되면, 바르게 선택하도록, 사용자를 안내하는 메시지를 출력하고, 과정을 다시 반복한다. #define 기호 상수를 사용하여 여러가지 기본소득과 소득세율을 나타내라.
#include <stdio.h>
#define OVERTIMEPAY 1.5
#define INCOME1 300
#define TAXES1 0.15
#define INCOME2 150
#define TAXES2 0.20
#define TAXES3 0.25
int main(void)
{
float hourlyWage;
int playTime;
float grossPay = 0, taxes = 0, netPay = 0;
while(1)
{
printf("************************************************************\n");
printf("자신의 기본급에 해당하는 번호를 선택하시오(끝내려면 5번을 선택하시오):\n");
printf("1) 시간당 $8.75 2) 시간당 $9.33\n");
printf("3) 시간당 $10.00 4) 시간당 $11.20\n");
printf("5) 종료\n");
printf("************************************************************\n");
int n;
scanf("%d", &n);
switch(n)
{
case 1:
hourlyWage = 8.75;
break;
case 2:
hourlyWage = 9.33;
break;
case 3:
hourlyWage = 10.00;
break;
case 4:
hourlyWage = 11.20;
case 5: break;
default:
printf("잘못 입력했습니다.\n");
continue;
}
if(n == 5) break;
printf("일주일 동안 노동한 시간을 입력해주세요 : \n");
scanf("%d", &playTime);
grossPay = (playTime > 40 ?
(playTime - 40) * OVERTIMEPAY
: playTime) * hourlyWage;
if(grossPay > INCOME1)
taxes += INCOME1 * TAXES1;
else
taxes += grossPay * TAXES1;
if(grossPay > INCOME1 + INCOME2)
taxes += (INCOME1 + INCOME2) * TAXES2;
else
taxes += (grossPay - INCOME1) * TAXES2;
if(grossPay > INCOME1 + INCOME2)
taxes += (grossPay - INCOME1 - INCOME2) * TAXES3;
netPay = grossPay - taxes;
printf("총소득 : $%.2f\n", grossPay);
printf("세금 : $%.2f\n", taxes);
printf("순이익 : $%.2f\n", netPay);
}
printf("종료!\n");
return 0;
}
하나의 정수를 입력으로 받아들여, 그 정수보다 작거나 같은 모든 소수(prime number)들을 출력하는 프로그램을 작성하라.
#include <stdio.h>
#include <stdbool.h>
int main(void)
{
int num;
_Bool flag;
printf("정수를 입력하세요 : ");
scanf("%d", &num);
for(int i = 1; i <= num; i++)
{
flag = false;
for(int j = 2; (j * j) <= i; j++)
if(i % j == 0)
flag = true;
if(flag == false)
printf("%d ", i);
}
printf("\n");
return 0;
}
1988년의 미연방 소득 과세표는 아주 단순했다. 이 과세표에는 4가지 과세구분이 있고, 각각의 과세 구분은 두 가지 세율이 지정되어 있다. 다음은 이를 요약한 것이다. (달러 수치는 과세 대상 소득이다.)
예시
----------------------------------------------------
과세 구분 세율
----------------------------------------------------
독신 $17,850까지 15%, 초과분은 28%
가장 $23,900까지 15%, 초과분은 28%
맞벌이, 합산 $29,750까지 15%, 초과분은 28%
맞벌이, 벌산 $14,875까지 15%, 초과분은 28%
----------------------------------------------------
예를 들면, 연간 $20,000의 과세 대상 소득이 있는 독신 임금 노동자의 소득세는 0.15 X $17,850 + 0.28 X ($20,000 - $17,850)이다. 사용자에게 과세 구분과 과세 대상 소득을 입력하도록 요청하여, 소득세를 계산하는 프로그램을 작성하라. 여러 가지 세금 상황을 계산할 수 있도록 루프를 사용하라.
#include <stdio.h>
#define SINGLE 17850L
#define SINGLETAXES 0.15f
#define SINGLEOVERTAXES 0.28f
#define HOUSEHOLD 23900L
#define HOUSEHOLDTAXES 0.15f
#define HOUSEHOLDOVERTAXES 0.28f
#define DUALSUM 29750L
#define DUALSUMTAXES 0.15f
#define DUALSUMOVERTAXES 0.28f
#define DUALSEPARATE 14875L
#define DUALSEPARATETAXES 0.15f
#define DUALSEPARATEOVERTAXES 0.28f
int main(void)
{
int num;
long money;
long income;
float taxes, overTaxes;
long totalTaxes;
while(1)
{
printf("-------------------------------------------------------------\n");
printf("과세 구분 세율\n");
printf("-------------------------------------------------------------\n");
printf("1) 독신 $%ld까지 %2.0f%%, 초과분은 %2.0f%%\n",
SINGLE, (SINGLETAXES * 100), (SINGLEOVERTAXES * 100));
printf("2) 가장 $%ld까지 %2.0f%%, 초과분은 %2.0f%%\n",
HOUSEHOLD, (HOUSEHOLDTAXES * 100), (HOUSEHOLDOVERTAXES * 100));
printf("3) 맞벌이, 합산 $%ld까지 %2.0f%%, 초과분은 %2.0f%%\n",
DUALSUM, (DUALSUMTAXES * 100), (DUALSUMOVERTAXES * 100));
printf("4) 맞벌이, 벌산 $%ld까지 %2.0f%%, 초과분은 %2.0f%%\n",
DUALSEPARATE, (DUALSEPARATETAXES * 100), (DUALSEPARATEOVERTAXES * 100));
printf("5) 종료\n");
printf("-------------------------------------------------------------\n");
printf("과세 구분을 입력해주세요 : ");
scanf("%d", &num);
switch(num)
{
case 1:
income = SINGLE;
taxes = SINGLETAXES;
overTaxes = SINGLEOVERTAXES;
break;
case 2:
income = HOUSEHOLD;
taxes = HOUSEHOLDTAXES;
overTaxes = HOUSEHOLDOVERTAXES;
break;
case 3:
income = DUALSUM;
taxes = DUALSUMTAXES;
overTaxes = DUALSUMOVERTAXES;
break;
case 4:
income = DUALSEPARATE;
taxes = DUALSEPARATETAXES;
overTaxes = DUALSEPARATEOVERTAXES;
case 5:
break;
default:
printf("잘못 입력했습니다.\n");
continue;
}
if(num == 5) break;
printf("소득을 입력해주세요 : ");
scanf("%ld", &money);
totalTaxes = (money > income ? (income * taxes) +
((money - income) * overTaxes)
: (money * taxes));
printf("총 소득세 : $%ld\n\n", totalTaxes);
}
printf("종료!\n");
return 0;
}
인터넷 야채 쇼핑몰 총각네 야채가게는 아티초크(artichokes)를 파운드당 $2.05에, 비트(beets)를 파운드당 $1.5에, 당근(carrots)을 $1.09에 판매한다. 배송비를 제외하고 $100 또는 그 이상을 주문하면 5% 할인된다. 5파운드 미만의 주문은 배송비가 $6.50이다. 5파운드 이상 20파운드 미만의 주문은 배송비가 $14.00이다. 20파운드 이상의 주문은 기본 배송비 $14.00에 파운드당 $0.50씩 추가 배송비가 부과된다. 루프에서 사용자가 a를 입력하여 아티초크를, b를 입력하여 비트를, c를 입력하여 당근을 파운드 단위로 주문할 수 있게 하고, 마지막으로 q를 입력하여 주문을 끝낼 수 있는 프로그램을 switch문을 사용하여 작성하라. 즉, 비트 4파운드를 입력하고 나서 비트 5파운드를 입력하면 프로그램은 비트 9파은드를 보고해야 한다. 그러고 나서 프로그램은 총 구매 합산 비용, 할인 가격이 있다면 배송비를 포함한 총 청구 금액을 계산하여야 한다. 그러고 나서 프로그램은 총 구매 정보를 나타내야 한다. : 각 야채별 파은드당 가격, 주문 양, 각 야채당 주문 비용, 총 구매 합산, 할인가격(있을경우), 배송비, 총 청구 금액을 출력해야 한다.
#include <stdio.h>
#define ARTICHOKES 2.05f
#define BEETS 1.15f
#define CARROTS 1.09f
#define DISCOUNTMONEY 100.0f
#define DISCOUNTPER 0.05f
#define DELIVERYPOUND1 5
#define DELIVERYMONEY1 6.50f
#define DELIVERYPOUND2 20
#define DELIVERYMONEY2 14.00f
#define DELIVERYMONEY3 0.50f
int main(void)
{
int artichokes = 0;
int beets = 0;
int carrots = 0;
int sumpound = 0;
float delivery;
float totalsum;
float discount;
float totalclaim;
int pound;
char ch;
while (1)
{
printf("=================================\n");
printf("a) 아티초크(artichokes)\n");
printf("b) 비트(beets)\n");
printf("c) 당근(carrots)\n");
printf("q) 주문 종료\n");
printf("구매할 야채를 입력해주세요 : ");
ch = getchar();
switch(ch)
{
case 'a':
case 'b':
case 'c':
printf("구매할 양을 파운드 단위로 입력 : ");
scanf("%d", £);
while(getchar() != '\n');
break;
case 'q':
break;
default:
printf("잘못된 입력입니다.\n");
continue;
}
if(ch == 'q') break;
switch(ch)
{
case 'a':
artichokes += pound;
break;
case 'b':
beets += pound;
break;
case 'c':
carrots += pound;
break;
}
sumpound += pound;
switch(sumpound)
{
case DELIVERYPOUND1:
delivery = DELIVERYMONEY1;
break;
case DELIVERYPOUND2:
delivery = DELIVERYMONEY2;
default:
delivery = DELIVERYMONEY2;
delivery +=
(sumpound - DELIVERYPOUND2) * DELIVERYMONEY3;
break;
}
}
printf("주문 결과\n");
printf("아티초크 : %d파운드($%.2f) $%.2f\n",
artichokes, ARTICHOKES, artichokes * ARTICHOKES);
printf("비트 : %d파운드($%.2f) $%.2f\n", beets, BEETS,
beets * BEETS);
printf("당근 : %d파운드($%.2f) $%.2f\n", carrots, CARROTS,
carrots * CARROTS);
printf("총 구매 파운드 : %d\n", sumpound);
totalsum = 0.0f;
totalsum += artichokes * ARTICHOKES;
totalsum += beets * BEETS;
totalsum += carrots * CARROTS;
printf("총 구매 합산 $%.2f\n", totalsum);
totalclaim = totalsum;
if(totalsum > DISCOUNTMONEY)
{
discount = totalsum * DISCOUNTPER;
totalclaim -= discount;
printf("할인 가격 : %.2f\n", discount);
}
printf("배송비 : %.2f\n", delivery);
totalclaim += delivery;
printf("총 청구 금액 : $%.2f\n", totalclaim);
return 0;
}