質問 |
||
| QNo.3981332 | C言語の宿題なのですが・・・ | |
|---|---|---|
| 質問者:yui-00 |
問題は「ベクトルの和を求めよ。ただし入力部、出力部、計算部を手続き型で記述せよ」というものです。 例として、(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; } //-------------------------------------------------------------- もし宜しかったら、どなたかアドバイスしていただけませんでしょうか。 よろしくお願いいたします。 |
|
困り度:
|
||
| 質問投稿日時: 08/04/28 00:53 |
||
回答良回答20pt |
|
| ANo.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が宣言されていません。 |
|---|---|
| 回答者:kusa_cw | |
| 種類:回答 どんな人:経験者 自信:参考意見 |
|
| 回答日時: 08/04/28 14:49 |
|
| |
| この回答へのお礼 | この回答にお礼をつける(質問者のみ) |
回答良回答10pt |
|
| ANo.1 | 普通 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に関しても同様の処理を行えば良いでしょう |
|---|---|
| 回答者:redfox63 | |
| 種類:アドバイス どんな人:専門家 自信:自信あり |
|
| 回答日時: 08/04/28 01:04 |
|
| |
| この回答へのお礼 | この回答にお礼をつける(質問者のみ) |