본문 바로가기
c언어

c언어 변수의 초기값 관련 예제 풀기(오류 수정하기, 태양빛 도달 시간 계산하기) - int, float, double

by 개발자 L 2022. 11. 27.
반응형

c언어 변수의 초기값 관련 예제 풀기(오류 수정하기, 태양빛 도달 시간 계산하기) - int, float, double

네 안녕하세요, 이번 포스팅에서는 변수의 초기값을 활용한 간단한 예제들을 풀어보는 시간을 가져보려 합니다.

우리가 지금까지 배웠던 printf(), scanf() 함수들도 같이 이용을 하여 풀어볼 겁니다.

그럼 지금부터 같이 풀어보도록 하겠습니다.

 

1. 오류 수정하기

첫 번째 문제는 오류 수정하기 입니다.

지금 보여드릴 것은 오류가 일어나는 소스 코드입니다.

그래서 여기에서 오류가 일어나는 부분을 수정하여 다시 정상적인 소스 코드로 바꿔서 실행 시에 오류가 나지 않도록 하는 것이 우리의 목표입니다.

우리가 개발을 하다 보면 필연적으로 에러를 마주하게 되는데, 그럴 경우에 해결을 해야 하지만 그러한 것을 찾기가 힘듭니다.

그래서 그런 안목을 기르고자 문제를 내려합니다.

그럼 지금부터 오류가 일어난 소스 코드를 보여드리도록 하겠습니다.

#include <stdio.h>

int main()

{
  int x, y, z, sum;
  printf("3개의 정수를 입력하세요 (x, y, z) : ");
  scanf("%d %d %d", &x, &y, &z);

  sum += x;
  sum += y;
  sum += z;

  printf("3개 정수의 합은 %d\n", sum);

  return 0;
}

이렇게 3개의 정수의 합을 구하는 소스 코드를 작성을 했는데, 결과 화면이 이런 식으로 나옵니다.

3개의 정수를 입력하세요 (x, y, z) : 10 20 30
3개 정수의 합은 4194492

보시면 3개의 정수를 입력하고 합을 받을 때, 합은 60이 나와야 하는데, 지금 말도 안 되는 값이 나왔죠?

보통 이러한 에러는 아래와 같은 상황들에 발생을 합니다.

  • 형식 지정자를 이상하게 지정을 했다.
  • 초기값을 주어야 하는 경우임에도 초기값을 주지 않았을 경우
  • 결괏값에 대한 연산 로직이 잘못됐다.

이럴 경우에 결과가 쓸모없는 쓰레기 값이 주어집니다.

그래서 우리는 이 소스 코드를 수정을 해야 합니다.

그럼 수정한 소스 코드를 보여드리도록 하겠습니다.

#include <stdio.h>

int main()

{
  int x, y, z, sum = 0;
  printf("3개의 정수를 입력하세요 (x, y, z) : ");
  scanf("%d %d %d", &x, &y, &z);

  sum += x;
  sum += y;
  sum += z;

  printf("3개 정수의 합은 %d\n", sum);

  return 0;
}

보시면 세 정수의 합, 다시 말해 결과를 나타내는 sum에다가 초기값을 0으로 주었습니다.

일단 sum값을 0으로 두어서 연산을 진행하겠다는 뜻입니다.

그리고 여기에서 sum의 연산을 어떤 식으로 할 것인 지에 대한 코드가 적혀있는데, 저런 연산 부호를 처음 보실 겁니다.

이건 그냥 더한다는 뜻입니다.

이렇게 쓰는 연산자들이 몇 가지가 있습니다.

  • += : 더해서 결과를 얻겠다.
  • -= : 빼서 결과를 얻겠다.
  • *= : 곱해서 결과를 얻겠다.
  • /= : 나눠서 몫에 대한 결과를 얻겠다.
  • %= : 나눠서 나머지에 대한 결과를 얻겠다.

이런 식으로 많이 씁니다.

그래서 저 sum에 관한 연산 과정을 해석하자면 x + y + z가 됩니다.

어떤 식으로 쓰던지 본인이 편한 방법을 써서 계산하시면 됩니다.

그럼 결과 화면을 같이 볼까요?

3개의 정수를 입력하세요 (x, y, z) : 10 20 30
3개 정수의 합은 60

