C言語 for分のint型で入れた最大値が途中から変わりうまく実行できない。

実現したいこと

ここに実現したいことを箇条書きで書いてください。
・複数のデータセット(x,y)における直線回帰の式の導出と決定係数を計算する。

前提

ここに質問の内容を詳しく書いてください。
(例)
C言語を学習する一環で直線回帰の式と決定係数を算出するコードを書きました。
エラーメッセージは出ていませんが、実行をすると、途中から入力したデータ数(num)の数値が変わってしまいます。

発生している問題・エラーメッセージ

・入力している数値は適当です。

データ数 = 6 //データセットの数を入力しています。
x[0] = 1
y[0] = 0
0,6 //for文のカウンタと最大値を確認用に表示しています。
x[1] = 10
y[1] = 0
1,6
x[2] = 1
y[2] = 0
2,6
x[3] = 10
y[3] = 0
3,6
x[4] = 1
y[4] = 0
4,6
x[5] = 1
y[5] = 0
5,1065353216
x[6] = 10
y[6] = 0
6,1065353216
x[7] = ^C

該当のソースコード

C

1#include <stdio.h>2int main(){3 int i,num;4 float x[num],y[num],b,a,sumxy,sumx,sumy,sumx2,sumy2,rr;5 printf("データ数 = "); scanf("%d",&num);6 7 for (i=0;i <num;i++){8 printf("x[%d] = ",i);scanf("%f",&x[i]);9 printf("y[%d] = ",i);scanf("%f",&y[i]);10 printf("%d,%d\n",i,num);11 }12 13 sumxy = 0;14 sumx = 0;15 sumy = 0;16 sumx2 = 0;17 sumy2 = 0;18 19 for (i=0;i<num;i++){20 sumxy = sumxy + x[i] * y[i];21 sumx = sumx + x[i];22 sumy = sumy + y[i];23 sumx2 = sumx2 + x[i]*x[i];24 }25 26 b = (num * sumxy - sumx * sumy)/(num * sumx2 - sumx * sumx);27 a = (sumy - b * sumx)/num;28 rr = b*b*((sumx * sumx -num * sumx2)/(sumy * sumy -num * sumy2));29 printf("y = %3.3fx + %3.3f\n",a,b);30 printf("r^2 = %3.3f\n",rr);31}

試したこと

int i, num, num2;
printf("データ数 = "); scanf("%d",&num);
num2 = num;

以上のように数値を別の変数に入れると正しく動作しました。

補足情報(FW/ツールのバージョンなど)

・TeraTerm
・emacs

コメントを投稿

0 コメント