宿題です。お手上げなのでよろしくお願いします。

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
わからぬ

宿題です。お手上げなのでよろしくお願いします。

#1

投稿記事 by わからぬ » 16年前

下記のプログラムを配列変数を使って
作り直せ!!!

#include<stdio.h>

void main(void)
{
float a,b,c,d,e;
float sum,avar;

printf("kokugo=");scanf("%f",&a);
printf("sansu=");scanf("%f",&b);
printf("eigo=");scanf("%f",&c);
printf("shakai=");scanf("%f",&d);
printf("rika=");scanf("%f",&e);

sum=a+b+c+d+e;
avar=sum/5;

printf("合計=%f\n",sum);
printf("平均=%f\n",avar);
}

kazuoni

Re:宿題です。お手上げなのでよろしくお願いします。

#2

投稿記事 by kazuoni » 16年前

規約読みましたか?
丸投げも禁止ですし、コードの乗せ方も規約違反です。
単に一次元配列を用意して、それに値を渡せばよいだけだと思いますが。

もう一度自分なりに考えてみてください。
どこまで理解できて、どこで詰まっているのかなどを
細かく書くとよい回答が得られるかもしれません。
このあたりでも配列の勉強はできますよ。↓
http://www9.plala.or.jp/sgwr-t/c/sec02.html#s2-3

ベリ工

Re:宿題です。お手上げなのでよろしくお願いします。

#3

投稿記事 by ベリ工 » 16年前

>下記のプログラムを配列変数を使って
>作り直せ!!!

#これは質問ですか?それともヤレと命令しているのですか?
#非常に不愉快な書き込みですね。

とりあえず、配列を使えと言っているので
配列作って格納し、それをグルグル回して(ループして)
合計値を計算し、それから平均を求めるだけでしょ。
何も難しくないですよ。分からないなら"C言語 配列"などで検索して
グーグル先生に聞くと良いよ。

lbfuvab

Re:宿題です。お手上げなのでよろしくお願いします。

#4

投稿記事 by lbfuvab » 16年前

Hint: 配列、for文
ぐらいですね。
後、
「どこがどう分からないのでお願いします」ならいいですが、
「さっぱり分かりません。解説してください。」は怠惰と思われてしまいます。

たかぎ

Re:宿題です。お手上げなのでよろしくお願いします。

#5

投稿記事 by たかぎ » 16年前

#include <iostream>
#include <algorithm>
#include <numeric>
#include <utility>

template <typename T>
void input(std::pair<const char*, T>& arg)
{
  std::cout << arg.first << "=";
  std::cout.flush();
  std::cin >> arg.second;
}

template <typename T>
T add(T lhs, const std::pair<const char*, T>& rhs)
{
  return lhs + rhs.second;
}

template <typename T, class Iterator>
void sub(Iterator first, Iterator last)
{
  std::for_each(first, last, &input<T>);

  T sum = std::accumulate(first, last, T(), &add<T>);
  T ave = sum / (last - first);
  std::cout << "合計=" << sum << std::endl;
  std::cout << "平均=" << ave << std::endl;
}

int main()
{
  typedef std::pair<const char*, float> element;
  element array[/url] =
  {
    element("国語", 0), element("算数", 0), element("英語", 0),
    element("社会", 0), element("理科", 0),
  };
  sub<float>(array + 0, array + sizeof(array)/sizeof(array[0]));
}
> 作り直せ!!!

とのことだったので、全面的にC++で作り直してみました。
難しかったのは、元のプログラムの動作が未定義だったのでどう再現させればよいのか分からなかった点です。
仕方がないので適当に解釈しました。
あと、教科名は日本語にしてみました。

管理人

Re:宿題です。お手上げなのでよろしくお願いします。

#6

投稿記事 by 管理人 » 16年前

たかぎさんらしい厳しくも正確な解釈のお答えですね^^;
本人を知っている先生にこれを提出したら十中八九本人が書いたものじゃないことはバレるでしょうけど、
大人数授業で答えだけ集めて採点している先生なら100点付けてしまうかもしれませんね・・。
(C++OKなのだとしたら)


恐らく「作り直せ!!!」というのは回答者に向けて言っているわけではなく、
問題文を書いた後何となくビックリマーク付けたくなっただけなんだとは思いますが、
質問する時はもっと丁寧に文章をお書きになったほうがいいかと思います。


作り直せという課題だということは、これは質問者さんが作ったプログラムではなく、
配布されたプログラムなわけですね?
ではどこまでわかって、どこがわからないのか、
自分はどのように努力したのか、まず明確にしてみて下さい。
少しずつ解いていけば必ず解けますから頑張ってみましょう。
後、掲示板を利用する時は一応規約に目を通してください。

