C語言基礎第六課——第一節選擇結構程序設計(選擇結構概述、關係運算符及表達式、邏輯運算符及表達式、邏輯與&&、邏輯或||、邏輯非!、算法與流程圖)

一、選擇結構概述

有的問題,需要根據不同的條件來執行不同的語句。
比如同樣去食堂打飯,你一個學生去了,食堂會按照原價賣飯菜,而且你還可能碰到手抖的大媽,然後emmm。
OK,然後一個老師去了呢,價不價格先不說,大媽的手反正是絕對不會的抖了,哈哈哈哈。
這就是一個簡單的選擇結構的例子,我們做寫的程序就是那個大媽,就要判斷來的人是學生還是老師,然後決定是否執行手抖的命令,哈哈哈哈。
選擇結構也可以稱爲分支結構,一個樹幹(判斷)伸出去一堆樹枝(不同的輸入要執行的不同的語句),夠形象吧。

二、實現前提(關係表達式與邏輯表達式)

1.關係表達式與關係運算符

  1. 想要構成關係表達式首先需要有判斷符號吧,這就是關係運算符了。
  2. 關係運算符的功能是進行關係運算,也就是判斷給定的系運算的結果是一個邏輯值。若關係成立,則結果爲真,否則爲假。C語言中用整數1代表真,用整數0代表假。
  3. C裏面有6種關係運算符:
1. <  	小於
2. <=	小於或等於
3. >   	大於
4. >=	大於或等於
5. ==	等於
6. !=	不等於
  1. 首先日常生活中常見的<(小於)、<= (小於或等於)
    同樣的有>(大於)、>=(大於或等於)
    然後重點來了
    == (等於)、!= (不等於)
    有一個注意點就是:=跟==比較容易混

  2. 而且這6個運算符的優先級也是不一樣的
    ==跟!=的優先級比較低
    <、<=、>、>=的優先級比較高

a!=a<b
/*根據優先級規則
先進行a<b的判斷
結果就真1假0了
然後就是*/
a!=1或者0 
算完了出來結果1或者0 
結束
  1. 但一般來說*/%這種運算符的優先級比這些關係運算符高
    畢竟先計算完再比較也比較符合常理
    具體的可以優先級比較順序去查一下表格
a>b>c
/*關係運算符結合方式左到右
所以首先a>b進行運算
算完了就是*/
01>c了
//本來在數學上成立的式子
//現在就不一定成立了,切記

一般來說
運算的時候按照優先級進行運算
如果優先級相同的話
就根據該符號結合方向來確定運算順序
  1. 用關係運算符將運算量連接起來構成的表達式,就稱爲關係表達式。
    關係表達式一般只能夠表達單一的條件,如果需要表達複雜的條件,就需要使用邏輯表達式了

2.邏輯表達式與邏輯運算符

  1. 邏輯運算符:
    邏輯非!
    邏輯與&&
    邏輯或||
    數學上不是也有與或非嗎,日常生活中也有與或非啊,聯想一下就OK
  2. 邏輯與就是兩個都真表達式爲真,只要有一個假,就爲假,兩個更不用說了,這個跟日常一樣。
    邏輯或就時有一個爲真,表達式就爲真
    邏輯非就是真假取反操作
    優先級的話
    邏輯非最高,第二是邏輯與,第三是邏輯或
    神圖:真值表
    在這裏插入圖片描述 3. 由邏輯運算符將運算量連接起來的表達式叫做邏輯表達式。
表達變量x介於整數15之間:
x>1&&x<5
  1. C語言爲了提高編程的靈活性,大大擴展了邏輯運算量的範疇,允許任意標量類型的數據參與邏輯運算(標量類型也就是整型、實型、字符型、枚舉型和指針型這5種類型)。
    只要邏輯運算量的值爲非0,就看作真,只要值爲0,就看作假。
