/*** sqrtx.c --- sqrt(x) by tsaiwn@cs.nctu.edu.tw *** *** **************************/ // 這程式用了變數(Variable) x, scanf 從鍵盤讀取一個兩倍準實數到 x #include #include double x; int main( ) { printf("Give me a number: "); scanf("%lf", &x); // 從鍵盤讀到 x 處, 是 double (用 %lf ) printf("sqrt(%f)=%f\n", x, sqrt(x)); printf(" Hit ENTER key..."); getchar( ); return 0; } // main( // scanf 是程式庫中的函數, 幫忙從鍵盤讀取資料 // %lf 表示讀 入後放到 double 變數 // %f 表示讀 入後放到 float 變數 // %d 表示讀 入後放到 int 變數; %hd 是 short; %ld 是 long // %c 表示讀入一個 char 放到 char 或 int 變數; // %s 表示讀入一個字串放到一塊連續的記憶體去 ////// // 事實上, 直接使用 scanf 讀取資料是很不好的用法! // 因為很容易使用錯誤, 也很容易被 User 亂打把程式弄死! // 比較好的方式是先用 fgets( ) 把輸入資料整列讀到文字陣列, // 然後再從該文字陣列把資料挖出來: 可用 sscanf, atoi, atol, atof // 或是 strtol (同 atol), 以及 strtod (同 atof) /// 文字陣列 (char array) 就是字串 /// 請注意, 若使用 char * buf; 則須先幫 buf 要到記憶體! /// 例如: char*buf; buf = malloc(99); // 要 99 Bytes ////// /***on Unix: gcc sqrtx.c -lm C:\testc>gcc sqrtx.c C:\testc>a.exe Give me a number: 2 sqrt(2.000000)=1.414214 Hit ENTER key... C:\testc>a Give me a number: 3 sqrt(3.000000)=1.732051 Hit ENTER key... C:\testc>a Give me a number: 5 sqrt(5.000000)=2.236068 Hit ENTER key... C:\testc>a Give me a number: 4 sqrt(4.000000)=2.000000 Hit ENTER key... 這個程式已經可以不必修改就可算很多數的平方根! 但是每次執行都是只做一題就結束掉! 還是不怎麼方便! 那要如何讓程式可以一直算呢? ==> Loop 迴圈 C 的迴圈有很多寫法: for( stat_1; stat_2; stat_3); stat_4; while(stat_2) stat4; do { stat_4; /*...*/ } while( stat_2 ); 當然也可以利用 if(stat_2) goto 上面_Label; 做出 Loop(但不好) ************************/