• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:C言語で内積、、、わかりません。)

C言語で内積の計算方法を解説

このQ&Aのポイント
  • C言語で内積の計算方法を解説します。ベクトルの要素数を指定し、配列に要素を格納します。その後、関数を使用して内積の計算を行います。最後に結果を表示します。
  • 内積計算には、ベクトルの要素数に合わせた配列を作成し、要素を格納します。関数を使用して、ベクトル同士の要素を掛け合わせて合計を求めます。最後に結果を表示します。
  • C言語で内積を計算する方法を紹介します。まず、ベクトルの要素数に合わせた配列を作成し、要素を格納します。その後、関数を使用して、ベクトル同士の要素を掛け合わせて合計を求めます。最後に結果を表示します。

質問者が選んだベストアンサー

  • ベストアンサー
  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.4

> int i; > double ans,a[10]; > > ans=0; > for(i=0 ; i<10 ; i++) { > a[i]=vecter1[i]*vecter2[i]; > ans=ans+a[i]; > } 答え、できてるじゃないですか。 ついでに言えば、 a[i]はここでしか使わないのでわざわざ用意する必要はなく ans=ans + vecter1[i]*vecter2[i]; また、 +=演算子を使えば ans +=vecter1[i]*vecter2[i]; 計算が合わないのは、 naiseki_fの引数が「intの配列」になっているため、 doubleの数値が正しく関数に渡せてないためです。 あとは、問題にある「「要素数」を関数 naiseki_f に引数として渡す」の部分だけです。

drite000
質問者

お礼

な、なるほど、、、!!!! 詳しく教えていただきありがとうございました<(_ _)> 無事プログラム完成させることができました。

その他の回答 (4)

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.5

追記: printfの書式の%fは対応する型はdoubleです。 マニュアルにもちゃんと「double」と明記されています。 scanf系関数で%fがfloat、%lfがdoubleで、それと混同する人が多かったので、 最近では、printfで%lfでも表示できるようになっています。 doubleより大きなlong doubleに対応するのは%Lfです。

  • Tasuke22
  • ベストアンサー率33% (1799/5383)
回答No.3

追記。 C/C++コンパイラがある程度勝手にやってくれますが、 やはり型はきちんと使う方がすっきりするでしょう。 doubleの書式は %lf です。

  • Tasuke22
  • ベストアンサー率33% (1799/5383)
回答No.2

mainのvecter1,vecter2はdoubleで定義されているから小数点以下が 入れられますが、naiseki_fの引数はintにして小数点以下を削って いますよね。全てdoubleで統一しない理由は何かありますか?

drite000
質問者

お礼

理由はありません、、。 あのなかの引数は全部「int」と勝手に解釈してたのが原因でした。 回答ありがとうございました!

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.1

わからないのは、内積を求める公式ですか? → 数学の教科書でも読みなおしてください。「C言語の問題」ではありません。 それとも、公式はわかるが、それをプログラムにできないということですか? → 公式は、かけ算と足し算しか使われていません。その公式通りに要素を順番に処理していけば簡単に求まるはずなのですが。 「順番に処理」といえば、それっぽいのが書いてありますよね。 一つヒントを出すなら、 > double ###; > return (######); ここは「変数として使えて他と区別できればなんでもよい」です。 例えば、 double ans ; として、計算結果をansに入れるようにして return ans ; です。 ansじゃなくても、retでもkotaeでもnaisekiでもいいです。 でも, naiseki_fは関数名として宣言されているので使えません。 > double配列 vecter1 のデータと double配列 vecter2 のデータ、 > および、 vecter1,vecter2 の「要素数」を関数 naiseki_f に > 引数として渡す。 とありますが、関数naiseki_fはそのように宣言されていません。 このままでは10次元ベクトルしか計算できません。

drite000
質問者

補足

公式はわかります。 >公式通りに要素を順番に処理 これがわからないのです。 vecter1[i]*vecter2[i]に答えをどうvecter1[i+1]*vecter2[i+1]の答えを足すのか、、、。 /* 内積を計算 */ double naiseki_f(const int vecter1[],const int vecter2[]) { int i; double ans,a[10]; ans=0; for(i=0 ; i<10 ; i++) { a[i]=vecter1[i]*vecter2[i]; ans=ans+a[i]; } return (ans); } 自分なりにやってみたのですが答えが 0.500 0.240 0.480 0.340 0.540 0.260 0.320 0.780 0.320 0.430 0.460 0.670 0.880 0.880 0.450 0.950 0.900 0.450 0.230 0.750 内積=4683257506.000 となりわけわからなくなってます。