a=4;
//a是真,因爲上面說了
//非0 就是真
!a;
//邏輯非以後就是假了
還有一個蠻好玩的事情
a的ASCII碼是97 非零
A——65
字符0
'0'的ASCII碼是48
轉義字符
\0代表ASCII碼值爲0的那個字符,屬於0 
  1. 查詢ASCII碼技巧,方便查詢ASCII碼對應的字符:
    新建一個文本文檔,按住ALT+要查詢的碼值(注意,這裏是十進制),鬆開即可顯示出對應字符。例如:按住ALT+97,則會顯示出’a’。
    ASCII碼對應的大小寫規則:
    數字的ASCII碼<大寫字母的ASCII碼<小寫字母的ASCII碼。
 #include <stdio.h>
int main()
{
int a=1,b=2,c=3,d=4,p=1,q=9999,r;
r=(p=a>b)&&(q=c>d);
printf("p=%d,q=%d,r=%d\n",p,q,r);
return 0;
}
結果p=0,q=9999,r=0
首先1>2爲假
所以p=0
然後人都喜歡省力氣對吧
邏輯與只要有一個是假
式子就爲假對吧
那麼既然p=0了
這個式子必定爲假了
所以後面的q=c>d沒必要計算了
所以q=9999不變

假設多進行一次無謂的運算
這裏就是明知道邏輯與爲假
還進行後面的q=c>d計算
一次無謂運算0.1秒(誇大了)
那麼1000次就是100秒
因爲這個沒啥必要的運算耽誤100秒不值當
所以    你懂得
這個就是邏輯運算短路了
  1. 邏輯運算短路
    (1)表達式1&&表達式2求值時,若表達式1的值爲0,則整個表達式的值必定爲0;因此不必再對錶達式2進行求值。
    (2)表達式1||表達式2
    求值時,若表達式1的值爲1,則整個表達式的值必定爲1;因此不必再對錶達式2進行求值。

三、算法與流程圖

  1. 算法是在有限步驟內求解某一問題所使用的一組定義明確的規則。

  2. 例如:
    編程序從鍵盤輸入一個小寫字母,將其轉化爲相應的大寫字母並輸出。
    S1:從鍵盤輸入一個小寫字母存入變量c;
    S2: c=c-32;
    S3:輸出計算結果。
    這就是用自然語言描述算法
    己知兩個整型變量a和b,求出其中的較大數並存於變量max中。
    S1:輸入變量a和b的值:
    S2:如果a>=b,則a—>max;
    S3:否則b一>max;
    S4:輸出max的值。

  3. 描述算法工具多了去了
    自然語言就是用日常對話來展示,但是寫的多,如果卸的不夠精確的話,別人看了還不一定搞懂
    除此以外還有僞代碼啊
    還有流程圖,N-S圖啥的

  4. 看文字不一定看懂,不如看圖來的實在
    流程圖,是對算法的一種圖形化表示,用一系列規定的圖形、流程線及文字說明來表示算法中的基本操作和控制流程。其優點是直觀形象、簡潔易懂。
    標準圖例如下:
    在這裏插入圖片描述

  5. 例題

  6. 在這裏插入圖片描述在這裏插入圖片描述

  7. N-S圖你可以把它理解爲取消了流程線,然後將那些條條框框放在一個大的長方形中。

  8. 在這裏插入圖片描述在這裏插入圖片描述

四、關於算法說一點吧

做題的時候首先審題
然後考慮一下怎麼完成這道題目(用什麼算法)
然後就是搭框架,然後設變量,然後把算法表示出來,然後編譯運行。
算法是核心
核心
核心
之所以講那些流程圖啊啥的就是爲了表示算法的,一眼看出來的題目也有,但更多的都是需要你自己去思考,這個時候寫個流程圖啊啥的,比寫字方便,比較容易推演,這就是優勢。
而且,當你做不出來結果的時候,還可以按照流程圖推算一下自己是哪個地方漏掉了某種情況還是算法本身就有問題,從而進行算法的修改或者補充。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章