程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C語言學習總結(二) 運算流程,語言學習流程

C語言學習總結(二) 運算流程,語言學習流程

編輯:關於C語言

C語言學習總結(二) 運算流程,語言學習流程


 

第三章、基本運算

(運算符、算數運算符、關系運算符、邏輯運算符、三目運算符、ASXLL碼)

 

一、什麼是運算符?

概念:是編譯程序執行特定的算術或邏輯操作的符號;

分類:算術運算符、 關系運算符、邏輯運算符、按位運算符。

按照運算操作數分為:

運算遵循規則:數學的運算規則,先看優先級,再看結合律(從左到右【賦值運算為從右往左x=y=z】);

 

二、算術運算 

“ + ”加法運算符  “ - ”減法運算符  “ * ” 乘法運算符  “ / ”除法運算符  “ % ” 取余運算符. 

  • 1.不同數據類型精度不一樣.double>float>int.  取余運算符只能整數;
  • 2.若用高精度向低精度變量賦值.會丟失精度.如:int a=1.8;那麼a值是1.(非四捨五入)
  • 3.運算優先級是.從左到右 但: * = / = % > + = -  如果要人為改變則加().
  • 4.運算時兩個數據精度不一樣,會自動類型轉換,且是低精度向高精度轉換.
  • 5.同精度運算只能得到同精度的結果.如果需要提高精度,需要強制類型轉換. 

 

三、賦值運算

概念:把“=”號右面的值賦值給左邊的變量;

注意:等號的左邊一定是變量;

  • a=10; 對;    
  • 10=a; 錯;

復合賦值運算符:+=,  -=,  *=,  /=,  %=;

 

四、自增自減運算符:

概念:讓連接的操作數自身的值+1或者-1

格式: 變量名++           ++ 變量名         變量名--             -- 變量名 
  • 1.變量才能自我變化,如自增或自減,但常量不能.
  • 2. ++a,與a++,對a本身沒有區別,但是參與其它運算時,a++這個整體的值沒有變化.

 

五、siziof運算符

概念:計算常量、變量、數據類型在我們內存中占用的字節數;

用法: 注意事項:

 

六、關系運算

“ == ”    “ > ”    “ < ”   “ >= ”    “ <= ”     “!=” 

用法:對數據進行比較,看是否成立,條件成立=真(1),條件不成立=假(0).

  • 1.關系運算符運算結果是一個int值.0或1.
  • 2.優先級:>,<,>=,<=,優先級相等, 但大於==和!=.同時==與!=優先級相等.
  • 3.如果優先級相同的兩個運算,先後順序看結合律(結合律指要麼從左往右運算,要麼從右往左運算),關系運算符結合律是從左往右,即:先看優先級,再看結合律.如下:

    int b=1!=2>3<4; 等效於:2>3為假=0. 0<4為真=1, 1!=1為假=0.所以最終結果=0;

 

七、邏輯運算

“ ||”或     “ && ”與     “ ! ”非

用法:對於多個表達式進行並列真假判斷 

注意:

  • 1.所有數據都有真假值.0為假,其它的數都為真(規定).   結合律:從左往右執行,
  • 2. 如果||表達式左邊表達式已經為真,則右邊不執行.而&&只要左邊為假右邊不執行.
  • 3.優先級順序為:小括號() > 負號( -) > ! > 算術運算符 > 關系運算符 > && > ||

 

八、三目運算符--(可讀性差,一般不用)

定義:

<真假判斷表達式1>?<表達式2>:<表達式3>; 

如: 1+2>4?2+2:3+4; 這個運算過程為:1+2=3, 3>4為假.則運行3+4這個表達式.所以最終結果為7. 

 

九、ASCLL碼

概念:美國標准信息交換碼

字符運算會自動轉換成ASCLL表對應的值:

‘a’-‘b’ =( 97-98)

常用:

 

 

第二章、流程控制

