c언어 연습문제 #3 (국비5일차)

문제 1.

키보드로부터 세 정수를 입력받아 (x + y) * (x + z) / (y % z)를 출력하는 프로그램을 작성하세요.

A:

#include <stdio.h>

void main()
{

printf("input x : ");
scanf_s("%d", &x);

printf("input y : ");
scanf_s("%d", &y);

printf("input z : ");
scanf_s("%d", &z);

printf("(x + y) * (x + z) / (y % z) = %d \n", (x + y)* (x + z) / (y % z));
}

etc-image-0

 

문제 2.

두 수를 입력받아서 둘 중 작은 값을 구하여 출력하는 프로그램을 작성하세요. 단, 두 수가 같으면 그 수를 출력하세요. 조건 연산자를 이용하세요.

A:

삼항 연산자를 사용해서 푸는 문제이다. 

#include <stdio.h>

void main()
{

int num1, num2;
printf("input : ");
scanf_s("%d", &num1);

printf("input : ");
scanf_s("%d", &num2);

int result1;
result1 = (num1 == num2) ? num1 : (num1 > num2) ? num2 : num1;

printf("Smaller Number : %d", result1);


}

 

문제 3.

사용자로부터 정수 세 개를 입력받아 정수형 변수 a,b,c에 각각 저장한 후, 조건 연산자를 사용하여 이들 변수 중 가장 큰 값을 출력하는 프로그램을 작성하세요.

 

A:

이 문제도 조건 연산자를 잘 쓰면된다. 조건이 좀 까다롭게 보일 수도 있다.

#include <stdio.h>

void main()
{

int num1, num2, num3;

printf("입력한 3 정수 중 가장 큰 값을 출력하는 프로그램\n\n");
printf("input num1 : ");
scanf_s("%d", &num1);

printf("input num2 : ");
scanf_s("%d", &num2);

printf("input num3 : ");
scanf_s("%d", &num3);

int result1;
result1 = (num1 >= num2 && num1 >= num3) ? num1 : 
  (num2 >= num3) ? num2 : num3;

printf("가장 큰 값 : %d", result1);


}

etc-image-1

 

문제 4.

현재의 원화 환율을 찾아 변수에 저장하고, 달러를 키보드로부터 입력받으면 원화로 출력하는 프로그램을 작성하세요.

A:

#include <stdio.h>

void main()
{

int exchangeRate = 1270;

int quantity;

printf("달러를 입력하면 원화로 계산해드립니다. \n\n");

printf("계산할 달러 : ");
scanf_s("%d", &quantity);

int result1;
result1 = quantity * exchangeRate;

printf("\\ %d 입니다.\n", result1);

}

etc-image-2

 

문제 5.

현재 시각(시, 분, 초)를 입력받아 오늘 00시 00분 00초를 기준으로 몇 초가 흘렀는지를 계산하는 프로그램을 작성하세요.

 

A:

#include <stdio.h>

void main()
{

printf("현재 시간을 입력하면 0시부터 몇 초가 흘렀는지 계산해주는 프로그램 \n\n");

int hour, minute, second;

printf("시를 입력하세요. : ");
scanf_s("%d", &hour);

printf("분을 입력하세요. : ");
scanf_s("%d", &minute);

printf("초를 입력하세요. : ");
scanf_s("%d", &second);

int result1;
result1 = 3600 * hour + 60 * minute + second;

printf("00시 00분 00초로부터 %d초가 흘렀습니다. \n", result1);

}

etc-image-3

 

 

문제 6.

1파운드(pound)는 0.45kg입니다. 밀가루 150파운드는 몇 kg인지를 계산하는 프로그램을 작성하세요.

 

A:

#include <stdio.h>

void main()
{

printf("입력한 파운드가 몇 kg인지 계산하는 프로그램 \n\n");

double poundPerKg = 0.45;

int num1;

printf("계산하고 싶은 파운드 수 : ");
scanf_s("%d", &num1);

double result1;
result1 = (double)num1 * poundPerKg;

printf("%d 파운드는 %lf kg입니다. \n", num1, result1);

}

etc-image-4

 

 

문제 7.

마일을 킬로미터로 변환하는 프로그램을 작성하자. 1마일은 1.609킬로미터와 같다.

프로그램 예시)
 마일을 입력하시오:  10
 10마일은 16.09킬로미터입니다.

A :

#include <stdio.h>

void main()
{

double milePerKm = 1.609;

int mile;
printf("마일을 입력하시오. : ");
scanf_s("%d", &mile);

double result1;
result1 = mile * milePerKm;

printf("%d마일은 %.3lf킬로미터 입니다. \n", mile, result1);

}

 

문제 8.

상점에 가면 우리는 상품에 대한 돈을 내고 영수증을 받는다. 영수증에서는 10% 부가세와 잔돈 등이 인쇄되어 있다. 구입한 상품의 가격과 손님한테 받은 금액을 입력하면 부가세와 잔돈을 출력하는 프로그램을 작성하여 보자.

예시)
 받은 돈: 10000
 상품 가격: 7500
 
 부가세: 750
 잔돈: 1750

 

A:

#include <stdio.h>

void main()
{

int price, money, vat, change;

printf("받은 돈 : ");
scanf_s("%d", &money);
printf("상품 가격 : ");
scanf_s("%d", &price);

printf("\n");

vat = price * 0.1;
change = money - price - vat;
printf("부가세 : %d \n",vat);
printf("잔돈 : %d \n",change);

}