이렇게 결과 화면에 우리가 의도한 값인 세 정수의 합이 제대로 뜨는 것을 볼 수 있습니다.

이렇게 초기값을 선언을 해주는 것이 가끔은 꼭 필요할 때가 있습니다.

반응형

 

2. 태양빛 도달 시간 계산하기

이번에는 태양빛이 지구까지 도달하는 시간을 한 번 계산해 보려 합니다.

그럼 우리는 이제 생각을 해봐야 합니다.

일단 여기에 필요한 변수들을 정해야 합니다.

필요한 변수는 태양빛이 지구까지 닿는 시간을 구하는 것이기 때문에 빛의 속도, 그리고 태양과 지구까지의 거리, 도달 시간에 대한 변수가 필요합니다.

그리고 이 자료형은 정수로 나타낼 수 없습니다.

그 이유는 정수처럼 딱 떨어지는 숫자가 아니기 때문입니다.

그래서 출력을 할 때도 형식 지정자를 %f나 %lf로 받아줍니다.

또한, 결과는 태양빛이 지구까지 도달하는 시간을 구하는 것이기 때문에 그에 대한 공식을 세워서 결과를 어떻게 도출할 것인지 정해줘야 합니다.

그래서 시간을 구하는 것이기 때문에 거, 속, 시 공식을 활용해야 하죠.

  • 태양빛이 지구까지 도달하는 시간 : 태양과 지구 사이의 거리 / 빛의 속도

이렇게 나오겠죠?

시간을 구하는 공식은 거리 / 속력이니까요.

그러면 이를 토대로 한 번 소스 코드를 작성해보도록 하겠습니다.

#include <stdio.h>

int main()

{
  double l_speed = 300000; // 빛의 속도(300000km/sec)
  double s_e_distance = 149600000; // 태양과 지구 사이의 거리
  double time;

  time = s_e_distance / l_speed;

  printf("빛의 속도는 %.2lf km/s\n", l_speed);
  printf("태양과 지구 사이의 거리는 %.2lf km\n", s_e_distance);
  printf("태양빛이 지구까지 도달하는 시간은 %.2lf 초\n", time);

  return 0;
}

저는 이렇게 소스 코드를 작성했습니다.

일단 빛의 속도를 l_speed로 선언을 하고, 초기값을 빛의 속도인 300000km/sec으로 지정을 했습니다.

그리고 태양과 지구 사이의 거리를 s_e_distance로 선언을 하고, 그 실제 거리인 149600000km로 초기값을 지정했습니다.

그리고 이를 이용하여 태양빛이 지구까지 도달하는 시간을 구해야 하기 때문에 거, 속, 시 공식을 이용하여

시간을 구하는 공식인 거리 / 시긴을 적용해 태양과 지구 사이의 거리(s_e_distance) / 빛의 속도(l_speed)로 결과를 낼 수 있도록 정의했습니다.

또한, 소수점이 너무 많으면 수가 더러워지기 때문에 출력을 할 때 소수점 아래 두 번째 자리까지만 출력을 하도록 %.2lf로 설정을 했습니다.

그리고 double형을 썼기 때문에 좀 더 정밀하게 뽑아내기 위해 %f 대신에 %lf로 형식 지정을 해줬습니다.

그래서 결과는 이런 식으로 나왔습니다.

빛의 속도는 300000.00 km/s
태양과 지구 사이의 거리는 149600000.00 km
태양빛이 지구까지 도달하는 시간은 498.67 초

이렇게 소수점 아래 두 번째 자리 이후에는 아무것도 나오지 않고,

각각 빛의 속도, 태양과 지구 사이의 거리, 마지막으로 태양빛이 지구까지 도달하는 시간에 대한 값 까지 잘 나온 걸 볼 수 있습니다.

이렇게 큰 범위의 수를 다룰 때는 float형보다는 double형을 쓰는 것이 비트 할당이 더 많이 되기 때문에 훨씬 세밀하게 결과를 도출해낼 수 있습니다.

 

여기까지 변수의 초기값 선언을 이용한 예제를 한 번 같이 풀어보는 시간을 가져봤는데요, 도움이 되셨나요?

다음 포스팅에서는 수식과 연산자에 대하여 간단히 알아보는 시간을 가져보도록 하겠습니다.

긴 글 읽어주신 독자분들께 진심으로 감사합니다 ~

반응형

댓글