[C언어] 프개 Lec01 실습3 코드 분석
연습 문제 1-15
#include<stdio.h>
main() {
float fahr, celsius;
int lower, upper, step;
lower = 0;
upper = 300;
step = 20;
fahr = lower;
while (fahr <= upper) {
celsius = (5.0 / 9.0) * (fahr - 32);
printf("%3.0f %6.1f\n", fahr, celsius);
fahr = fahr + step;
}// while문 쓰는 것은 정의된 함수 넣는 걸 연습해야 하기 때문.
또는
#include<stdio.h>
main() {
float fahr;
for (fahr = 0; fahr <= 300; fahr += 20)
printf("%3.0f %6.1f\n", fahr, (5.0 / 9.0) * (fahr - 32));
}
위는 1.2절 온도 변환 코드.
화씨온도를 섭씨온도로 변환하는 함수 f2c()를 작성하여 이용하도록 고친다.
즉, 함수 f2c()는 매개변수로 화씨온도를 받고, 그에 대응되는 섭씨온도를 계산하여 리턴하는 함수이며, main()에서는 함수 f2c()를 호출하게 될 것이다.
<소스 코드>
#include<stdio.h>
float f2c(float fahr) {
return (5.0 / 9.0) * (fahr - 32);
}
main() {
float fahr, celsius;
int lower, upper, step;
lower = 0;
upper = 300;
step = 20;
fahr = lower;
while (fahr <= upper) {
celsius = f2c(fahr);
printf("%3.0f %6.1f\n", fahr, celsius);
fahr = fahr + step;
}
}
<실행 결과> 0 -17.8 20 -6.7 40 4.4 60 15.6 80 26.7 100 37.8 120 48.9 140 60.0 160 71.1 180 82.2 200 93.3 220 104.4 240 115.6 260 126.7 280 137.8 300 148.9
<코드 설명>
main() 전에 함수 f2c() 정의한다.
float: 섭씨온도를 계산하여 리턴하는 함수
f2c: 함수 이름
float fahr: 파라미터->화씨온도
return: 반환값->화씨온도에 대응되는 섭씨온도
함수 기능->함수 안에서 수행되어야 하는 것
따라서 main 함수에서 celsius 식으로 나타내는 대신에 f2c 함수를 호출하면 됨.
숫자 처리 문제1
[이 문제에서 배열의 사용은 금지됨]
개수 미정의 정수들을 키보드에서 입력 받아 그 중 가장 큰 수를 출력하는 프로그램을 작성하라. (데이터의 끝은 Ctrl+Z로 표시된다.)
<의사 코드>
maxval = 첫 번째 읽은 정수
while(정수 x를 읽을 수 있음)
x가 maxval보다 클 경우 x가 새로운 maxval 값이 된다.
<소스 코드>
#include<stdio.h>
main()
{
int x, maxval;
scanf_s("%d", &maxval);
while (scanf_s("%d", &x) != EOF)
if (x > maxval)
maxval = x;
printf("maximum value = %d\n", maxval);
}
실행 결과
정수 무작위로 입력하고 ctrl+z 입력했을 때 가장 큰 수가 출력되어야 하지만, 루프 탈출이 되지 않았음.
구글링 결과 ^z를 3번 입력해야 출력되는 것을 알게 됨.
scanf_s를 썼을 때 visual studio에서 흔히 나타나는 현상이라고 한다.
^z 3번 입력했더니 가장 큰 수가 정상적으로 출력되었다.