掲示板利用宣言

 次のフォームをすべてチェックしてからご利用ください。

 私は

 題名と投稿者名は具体的に書きます。
 課題の丸投げはしません。
 ソースの添付は「HTML変換ツール」で字下げします。
 返信の引用は最小限にします。
 環境(OSとコンパイラ)や症状は具体的に詳しく書きます。
 返信の付いた投稿は削除しません。
 マルチポスト(多重投稿)はしません。

掲示板2

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧

No.25514

最大値の表示
投稿者---tou(2006/01/20 20:32:46)


#include    <stdio.h>
#define N   5

    double  ave(int *x){
        double  y=0;
        int     i;

        for(i=0;i<N;i++){
            y=y+*(x+i);
        }

        y=y/(N);
        return(y);
}

int    main(void)
{
        int     a[N],i;
        double  heikin;
        int     max;

        for(i=0;i<N;i++){
            scanf("%d",&a[i]);
        }

        heikin=ave(a);
        printf("平均=%d\n",heikin);
        
        max=(a);
        printf("最大値=%d\n",max);

}


キーボードから入力した数値の中でもっとも大きな数字だけを表示できるようにしたいのですが、正しい数字が出てきません。どのように入力するのが正しいのでしょうか?申し訳ありませんが教えてください。
環境はwindowsXP、コマンドプロンプトです。


この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:最大値の表示 25517 Blue 2006/01/20 21:26:17
<子記事> Re:最大値の表示 25518 fuku 2006/01/20 21:29:21
<子記事> Re:最大値の表示 25520 tou 2006/01/20 22:00:34


No.25517

Re:最大値の表示
投稿者---Blue(2006/01/20 21:26:17)


> ave
が参考にはならないのでしょうか?

int saidai( int* x ){
    int y;
	
    for(i=0;i<N;i++){
        /*
            ここで最大値を求める
        */
    }
	
    return (y);
}
てな感じになるのは考え付かなかったのでしょうか?



この投稿にコメントする

削除パスワード

No.25518

Re:最大値の表示
投稿者---fuku(2006/01/20 21:29:21)


>キーボードから入力した数値の中でもっとも大きな数字だけを表示できるようにしたいのですが、正しい数字が出てきません。どのように入力するのが正しいのでしょうか?申し訳ありませんが教えてください。
>環境はwindowsXP、コマンドプロンプトです。

最大値を求める処理が無いように思えるのですが・・
max = (a)
これですか?
C言語にこんな文法は無いと思いますよ
コンパイルできましたか?

ちなみに平均値は double型 なので %lf にしないと正しく表示されない


この投稿にコメントする

削除パスワード

No.25519

Re:最大値の表示
投稿者---Blue(2006/01/20 21:36:34)


> max = (a)
> C言語にこんな文法は無いと思いますよ
maxがint*型なら文法的には問題ないかと。
ただし、やりたいことではないでしょうが。


この投稿にコメントする

削除パスワード

No.25521

Re:最大値の表示
投稿者---fuku(2006/01/20 22:25:24)


>maxがint*型なら文法的には問題ないかと。
>ただし、やりたいことではないでしょうが。

ご指摘ありがとうございます
その通りですね
でしゃばりすぎました



この投稿にコメントする

削除パスワード

No.25520

Re:最大値の表示
投稿者---tou(2006/01/20 22:00:34)


色々と申し訳ありません。
最初はifを使って作り上げていこうとしてうまくいかず、本などで調べつつ作っていたのですが、先にあげた形になる頃には完全に思考停止状態で思いつきもしませんでした。

blueさん、fukuさんのおかげでなんとかなりそうです。本当にありがとうございます。
後、コンパイル自体は警告が出ますが出来ました。


この投稿にコメントする

削除パスワード

No.25522

Re:最大値の表示
投稿者---とろり(2006/01/20 22:55:07)


こんばんは

> コンパイル自体は警告が出ますが出来ました。
警告は全部つぶした方が良いですよ。

自力で解かれているようですので、参考としてのせておきます。
あくまで参考として見てくれればうれしいです。

#include <stdio.h>

#define N   5

double ave(int*);
int max(int*);

int main(void)
{
    int i;
    int score[N];
    double average;
    int maximum;

    for (i = 0; i < N; i++) {
        printf("input score. ->");
        scanf("%d", &score[i]);
    }

    average = ave(score);
    printf("ave = %lf\n", average);
    maximum = max(score);
    printf("max = %d\n", maximum);

    return 0;
}

double ave(int *score)
{
    int i;
    int sum;
    int *tmp_score;

    for (i = sum = 0, tmp_score = score; i < N; i++, tmp_score++) {
        sum += *tmp_score;
    }

    return (double)sum / N;
}

int max(int *score)
{
    int i;
    int max;
    int *tmp_score;

    for (i = max = 0, tmp_score = score; i < N; i++, tmp_score++) {
        if (max < *tmp_score) {
            max = *tmp_score;
        }
    }

    return max;
}



