ピコ

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
ベクトルのプログラムに関して

ピコ

#1

投稿記事 by ベクトルのプログラムに関して » 14年前

プログラミングの関する質問です。

コード:

#include<stdio.h>
 #define N 2
 void read_vector3D(double vector[N]);
 void outer_product3D(const double vector1[N], const double vector2[N], double vector3[N]);
 int main(void)
 {
 double vector1[N],vector2[N],vector3[N];
 
read_vector3D(vector1);
 read_vector3D(vector2);
 outer_product3D(vector1, vector2, vector3);
 printf("ベクトルa %.2f, %.2f, %.2f\n", vector1[0], vector1[1], vector1[2]);
 printf("ベクトルb %.2f, %.2f, %.2f\n", vector2[0], vector2[1], vector2[2]);
 printf("2つのベクトルに垂直なベクトルc(外積)は(%.2f, %.2f, %.2f)です\n", vector3[0], vector3[1], vector3[2]);
 return 0;
 }

 void read_vector3D(double vector[N])
 {
 int i;
 static int x = 0;
 if(x == 0){
 printf("ベクトルaの3成分を入力してください\n");
 for(i = 0; i <= N; i++){
 scanf("%lf", &vector[i]);
 x += 1;
 }
 }
 else{
 printf("ベクトルbの3成分を入力してください\n");
 for(i = 0; i <= N; i++){
 scanf("%lf", &vector[i]);
 }
 }
 }
 void outer_product3D(const double vector1[N], const double vector2[N], double vector3[N])
 {
 vector3[0] = vector1[1] * vector2[2] - vector1[2] * vector2[1];
 vector3[1] = vector1[2] * vector2[0] - vector1[0] * vector2[2];
 vector3[2] = vector1[0] * vector2[1] - vector1[1] * vector2[0];
 }
 
この様なプログラムを組み,
ベクトルaの3成分を入力してください
1.0
2.0
‐1.0
ベクトルbの3成分を入力してください
-1.0
1.0
2.0
と入力し、実行したのですが実行結果が

ベクトルa 2.00, 2.00, -1.00
ベクトルb 4.00, 1.00, 2.00
2つのベクトルに垂直なベクトルc(外積)は(5.00, -3.00, 4.00)です

この様に入力したベクトルa,b共に最初に入力した値が変わってしまうんです。原因がさっぱりわかりません。この原因は何なのでしょうか?

beatle
記事: 1281
登録日時: 14年前
住所: 埼玉
連絡を取る:

Re: ピコ

#2

投稿記事 by beatle » 14年前

一度投稿前チェックリストに目を通して下さい。特に、インデント周りは注意してください。

main関数内で定義されている、vector1, vector2, vector3ともに、要素数がN(つまり2ですね)であるにもかかわらず、
vector1[2], vector2[2], vector[3]にアクセスしてしまっているのはダメです。
配列の添字に使っていいのは、0以上かつ配列の要素数「未満」の整数です。
参考:http://www.geocities.jp/ky_webid/Progra ... c/025.html

今回の例で言えば、添字iは 0≦i<N でなければならない、ということです。

ピコ

Re: ピコ

#3

投稿記事 by ピコ » 14年前

ご指摘ありがとうございました。確かにそうでした。

閉鎖

“C言語何でも質問掲示板” へ戻る