본문으로 바로가기

  

 

도전1)
10진수 정수를 입력 받아서 16진수로 출력하는 프로그램을 작성해 보자. 이는 서식문자의 활용에 대한 문제이므로 쉽게 해결할 수 있을 것이다.

#include <stdio.h> 
void main() { 
	int input_num; 
	printf("10진수 정수를 입력해주세요"); 
	scanf("%d", &input_num); 
	printf("입력하신 10진수를 16진수로 표현하면 : %x입니다.\n", input_num); // 10진수는 %d , 8진수는 %o , 16진수는 %x 
}

 

도전2)
프로그램 사용자로부터 두 개의 정수를 입력받아서 구구단을 출력하는 프로그램을 작성해보자.
예를 들어서 프로그램 사용자가 3과 5를 입력하면 3단, 4단, 5단이 출력되어야 하고, 2와 4를 입력하면 2단, 3단, 4단이 출력되어야 한다.
단 한가지 조건이 있다. 사용자는 두 개의 숫자를 입력 할 때에 입력 순서에 자유로워야 한다.
3과 5를 입력하건 5와 3을 입력하건 프로그램은 같은 결과를 출력해야 한다.

 

 

도전3)
두 개의 정수를 입력 받아서 최대 공약수를 구하는 프로그램을 작성 해 보자.

#include <stdio.h> 
void main() 
{ 
	int a, b, gcd; 
    int i;
    printf("두 개의 정수를 입력해주세요");
    scanf("%d %d", &a, &b);
    for (i = 1; i < (a > b ? a : b); i++) { 
   		if (a%i == 0 && b%i == 0); gcd = i; 
    } 
    printf("두 수의 최대 공약수 : %d\n", gcd); 
}

 

도전4)
필자가 좋아하는 것 중 하나가 금요일 저녁 퇴근길에 DVD나 만화책을 잔뜩 빌리고, 동네 슈퍼에 들려서 군것질거리를 사가지고 집에 들어가는 것이다. 오늘은 금용일이다. 현재 필자의 주머니에는 5천원이 있다. DVD 한편을 빌리면 3500원이 남는다. 슈퍼에 들려서 크림빵(500원), 새우깡(700원), 콜라(400원)을 사려한다. 잔돈을 하나도 남기지 않고 이 세가지 물건을 하나 이상 반드시 구매하려면 어떻게 구매를 진행해야 하겠는가? 물론 여러 가지 경우의 수가 있을 것이다. 필자가 어떠한 선택을 할 수 잇는지 여러분이 제시해 주기 바란다.

#include <stdio.h> 
const int bread = 500; //상수 
const int snack = 700; 
const int coke = 400; 
void main() { 
	int i, j, k; 
    int money; 
    printf("현재 당신이 소유하고 있는 금액"); 
    scanf("%d", &money); 
    for (i = 1; i < money / bread; i++) { 
    	for (j = 1; j < money / snack; j++) { 
        	for (k = 1; k < money / coke; k++) { 
            	if (money == bread * i + snack * j + coke * k) { 
                	printf("크림빵 : %d개, ", i);
                    printf("새우깡 : %d개, ", j); 
                    printf("콜라 : %d개\n", k); 
                 }
             } 
         }
    } printf("어떻게 구입하시겠습니까?\n"); 
}

 

도전5)
10개의 소수를 출력하는 프로그램을 작성해 보자. 참고로 정수 num이 1과 num으로 밖에 나눠지지 않는다면 이는 소수에 해당한다. 

따라서 3은 소수이다. 그러나 4는 소수가 아니다. 1,2,4로 나눠지기 때문

#include<stdio.h> 
int IsPrime(int n); 
int main(void) { 
	int i=2, cnt=0;
    while(cnt!=10) { 
    	if(IsPrime(i)==1) { 
        	printf("%d ", i); 
            cnt++; 
        } i++; 
    } return 0; 
} 

int IsPrime(int n) // 소수면 true(1) 리턴 {
	int divisors=0, i; \
    for(i=1; i<=n; i++) { 
      if(n%i==0) divisors++; 
    } 
    if(divisors==2) return 1; return 0;
}

 

도전6)
프로그램 사용자로부터 초를 입력 바은 후에, 이를 [시, 분, 초]의 형태로 출력하는 프로그램을 작성하자.

#include<stdio.h> 
const int H = 60 * 60; 
const int M = 60; 
void SecondToHMS(int sec); 
int main(void) { 
	int sec; 
    printf("초(second) 입력 : "); 
    scanf("%d", &sec); 
    SecondToHMS(sec); 
    return 0; 
 } 
 void SecondToHMS(int sec) { 
 	int h, m, s; /*시 구하기 */ 
    h = sec / H; 
    sec = sec % H; /*분 구하기 */ 
    m = sec / M; 
    sec = sec % M; /*초 구하기 */ 
    s = sec; 
    printf("[h:%d, m:%d, s:%d] \n", h, m, s); 
}

 

도전7)
프로그램 사용자로부터 숫자 n을 입력 받는다. 그리고 나서 다음 공식이 성립하는 k의 최대값을 계산해서 출력하는 프로그램을 작성해보자.

#include <stdio.h> 
int main(void) { 
	int n, k; 
	int inc = 1; 
    printf("상수 n 입력 : "); 
    scanf("%d", &n); 
    if (n == 0) { 
    	printf("만족하는 k 없음 \n");
        return 0; 
    } for (k = 0; inc * 2 <= n; k++) { 
    	inc = inc * 2; 
    } printf("공식을 만족하는 k : %d \n", k); 
    return 0;
 }

 

도전8)
2의 n승을 구하는 함수를 재귀적으로 구현해 보자. 그리고 그에 따른 적절한 main함수도 구현해보자. 참고로 재귀함수의 구현이 처음에는 어려운 편이기 때문에 여기서는 쉬운 문제를 제시하였다.

#include <stdio.h> 
int Power(int n) { 
	if (n == 0) return 1; 
    return Power(n - 1) * 2; 
} 
int main(void) { 
	int num; printf("정수 입력 : "); 
    scanf("%d", &num); 
    printf("2의 %d승은 %d \n", num, Power(num)); 
    return 0;
 }