たかぎ

Re:宿題です。お手上げなのでよろしくお願いします。

#7

投稿記事 by たかぎ » 16年前

> (C++OKなのだとしたら)

仕方がないのでCでも作ってみました。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>

int main(void)
{
  char array[/url] = "国語=/算数=/英語=/社会=/理科=";
  float sum = 0;

  for (char *s = strtok(array, "/"); s != NULL; s = strtok(NULL, "/"))
  {
    fputs(s, stdout); fflush(stdout);

    char d[10];
    fgets(d, 10, stdin);

    char *endptr;
    errno = 0;
    float x = strtof(d, &endptr);
    if (errno != 0 || *endptr != '\n')
    {
      fprintf(stderr, "error\n");
      return EXIT_FAILURE;
    }
    sum += x;
  }
  printf("合計=%f\n", sum);
  printf("平均=%f\n", sum/5);
}
出血大サービスで、配列変数を二つも使っています。

non

Re:宿題です。お手上げなのでよろしくお願いします。

#8

投稿記事 by non » 16年前

strtofなんて、初めてみました。人のプログラムを見るのは新しい発見がありますね。

Mist

Re:宿題です。お手上げなのでよろしくお願いします。

#9

投稿記事 by Mist » 16年前

変数を先頭で宣言してないからCPPじゃないとコンパイルできないのでは?

Mist

Re:宿題です。お手上げなのでよろしくお願いします。

#10

投稿記事 by Mist » 16年前

