멋쟁이 개발자의 블로그
[쉽게 풀어쓴 C언어 Express] 5장 수식과 연산자 Programming 문제 본문
01. 사용자로부터 2개의 정수를 입력받아서 첫 번째 정수를 두 번째 정수로 나누었을 때 얻게 되는 몫과 나머지를 출력하는 프로그램을 작성하라.
#include <stdio.h>
int main(void)
{
int a, b;
int quotient, remainder;
printf("2개의 정수를 입력하시오 : ");
scanf_s("%d %d", &a, &b);
quotient = a / b;
remainder = a % b;
printf("몫 : %d, 나머지 : %d\n", quotient, remainder);
return 0;
}
02. 2개의 double 형의 실수를 읽어서 합, 차, 곱, 몫을 구하는 프로그램을 작성하라.
#include <stdio.h>
int main(void)
{
double a, b;
double add, sub, mul, div;
printf("실수를 입력하시오 : ");
scanf_s("%lf %lf", &a, &b);
add = a + b;
sub = a - b;
mul = a * b;
div = a / b;
printf("합 : %lf, 차 : %lf, 곱 : %lf, 몫 : %lf\n", add, sub, mul, div);
return 0;
}
03. 3개의 정수 값을 입력받아서, 3개의 정수 값 중에서 최대값을 출력하는 프로그램을 작성하라.
#include <stdio.h>
int main(void)
{
int a, b, c, max;
printf("3개의 정수를 입력하시오 : ");
scanf_s("%d %d %d", &a, &b, &c);
max = (a > b) ? a : b;
max = (max > c) ? max : c;
printf("최댓값 : %d\n", max);
return 0;
}
04. cm로 표현된 키를 입력하여 피트와 인치로 변환하는 프로그램을 작성하라. 1피트는 12인치이고 1인치는 2.54cm이다.
#include <stdio.h>
int main(void)
{
double inch;
int cm, feet;
printf("키를 입력하시오(cm) : ");
scanf_s("%d", &cm);
inch = cm / 2.54;
feet = inch / 12;
inch = inch - (feet * 12.0);
printf("%dcm는 %d피트 %lf인치입니다.\n", cm, feet, inch);
return 0;
}
05. 100보다 작은 정수를 입력받아서 이것을 십의 자리, 일의 자리로 분리하여 출력하는 프로그램을 작성하라. 즉 사용자가 정수 23을 입력하면 2, 3을 차례로 출력하면 된다.
#include <stdio.h>
int main(void)
{
int a;
printf("100보다 작은 정수를 입력하시오 : ");
scanf_s("%d", &a);
printf("10의 자리 : %d\n", a / 10);
printf("1의 자리 : %d\n", a % 10);
return 0;
}
06. int형의 정수를 비트 연산자를 사용하여서 2의 보수(2's complement)로 변환하는 프로그램을 작성하여 보자. 2의 보수는 먼저 전체 비트를 반전시킨 후에 1을 더하면 된다.
#include <stdio.h>
int main(void)
{
int a;
printf("정수를 입력하시오 : ");
scanf_s("%d", &a);
a = ~a + 1;
printf("2의 보수 : %d\n", a);
return 0;
}
07. 정수에 비트 연산자 <<를 한번 적용하면 2를 곱한 값을 얻을수 있다. 또 정수에 비트 연산자 >>를 한번 적용하면 2로 나눈 값을 얻을 수 있다. 사용자로부터 정수 x, y를 입력받아서 x<<y의 값을 출력하는 프로그램을 작성하여 보자.
#include <stdio.h>
int main(void)
{
int a, times;
printf("정수를 입력하시오 : ");
scanf_s("%d", &a);
printf("2를 곱하고 싶은 횟수 : ");
scanf_s("%d", ×);
printf("%d<<%d의 값 : %d\n", a, times, a<<times);
return 0;
}
08. 구의 표면적과 체적을 구하는 프로그램을 작성하라. 구의 반지름은 실수로 입력된다. 아래의 공식을 사용하라. 파이 값은 기호 상수를 사용하여 정의하라.
#include <stdio.h>
#define PI 3.141592
int main(void)
{
double rad, area, value;
printf("구의 반지름을 입력하시오 : ");
scanf_s("%lf", &rad);
area = 4.0 * PI * rad * rad;
value = (4.0 / 3.0) * PI * rad * rad * rad;
printf("표면적은 %lf입니다.\n", area);
printf("체적은 %lf입니다.\n", value);
return 0;
}
09. 그리스 최초의 수학자이자 천문학자인 탈레스는 지팡이 하나로 피라미드의 높이를 재었다고 한다. 탈레스는 지팡이를 똑바로 땅에 세우고 지팡이를 움직여서 지팡이의 그림자와 피라미드의 그림자를 일치시켰다. 삼각형 ABC와 삼각형 ADE는 닮음꼴이므로 다음의 수식이 성립한다.
AC : AE = BC : DE
따라서 AC와 AE, BC를 안다면 DE를 계산할 수 있다. AC와 AE, BC를 입력하여서 DE를 구하는 프로그램을 작성하라. 입력되는 수치는 모두 실수로 한다.
#include <stdio.h>
int main(void)
{
double AC, AE, BC, DE;
printf("지팡이의 높이를 입력하시오 : ");
scanf_s("%lf", &BC);
printf("지팡이의 그림자의 길이를 입력하시오 : ");
scanf_s("%lf", &AC);
printf("피라미드까지의 거리를 입력하시오 : ");
scanf_s("%lf", &AE);
DE = AE * BC / AC;
printf("피라미드의 높이는 %lf입니다,\n", DE);
return 0;
}
10. 조건 연산자 ?만을 이용하여 2차원 공간의 x좌표와 y좌표를 입력받아서 그 좌표가 속하는 사분면을 출력하는 프로그램을 작성하시오. (x>0 && y<0) ? printf("1사분면") : printf(" "); 와 같은 문장을 사용하여 작성해본다.
#include <stdio.h>
int main(void)
{
double x, y;
printf("x좌표를 입력하시오 : ");
scanf_s("%lf", &x);
printf("y좌표를 입력하시오 : ");
scanf_s("%lf", &y);
(x > 0 && y > 0) ? printf("1사분면\n") : printf("");
(x < 0 && y > 0) ? printf("2사분면\n") : printf("");
(x < 0 && y < 0) ? printf("3사분면\n") : printf("");
(x > 0 && y < 0) ? printf("4사분면\n") : printf("");
return 0;
}
11. 약 2200년 전에 그리스 에라토스테네스는 최초로 지구의 크기를 측정하였다. 일단 지구를 구형으로 가정하고 또 태양 광선은 지구의 어느 곳에서나 평행하게 비친다고 가정하였다. 또 원호의 길이는 중심각에 비례한다는 원리를 사용하였다. 하지날 정오에 시에네에서 햇빛이 수직으로 비칠 때, 알렉산드리아에서는 막대와 그림자가 이루는 각도가 7.2도로 측정되었다. 또 시에네에서 알렉산드리아까지의 거리는 약 900km로 측정되었다. 이것을 이용하여서 지구의 반지름을 계산하여 보자.
#include <stdio.h>
#define PI 3.14
int main(void)
{
double km, angle, r;
double circ;
printf("거리를 입력하시오 : ");
scanf_s("%lf", &km);
printf("각도를 입력하시오 : ");
scanf_s("%lf", &angle);
circ = 900 * 360 / 7.2;
r = circ / (2 * PI);
printf("지구의 반지름은 %lf\n", r);
return 0;
}
12. 비트 이동 연산을 이용하여 문자 4개를 받아서 하나의 unsigned int형의 변수 안에 저장하는 프로그램을 작성하라. 첫 번째 문자는 비트 0부터 비트 7까지에 저장되고 두 번째 문자는 비트 8부터 비트 15까지, 세 번째 문자는 비트 16에서 비트 23까지, 네 번째 문자는 비트 24부터 비트 31까지에 저장된다. 결과로 생성되는 정수값은 16진수로 출력하도록 한다. 비트 이동 연산과 비트 OR 연산을 사용하라.
#include <stdio.h>
int main(void)
{
char a, b, c, d;
unsigned int result = 0;
printf("첫번째 문자를 입력하시오 : ");
scanf_s("%c", &a);
result = result | a;
getchar();
printf("두번째 문자를 입력하시오 : ");
scanf_s("%c", &b);
result = result | (b << 8);
getchar();
printf("세번째 문자를 입력하시오 : ");
scanf_s("%c", &c);
result = result | (c << 16);
getchar();
printf("네번째 문자를 입력하시오 : ");
scanf_s("%c", &d);
result = result | (d << 24);
printf("결과값 : %x\n", result);
return 0;
}
/*a,b,c,d의 변수를 int형으로 지정하고 %d로 받아왔는데 결과값이 cccccc로 나왔습니다.
혹시 이유를 아신다면 댓글 부탁드리겠습니다...*/
'Language > C' 카테고리의 다른 글
[C/백준 1110] 더하기 사이클 (0) | 2021.03.16 |
---|---|
[C/백준] 10871번 - X보다 작은 수 (1) | 2020.07.19 |
[쉽게 풀어쓴 C언어 Express] 4장 변수와 자료형 Programming 문제 (0) | 2020.07.10 |
[쉽게 풀어쓴 C언어 Express] 3장 C 프로그램 구성요소 Programming 문제 (0) | 2020.07.08 |
[쉽게 풀어쓴 C언어 Express] 2장 프로그램 작성 과정 Programming 문제 (0) | 2020.07.08 |