[語法] 請問為何結果與直觀的想法不符..有人知 …

看板C_and_CPP (C/C++)作者 (seeso)時間16年前 (2009/07/07 13:01), 編輯推噓5(507)
留言12則, 4人參與, 最新討論串1/1
#include <cstdlib> #include <iostream> #include <stdio.h> #include <math.h> using namespace std; int main(int argc, char *argv[]) { int n,i,j; double zero[n], fr[n][n]; printf("請輸入期數:\n"); scanf("%d",&n); for (i=1;i<=n;i++) { printf("請輸入%d期的 zero spread:\n",i); scanf("%lf",&zero[i-1]); } for (j=0;j<n;j++) {fr[0][j+1] = zero[j];} for (i=0;i<n;i++) {fr[i][i] = 0;} for(i=0;i<n;i++) { for(j=i;j<n;j++) { printf("f(%d,%d)=%f,zero[%d]=%f\n",i,j,fr[i][j],i,zero[i]); } } system("PAUSE"); return EXIT_SUCCESS; } 我輸入以下的資料 n=4; zero[0] = 0.01; zero[1]= 0.02; zero[2]=0.03; zero[3]=0.04; 最後的結果出現的很奇怪.. f(0,0)=0.00,zero[0]=0.00 f(0,1)=0.01,zero[0]=0.00 f(0,2)=0.02,zero[0]=0.00 f(0,3)=0.00,zero[0]=0.00 直覺上應該是 f(0,3) = 0.03 f(1,1)=0.00,zero[1]=0.02 f(1,2)=0.04,zero[1]=0.02 直覺上應該是 f(1,2) = 0.00 f(1,3)=0.00,zero[1]=0.02 f(2,2)=0.00,zero[2]=0.03 f(2,3)=0.02,zero[2]=0.03 直覺上應該是 f(2,3) = 0.00 f(3,3)=0.00,zero[3]=0.00 直覺上應該是 zero[3] = 0.04 請問有人清楚是什麼問題嗎.. -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 125.225.101.59 ※ 編輯: u881331 來自: 125.225.101.59 (07/07 13:02) ※ 編輯: u881331 來自: 125.225.101.59 (07/07 13:04)

07/07 13:12, , 1F
{fr[0][j+1] = zero[j];} //double fr[n][n];
07/07 13:12, 1F

07/07 13:12, , 2F
超出陣列index
07/07 13:12, 2F

07/07 14:02, , 3F
不止超過陣列index; 這陣列宣告與用法應該錯很大吧!?
07/07 14:02, 3F

07/07 14:04, , 4F
int n之後, 還沒有初值就用來宣告array size了....
07/07 14:04, 4F

07/07 14:09, , 5F
一般變數n當size宣告陣列似乎也是新的標準才有說@@"
07/07 14:09, 5F

07/07 14:16, , 6F
他寫的是 C++,這段 code 並非合法 C++
07/07 14:16, 6F

07/07 14:26, , 7F
他寫的環境應該是devC++ 所以可以不用new
07/07 14:26, 7F

07/07 14:54, , 8F
compile會過不代表這樣用一定合法更可能結果不正確:)
07/07 14:54, 8F

07/07 14:55, , 9F
還是DevC++神奇到這樣宣告陣列會自動等n輸入了才配空間?
07/07 14:55, 9F

07/07 15:16, , 10F
謝謝各位大大,我將陣列改過,再將n給值在宣告array size
07/07 15:16, 10F

07/07 15:17, , 11F
前..這樣是不是就可以修正錯誤了..還是有什麼地方要注意?
07/07 15:17, 11F

07/07 16:48, , 12F
有,請確定自己在寫 C 還是寫 C++,這是不同的兩個語言
07/07 16:48, 12F
文章代碼(AID): #1AKjQPbx (C_and_CPP)
文章代碼(AID): #1AKjQPbx (C_and_CPP)