ページ 11

C言語 配列 数の大きさ

Posted: 2022年9月03日(土) 16:01
by 田中
こんにちは。
問題は以下の通りです。
「入力する整数の個数nとn個の整数を入力した後、何番目の整数かを
入力してその整数が大きい方から何番目の整数かを表示するプログラム。
ただし、以下の要件を満たすこと。

(要件)
整数の配列a[]とその要素数nと順位を知りたい要素の位置idxを引数として、
大きい順の順位を戻り値とする関数rank(int a[], int n, int idx)を定義して
利用する。一番大きな値の順位を1番とする。グローバル変数は使わない。」

一応プログラムを使ったのですがうまくいきませんでした。
入力値として
10
78 82 65 73 88 56 90 92 70 68
6
を入力すると10位というのが出てきてほしいのですが9位という結果が出てきてしまいます。
間違っている点やアドバイスよろしくお願いします。

コード:

 
 #include <stdio.h>

int rank(int a[], int n, int idx)
{
	int ranking=1;
	
	for(int i=0; i<n; i++){
		if(a[i]>a[idx]) ranking++;
	}
	return ranking;
}

int main(void){
	int n, idx;
	int a[64];
	
	scanf("%d", &n); //読み込み個数
	for(int i=0; i<n; i++){
		scanf("%d", &a[i+1]);
	}
	
	scanf("%d",&idx); //何番目
	printf("順位: %d\n", rank(a,n,idx));
	
	return 0;
}
  

Re: C言語 配列 数の大きさ

Posted: 2022年9月03日(土) 19:18
by box
rank()「だけ」示されましても、
rank()を「どうやって」使っているかがこちらには全く伝わりません。
main()などを含め、書いたコードを「全部」見せてください。

Re: C言語 配列 数の大きさ

Posted: 2022年9月03日(土) 20:03
by みけCAT
box さんが書きました:
1年前
rank()「だけ」示されましても、
rank()を「どうやって」使っているかがこちらには全く伝わりません。
main()などを含め、書いたコードを「全部」見せてください。
main()を含めたコンパイル可能なコードが提示されていますが、これだけでは不満なのでしょうか?
「書いたコードを『全部』」とは、この問題に限らず、生まれてから今までに書いたコードを全部でしょうか?
田中 さんが書きました:
1年前
間違っている点やアドバイスよろしくお願いします。
iが0以上n未満という同じループで、
main関数ではa[i+1]に読み込んでいるのに、rank関数ではa[i​]の値を参照しているので、
・不定の値a[0]を参照する
・読み込んだ値a[n]を参照しない
ため、誤動作の原因となります。

rank関数において、
・main関数と同様にa[i+1]を参照するようにする
・ループの範囲を1以上n以下にする
のどちらか1個を行うとよいでしょう。
(1個だけ行い、両方は行わないでください)

Re: C言語 配列 数の大きさ

Posted: 2022年9月04日(日) 10:15
by 田中
田中 さんが書きました:
1年前
間違っている点やアドバイスよろしくお願いします。
iが0以上n未満という同じループで、
main関数ではa[i+1]に読み込んでいるのに、rank関数ではa[i​]の値を参照しているので、
・不定の値a[0]を参照する
・読み込んだ値a[n]を参照しない
ため、誤動作の原因となります。

rank関数において、
・main関数と同様にa[i+1]を参照するようにする
・ループの範囲を1以上n以下にする
のどちらか1個を行うとよいでしょう。
(1個だけ行い、両方は行わないでください)
[/quote]

分かりました。アドバイスありがとうございます!

Re: C言語 配列 数の大きさ

Posted: 2022年9月04日(日) 17:55
by box
main()を含めたコンパイル可能なコードが提示されていますが、これだけでは不満なのでしょうか?
「書いたコードを『全部』」とは、この問題に限らず、生まれてから今までに書いたコードを全部でしょうか?
おお、これは失礼なことをしてしまいました。
申し訳ありません。>質問者さん