(順序結構、選擇結構--if/swich、循環結構--do...while/for)

一、程序的結構

1.默認(順序結構):從上到下順序執行

2.選擇結構 

是指編程中用來判定所給定的條件是否滿足,根據判定的結果(真或假)決定執行給出的兩種操作其中的一個 

if分支語句:

--當程序執行的過程中有多個選擇時使用

格式:

1.if(表達式){

語句塊;

 

2.if(表達式1){

                語句塊1;

          }else if(表達式2){

                      語句塊2;

                  }else{

                           語句塊3;

                                 }

                                     等等............

表達式求值:如果表達式的值為非0(真) 會執行語句塊 0 (假) 不會執行語句塊,;

 

注意:

  • 1.一次if語句只能執行給出的所有操作中的一個.
  • 2.if();這種用法時if語句只有緊跟後面一句有效.(讀到下一個;號結束).且不能定義變量
  • 3.除了if();這種用法,所有的if()與{}之間不能有;號
  • 4.if(條件判斷){},裡面的條件判斷如果是與常量的等於判斷,則常量寫在前面(建議);
  • 5.if(1)、if(-1)、if(a=5) 永真     if(0) 永假 ;
  • 6.if(表達式) return 0; //程序退出,代碼不會再往下執行了 

 

swich分支語句

--同if一樣也用於條件判斷,當表達式的結果有多種情況時用switch比較方便 

格式:

switch(表達式){                        --->表達式:返回值是整型

               case 常量1: 語句1;     --->常量必須是整型

            break;

               case 常量n; 語句n;     --->語句中定義變量會造成作用於紊亂:(int a=10)錯!

            break;

            default:  語句n;

           如果上面條件都不滿足執行default;

}

注意: 

  • 1.條件結果只能是整數,而case只能是整型常量.注意:case ‘a’;
  • 2.break 可有可無,有則執行完跳出,沒有則繼續執行,直到遇到下一個break或執行完.
  • 3.default可有可無,有則如果條件都不滿足,會執行這句,無則條件都不滿足,執行結束.
  • 4.case下面要定義變量必須加{}.且case後的常量值不能重復
  • 5.switch語句可以全部用if語句替代.但if語句不能全用switch替代.

break和continue關鍵字使用:

概念:

break和continue語句都可以用在循環中,用來跳出循環(結束循環);

break語句還可以用 在switch語句中,用來跳出switch語句。 

注意:

// if(表達式)else{ ...... break;......}

1)break語句對if-else的條件語句不起作用;

2)在多層循環中,一個break語句只向外跳一層。

3)continue表示跳過本次循環,而不是跳出循環體;

 

3.循環語句

概念:

是指編程循環語句,當滿足條件時進入循環,循環判斷,直到不滿足條件跳出循環,根據條件反復執行一段代碼的時候用

1.while語句:

格式:

while (條件) {   ---先判斷再執行:條件為真執行代碼塊,條件為假不執行;

         語句塊;

}

注意: 

int num = 3;

while (3 == num) {

         printf("num = %d\n",num);

         num++;

}

      1、通常把常量寫在前面

      2、while 後如果只有一條語句它可以省略大括號

      3、while小闊號後面不可以直接寫分號(沒有意義)

      4、作用域:內部代碼塊中定義的變量不可以在外邊代碼塊中訪問

      5、作用域紊亂:while (1 < 3) int num = 5;

      6、最簡單死循環(條件一直為真,循環無法結束):while (1); 

 

 

2.do...whlie語句:

格式: 

do{

語句塊;

} while(條件); 

特點:與while相比,先執行後判斷,至少會執行一次語句塊;

 

3.for語句:

格式:

for(表達式1 ;表達式2 ;表達式3 ){     ---3個語句,2個分號隔開。

             語句塊4;

}

執行過程:

1—>2—>4—>3—>2—>4—>3......

 

表達式1:循環變量初賦值,開始前執行,只執行一次;

