ページ 11

c言語の二番目に大きい数字を表示するプログラムについて

Posted: 2016年6月23日(木) 00:55
by KA
Ç言語で最大値と二番目に大きい数字を求めるプログラムを作ったのですが一番初めに最大値を入力すると二番目に大きい数字をが入力できません
どうしたら解決しますか?

コード:

#include <stdio.h>
 
int main(void)
{
    int n,ten,t[100],cnt,i=0,max,scn;
    scanf("%d",&ten);
    while(ten!=999)
    {
    	printf("%d点\n",ten);
    	t[i]=ten;
    	i++;
    	scanf("%d",&ten);
    }
    n=i;
    max=t[0];
    scn=t[0];
    for(i=0;i<n;i++)
    {
    	if(max<t[i]){
    	scn=max;
    	max=t[i];}
    }
    printf("最高点=%d点\n",max);
    printf("二番目の点数=%d点\n",scn);
    printf("順番 得点\n");
    for(i=0;i<n;i++)
    {
    	if(t[i]==max)
    	printf("%3d  %3d 最高点\n",i+1,t[i]);
    	else if(t[i]==scn)
    	printf("%3d  %3d 二番目の点数\n",i+1,t[i]);
    	else
    	printf("%3d  %3d\n",i+1,t[i]);
    }
    return 0;
    
}

Re: c言語の二番目に大きい数字を表示するプログラムについて

Posted: 2016年6月23日(木) 01:21
by みけCAT
KA さんが書きました:一番初めに最大値を入力すると二番目に大きい数字をが入力できません
一番初めに最大値を入力しなければ二番目に大きい数字をが入力できる(原文ママ)とは限らないですよね。
例えば

コード:

100 200 150 999
という入力に対しても間違った出力をするでしょう。
KA さんが書きました:どうしたら解決しますか?
今のように無条件に最大値が更新されたら今までの最大値を二番目に大きい数字とみなすのではなく、

最大値より大きいか?-YES→これまでの最大値を二番目に大きい数字として、最大値を更新

NO

二番目に大きい数字より大きいか?-YES→二番目に大きい数字を更新

NO

更新しない

のようにするといいでしょう。
また、初期値は、データが足りない(0項目しかない、1項目しかない、同じ数値のみ)場合があることに気をつけつつ、
基本はとりあえず最初に見つかった2個の異なる数値を最大値と二番目に大きい数字としておくといいでしょう。
もちろん最大値の方が二番目に大きい数字より大きくなりようにしないといけません。

Re: c言語の二番目に大きい数字を表示するプログラムについて

Posted: 2016年6月23日(木) 02:03
by KA
条件を見なおして何とか解決することができました
アドバイスありがとうございます