검색결과 리스트
글
과제 #3 함수, 포인터의 사용
언어로그/C/C++
2010. 12. 10. 14:25
1. 최대값과 최소값을 구하는 함수
- 세 개의 정수를 입력받아서 그중 가장 큰 수를 반환하는 함수와 가장 작은 수를 반환하는 함수 작성.
입력
- 세 개의 정수 입력 : 7 4 9
출력
- 최대값 : 9
- 최소값 : 4
코드
/*
입력: 세 개의 정수
출력: 가장 큰수와 가장 작은 수
조건: 가장 큰수를 반환하는 함수
가장 작은수를 반환하는 함수 작성
*/
#include <stdio.h>
int max_num(int a, int b, int c);
int min_num(int a, int b, int c);
int main (int argc, char const* argv[])
{
int a, b, c, max, min;
printf("세 개의 정수 입력 : ");
scanf("%d %d %d", &a, &b, &c);
max = max_num(a, b, c);
min = min_num(a, b, c);
printf("\n최대값 : %d\n", max);
printf("\n최소값 : %d\n", min);
return 0;
}
int max_num(int a, int b, int c) {
int temp = a > b ? a : b;
return temp > c ? temp : c;
}
int min_num(int a, int b, int c) {
int temp = a < b ? a : b;
return temp < c ? temp : c;
}
2. 온도변환 : 화씨와 섭씨 변환 함수
- Fahrenheit 함수 : 섭씨온도를 입력하면 화씨 온도로 변환
- Celsius 함수 : 화씨 온도를 섭씨 온도로 변환
- 공식 : F = 1.8 * C + 32
## 온도 변환 ##
1) 섭씨 입력
2) 화씨 입력
## 메뉴선택: 1
입력:
섭씨 입력: 32
출력:
변환된 화씨 : 89.60
코드
/*
입력: 섭씨온도 또는 화씨온도
출력: 섭씨온도 또는 화씨온도
조건: 섭씨온도는 화씨온도 / 화씨온도는 섭씨온도로 변환하는 함수 작성
*/
#include <stdio.h>
double fahrenheit_to_celsius(double f);
double celsius_to_fahrenheit(double c);
int main (int argc, char const* argv[])
{
double input, output;
int select;
printf(" ### 온도 변환 ### \n\n");
printf("1) 섭씨 입력 \n");
printf("2) 화씨 입력 \n");
printf("\n메뉴 선택 : ");
scanf("%d", &select);
if (select == 1) {
printf("\n섭씨입력 : ");
scanf("%lf", &input);
output = celsius_to_fahrenheit(input);
printf("변환된 화씨 : %.2lf \n", output);
} else if (select == 2) {
printf("\n화씨입력 : ");
scanf("%lf", &input);
output = fahrenheit_to_celsius(input);
printf("변환된 섭씨 : %.2lf \n", output);
}
return 0;
}
double fahrenheit_to_celsius(double f) {
double c = (f - 32) / 1.8;
return c;
}
double celsius_to_fahrenheit(double c) {
double f = 1.8 * c + 32;
return f;
}
3. 최대값과 최소값의 주소를 반환하는 함수
- 세 개의 정수를 입력 받아서 그 중 가장 큰 수의 주소를 반환하는 함수와 가장 작은수의 주소를 반환하는 함수를 작성 (입출력은 #1과 동일)
int *MAX(int *, int *, int *);
int *MIN(int *, int *, int *);
코드
/*
입력: 세 개의 정수
출력: 가장 큰수, 가장 작은수
조건: 가장 큰수의 주소를 반환하는 함수
가장 작은수의 주수를 반환하는 함수 작성
*/
#include <stdio.h>
int* max_num_addr(int *a, int *b, int *c);
int* min_num_addr(int *a, int *b, int *c);
int main (int argc, char const* argv[])
{
int a, b, c, *max, *min;
printf("세 개의 정수 입력 : ");
scanf("%d %d %d", &a, &b, &c);
max = max_num_addr(&a, &b, &c);
min = min_num_addr(&a, &b, &c);
printf("\n최대값 : %d\n", *max);
printf("최소값 : %d\n", *min);
return 0;
}
int* max_num_addr(int *a, int *b, int *c) {
int *temp = *a > *b ? a : b;
return *temp > *c ? temp : c;
}
int* min_num_addr(int *a, int *b, int *c) {
int *temp = *a < *b ? a : b;
return *temp < *c ? temp : c;
}
4. 반올림 계산 함수
- 양의 부동소수점 수를 받아서 소수점 셋째 자리에서 반올림 하는 함수 작성
입력
- 양의 부동소수점을 입력 하시오 : 123.456789
출력
- 반올림 결과 : 123.460000
문제해결
- 소수점 셋째자리 반올림을 위해, 1000을 곱한다. 그리고 1의 자리 수가 5이상이면 10을 더하고, 1의 자리 수를 버린다. 이 수를 다시 1000으로 나누면 소수점 셋째 자리에서 반올림한 결과를 얻을 수 있다.
코드
/*
입력: 양의 부동소수 점
출력: 소수 셋째 자리까지 반올림 된 수 (소수 6째 자리까지 출력)
조건:
*/
#include <stdio.h>
#define SPACE 1000.0
double roundTwo(double x);
int main (int argc, char const* argv[])
{
double input, output;
printf("양의 부동소수점을 입력하시오 : ");
scanf("%lf", &input);
output = roundTwo(input);
printf("\n반올림 결과 : %.6lf \n", output);
return 0;
}
// 소수 3째 자리에서 반올림
double roundTwo(double x) {
int temp = (int)(x * SPACE);
if (temp % 10 >= 5) {
temp += 10;
}
temp -= (temp%10);
return temp / SPACE;
}
5. 이진수를 십진수로 변환하는 함수
- 사용자로 부터 이진수를 입력 받아서 십진수로 변환하는 프로그램을 작성.
- 사용자로부터 이진수를 입력받는 함수 (입력값이 0과 1로만 이루어져 있는지 판별)
- 이진수를 십진수로 변환하는 함수
입/출력
이진수를 입력하시오 (0 또는 1) : 123
이진수가 아닙니다. 0 또는 1만 입력하시오.
이진수를 입력하시오 (0 또는 1) : 1010
입력한 이진수 : 1010
변환된 십진수: 10
문제해결
- 이진수 여부를 판별하기 위해서는 입력된 수의 각 자리수가 0 또는 1이어야 한다. 각 자리 수 확인을 위해 입력된 수를 10으로 나눈 나머지를 통해 각 자리수를 확인할 수 있다. 이진수를 십진수로 변경은 이진수 각 자리수에 대해서 2를 자리수만큼 곱한 것들의 합으로 구할 수 있다. 이 때 2의 자리수만큼의 곱은 시프트 연산으로 대신해 코드를 간결하게 할 수 있다.
코드
/*
입력: 이진수
출력: 십진수
조건: 이진수를 입력받는 함수
이진수를 십진수로 변환하는 함수 작성
*/
#include <stdio.h>
#define TRUE 1
#define FALSE 0
int input_binary(int *input);
int binary_to_decimal(int binary);
int main (int argc, char const* argv[])
{
int input, output;
while (input_binary(&input) == FALSE) {
printf("이진수가 아닙니다. 0 또는 1만 입력하시오. \n\n");
}
output = binary_to_decimal(input);
printf("입력된 이진수: %d \n", input);
printf("변환된 십진 수 : %d \n", output);
return 0;
}
// 이진수를 입력받고, 검사
int input_binary(int *input) {
int temp;
printf("이진수를 입력하시오 (0 또는 1) : ");
scanf("%d", input);
temp = *input;
while (temp != 0) {
if (temp % 10 > 1) {
return FALSE;
}
temp /= 10;
}
return TRUE;
}
// 이진수를 십진수로 변환
int binary_to_decimal(int binary) {
int decimal = 0, b = binary;
int i, rem;
for (i = 0; b != 0; i++) {
rem = b % 10;
rem = rem << i;
decimal += rem;
b /= 10;
}
return decimal;
}
'언어로그 > C/C++' 카테고리의 다른 글
| C 프로그램 실행과정 (0) | 2011.02.22 |
|---|---|
| C 언어란? (0) | 2011.02.22 |
| 비트필드 (0) | 2010.12.10 |
| 함수의 이해 / 데이터 전달 (0) | 2010.12.10 |
| 과제 #3 함수, 포인터의 사용 (0) | 2010.12.10 |
| 과제#4 배열과 문자열 (0) | 2009.10.03 |