この投稿にコメントする

削除パスワード

No.25526

Re:最大値の表示
投稿者---tou(2006/01/20 23:33:05)


>>警告は全部つぶした方が良いですよ。
ハイ!これからはちゃんと警告を出さないようにやっていくことにします。
今後のためにも、とろりさんが提示してくださったプログラムを参考にして自力で頑張ってみようと思います。

ところで、これぐらいの長さのプログラムの場合はプロトタイプ宣言をしっかりやっておいた方がよろしいのでしょうか?



この投稿にコメントする

削除パスワード

No.25527

Re:最大値の表示
投稿者---fuku(2006/01/21 00:16:39)


>ところで、これぐらいの長さのプログラムの場合はプロトタイプ宣言をしっかりやっておいた方がよろしいのでしょうか?

行数に限らず,やるべきだと私は思いますよ.




この投稿にコメントする

削除パスワード

No.25530

Re:最大値の表示
投稿者---RiSK(2006/01/21 00:55:44)


>ところで、これぐらいの長さのプログラムの場合はプロトタイプ宣言をしっかりやっておいた方がよろしいのでしょうか?

複数の関数が互いに呼び合うならともかく,
呼び出しが一方向なら不要。
先に定義すれば型チェックもやってくれます。

型チェックは大切ですが,不要なインタフェースを
公開するのも問題ですから,バランスを考えるべきだと思います。


この投稿にコメントする

削除パスワード

No.25543

Re:最大値の表示
投稿者---tou(2006/01/21 07:51:45)


fukuさんとRiSKさんの意見から考えると、プロトタイプ宣言にもメリットデメリットがあるから、状況に合わせて作っていくのが必要なんですね。

細かな疑問にも答えていただきどうもありがとうございました。


この投稿にコメントする

削除パスワード

No.25546

Re:最大値の表示
投稿者---επιστημη(2006/01/21 10:02:54)


>fukuさんとRiSKさんの意見から考えると、プロトタイプ宣言にもメリットデメリットがあるから、状況に合わせて作っていくのが必要なんですね。

呼ばれる側を先に定義しておけば(それがプロトタイプ宣言を兼ねるから)
プロトタイプ宣言は必要なくなるってことで。

> 型チェックは大切ですが,不要なインタフェースを
> 公開するのも問題ですから,バランスを考えるべきだと思います。

これをデメリットと解釈したのかな?
プロトタイプ宣言のデメリットではなく、
不要な宣言の「公開」を問題視しているのだが。



この投稿にコメントする

削除パスワード

No.25547

Re:最大値の表示
投稿者---tou(2006/01/21 11:07:34)


>>επιστημηさん
はい、おっしゃると通り私はそこがデメリットなのかな、と解釈していました。
では「公開」そのものが問題というのは作る段階の問題というより完成してからプログラムを見る(見直す)時、不要なものがあると良くない、ということなのでしょうか?


この投稿にコメントする

削除パスワード

No.25570

Re:最大値の表示
投稿者---επιστημη(2006/01/21 18:55:52)


>では「公開」そのものが問題というのは作る段階の問題というより完成してからプログラムを見る(見直す)時、不要なものがあると良くない、ということなのでしょうか?

「公開した以上、好き勝手に呼ばれてしまう」ということです。
たとえそれがそのコードの中で"だけ"使いたいものだとしても。

# ヘッダを書いて複数のソースコードに分割するようになればわかる。



この投稿にコメントする

削除パスワード

No.25580

Re:最大値の表示
投稿者---RiSK(2006/01/21 22:29:54)


>επιστημηさん

フォローありがとうございます。

>touさん

誤解を招く表現でした。お詫びします。

επιστημηさんの仰るとおり

>「公開した以上、好き勝手に呼ばれてしまう」ということです。
>たとえそれがそのコードの中で"だけ"使いたいものだとしても。

です。

私が言いたかったことは
型チェック→必須
インタフェースの公開→最小
でした。


この投稿にコメントする

削除パスワード

No.25548

Re:最大値の表示
投稿者---shu(2006/01/21 11:36:08)


>ところで、これぐらいの長さのプログラムの場合はプロトタイプ宣言をしっかりやっておいた方がよろしいのでしょうか?

このタイミングでする質問じゃない。

まずは、最大値の表示。


この投稿にコメントする

削除パスワード

No.25587

Re:最大値の表示
投稿者---tou(2006/01/21 23:41:26)


>>επιστημηさん、RiSKさん
もはや題名とは違うものになってしまった質問にも答えていただき本当にありがとうございます。
現段階の私ではイメージし切れないので理解は難しそうですが、心に留めておこうと思います。

>>shuさん
確かにこのタイミングで質問する内容ではありませんでした。
申し訳ありません。


この投稿にコメントする

削除パスワード

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