ごめんなさい。
C99では途中宣言できたんでしたっけ(^^;

使わないからぜんぜん実に付かないなぁC99。

たかぎ

Re:宿題です。お手上げなのでよろしくお願いします。

#11

投稿記事 by たかぎ » 16年前

> C99では途中宣言できたんでしたっけ(^^;

そういうことです。
課題丸投げの質問に対して、C90で通用するものを回答するほどお人よしではありません。
配列変数の使い方も、多分意図から外れていますし。

たかぎ

Re:宿題です。お手上げなのでよろしくお願いします。

#12

投稿記事 by たかぎ » 16年前

> 使わないからぜんぜん実に付かないなぁC99。

課題丸投げの質問は、C99を練習するよい機会です。
どうせ規約を守って環境を書いてくる人は少ないので、C99で文句を言われる筋合いはありませんね。

.

Re:宿題です。お手上げなのでよろしくお願いします。

#13

投稿記事 by . » 16年前

色んな掲示板を見て思うのですが、いたらない質問者は沢山いますけど、
上級者が「どうだお前にはわからないだろう、でもこれは答えとしてあってるんだぜ」みたいな
自己満足の投稿をするのはあまり見ていて気持ちいいものじゃないです。

いたらない初心者をなるべく暖かくよい方向に向かわせようとするのが
ここの掲示板の良いところだと思いますしここの方針だと思います。

>どうせ規約を守って環境を書いてくる人は少ないので、C99で文句を言われる筋合いはありませんね。

ですから、発展的なコードの提示は色んな人の参考になっていいと思いますが、
こういう理由をわざわざ述べられるのはちょっと残念です。

バグ

Re:宿題です。お手上げなのでよろしくお願いします。

#14

投稿記事 by バグ » 16年前

うーん、今回の件はトピ主がヒド過ぎますからねぇ…質問じゃなくて命令だし…

それに、たかぎさんのコードは規約にのっとったもので、間違った事は書いてませんし、細かい部分にまで気配りが感じられて、非常に勉強になりますよ。

管理人

Re:宿題です。お手上げなのでよろしくお願いします。

#15

投稿記事 by 管理人 » 16年前

まぁいちいち規約を読んでから掲示板を見たり書き込んだりしてくれる人はなかなか少ないと思いますし、
読んでいない人には次から読んで下さいね って感じですが、今回は常識的におかしい気もしますしね^^;
まともな質問が出来ない人に、まともな回答したくない(というかしたくても出来ない場合も)ということも
あるでしょうね。

なので質問者さん、もう一度トピを立て直してもいいので、
改めてきちんと質問してはどうでしょう?
もし自分にはプログラムなんかわからん! と決め付けてしまっているなら、
そんなことはありませんよ。やる気さえあればアドバイスをうけながら、
自分でも調べながら、少しずつといていけば誰でも必ず解けますから。
一緒に頑張ってみましょう。

たかぎ

Re:宿題です。お手上げなのでよろしくお願いします。

#16

投稿記事 by たかぎ » 16年前

> 「どうだお前にはわからないだろう、でもこれは答えとしてあってるんだぜ」みたいな

いや、(期待された)答えではないことは分かっているんです。
そもそも、課題丸投げの質問に対して、期待通りの回答が得られると考えるほうがどうかしています。

自分の仕事を丸投げにしてくる場合でも、それを解決することで、いくばくか世の中のためにでもなるのなら話は違ってくるのです。
今回の質問に関しては、まるっきり質問者さんの私的な事情だけですからね。
私利私欲のための仕事を人任せにする人に、手を差し伸べるような奇特な人はそう多くありません。

> いたらない初心者をなるべく暖かくよい方向に向かわせようとするのが
> ここの掲示板の良いところだと思いますしここの方針だと思います。

はい。規約にもそう書いていますね。
ただ、それを期待するなら規約ぐらいは読むべきです。

Haru

Re:宿題です。お手上げなのでよろしくお願いします。

#17

投稿記事 by Haru » 16年前

横から失礼します・・。

>色んな掲示板を見て思うのですが、いたらない質問者は沢山いますけど、

今回の件に関しては質問ではないのではと思うのは私だけでしょうか?(^^;


>自己満足の投稿をするのはあまり見ていて気持ちいいものじゃないです。

私的には正しい質問の仕方をすれば、正しい答えを教えてあげますよ!
といってるんだと捕らえています。

いけやん

Re:宿題です。お手上げなのでよろしくお願いします。

#18

投稿記事 by いけやん » 16年前

管理人さん

>もし自分にはプログラムなんかわからん! と決め付けてしまっているなら、
>そんなことはありませんよ。やる気さえあればアドバイスをうけながら、
>自分でも調べながら、少しずつといていけば誰でも必ず解けますから。
>一緒に頑張ってみましょう。

じ~んと来ました。

わからぬさん
以前、私もプログラムで解らない事があり
バ○さんや御○凪さんのお二方に「かなり」お世話になりました。
お二方以外の人のアドバイスもあり、プログラムは完成しましたよ。

ここが解らないと言うと具体的に教えて頂き
これは、どういう意味なんですか?
と、聞くと一回ググってみ?
それでも、~を調べたのですが、解りませんでした;;
と言うと、丁寧に教えて頂きました。

後で気づいたのですが、調べずに質問するのは、マナー違反だそうです。
ですが、調べる事により
調べる癖がつき、マナーも守れて、知識も付くと
考えれば一石三鳥では、ないでしょうか?


わからぬさん
がんばってみては、どうでしょうか?
みなさん優しいので、答えてくれますよ。

長文すいませんでした。
お二方、名前を出してすいませんでした。
不快な気持ちになったんでしたら、謝ります。

hoge

Re:宿題です。お手上げなのでよろしくお願いします。

#19

投稿記事 by hoge » 16年前

これで、いいんじゃね?
#include<stdio.h>

int main(void)
{
  float a[1],b[1],c[1],d[1],e[1];
  float sum[1],avar[1];

  printf("kokugo=");scanf("%f",a);
  printf("sansu=");scanf("%f",b);
  printf("eigo=");scanf("%f",c);
  printf("shakai=");scanf("%f",d);
  printf("rika=");scanf("%f",e);

  *sum=*a+*b+*c+*d+*e;
  *avar=*sum/5;

  printf("合計=%f\n",*sum);
  printf("平均=%f\n",*avar);
  return 0;
}

lbfuvab

Re:宿題です。お手上げなのでよろしくお願いします。

#20

投稿記事 by lbfuvab » 16年前

>hogeさん
なんという抜け道( ̄□ ̄;)!!
もう、感服してしまいましたwwwww

管理人

Re:宿題です。お手上げなのでよろしくお願いします。

#21

投稿記事 by 管理人 » 16年前

つくづく問題文をきちんと作ることの大切さを知りました・・w

でもまぁそこまで思いつく人は正当解釈でも解けますよね^^;

tk-xleader

Re:宿題です。お手上げなのでよろしくお願いします。

#22

投稿記事 by tk-xleader » 16年前

なるほど、これで題意は満たしますね。
ただこれでは出題者の意図を満たすかどうかは微妙ですね。

たかぎ

Re:宿題です。お手上げなのでよろしくお願いします。

#23

投稿記事 by たかぎ » 16年前

実は私もhogeさんとほぼ同じ方法を考えたのですが、書いても面白くないのでやめました。
他にも、
char kokugo[/url] = "kokugo=";
printf(kokugo);scanf("%f",&a);
とかも可能ですね。

閉鎖

“C言語何でも質問掲示板” へ戻る