表達式2:循環條件,為真,就執行語句塊4的代碼。為假,循環結束;

表達式3:循環變量增值:每次執行完畢後執行;

  

注意: 

  • 1.如果碰到continue,則跳出本次循環繼續下一次判斷,如果條件成立繼續執行循環.
  • 2.如果碰到break無論條件滿足與否,循環立刻結束.
  • 3.continue與break跳出的都是當前所在的循環作用域.如果外層有循環,不受影響.
  • for(; ;) 語句相當於while(1) 語句,為死循環。 

for循環的嵌套:

1.for(int a=0;a<5;a++){

        語句塊1;

                 for(int b=0;b<10;b++){

                     語句塊2;

                  }

    }

核心:

 

案例1:(while)

1 思路: 2 1)接收用戶輸入的字符串 3 2)判斷用戶是不是敲了回車鍵 4 //定義字符變量接收字符 5 char ch; 6 //定義一個計數器變量,用於保存字符的個數 7 int count=0; 8 //接收用戶輸入的字符串的第一個字符 9 scanf("%c",&ch); 10 //通過循環依次獲取輸入緩沖區的其他字符 11 //ch = '\n' 判斷取到的字符是否是換行符 12 //此處如果是換行符,表示用戶輸入結束 13 while (ch!='\n') { 14 //計數器+1 15 count++; 16 //再次獲取輸入緩沖區的下一個字符 scanf("%c",&ch); 17 } 18 } 19 //打印計數器的值 printf("count = %d\n",count); 統計從鍵盤輸入一行字符的個數

案例2:(while,switch)

1 思路: 2 3 1)一直循環等待用戶輸入 4 5 2)輸入四個字符,打印對應的方向 6 7 switch 8 9 //定義變量存儲用戶輸入的內容 10 11 char ch; 12 13 //定義標志,0-正常,1-退出 14 int flag=0; 15 printf("請控制小人移動:w.上 s.下 a.左 d.右 q.退出\n"); 16 17 while (!flag) { 18 19 scanf("%c",&ch); switch (ch) { 20 21 //判斷用戶輸入了大寫和小寫的w的情況 22 23 case 'w': 24 case 'W': 25 26 printf("上\n"); 27 28 break; 29 30 //判斷用戶輸入了大寫和小寫的s的情況 31 32 case 's': 33 34 35 case 'S': 36 37 printf("下\n"); 38 39 break; 40 41 //判斷用戶輸入了大寫和小寫的a的情況 42 43 case 'a': 44 case 'A': 45 46 printf("左\n"); 47 48 break; 49 50 //判斷用戶輸入了大寫和小寫的d的情況 51 52 case 'd': 53 case 'D': 54 55 printf("右\n"); 56 57 break; 58 59 case 'q': 60 61 case 'Q': 62 63 printf("已退出\n"); 64 65 flag = 1; 66 break; 67 68 } } 輸入wsad,打印對應的方向

案例3:(if...else,while)

1 思路 2 //1、定義變量,保存玩家競猜的數字和電腦隨機產生的數字 3 //2、讓電腦隨機產生一個1-1000之間的數 4 /* 5 難點:如何產生1-1000的數? 6 arc4random_uniform(1000) 產生的是 0-999之間的整數 7 arc4random_uniform(1001) 產生的是 0-1000之間的整數, 8 我們要求的是1-1000,所以不符合 9 arc4random_uniform(1000)+1 產生的是:0(+1)-999(+1),是 1-1000之間的數 10 得出結論: 要產生m,n之間的隨機數公式 11 arc4random_uniform(n-m+1)+m 12 如產生 10-50之間的隨機數 13 arc4random_uniform(50-10+1)+10; 14 1-1000之間的隨機數 15 arc4random_uniform(1000-1+1)+1 16 */ 17 //3、通過循環控制,讓用戶最多可以競猜10次 18 // 判斷如果競猜的數字>隨機產生的數

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved