01. 사용자로부터 2개의 정수를 입력받아서 첫 번째 정수를 두 번째 정수로 나누었을 때 얻게 되는 몫과 나머지를 출력하는 프로그램을 작성하시오.
#include <stdio.h>
int main() {
int a, b;
printf("2개의 정수를 입력하시오: ");
scanf("%d %d", &a, &b);
printf("몫: %d 나머지: %d \n", a / b, a % b);
}
02. 2개의 double 형의 실수를 읽어서 합, 차, 곱, 몫을 구하는 프로그램을 작성하라.
#include <stdio.h>
int main() {
double a, b;
printf("실수를 입력하시오: ");
scanf("%lf %lf", &a, &b);
printf("합: %.2lf 차: %.2lf 곱: %.2lf 몫: %.2lf \n", a + b, a - b, a * b, a / b);
}
03. 3개의 정수값을 입력받아서. 3개의 정수값 중에서 최대값을 출력하는 프로그램을 작서앟라.
#include <stdio.h>
int main() {
int a, b, c, max;
printf("3개의 정수를 입력하시오: ");
scanf("%d %d %d", &a, &b, &c);
max = (a > b) ? ((a > c) ? a : c) : ((b > c) ? b : c);
// max = (a > b && a > c) ? a : ((b > c) ? b : c);
printf("최대값 %d \n", max);
}
04. cm로 표현된 키를 입력하여 피트와 인치로 변환하는 프로그램을 작성하시오. 1피트는 12인치이고 1인치는 2.54cm이다.
#include <stdio.h>
#define ONE_FEET 12
#define ONE_INCH 2.54
int main() {
int cm, feet;
double inch;
printf("키를 입력하시오 (cm): ");
scanf("%d", &cm);
inch = cm / ONE_INCH;
feet = inch / ONE_FEET;
inch = inch - feet * 12;
printf("%dcm는 %d피트 %.2lf인치 입니다. \n", cm, feet, inch);
}
05. 100보다 작은 정수를 입력받아서 이것을 십의 자리, 일의 자리로 분리하여 출력하는 프로그램을 작성하시오. 즉, 사용자가 정수 23을 입력하면 2,3을 차례로 출력하면 된다.
#include <stdio.h>
int main() {
int a;
printf("정수를 입력하시오: ");
scanf("%d", &a);
printf("십의 자리: %d \n", a / 10);
printf("일의 자리: %d \n", a % 10);
}
06. (1.0-0.9)==0.1의 값은 당연히 1이어야 한다. 하지만 0이 출력된다. 출력값이 1이 나오도록 코드를 작성해보자. 부동소수점수를 비교할 때는 어덯게 하여야 하는가?
#include <stdio.h>
int main() {
int a;
printf("정수를 입력하시오: ");
scanf("%d", &a);
printf("2의 보수: %d", ~a + 1);
}
07. 정수에 비트 연산자 <<를 한 번 적용하면 2를 곱한 값을 얻을 수 있다. 또 정수에 비트 연산자 >>를 한 번 적용하면 2로 나눈 값을 얻을 수 있다. 사용자로부터 정수 x, y 를 입력받아서 x<<y의 값을 출력하는 프로그램을 작성하여보자.
#include <stdio.h>
int main() {
int a, b;
printf("정수를 입력하시오: ");
scanf("%d", &a);
printf("2를 곱하고 싶은 횟수: ");
scanf("%d", &b);
printf("%d << %d의 값: %d", a,b, a<<b);
}
08. 구의 표면적과 체적을 구하는 프로그램을 작성하라. 구의 반지름은 실수로 입력된다. 아래의 공식을 사용하라. 파이값은 기호 상수를 사용하여 정의하라.
#include <stdio.h>
#define PI 3.141592
int main() {
double r;
printf("구의 반지름을 입력하시오: ");
scanf("%lf", &r);
printf("표면적은 %.2lf입니다. \n", 4*PI*r*r);
printf("체적은 %.2lf입니다. \n", (double)4 / 3 * PI * r * r * r);
}
09. 그리스 최초의 수학자이자 천문학자인 탈레스는 지팡이 하나로 피라미드의 높이를 재었다고 한다. 탈레스는 지팡이를 똑바로 땅에 세우고 지팡이를 움직여서 지팡이의 그림자와 피라미드의 그림자를 일치시켰다. 삼각형 ABC와 삼각형ADE는 닮은꼴이므로 다음의 수식이 성립한다.
AC : AE = BC : DE
따라서 AC와 AE, BC를 안다면 DE를 계산할 수 있다. AC와 AE, BC를 입력하여서 DE를 구하는 프로그램을 작성하라. 입력되는 수치는 모두 실수로 한다.
#include <stdio.h>
int main() {
double a, b, x, y; // a : b = x : y;
printf("지팡이의 높이를 입력하시오: ");
scanf("%lf", &a);
printf("지팡이 그림자의 길이를 입력하시오: ");
scanf("%lf", &b);
printf("피라미드까지의 거리를 입력하시오: ");
scanf("%lf", &y);
x = a * y / b;
printf("피라미드의 높이는 %.2lf입니다. \n", x);
}
10. 조건 연산자 ?만을 이용하여 2차원 공간의 x 좌표와 y 좌표를 입력받아서 그 좌표가 속하는 사분면을 출력하는 프로그램을 작성하시오. (x>0 && y >0)? printf("1사분면"):printf(" ");와 같은 문장을 사용하여 작성해본다.
#include <stdio.h>
int main() {
int x, y;
printf("x좌표를 입력하시오: ");
scanf("%d", &x);
printf("y좌표를 입력하시오: ");
scanf("%d", &y);
(x > 0 && y > 0) ? printf("1사분면") : printf("");
(x < 0 && y > 0) ? printf("2사분면") : printf("");
(x < 0 && y < 0) ? printf("3사분면") : printf("");
(x > 0 && y < 0) ? printf("4사분면") : printf("");
}
11. 약 2200년 전에 그리스의 에라토스테네스는 최초로 지구의 크기를 측정하였다. 일단 지구를 구형으로 가정하고 또 태양 광선은 지구의 어느 곳에서나 평행하게 비친다고 가정하였다. 또 원호의 길이는 중심각에 비례한다는 원리를 사용하였다. 하지날 정오에 시에네에서 햇빛이 수직으로 비칠 때, 알렉산드리아에서는 막대와 그림자가 이루는 각도가 7.2도로 측정되었다. 또 시에네에서 알렉산드리아까지의 거리는 약 900km로 측정되었다. 이것을 이용하여서 지구의 반지름을 계산하여보자.
#include <stdio.h>
#define PI 3.14
int main() {
double dis, r, k; // r: dis = 360: k;
printf("거리를 입력하시오: ");
scanf("%lf", &dis);
printf("각도를 입력하시오: ");
scanf("%lf", &r);
k = dis / r * 360;
printf("지구의 반지름은 %.2lf입니다. \n", k / PI /2);
}
12. 비트 이동 연산을 이용하여 문자 4개를 받아서 하나의 unsigned int형의 변수 안에 저장하는 프로그램을 작성하라. 첫 번쩨 문자는 비트 0부터 비트 7까지에 저장되고 두 번째 문자는 비트 8부터 비트 15까지 세 번째 문자는 비트 16에서 비트 23까지, 네 번째 문자는 비트 24부터 비트 31까지에 저장된다. 결과로 생성되는 정수값은 16진수로 출력하도록 한다. 비트 이동 연산과 비트 OR 연산을 사용하라.
#include <stdio.h>
int main() {
char a, b, c, d;
unsigned int result;
printf("첫 번째 문자를 입력하시오: ");
scanf("%c", &a);
printf("두 번째 문자를 입력하시오: ");
scanf(" %c", &b); // 한 칸 띄어줌으로써 버퍼를 비움
printf("세 번째문자를 입력하시오: ");
scanf(" %c", &c);
printf("네 번째 문자를 입력하시오: ");
getchar(); // 한 칸 띄어쓰는 것 대신 getchar()을 이용해서 버퍼를 비울 수 있음.
scanf("%c", &d);
result = (d << 24) | (c << 16) | (b << 8) | a;
printf("결과값: %x", result);
}
또 다른 방법
#include <stdio.h>
#include <math.h>
int main() {
int a, b, c, d;
unsigned int result;
printf("첫 번째 문자를 입력하시오: ");
a = getchar();
getchar();
printf("두 번째 문자를 입력하시오: ");
b = getchar();
getchar();
printf("세 번째 문자를 입력하시오: ");
c = getchar();
getchar();
printf("네 번째 문자를 입력하시오: ");
d = getchar();
result = a | (b << 8) | (c << 16) | (d << 24);
printf("결과값: %x", result);
}
'C' 카테고리의 다른 글
[쉽게 풀어쓴 C언어 Express 개정 4판] 7장 Programming (0) | 2024.10.02 |
---|---|
[쉽게 풀어쓴 C언어 Express 개정 4판] 6장 Programming (1) | 2024.10.01 |
[쉽게 풀어쓴 C언어 Express 개정 4판] 4장 Programming (1) | 2024.09.27 |
[쉽게 풀어쓴 C언어 Express 개정 4판] 3장 Programming (0) | 2024.09.25 |
[쉽게 풀어쓴 C언어 Express 개정 4판] 3장 Exercise (2) | 2024.09.25 |