Re: [發問]請問關於迴圈的題目
※ 引述《Silent50286 ()》之銘言:
: 題目是:
: 要完成排列組合C(n,k),並起使用者輸入n及k,
: 若n及k 為非整數或負數時,請使用者重新輸入,直到n及k為合理。
: 小妹我寫出來是這樣:
: n=input('請輸入n :'); %請輸入n值
: k=input('請輸入k :'); % 輸入k值
: while x==100
: if n<0||~isinteger(n)||k<0||~isinteger(k) %如果n及k為非整數或負數時
: n=input('請輸入n :'); %再輸入一次n值
: k=input('請輸入k :'); %再輸入一次k值
: end
: end
: fprintf('%d\n',factorial(n)/(factorial(k)* factorial(n-k))) %計算C(n,k)答案
: --------
: 我在測試時輸入 n及k 是負數或非整數,
: 迴圈好像跑不出來,是不是寫錯了呢?
: 請各位大大指教 !! 感謝
這部份的code很多地方有點奇怪
第一...x是什麼東西原文沒定義
所以while x == 100 無法判斷迴圈進入的條件是什麼
第二...isinteger這指令是在判斷變數是否為整數
這跟變數的type有關係
舉例來說好了 matlab如果沒特別說明的話
變數一般都是內定double type
所以就算是input為整數 type仍是double
所以matlab不會將他視作integer
例如 n=7,但是 isinteger(n) 依然為 0
所以判斷式這樣寫是行不通的
以下是我個人的寫法 僅供參考 若不懂可以站內信討論
n=input('請輸入n :'); %請輸入n值
k=input('請輸入k :'); % 輸入k值
while ( n<0 || n-double(int64(n)) ~= 0 || k<0 || k-double(int64(k)) ~= 0 )
n=input('請輸入n :'); %再輸入一次n值
k=input('請輸入k :'); %再輸入一次k值
end
fprintf('%d\n',factorial(n)/(factorial(k)* factorial(n-k))) %計算C(n,k)答案
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.113.127.59
討論串 (同標題文章)