[열혈c프로그래밍] 도전! 프로그래밍1 내 답안 (chapter 10, 248p)
2019. 8. 4. 19:18
도전 1
#include <stdio.h>
int main(void)
{
int num;
printf("10진수 정수를 입력하세요:");
scanf("%d", &num);
printf("16진수: %x", num);
return 0;
}
도전 2
#include <stdio.h>
void GuDan(int, int);
int main(void)
{
int num1, num2;
printf("두 개의 정수를 입력하세요:");
scanf("%d %d", &num1, &num2);
if (num1 < num2)
GuDan(num1, num2);
else
GuDan(num2, num1);
return 0;
}
void GuDan(int num1, int num2)
{
int i, j;
for (i = num1; i <= num2; i++)
{
for (j = 1; j < 10; j++)
printf("%d x %d = %d \n", i, j, i * j);
printf("\n");
}
}
도전 3
#include <stdio.h>
int GCD(int, int);
int main(void)
{
int num1, num2;
printf("두 개의 정수를 입력하세요: ");
scanf("%d %d", &num1, &num2);
if (num1 * num2 <= 0)
{
printf("자연수를 입력하세요");
return -1;
}
printf("두 수의 최대공약수: %d", GCD(num1, num2));
return 0;
}
int GCD(int num1, int num2)
{
int i = 1, result = 1;
while (i <= num1 && i <= num2)
{
if (num1 % i == 0 && num2 % i == 0)
result = i;
i++;
}
return result;
}
도전 4
#include <stdio.h>
int main(void)
{
int cream = 500, shrimp = 700, cola = 400;
int total = 3500;
int i, j, k;
printf("현재 당신이 소유하고 있는 금액: %d \n", total);
for (i = 1; i <= total / cream; i++)
for (j = 1; j <= total / shrimp; j++)
for (k = 1; k <= total / cola; k++)
if (i * cream + j * shrimp + k * cola == total)
{
printf("크림빵 %d개, 새우깡 %d개, 콜 라 %d개 \n", i, j, k);
continue;
}
printf("어떻게 구입하시겠습니까? \n");
return 0;
}
도전 5
#include <stdio.h>
int main(void)
{
int num, i;
int cnt = 0;
for (num = 2; cnt < 10 ; num++)
for (i = 1; i < num; i++)
{
if (num % i == 0 && i != 1)
break;
if (i == num - 1)
{
printf("%d ", num);
cnt++;
}
}
return 0;
}
도전 6
#include <stdio.h>
int main(void)
{
int total, hour, min, sec;
int i, result, remain;
printf("초(second): ");
scanf("%d", &total);
for (i = 0; i < 3; i++)
{
result = total / 60;
remain = total % 60;
total = result;
switch (i)
{
case 0:
sec = remain;
case 1:
min = remain;
case 2:
hour = remain;
}
}
printf("[h:%d, m:%d, s:%d]", hour, min, sec);
return 0;
}
...더보기
고민中
: 정적변수를 사용.
전역변수와 정적변수는 반드시 상수로 초기화해야한다. 그렇지 않으면 주석과 같은 오류가 발생.
#include <stdio.h>
int Time(void);
int input;
int main(void)
{
int hour, min, sec;
int i, remain;
printf("초(second): ");
scanf("%d", &input);
for (i = 0; i < 3; i++)
{
remain = Time();
switch (i)
{
case 0:
sec = remain;
case 1:
min = remain;
case 2:
hour = remain;
}
}
printf("[h:%d, m:%d, s:%d]", hour, min, sec);
return 0;
}
int Time(void)
{
static int total = input; // 식에 상수값이 있어야 합니다. 이니셜라이저가 상수가 아닙니다.
int result;
result = total / 60;
total = result;
return total % 60;
}
도전 7
#include <stdio.h>
int main(void)
{
int num, k=0;
printf("상수 n 입력: ");
scanf("%d", &num);
while (1 << k <= num)
k++;
printf("공식을 만족하는 k의 최댓값: %d", --k);
return 0;
}
도전 8
#include <stdio.h>
void Expo(void);
int num;
int main(void)
{
printf("정수 입력: ");
scanf("%d", &num);
Expo();
return 0;
}
void Expo(void)
{
static int result = 1;
static int i = 0;
if (i == num) // 재귀 탈출조건
{
printf("2의 %d승은 %d \n", num, result);
return;
}
result *= 2;
i++;
Expo();
}
...더보기
#include <stdio.h>
void Expo(int);
int num;
int main(void)
{
printf("정수 입력: ");
scanf("%d", &num);
Expo(num);
return 0;
}
void Expo(int n)
{
static int result = 1;
if (n == 0) // 재귀 탈출조건
{
printf("2의 %d승은 %d \n", num, result);
return;
}
result *= 2;
Expo(n-1);
}
'프로그래밍 언어 > C언어' 카테고리의 다른 글
[열혈c프로그래밍] 문제 14-2 내 답안 (0) | 2019.08.13 |
---|---|
[열혈c프로그래밍] 문제 14-1 내 답안 (0) | 2019.08.13 |
[열혈c프로그래밍] 문제 13-1 내 답안 (0) | 2019.08.11 |
[열혈c프로그래밍] 문제 11-2 내 답안 (0) | 2019.08.09 |
[열혈c프로그래밍] 문제 11-1 내 답안 (0) | 2019.08.06 |