循環簡介:這個程序是一個打印一個鞋碼為9并把他轉化爲英寸的程序,要發揮出計算機的優勢可以改進成一個循環來進行打印多個值
1 /*shoes1.c把鞋碼轉換成英寸*/ 2 #include<stdio.h> 3 #define ADJUST 7.31 4 int main() 5 { 6 const double SCALE=0.333; 7 double shoe,foot; 8 9 shoe=9.0; 10 foot=SCALE*shoe+ADJUST; 11 printf("Shoe size (men's) foot length\n"); 12 printf("%14.1f %11.2f inches\n",shoe,foot); 13 14 return 0;/*本程序計算了一個鞋碼為9轉化為英寸的值*/ 15 } 16 /* 17 輸出樣例 18 19 Shoe size (men's) foot length 20 9.0 10.31 inches 21 22 */ 23 /*如何發揮計算機的優勢來計算許多的值?可以用到循環*/
1 /*shoes2.c改進程序加入循環*/ 2 #include<stdio.h> 3 #define ADJUST 7.31 4 int main() 5 { 6 const double SCALE=0.333; 7 double shoe,foot; 8 9 printf("Shoe size (men's) foot length\n"); 10 shoe=3.0; 11 while(shoe<18.5) 12 { 13 foot=SCALE*shoe+ADJUST; 14 shoe=shoe+1;/*shoe++/shoe+=1*/ 15 16 printf("%14.1f %11.2f inches\n",shoe,foot); 17 } 18 printf("If the shoe fits, wear it.\n"); 19 20 return 0;/*本程序計算了鞋碼為3.0-18.5轉化為英寸的值*/ 21 } 22 /* 23 輸出樣例 24 25 Shoe size (men's) foot length 26 4.0 8.31 inches 27 5.0 8.64 inches 28 6.0 8.97 inches 29 7.0 9.31 inches 30 8.0 9.64 inches 31 9.0 9.97 inches 32 10.0 10.31 inches 33 11.0 10.64 inches 34 12.0 10.97 inches 35 13.0 11.31 inches 36 14.0 11.64 inches 37 15.0 11.97 inches 38 16.0 12.31 inches 39 17.0 12.64 inches 40 18.0 12.97 inches 41 19.0 13.30 inches 42 If the shoe fits, wear it. 43 44 */
shoes2.c加入了while循環,循環重複執行塊中的程序語句:
判斷條件(shoe<18.5)如果shoe<18.5那麽程序會一直執行,知道運行到shoe=19時,此時19<18.5為假。循環停止。
運算符:
賦值運算符=:‘=’不是等於,而是賦值給誰(運算方向是從右往左計算)
int num=3,這裏的意思是把3賦值給一個名爲num的整型變量。
i=i+1,這裏的意思是,把變量i的加一的新值賦值給變量i。
=的左側必須是一個變量名,=右邊是一個字面常量。
左值,右值:
左值(lvalue)
1.它可以指定一個對象,可以引用内存中的地址。
2.它可用在賦值運算符的左側。
可修改的左值:
賦值運算符的左側是一個可修改的左值。
右值(rvalue)
1.能賦值給可修改左值的量。
右值可以常量,可以是變量或者是其他可求值表達式(如函數調用)
int ex;(可修改的左值)
int why;(可修改的左值)
int zee;(可修改的左值)
const int TWO =2;(const變量,TWO是不可改變的左值,只能位於賦值運算符的右側。)/*注解:=在這裏的意思是初始化,并未違反規定*/
why = 42;(可修改的左值,42是右值)
zee = why;(可修改的左值)
ex = TWO*(why+zee);(ex是可修改的左值,(why+zee)是右值)
“=”運算符的左側應該是可修改的左值
C語言可以三重賦值:
1 /*golf.c高爾夫錦標賽記分卡*/ 2 #include<stdio.h> 3 int main() 4 { 5 int jane, tarzan, cheeta; 6 7 cheeta=tarzan=jane=68; 8 /*C語言可以三重賦值,把68先賦值給jane,然後再賦值給tarzan,最後賦值給cheeta*/ 9 printf(" cheeta tatzan jane\n"); 10 printf("First round score %3d %6d %6d\n",cheeta,tarzan,jane); 11 12 return 0; 13 } 14 /* 15 輸出樣例: 16 17 cheeta tatzan jane 18 First round score 68 68 68 19 20 */
加法運算符和減法運算符:
加法運算符(+):可以表示爲兩個或多個元素相加。
printf("%d",1+2);->打印的不是“1+2”,而是1+2經過加法運算后的3.
相加的值可以是變量也可以是常量。
sum=index+salary;
執行這個語句所表達的是,使用加法運算符把這兩個表達式的值相加后賦值給sum。index和salary是可修改的左值,(index+salary)是一個右值。
減法運算符(-):和“+”的使用一樣。
這裏的加法和減法運算符都是二元運算符,即需要兩個運算對象來進行運算的運算符。
“+”,“-”也可以表示一個數字的正負:
int a=-1,int b=+2;
這裏的+ -是一元運算符(只需要一個運算對象)。
乘法運算符:
“*”表示乘法運算符,cm=2.54*inch。(用inch乘以2.54然後賦值給cm)
如何打印從(1-20)的平方表?
1 /*squares.c計算1-20的平方*/ 2 #include<stdio.h> 3 int main() 4 { 5 int num=1; 6 int sum=0; 7 8 while(num<=20) 9 { 10 sum=num*num; 11 printf("%4d %6d\n",num,sum); 12 num++;/*num=num+1/num+=1*/ 13 } 14 return 0; 15 } 16 /* 17 輸出樣例 18 19 1 1 20 2 4 21 3 9 22 4 16 23 5 25 24 6 36 25 7 49 26 8 64 27 9 81 28 10 100 29 11 121 30 12 144 31 ...(結果太多其他輸出省略) 32 33 */
國王獎勵麥子程序:
1 /*wheat.c指數增長*/ 2 #include<stdio.h> 3 #define SQUARES 64 //棋盤中的格子數量(64) 4 int main() 5 { 6 const double CROP=2E16;//世界小麥年產穀粒數 7 double current,total; 8 int count=1;//初始化 9 10 printf("square grains total "); 11 printf("fraction of \n"); 12 printf(" added grains "); 13 printf("world total\n"); 14 total=current=1;//從第一顆穀粒開始 15 printf("%4d %14.2e %12.2e %12.2e\n", 16 count,current,total,total/CROP); 17 while(count<SQUARES) 18 { 19 count=count+1; 20 current=2.0*current;//下一個方格穀粒翻倍 21 total=total+current;//更新總數 22 printf("%4d %14.2e %12.2e %12.2e\n", 23 count,current,total,total/CROP); 24 } 25 printf("That's all.\n"); 26 27 return 0; 28 } 29 /* 30 輸出樣例: 31 32 square grains total fraction of 33 added grains world total 34 1 1.00e+000 1.00e+000 5.00e-017 35 2 2.00e+000 3.00e+000 1.50e-016 36 3 4.00e+000 7.00e+000 3.50e-016 37 4 8.00e+000 1.50e+001 7.50e-016 38 5 1.60e+001 3.10e+001 1.55e-015 39 6 3.20e+001 6.30e+001 3.15e-015 40 7 6.40e+001 1.27e+002 6.35e-015 41 8 1.28e+002 2.55e+002 1.27e-014 42 9 2.56e+002 5.11e+002 2.55e-014 43 10 5.12e+002 1.02e+003 5.12e-014 44 11 1.02e+003 2.05e+003 1.02e-013 45 12 2.05e+003 4.10e+003 2.05e-013(省略了剩餘結果) 46 ... 47 That's all. 48 49 */
除法運算符:
“/”表示除法運算符,/左側是被除數,右側是除數。
整數除法:整數除法得到的結果是整數。(整數除法得到結果后小數後面的結果會被丟棄,這稱之爲截斷。)
浮點數除法:浮點數除法得到的結果是浮點數。
1 /*divide.c演示除法*/ 2 #include<stdio.h> 3 int main() 4 { 5 printf("integer division: 5/4 is %d\n",5/4); 6 printf("integer division: 6/3 is %d\n",6/3); 7 printf("integer division: 7/4 is %d\n",7/4); 8 printf("floating division: 7./4. is %1.2f\n",7./4.); 9 printf("floating division: 7.0/4.0 is %1.2f\n",7.0/4.0); 10 printf("mixed division: 7./4 is %1.2f\n",7./4); 11 12 return 0; 13 } 14 /* 15 輸出樣例 16 17 integer division: 5/4 is 1 18 integer division: 6/3 is 2 19 integer division: 7/4 is 1 20 floating division: 7./4. is 1.75 21 floating division: 7.0/4.0 is 1.75 22 mixed division: 7./4 is 1.75 23 //在計算除法運算前,編譯器會把整數轉化成浮點數。
//編譯器不能真正用浮點數除以除數,編譯器會把兩個運算對象轉換成相同的類型。 24 */
運算符優先級:
運算符(優先級從高至低) | 結合律 |
() | 從左往右 |
+ -(一元) | 從右往左 |
* / | 從右往左 |
+ -(一元) | 從左往右 |
= | 從右往左 |
sizeof運算符和size_t類型:
1 /*使用sizeof運算符*/ 2 #include<stdio.h> 3 int main() 4 { 5 int n=0; 6 size_t intsize; 7 8 intsize=sizeof(int); 9 printf("n=%d,n has %zd bytes;all ints has %zd bytes.\n", 10 n,sizeof n,intsize); 11 return 0; 12 } 13 /* 14 輸出樣例 15 16 n=0,n has 4 bytes;all ints has 4 bytes. 17 18 */
求模運算符:
“%”是求模運算符,只能適用于整數,不能用於浮點數。
13%5=2(也可以理解%的意思是取餘數);
把秒數轉換成分和秒:
1 #define SEC_PER_MIN 60 2 int main() 3 { 4 int sec,min,left; 5 6 printf("Convert seconds to minutes and seconds!\n"); 7 printf("Enter the number of seconds (<=0 to quit):\n"); 8 scanf("%d",&sec); 9 while(sec>0) 10 { 11 min=sec/SEC_PER_MIN;// 12 left=sec%SEC_PER_MIN;// 13 printf("%d seconds is %d minutes, %d seconds.\n" 14 ,sec,min,left); 15 scanf("%d",&sec); 16 } 17 printf("Done!\n"); 18 return 0; 19 } 20 /* 21 輸出樣例 22 23 Convert seconds to minutes and seconds! 24 Enter the number of seconds (<=0 to quit): 25 600 26 600 seconds is 10 minutes, 0 seconds. 27 59 28 59 seconds is 0 minutes, 59 seconds. 29 123 30 123 seconds is 2 minutes, 3 seconds. 31 695 32 695 seconds is 11 minutes, 35 seconds. 33 0 34 Done! 35 36 */
遞增和遞減運算符(++ --)
遞增運算符:++是一個變量自己在原有的基礎上增加1。
有兩種形式:
num++:在使用num的值后加1。
++num:在使用num的值前加1。
遞減運算符和遞增運算符使用方法相同。
優化shoes2.c程序:
總而言之,n++“先使用n,在遞增”,++n“先遞增,再使用n”。