[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 (5.0 / 9.0) * (fahr - 32); }

float: 섭씨온도를 계산하여 리턴하는 함수

f2c: 함수 이름

float fahr: 파라미터->화씨온도

return: 반환값->화씨온도에 대응되는 섭씨온도

return (5.0 / 9.0) * (fahr - 32);

함수 기능->함수 안에서 수행되어야 하는 것

따라서 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번 입력했더니 가장 큰 수가 정상적으로 출력되었다.

 
채널톡 아이콘