etc-image-5

 

문제 9.

사용자로부터 원의 반지름을 입력받아서 면적을 계산하여 출력하는 프로그램을 작성하자. 단, 원의 반지름(r)은 실수(double형)로 입력되며 출력도 모두 실수형으로 하여야 한다.
면적을 계산하는 식은 다음과 같다.

         3.14*r*r

A:

#include <stdio.h>

void main()
{

double radius;

printf(" 원의 반지름 : ");
scanf_s("%lf", &radius);

double result1;
result1 = 3.14 * radius * radius;

printf("원의 면적 : %lf", result1);

}

 

문제 10.

프로그램 사용자로부터 두 점의 x,y좌표를 입력 받아서, 두 점이 이루는 직사각형의 넓이를 계산하여 출력하는 프로그램을 작성해보자. 단, 좌 상단의 x,y 좌표 값이 우 하단의 x,y 좌표 값보다 작다고 가정하고, 좌 상단의 좌표정보를 먼저 입력 받는 형태로 예제를 작성해보자. 참고할 수 있는 실행예는 다음과 같다.
  좌 상단의 x 좌표 : 2
  좌 상단의 y 좌표 : 4
  우 하단의 x 좌표 : 4
  우 하단의 y 좌표 : 8
  두 점이 이루는 직사각형의 넓이는 8입니다.

 

A:

#include <stdio.h>

void main()
{

int x1, x2, y1, y2;

printf("좌 상단의 x좌표 : ");
scanf_s("%d", &x1);

printf("좌 상단의 y좌표 : ");
scanf_s("%d", &y1);

printf("우 상단의 x좌표 : ");
scanf_s("%d", &x2);

printf("우 상단의 y좌표 : ");
scanf_s("%d", &y2);

int result1;
result1 = (x2 - x1) * (y2 - y1);

printf("두 점이 이루는 직사각형의 넓이는 %d입니다. \n", result1);

}

 

etc-image-6

 

문제 11.

사용자로 부터 정수 하나를 입력받아라. 입력받은 정수의 절대값을 출력하는 프로그램을 작성하라.

 

A:

#include <stdio.h>

void main()
{

int num;

printf("절대값을 출력할 정수 : ");
scanf_s("%d", &num);

int result;
result = (num > 0) ? num : -num;

printf("%d의 절대값은 %d입니다.", num, result);

}

 

문제 12.

사용자로부터 한문자를 입력받아라. 입력받은 문자가 영어 대문자면 소문자로, 소문자면 대문자로, 그 밖에 특수문자면 그냥 특수문자 그대로 출력되도록 프로그램을 작성하여 보자.
[ 조건(삼항)연산자 사용 ]

결과 예시)

문자 입력 : A
출력 결과 : a


문자 입력 : b
출력 결과 : B


문자 입력 : @
출력 결과 : @

 

A:

이 문제는 오히려 쉽다. 조건연산자를 이용하면 금방된다.

#include <stdio.h>

void main()
{

char ch;
printf("문자 입력 : ");
scanf_s("%c", &ch);

ch = (ch >= 'a' && ch <= 'z') ? ch - 32 :
 (ch >= 'A' && ch <= 'Z') ? ch + 32 :
  ch;

printf("출력 결과 : %c", ch);

}

 

etc-image-7

 

문제 13.

사용자로부터 정수 3개를 입력받아서 정수 3개의 합, 평균, 최대값, 최소값을 구해서 출력하는 프로그램을 작성하여 보자. 단, 평균은 소수점 2째자리까지만 출력 하자)

 

A:

#include <stdio.h>

void main()
{

printf("정수 3개를 입력하면 합, 평균, 최대값, 최소값을 출력하는 프로그램 \n\n");

int num1, num2, num3;

printf("정수1 : ");
scanf_s("%d", &num1);

printf("정수2 : ");
scanf_s("%d", &num2);

printf("정수3 : ");
scanf_s("%d", &num3);

int plus, max, min;
double avg;

plus = num1 + num2 + num3;
max = (num1 >= num2 && num1 >= num3) ? num1 :
  (num2 >= num3) ? num2 : num3;
min = (num1 <= num2 && num1 <= num3) ? num1 :
  (num2 <= num3) ? num2 : num3;
avg = (num1 + num2 + num3) / 3;

printf("합 : %d\n", plus);
printf("평균 : %.2lf\n",avg);
printf("최대값 : %d\n", max);
printf("최소값 : %d\n", min);

}

etc-image-8

 

문제 14.

사용자로부터 0000과 1111 사이의 2진수를 입력받아 10진수로 출력하는 프로그램을 작성하세요.

 

A:

#include <stdio.h>

void main()
{

printf("2진수를 입력하면 10진수로 바꿔드립니다.\n\n");

int num1;

printf("2진수 입력 : ");
scanf_s("%d", &num1);

int x1, x2, x3, x4;

x1 = num1 / 1000;
x2 = num1 / 100 %2 ;
x3 = num1 / 10 %2;
x4 = num1 % 2;

int result;
result = 8 * x1 + 4 * x2 + 2 * x3 + 1 * x4;

printf("10진수 : %d", result);

}

etc-image-9