




版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
第4章
選擇結構程序設計
網(wǎng)絡信息中心教研室大學計算機基礎網(wǎng)絡信息中心教研室2主要內(nèi)容4.1關系運算與邏輯運算
4.2if語句
4.3switch語句
4.4應用舉例
大學計算機基礎網(wǎng)絡信息中心教研室34.1關系運算與邏輯運算1關系表達式的應用
2邏輯表達式的應用
大學計算機基礎網(wǎng)絡信息中心教研室4在C語言中,實現(xiàn)選擇結構可以有兩類語句:
1、一類是if語句;
2、另一類是switch構成的多分支語句。關系表達式的概念與作用
由關系運算符組成的表達式,稱為關系表達式.。關系運算符兩邊的運算對象可以是C語言中任意合法的表達式.關系運算有一個確定的結果,真(非0)或假(0)。在選擇結構中,關系表達式經(jīng)常出現(xiàn)在if語句中,表達式必須有一個確定的值以決定要執(zhí)行的分支程序段。
4.1.1關系表達式的應用大學計算機基礎網(wǎng)絡信息中心教研室54.1.2邏輯表達式的應用邏輯表達式的概念與作用
由邏輯運算符(&&;||;!)組成的表達式,稱為邏輯表達式。邏輯表達式只有兩種值,0(假)或1(真).
參與邏輯運算的操作數(shù)可以是假值(0)或真值(任何非0的數(shù)值),也可以是任何類型的數(shù)據(jù),如字符型,實型或指針型數(shù)據(jù),還可以是一個表達式。邏輯表達式的表示方式比較靈活,即使是同一個條件,也可以用另一種方式來表示。大學計算機基礎網(wǎng)絡信息中心教研室64.1關系運算與邏輯運算【例4-1】寫出判別某一年year是否閏年的邏輯表達式。閏年的條件是符合下面二者之一:①能被4整除,但不能被100整除。②能被4整除,又能被400整除?!窘獯稹?/p>
閏年的表示方法:(year%4==0&&year%100!=0)||year%400==0; 非閏年的表示方法:!((year%4==0&&year%100!=0)||year%400==0); 還可以這樣表示非閏年:(year%4!=0||year%100==0)&&year%400!=0;大學計算機基礎網(wǎng)絡信息中心教研室74.2if語句1if語句的3種形式
2if語句的嵌套與{}語句塊的使用
大學計算機基礎網(wǎng)絡信息中心教研室8單分支:if它的形式是:if(表達式)語句;其流程如右圖所示。
4.2.1if語句的3種形式語句表達式真(1)假(0)單分支1大學計算機基礎網(wǎng)絡信息中心教研室94.2.1if語句的3種形式【例4-1】輸入兩個數(shù),把較小的數(shù)輸出。#include<stdio.h>main(){intx,y,min;printf("輸入兩個整數(shù):eg.x,y\n");scanf("%d,%d",&x,&y);min=x;if(y<min) min=y;printf("min=%d\n",min);}大學計算機基礎網(wǎng)絡信息中心教研室104.2.1if語句的3種形式這是分支結構的第二種基本形式,它的語法形式是:if(表達式)語句1; else
語句2;語句1表達式真(1)假(0)語句2圖4-2雙分支結構流程圖雙分支:if-else形式2大學計算機基礎網(wǎng)絡信息中心教研室114.2.1if語句的3種形式【例4-2】輸入一個整數(shù),判斷該數(shù)的奇偶性。#include<stdio.h>main(){intx;printf("輸入一個整數(shù),然后回車:\n");scanf("%d",&x);if(x%2==0) printf("%d是偶數(shù)。\n",x);else printf("%d是奇數(shù)。\n",x);}大學計算機基礎網(wǎng)絡信息中心教研室124.2.1if語句的3種形式
單分支和雙分支可以完成一些簡單的判斷,當在程序設計中,有多個分支選擇時,可采用if-else-if這種形式,甚至可以嵌套更多,它的語法形式是:if(表達式1)語句1; elseif(表達式2)
語句2; …… elseif(表達式n)
語句n; else
語句m;多分支:if-else-if形式3大學計算機基礎網(wǎng)絡信息中心教研室134.2.1if語句的3種形式多分支結構流程圖如下圖4-3所示。真(1)真(1)語句1表達式1假(0)表達式2假(0)表達式3假(0)表達式4語句2語句3語句4語句m假(0)真(1)圖4-3多分支結構流程圖大學計算機基礎網(wǎng)絡信息中心教研室144.2.1if語句的3種形式【例4-3】輸從鍵盤輸入一個字符,判斷其是否為數(shù)字、大小寫字母或控制字符。#include<stdio.h>main(){ charch; printf("輸入一個字符,然后回車:\n"); ch=getchar(); if(ch<32) printf(“控制字符ASCII值=%d\n",ch); elseif(ch>='0'&&ch<='9')printf("ASCII值=%d\n",ch); elseif(ch>='A'&&ch<='Z') printf("ASCII值=%d\n",ch); elseif(ch>='a'&&ch<='z') printf("ASCII值=%d\n",ch); elseprintf("其它字符。ASCII值=%d\n",ch);}大學計算機基礎網(wǎng)絡信息中心教研室154.2.1if語句的3種形式使用if時應注意的問題(1)if關鍵字后的表達式,既可以是邏輯表達式,也可以是關系表達式,還可以是賦值表達式,甚至可以是一個變量,一個函數(shù)。例如:if(!eof())語句;/*如果文件沒有結束,執(zhí)行語句*/if(a)語句;/*如果a為真,執(zhí)行語句*/if(a=b)/*將b值賦給a*/ (2)需要注意,if(表達式或值);書寫方法是錯誤的。(3)if語句中經(jīng)常會出現(xiàn)判別兩個值是否相等的表達式,判別相等的符號是“==”而不是“=”。大學計算機基礎網(wǎng)絡信息中心教研室164.2.2if語句的嵌套與語句塊的使用【例4-4】分別使用if語句嵌套方式和多分支if語句兩種方式編寫符號函數(shù)程序,函數(shù)如下,當輸入一個x值,輸出對應的y值。if語句的嵌套1大學計算機基礎網(wǎng)絡信息中心教研室174.2.2if語句的嵌套與語句塊的使用(1)if語句嵌套方式:#include<stdio.h>main(){ intx,y; printf("請輸入1個整數(shù)并回車:"); scanf("%d",&x); if(x>=0){ if(x==0)y=0; else y=1; }else y=-1; printf("x=%d,y=%d\n",x,y);}大學計算機基礎網(wǎng)絡信息中心教研室184.2.2if語句的嵌套與語句塊的使用(2)多分支if語句:#include<stdio.h>main(){ intx,y; printf("請輸入1個整數(shù)并回車:"); scanf("%d",&x); if(x<0) y=-1; else if(x==0) y=0; else y=1; printf("x=%d,y=%d\n",x,y);}大學計算機基礎網(wǎng)絡信息中心教研室194.2.2if語句的嵌套與語句塊的使用{}號是用于將若干條語句組合在一起形成一種功能塊,這種由若干條語句組合而成的語句就叫復合語句,復合語句頻繁出現(xiàn)于選擇結構和循環(huán)結構程序設計中。復合語句之間用{}分隔,而它內(nèi)部的各條語句還是需要以分號";"結束,并且復合語句允許嵌套,也就是在{}中的{}也是復合語句。復合語句在程序運行時,{}中的各行單語句是依次順序執(zhí)行的,可以將復合語句視為一條單語句,也就是說在語法上等同于一條單語句。{}語句塊的使用方法2大學計算機基礎網(wǎng)絡信息中心教研室20switch語句是C語言中提供了用于多分支選擇的語句,switch是if-else語句的變形形式,要比使用if-else更為簡潔、易讀。其一般形式為:switch(表達式){ case常量表達式1:語句1; case常量表達式2:語句2; … case常量表達式n:語句n; default:語句n+1;}
4.3switch語句大學計算機基礎網(wǎng)絡信息中心教研室214.3switch語句switch語句的執(zhí)行過程如下:(1)計算switch(表達式)的值(表達式的值可為整型、字符型、枚舉型);(2)將表達式的值與case后的常量表達式的值進行比較,若與某一常量表達式的值相同,則開始執(zhí)行匹配的case后的語句,直到遇到break語句或者switch語句的"}"為止;(3)若switch(表達式)與任何一個case后面的常量表達式的值均不匹配,則執(zhí)行default語句或switch語句的后續(xù)語句。大學計算機基礎網(wǎng)絡信息中心教研室224.3switch語句【例4-5】default與case的位置。#include<stdio.h>main(){ intx,y; scanf("%d",&x); switch(x) { default: putchar('t'); break;/*讀者可以去掉此處的break,觀察執(zhí)行情況*/
大學計算機基礎網(wǎng)絡信息中心教研室234.3switch語句case1: putchar('1'); break;case2: putchar('2'); break; }}大學計算機基礎網(wǎng)絡信息中心教研室244.3switch語句(4)為了在執(zhí)行某個case分支后,使流程跳出switch結構,即終止switch語句的執(zhí)行,總是把break語句與switch語句的case或default配合使用。(5)若case或default子句后的語句有多條,需要加上{}語句塊,提高程序可讀性。(6)“case常量表達式”語句起到標號作用,條件判斷只在switch(表達式)處判斷一次,然后根據(jù)switch后中表達式的值找到匹配的入口標號,從標號處執(zhí)行,直到遇到一個break或者"}"為止。
大學計算機基礎網(wǎng)絡信息中心教研室254.3switch語句【例4-6】break在switch中的作用。#include<stdio.h>main(){ chargrade; grade=getchar(); switch(grade) { case'A': printf("90~100\n"); case'B': printf("80~89\n"); case'C':
大學計算機基礎網(wǎng)絡信息中心教研室264.3switch語句 printf("70~79\n"); case'D': printf("60~69\n"); case'E': printf("<60\n"); default: printf("無效成績,重新運行程序!\n"); }}大學計算機基礎網(wǎng)絡信息中心教研室274.3switch語句(7)在某些情況下,多個case可共用一個執(zhí)行語句?!纠?-7】多個case共用一個執(zhí)行語句示例,輸入年份和月份,給出該月天數(shù)。#include<stdio.h>main(){ intyear,month,day; printf("請輸入年份與月份,例如:201010,空格隔開"); scanf("%d%d",&year,&month); switch(month)
大學計算機基礎網(wǎng)絡信息中心教研室284.3switch語句{ case1: case3: case5: case7: case8: case10: case12: day=30;break; case4: case6: case9: case11:day=30; break;大學計算機基礎網(wǎng)絡信息中心教研室294.3switch語句case2: if((year%4==0&&year%100!=0)||year%400==0) day=29; else day=28; break; default: printf("不存在該月份,請重新輸入!\n"); exit(0);/*退出當前程序,不再輸出提示信息*/ } printf("%d年%d月有%d天\n",year,month,day);}大學計算機基礎網(wǎng)絡信息中心教研室30【例4-8】寫程序判斷某一年是否是閏年。分析判斷流程圖:
4.4應用舉例真(1)真(1)leap=1year被4整除假(0)leap=0假(0)真(1)year被100整除year被400整除真(1)leap=1假(0)leap=0leap==1?閏年非閏年假(0)大學計算機基礎網(wǎng)絡信息中心教研室314.4應用舉例相應程序如下:
#include<stdio.h>main(){ intyear,leap; printf("請輸入年份并回車:"); scanf("%d",&year); if(year%4==0) if(year%100==0) if(year%400==0) leap=1;
大學計算機基礎網(wǎng)絡信息中心教研室324.4應用舉例 else leap=0; else leap=1; else leap=0; if(leap==1) printf("%d年是閏年。\n",year); else printf("%d年不是閏年。\n",year);}大學計算機基礎網(wǎng)絡信息中心教研室334.4應用舉例【例4-9】編寫程序,輸入一個字母,若是大寫字母,將之轉成小寫字母并輸出,或輸入的是小寫字母,將之轉成大寫字母并輸出?!窘獯稹肯鄳绦蛉缦拢?include<stdio.h>main(){charch;scanf("%c",&ch);if(ch>='a'&&ch<='z'){ch=ch-32;大學計算機基礎網(wǎng)絡信息中心教研室344.4應用舉例printf("你輸入的是小寫字母%c,對應的大寫字母是%c。\n",ch+32,ch);}elseif(ch>='A'&&ch<='Z'){ch=ch+32;printf("你輸入的是大寫字母%c,對應的小寫字母是%c。\n",ch-32,ch);}elseprintf("你輸入的是其它字符!\n");}
大學計算機基礎網(wǎng)絡信息中心教研室354.4應用舉例【例4-10】輸入a,b,c求解ax2+bx+c=0的解,實根或者復根,其中要使用求平方根函數(shù)doublesqrt(doublex)。#include<math.h>#include<stdio.h>main(){ floata,b,c,d,disc,x1,x2,realpart,imagpart; printf("輸入一元二次方程的三個參數(shù)并回車:a,b,c:"); scanf("%f,%f,%f",&a,&b,&c); if(fabs(a)<=1e-6) { if(fabs(b)<=1e-6)大學計算機基礎網(wǎng)絡信息中心教研室364.4應用舉例{ printf("無解!\n"); } else { printf("方程為一元一次方程,根為:%f\n",-c/b); } } else { disc=b*b-4*a*c; if(fabs(disc)<=1e-6){ printf("方程有二等根:%8.4f\n",-b/(2*a));}大學計算機基礎網(wǎng)絡信息中心教研室374.4應用舉例 elseif(disc>1e-6) { x1=(-b+sqrt(disc))/(2*a); x2=(-b-sqrt(disc))/(2*a); printf("%8.4f和8.4f\n",x1,x2); } else { realpart=-b/(2*a); imagpart=sqrt(-disc)/(2*a); printf("方程有二復根:\n"); printf("%8.4f+%8.4fi\n",realpart,imagpart); printf("%8.4f-%8.4fi\n",realpart,imagpart); }}}大學計算機基礎網(wǎng)絡信息中心教研室384.4應用舉例【例4-11】從鍵盤輸入一個整數(shù)x,若該數(shù)能被7和13整除,則輸出“y可以被7和13整除”,否則輸出“y不可以被7和13整除”,試在程序的空白處填入合適內(nèi)容使程序完整。#include<stdio.h>main(){ intflag,x; printf("請輸入一個整數(shù)并回
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025屆云南省尋甸縣第五中學高二化學第二學期期末教學質(zhì)量檢測試題含解析
- 安徽省江淮名校2025年高一下化學期末監(jiān)測模擬試題含解析
- 浙江省金華市磐安縣第二中學2025屆高二化學第二學期期末監(jiān)測模擬試題含解析
- 2025屆內(nèi)蒙古巴彥淖爾市臨河區(qū)三中化學高一下期末綜合測試模擬試題含解析
- 河南禽類交易管理辦法
- 擬像權力批判-洞察及研究
- 醫(yī)療項目預算管理辦法
- 民兵物資倉庫管理辦法
- 華為公司采購管理辦法
- 我國物價運行分析及應對策略探討
- 第四單元整體教學設計-部編版語文八年級下冊
- 貴州省畢節(jié)市威寧縣2024年統(tǒng)編版小升初考試語文試卷(原卷版)
- 平安產(chǎn)險湖北省中央財政水稻種植保險條款
- 日語考試N5試題
- 農(nóng)商銀行考試題庫100題
- 電池的歷史與發(fā)展
- 小學學業(yè)生涯規(guī)劃與目標
- 2023年CQE客訴工程師年度總結及下年規(guī)劃
- 國家開放大學《中國法律史》形成性考核1
- 攪拌類設備單機試車原始記錄
- 老舊小區(qū)物業(yè)投標方案(技術標)
評論
0/150
提交評論