星期三, 7月 13, 2005

C's note

soft: Dev C++

凡介於/* */ 之間的文字會視為註解 //為開頭的也是註解
所有的C語言程式都是以main為開頭….Tourbo C會執行
左大括號{
和右大括號 }
之間的指令

舉個例子以下為hello.c的內容


/* 使用 #include file 將某個檔案包含在目前程式內*/
#include
#include
/*以下為程式的開始 */
main()
{

/* 請注意要以分號(;) 為結束一個指令字元 */
/*使用printf 列出字串 如果要換行使用 \n */
/*使用backslash 取消控制字元的使用 例如使用\" 來顯示雙引號 用\\ 來顯示\ */
printf("\"Hello world with double quote test \"\n ");
printf("Hello world\n");
printf("C:\\C\\Hello.c\n");

/* 使用system指令去執行 命令提示字元的指令pause ->可以暫停 */
system("pause");

/* 變數的使用是有限制的---使用大寫或是小寫字母或是底線(_) 為開頭*/
/* 變數的名稱則可為 1.大寫字母 2.小寫字母 3.底線 4.阿拉伯數字 */
/* 變數的宣告皆以分號(;) 作為結束 */
/* 如果變數於程式的起始位置就宣告了那則為整體(global)變數,對程式的任何部分中使用 */
/* 如果變數在函數程式內宣告.....則為區域變數(local variable) 只在宣告的函數中使用 */
/* 如果變數在函數參數位置宣告----則為用來接收呼叫程式所傳遞的值 */


int i;

// i的值為當時記憶體目前殘留的資料
printf("i=%d\n",i);
// 重新定義 i=0 所以列印出來會是零
i=0;
printf("i=%d\n",i);

// sizeof( ) 計算資料所佔的記憶體空間
printf("sizeof(i)=%d , sizeof(int)=%d\n",sizeof(i),sizeof(int));


// short int 值的範圍 -32768 ~ 32767 , 給超過範圍的值會變成其他的值
short si;
si=32767;
printf("si=%d\n",si);
si=32768;
printf("si=%d\n",si);
si=32769;
printf("si=%d\n",si);
si=32770;
printf("si=%d\n",si);
si=-32768;
printf("si=%d\n",si);
si=-32769;
printf("si=%d\n",si);
si=-32770;
printf("si=%d\n",si);


}

5 則留言:

Max 提到...

在printf( ) 內控制列印區的格式符號.除了可以配合列印變數區的變數使用外也可以加上修飾字或是調整對齊方向
以下是一個hello.c的內容

main()
{
int i;

i=1247;
printf("*%d*\n",i); // 依實際位數顯示
printf("*%3d*\n",i); // 總寬度太小還是依照實際位數顯示
printf("*%6d*\n",i); // 總寬度6個字
printf("*%-6d*\n",i); // 負號代表向左靠齊

printf("%06d\n",i); // 前方空白的部分補0顯示
printf("%*d\n",6,i); // %d中的*號表示由後面的參數提供總寬度

int w=6;
printf("%0*d\n",w,i); // 前方空白補0且寬度由參數指定

system("pause");
}

Max 提到...

main()
{
// 較舊版的編譯器只准許在函式最前面宣告變數,即int i處!
int w=6;
printf("%0*d\n",w,i); // 前方空白補0且寬度由參數指定

printf("-----------------------------------------------\n");
float f=124.65;
printf("*%f*\n",f);
printf("*%3.2f*\n",f);
printf("*%8.2f*\n",f);
printf("*%-8.2f*\n",f);
printf("%.2f\n",f); // 可以只指定小數的位數,總寬度不指定
printf("*%*.*f*\n",10,3,f); // 自訂總寬度與小數位數
printf("*%0*.*f*\n",10,3,f); // 補0與自訂總寬度與小數位數

system("pause");
}

Max 提到...

printf("-----------------------------------------------\n");
printf("dec=%d oct=%o hex=%X\n",15,15,15); // 10進位,8進位,16進位格式顯示
printf("dec=%d oct=%o hex=%X\n",16,16,16);
printf("%d %u\n",-1,-1); // -1 用%u 正整數格式顯示不會是-1
printf("%d %f <---整數無法以%%f正確顯示\n",10,10); // 10 用%f 浮點數格式結果超出預期
f=3.14159;
printf("%d %f <---%%d無法正確顯示3.14159,還連帶影響%%f的結果\n",f,f); // f 浮點數用%d整數格式顯示,兩個結果皆超出預期
printf("%f <---正確 , 資料與格式型態必須相符才能保證正確!\n\n",f); // 正確

Max 提到...

main()
{
int i;

printf("i=%d <--目前記憶體所殘留的值,若未主動變更不會改變!\n",i);
printf("input int i: ");

// 未使用 & 運算子求出變數的記憶體位置,
// 以i的值做為存放輸入資料的記憶體位址,,無法預期結果,嚴重可能當機
// scanf("%d", i );

// 編譯可通過,輸入的資料將放入記憶體1000的位址,無法預期結果,嚴重可能當機
// scanf("%d",1000);

scanf("%d", &i ); // 正確 , 使用 & 運算子 , 求出i的記憶體位址
printf("i=%d\n",i);

float f;
printf("scanf(\"%%d\",&f) , input float f: ");
scanf("%d",&f);
printf("f=%f <----結果無法正確,scanf需使用%%f格式.\n",f);
printf("scanf(\"%%f\",&f) , input float f: ");
scanf("%f",&f);
printf("f=%f <----正確\n",f);
printf("f=%f <-----忘了提供f變數居然.....\n");

system("pause");
}

Max 提到...

main()
{
int eng,math;

eng = math = 0; // 初值設定是個好習慣,不寫也可以.

printf("input eng : "); scanf("%d",&eng);
printf("input math: "); scanf("%d",&math);
printf("sum=%d\n", eng+math );
printf("avg=%d\n", (eng+math)/2 ); // 運算結果還是整數型態,不會有小數資料
printf("avg=%f\n", (eng+math)/2 ); // 運算結果是整數型態,不可使用%f

// 當資料中有多個型態資料,所有資料會自動晉升成最大的資料型態
// eng 與 math 會自動複製成另外的float型態再行計算,結果為float型態的資料
printf("avg=%.2f\n", (eng+math)/2.0 );

system("pause");
}