- ベストアンサー
C言語の宿題なのですが・・・
問題は「ベクトルの和を求めよ。ただし入力部、出力部、計算部を手続き型で記述せよ」というものです。 例として、(1,2,3)と(4,5,6)と入力すると、(1+4,2+5,3+6)の計算で(5,7,9)が表示されるそうです。 ある程度自分でも書いてみたのですが、単純に計算部分の書き方が分からなかったり、その他の部分も不十分なようです。 //-------------------------------------------------------------- #pragma hdrstop //-------------------------------------------------------------- #pragma argsused #include<stdio.h> #include<conio.h> #define N 3 /*---Input Vector Function---*/ void ReadVector(int vec[N]) { int i; for(i=1;i<=N;i++) scanf("%d",&vec[]); } /*---Output Vector Function---*/ void WriteVector(int vec[]) { int i; for(i=1;i<=N;i++) printf("%d"vec[]); } /*---Plus Function of Vector---*/ void VecPlus(int vec1[],int vec2[],int vec3[]) { int i; for(i=1;i<=N;i++)  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ?  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ } /*---Main Program---*/ int main(void) { int Vector1[N+1],Vector2[N+1],Vector3[N+1]; ReadVector(vector1); ReadVector(vector2); VecPlus(vector1,vector2,vector3); WriteVector(vector3); getch(); return 0; } //-------------------------------------------------------------- もし宜しかったら、どなたかアドバイスしていただけませんでしょうか。 よろしくお願いいたします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
今回の場合、main関数内でN+1で配列を確保されているので、配列のアクセスに関しては問題ありません。 数学的にベクトルを表現したいという意図で添字を1から始めているのであれば設計上のことなのでとやかく言いませんが、比較的効率を重視するC言語では0ベースで書くのが望ましいかと思います。 ReadVector関数のscanf WriteVector関数のprintf は現状ではコンパイルエラーになるでしょう。添字なしで配列にアクセスできません。(printfのカンマも忘れずに) VecPlus関数は vec3[i] = vec1[i] + vec2[i]; のような実装になると思いますが、引数の入出力方向を明示したい場合 void VecPlus( const int vec1[], const int vec2[], int vec3[] ); のように書くと良いかと思います。 最後ですが、C言語はケースセンシティブです。 変数vector1~3が宣言されていません。
その他の回答 (1)
- redfox63
- ベストアンサー率71% (1325/1856)
普通 Cの配列は 0ベースで記述します int nVect[3]; なら nVet[0],nVet[1],nVet[2] の3要素を確保します ですから for( i=1; i <= N; i++ ) といったアクセスはしません この方法ですと 確保していない nVet[3] をアクセスしてしまいます 出力部分は 単に vec1[0] と vec2[0]の和を vec3[0]に代入 と言った事になると思います 添え字 1や2に関しても同様の処理を行えば良いでしょう