ページ 11

c言語 もっとも多く投票された品を表示するプログラム

Posted: 2018年5月27日(日) 11:17
by a-mi
5つの商品の人気投票を行い、もっとも投票数が多かったものを品名(商品A~E)で表示するというプログラムを作りたいのですがうまくできません。
使用する変数が決められており、num,I,maxN,maxIです。

①5つの商品の商品名は配列Sにあらかじめ格納。流れ図中で配列Sの要素を出力すると商品名が出力。

②人気投票では商品A〜Eを0〜4に対応させその番号を入力。
この入力は(-1)になるまで行われ、入力ミスはないものと考える。

③入力された番号に応じ、配列N(要素数5個)に各商品の投票数を集計(3が入力されたらDの得票数を集計するN[3]に1加算)  配列Nの要素は集計前に全て0で初期化

④すべての入力が終わったら、Nに集計された投票数の最大値を求め、もっとも多かった商品名を出力。
得票数が同じものがあった場合は番号(添字)の小さい商品を出力。

コード:

#include <stdio.h>

int main(void){
	
	int num,I,maxN,maxI;
	char N[]="ABCDE";

	I=0;
	printf("投票を入力\n");
	scanf("%d",&num);
		while(num!=(-1)){
			N[I]=num;
			I=I++;
			scanf("%d",&num);
		}


		maxI=(-1);
		maxN=3;
			for(I=0;I<num;I++){
			if(maxN<N[I]){
			maxN=N[I];
			maxI=I;
			}
		}
		
		printf("もっとも票が入ったのは%d(数字)\n",maxI+1);
		printf("人気商品\n");
		printf("商品%p\n",&maxI+1);
	
	
return 0;
}

本来なら下記のように打つと、
「もっとも票が入ったのは3(数字)
人気商品
商品D」
と表示されます。

投票を入力
3
0
3
3
1
-1
もっとも票が入ったのは0(数字)
人気商品
商品0018FF54
続行するには何かキーを押してください . . .


よろしくお願い致します。

Re: c言語 もっとも多く投票された品を表示するプログラム

Posted: 2018年5月27日(日) 12:16
by box

コード:

            N[I]=num;
ABCDE
を数字(しかも文字コード)で上書きしていいんでしょうか。

コード:

            I=I++;
もしかして
I++;
がいいいとか。

コード:

            printf("商品%p\n",&maxI+1);
"%p"
を使っている意図は何ですか?

Re: c言語 もっとも多く投票された品を表示するプログラム

Posted: 2018年5月27日(日) 12:53
by a-mi
最終的に数字で出てきたもっとも多く投票された品を変換したかったのでABCDEをいれました。

配列なのでpを使ったのですが...

Re: c言語 もっとも多く投票された品を表示するプログラム

Posted: 2018年5月31日(木) 04:35
by かずま
a-mi さんが書きました:
1年前
①5つの商品の商品名は配列Sにあらかじめ格納。流れ図中で配列Sの要素を出力すると商品名が出力。
③入力された番号に応じ、配列N(要素数5個)に各商品の投票数を集計(3が入力されたらDの得票数を集計するN[3]に1加算)  配列Nの要素は集計前に全て0で初期化
これらの条件が無視されていますね。

コード:

#include <stdio.h>

int main(void)
{
    int num, I, maxN, maxI;
    char S[] = "ABCDE";             // <-- char N[] = "ABCDE";
    int N[5] = { 0 };               // 追加

    // I = 0;                       // 削除
    printf("投票を入力\n");
    scanf("%d", &num);
    while (num != -1) {
        N[num]++;                   // <-- N[I] = num; I = I++;
        scanf("%d", &num);
    }
    maxI = 0;                       // <-- maxI = -1;
    maxN = N[0];                    // <-- maxN = 3;
    for (I = 1; I < 5; I++) {       // <-- for (I = 0; I < num; I++) {
        if (maxN < N[I]) {
            maxN = N[I];
            maxI = I;
        }
    }
    printf("もっとも票が入ったのは%d(数字)\n", maxI);  // <-- maxI + 1
    printf("人気商品\n");
    printf("商品%c\n", S[maxI]);    // <-- "商品%p\n", &maxI + 1);
    return 0;
}
インデントをちゃんとしましょう。
インデントって何かわかりますか?