看板 C_and_CPP 關於我們 聯絡資訊
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) C 問題(Question): 無法算出冪次方 預期的正確結果(Expected Output):可算出x的y次方 錯誤結果(Wrong Output):不管怎麼輸入x、y,pow(x,y)均顯示為零 程式碼(Code):(請善用置底文網頁, 記得排版) #include<stdio.h> #include<math.h> int main() { int x,y; double z=function(x,y); printf("請輸入x值:"); scanf("%d",&x); printf("\n"); printf("請輸入y值:"); scanf("%d",&y); printf("\n"); printf("x的y次方是%d\n",z); system("pause"); return 0; } double function(int a,int b) { return pow(a,b); } -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.232.125.172 ※ 文章網址: http://www.ptt.cc/bbs/C_and_CPP/M.1408137818.A.635.html
prismwu: 1.pow回傳double 2.下面function沒用到 08/16 05:39
已修改過,但仍有錯誤。 程式complier後停在double z=function(x,y); 它說function未宣告 這是什麼意思呢? function在副程式不是已經宣告了嗎?
anfernee5000: 將double function(int a,int b)放到int main上方 08/16 09:12
謝謝 我試過了 不過這一次編譯後卻在system("pause");這行顯示未宣告... 可是這行不就只是要讓顯示結果停住而已...? 我好像少了#include<stdlib.h>這行(呆) (system("pause");需要引入stdlib才可以 使用) 不過輸出的結果依舊會是零 (可編譯可執行 但不管輸入任何的x、y值 結果依舊是 零...)
putumaxally: x,y沒給初始值就直接代入函數,算完才叫使用者輸入... 08/16 10:24
我有試著把 double z=function(x,y);這行剪下移到printf("x的y次方是%d\n",z);上面 可是執行完後的輸出結果還是零... 我好像跑出來了 將上面的double型態全部改回int就可以跑了... 所以這裡不可以把function設為double型態嗎? 還有兩個問題: 1.副程式的宣告,一定要在主程式之前嗎? 2.輸入變數x跟y,得先給初值,才能定義int z=function(x,y);嗎?
putumaxally: %d是顯示整數,double要用%lf 08/16 10:40
remizu: z是double 在printf時要用%f 08/16 10:42
謝謝各位的回答... 因為我大學修課時不認真 現在是買書來自學啦... 可是書上的說明看不懂 只好邊寫邊debug 借助版上的神人指點迷津一下 有人可以回答我上面問的那兩個問題嗎? 感謝 他書上有些程式範例是把宣告的副程式放在最後面 但我也試著跑過他的程式範例 但跑不出來...
remizu: 1. 函數(副程式)必須要在"使用之前"宣告其原型 08/16 10:58
remizu: 這樣編譯器才知道函數吃哪些 哪種型別的參數 08/16 10:59
remizu: 以及函數將傳回什麼型別的值 08/16 11:00
remizu: 2. int z=function(x,y);的話 是宣告int型別變數z 08/16 11:01
remizu: 並將其值初始化為function(x,y);的傳回值 08/16 11:02
remizu: 因此在這行時就已經執行function(x,y); 才能知道其傳回值 08/16 11:03
所以主程式裡面不管要用多少個副程式 都必須在主程式宣告前定義好這些副程式?
remizu: 當然 作為參數的x, y必須已經是有效內容 08/16 11:05
remizu: 要宣告其原型 但定義可以放在主程式之後 甚至是其他檔案 08/16 11:07
謝謝r大 令我茅塞頓開不少... ※ 編輯: gauss760220 (36.232.125.172), 08/16/2014 11:09:11
carylorrk: 換本書吧...XD 08/16 17:50
uranusjr: 推樓上, 請換書 08/16 18:23
kenn2001: printf("x的y次方是%d\n",z); %d? 08/19 12:10