プロが教えるわが家の防犯対策術!

(1) scanf を用いて、5個の数を入力すると合計と平均を計算し出力するプログラムを作成せよ。

(2) 1990年比 温室効果ガス排出量を25%削減する事を目標とするとする。
以下は1990年の排出量を入力すると目標値を計算するプログラムであるが
正しく動かない。正しく動くよう修正せよ。

#include <stdio.h>
int main()
{
double co2_amount_in_1990;
double co2_amount_target;

puts("1990年時の温室効果ガス排出量は何トン?");
scanf("%lf",&co2_amount_in_1990);

co2_amount_target=((100-25)/100)*co2_amount_in_1990;

printf("目標値は %f トンです",co2_amount_target);
}

(3)
消費税を5%とする。
2個の物を買うときに一緒に買う場合と、別々に会計をする場合と
消費税の1円未満の切り捨てにより、値段が変わることがある。
(例: 税抜き価格 30円の物と50円の物を一緒に買うと、84円だが、
別々に会計すると、31円+52円=83円となる。)

2個の物の税抜き価格をそれぞれ入力して、
一緒に買う場合と、別々に会計をする場合の税込み合計価格を
表示するプログラムを作成せよ。

A 回答 (3件)

とりあえず(1)だけ作ってみました。


コメントはあえて入れていないので、自分で解析してください。

#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <stdbool.h>
#include <assert.h>
#include <float.h>

#define STR(x) STR_(x)
#define STR_(y) #y
#define N 255

bool input(long double *p)
{
 char buf[N+1];
 bool result = false;

 if (scanf("%" STR(N) "s", buf) < 1)
  goto error_exit;

 char *endptr;
 long double value;
 errno = 0;
 value = strtold(buf, &endptr);
 if (errno != 0 || *endptr != '\0')
  goto error_exit;

 assert(p != NULL);
 *p = value;
 result = true;

error_exit:
 scanf("%*[^\n]%*c");
 return result;
}

int main(void)
{
 long double sum = 0;

 for (int i = 0; i < 5; )
 {
  long double value;
  if (input(&value))
  {
   if (sum > 0 && value > 0 || sum < 0 && value < 0)
   {
    if (LDBL_MAX - fabsl(sum) < fabsl(value))
    {
     fputs("overflow\n", stderr);
     return EXIT_FAILURE;
    }
   }
   sum += value;
   ++i;
  }
  else
  {
   fputs("エラー\n", stderr);
  }
 }
 printf("合計 = %Lf\n", sum);
 printf("平均 = %Lf\n", sum/5);

 return EXIT_SUCCESS;
}
    • good
    • 0

>誰かこの課題やってくれませんか?


嫌だ。
課題の丸投げ行為は、一番嫌われる行為。
どこまでやって、どこがわからないのか、動かないのかを自分で作ったソースを提示して質問するのが基本。
でないと、どこがどうわかっていないのか、こちらが判断できない。

ヒントだけ。
1.
取得した値を加算していけば合計は求められる。
求めた合計を取得した回数で割れば平均が求められる。

2.
#1のとおり。

3.
提示されている例をそのまま初期値として使用し、
「合計してから」と「個別」を算出する。
    • good
    • 0

丸投げをやってくれる人はあまりいないと思います。


自分である程度プログラムしてそのコードをのせるとほぼ回答がつきます。
とりあえず(2)のヒントだけ
(100-25)/100
の部分は整数演算のため少数以下が切り捨てられ、結果0となります。
ここを少数になるように変えればいいでしょう。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!