C語言程序設(shè)計(第5版)全套教學(xué)課件_第1頁
C語言程序設(shè)計(第5版)全套教學(xué)課件_第2頁
C語言程序設(shè)計(第5版)全套教學(xué)課件_第3頁
C語言程序設(shè)計(第5版)全套教學(xué)課件_第4頁
C語言程序設(shè)計(第5版)全套教學(xué)課件_第5頁
已閱讀5頁,還剩410頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

第1章C程序設(shè)計入門第1章C程序設(shè)計入門.pptx第2章數(shù)據(jù)類型、運算符和表達(dá)式.pptx第3章算法與程序設(shè)計基礎(chǔ).pptx第4章函數(shù).pptx第5章數(shù)組與指針.pptx第6章結(jié)構(gòu)體與聯(lián)合體.pptx第7章文件.pptx全套可編輯PPT課件1.1要求在命令提示符窗口中顯示“Hello,world!”這一行文字。/*liti1-1.c,顯示“Hello,world!”*/#include<stdio.h>//包含有關(guān)標(biāo)準(zhǔn)庫的信息/*定義名為main的函數(shù),它不接收實參值*/intmain(){/*main()的語句括在花括號中*/printf("Hello,world!\n");//分號“;”是C語句的結(jié)束標(biāo)志return0;}1.1引??例(1)注釋。作用是對程序或者語句的進(jìn)行用于解釋說明,幫助讀者理解程序?!?】多行注釋:介于/*與*/之間的字符序列稱為多行注釋,也叫塊注釋?!?】單行注釋:從C99標(biāo)準(zhǔn)開始,也可以使用//進(jìn)行單行注釋。注釋字符序列從//開始到本行的結(jié)束。【3】注釋的作用:C程序中的注釋就如文言文中的注釋一樣,使用注釋能增強(qiáng)程序的可讀性,使程序易于理解,便于程序員之間進(jìn)行交流。但有無注釋并不會影響程序的運行結(jié)果。1.1引??例去掉注釋的例1-1代碼,運行結(jié)果與帶注釋的是一樣的!#include<stdio.h>intmain(){printf("Hello,world!\n");return0;}1.1引??例(2)文件包含命令#include<stdio.h>。如果程序中使用了統(tǒng)提供的庫函數(shù)或第三方函數(shù),一般應(yīng)在文件的開始用#include命令,將被調(diào)用的函數(shù)信息包含到本文件中來。其意義是把尖括號<>內(nèi)指定的文件包含到本程序中,成為本程序的一部分。被包含的文件通常是由系統(tǒng)或第三方提供的,其擴(kuò)展名為“.h”,常稱為頭文件或首部文件。1.1引??例(3)main()函數(shù)。C語言是函數(shù)式的語言,函數(shù)是C語言的基本組成單位。任何一個C程序,無論大小,都是由一個或多個函數(shù)組成的。但其中有且僅有一個函數(shù)名字為main的函數(shù),通常稱其為主函數(shù)。任何一個C語言程序都從main()函數(shù)開始運行。在main()函數(shù)中通常還要調(diào)用其他函數(shù)來協(xié)助其完成某些工作。最終C語言程序在main()函數(shù)中結(jié)束運行1.1引??例(4)printf()函數(shù)是一個格式化輸出庫函數(shù)。在本例中,main()函數(shù)調(diào)用printf()函數(shù),其作用是在命令提示符窗口照原樣顯示雙引號內(nèi)的字符序列“Hello,world!\n”(不包括雙引號)。因為本程序中使用了庫函數(shù),所以應(yīng)在程序前面加上預(yù)處理命令#include<stdio.h>1.1引??例(4)顯示內(nèi)容中的字符序列'\n'是一個換行符,用于控制從下一行的最左邊位置開始顯示其后續(xù)的字符。在C語言中,由'\'開頭的、具有特殊含義的字符稱為轉(zhuǎn)義字符。如'\n'表示換行符,'\t'表示制表符。#include<stdio.h>intmain(){printf("Hello,world!\n");printf("ThisismyfirstCprogram!\n");return0;}1.1引??例(5)C語言規(guī)定,語句必須以分號“;”結(jié)束。分號是一條語句的結(jié)束標(biāo)志,一條語句可以寫在多行上,一行也可以寫多條語句。但是為了保持程序的可讀性,建議一行寫一條語句。1.1引??例

例1.2從鍵盤上輸入一個球的半徑r,要求計算球的表面積s和球的體積v。已知球的面積s=4πr2,球的體積v=43πr3。/*liti1-2.c,計算球的表面積和球的體積程序*/#include<stdio.h>intmain(){

floatr;/*定義單精度浮點型變量r,代表半徑*/floats,v;/*定義單精度浮點型變量s、v,代表面積和體積*/printf("radius=");/*屏幕提示輸入半徑的值*/scanf("%f",&r);/*從鍵盤上輸入半徑,將值存入變量r中*/s=4*3.1415926*r*r;/*將球的表面積的值計算出來,保存在變量s中*/v=4/3*3.1415926*r*r*r;/*將球的體積的值計算出來,保存在變量s中*/printf("Area=%f,Volume=%f\n",s,v);/*按單精度浮點數(shù)格式顯示計算結(jié)果*/return0;}1.1引??例(1)變量說明。C語言規(guī)定,程序中所有用到的變量都必須先定義(有時也稱說明),后使用,否則將會出錯。(2)鍵盤輸入函數(shù)scanf()。(3)賦值表達(dá)式。C語言中數(shù)值計算要通過賦值表達(dá)式來實現(xiàn)。在C語言中,=稱為賦值號,含義不同于數(shù)學(xué)中的等號,而是將其右邊的表達(dá)式的值賦給左邊的變量。(4)算術(shù)表達(dá)式。1.1引??例例1-3代碼/*liti1-3.c,計算a,b兩數(shù)之間的所有整數(shù)之和*/#include<stdio.h>intmain(){

inti,sum,a,b,t;/*定義五個整型變量*/sum=0;/*給和變量sum賦初值0*/printf("Entertwopositiveintegers:");//輸出提示信息

scanf("%d%d",&a,&b);/*輸入兩個正整數(shù)分別存儲到a,b中*/1.1引??例if(a>b)/*如果a>b,交換a,b的值*/{t=a;a=b;b=t;}for(i=a;i<=b;i++) sum=sum+i;/*通過for循環(huán)進(jìn)行累加求和*/printf("Thesumis%d\n",sum);/*輸出最后的結(jié)果*/return0;}1.1引??例(1)if選擇語句,根據(jù)條件有選擇地執(zhí)行某組語句。(2)for循環(huán)語句,根據(jù)條件重復(fù)的執(zhí)行某組語句(3)條件測試,測試結(jié)果只有兩種:真(用1表示)或假(用0表示)上述知識點將在第三章詳解1.1引??例【例1.4】采用C語言中的自定義函數(shù)的功能,對例1.3的要求重新編程。/*liti1-4.c,自定義函數(shù)計算a,b兩數(shù)之間的所有整數(shù)之和*/#include<stdio.h>intmysum(intx,inty)/*定義函數(shù)mysum,求x,y之間的所有整數(shù)之和*/{inti,s=0;for(i=x;i<=y;i++)//循環(huán)求x,y之間所有整數(shù)的和

s=s+i;returns;}1.1引??例intmain(){

intsum,a,b; /*定義三個整型變量*/

printf("Entertwopositiveintegers:");

scanf("%d%d",&a,&b); /*輸入兩個正整數(shù)分別存儲到a,b中*/

if(a>b)

sum=mysum(b,a);/*如果a>b,調(diào)用mysum(b,a)求和,把b傳給x,把a(bǔ)傳給y*/

else

sum=mysum(a,b);/*否則,調(diào)用mysum(a,b)求和,把a(bǔ)傳給x,把b傳給y*/

printf("Thesumis%d\n",sum); /*輸出最后的結(jié)果*/

return0;}1.1引??例(1)C語言是函數(shù)式的編程語言,C語言中函數(shù)分為兩種,一種是C語言系統(tǒng)提供的,叫庫函數(shù)或系統(tǒng)函數(shù),另一種是用戶自己編寫的,叫用戶自定義函數(shù),程序中mysum()就是自定義函數(shù)。(2)用戶自定義函數(shù)的一般定義形式為:

函數(shù)返回值類型

函數(shù)名(形參類型

形參1,形參類型

形參2,…)/*函數(shù)首部*/{ /*函數(shù)體*/

函數(shù)的說明部分

函數(shù)的執(zhí)行部分}1.1引??例(3)如何調(diào)用函數(shù)mysum():main()函數(shù)通過語句sum=mysum(a,b);調(diào)用mysum()函數(shù),調(diào)用時將實際參數(shù)a,b的值分別傳送給mysum()函數(shù)的形式參數(shù)x和y,通過執(zhí)行mysum()函數(shù)得到一個返回值,把這個值賦給變量sum。(4)一個C程序的主函數(shù)main()可以放在程序的任何位置,詳情將在第4章中介紹。1.1引??例書寫C程序時應(yīng)注意的幾點:(1)雖然C程序中,一行可以寫多條語句,一條語句可以分寫在多行,為清晰起見,一般一條語句單獨占一行。(2)用{}括起來的部分,通常表示了程序的某一層次結(jié)構(gòu)。{}一般與該結(jié)構(gòu)語句的第一個字母對齊,并單獨占一行。(3)同一層次的語句對齊,低一層次的語句比高一層次的語句或說明縮進(jìn)若干格后書寫,以便看起來層次更加清晰,增加程序的可讀性。(4)標(biāo)識符、關(guān)鍵字之間必須至少加一個空格以示間隔。若已有明顯的間隔符,雖然也可不再加空格來間隔,但也可以加一個空格來增加清晰度。1.1引??例1.2.1程序、指令與程序設(shè)計語言1.2.2C語言的發(fā)展歷史1.2.3C語言的特點1.2.4C語言中的符號1.2C語言概述計算機(jī)所能實現(xiàn)的指令的集合,稱為計算機(jī)的指令系統(tǒng)。一系列計算機(jī)指令的有序組合就構(gòu)成了程序。用于編寫程序的語言就是計算機(jī)程序設(shè)計語言。結(jié)構(gòu)化程序設(shè)計的三種基本的控制結(jié)構(gòu)就是順序結(jié)構(gòu)、條件結(jié)構(gòu)(也叫分支結(jié)構(gòu))與循環(huán)結(jié)構(gòu)。1.2.1程序、指令與程序設(shè)計語言1972年到1973年間,DennisRitchie在B語言的基礎(chǔ)上設(shè)計出了C語言。1983年美國國家標(biāo)準(zhǔn)學(xué)會(ANSI)對C語言進(jìn)行了標(biāo)準(zhǔn)化,稱為83ANSIC(簡稱C83)1990年,國際標(biāo)準(zhǔn)化組織(ISO)采納了89ANSIC,并以國際標(biāo)準(zhǔn)發(fā)布,是為ISOC標(biāo)準(zhǔn),也即常說的ANSIC。1999年,ISO對C標(biāo)準(zhǔn)做了全面的修訂,簡稱C99。目前,C語言最新標(biāo)準(zhǔn)是2018年發(fā)布的ISO/IEC9899:2018,簡稱C18。不同的標(biāo)準(zhǔn)存在差異,一般是新的標(biāo)準(zhǔn)對老標(biāo)準(zhǔn)進(jìn)行了修訂和擴(kuò)充,本書主要以ISOC標(biāo)準(zhǔn)為主,同時兼顧C(jī)99。1.2.2C語言的發(fā)展歷史C語言的主要特點如下:(1)語言簡練、緊湊,使用方便、靈活(2)運算符豐富。C語言共有34種運算符(3)數(shù)據(jù)結(jié)構(gòu)豐富。C語言的數(shù)據(jù)類型有基本數(shù)據(jù)類型和構(gòu)造數(shù)據(jù)類型(4)C語言是一種結(jié)構(gòu)化語言(5)C語言語法靈活、限制不十分嚴(yán)格(6)可以直接訪問內(nèi)存的物理地址,進(jìn)行位(bit)一級的操作(7)C語言還具有效率高、可移植性強(qiáng)等特點1.2.3C語言的特點C語言中使用的符號分為六類:標(biāo)識符、關(guān)鍵字、常量、字符串字面值、運算符、分隔符??崭穹?、制表符、換行符和換頁符等統(tǒng)稱為空白符,也叫分隔符。空白符在程序中僅起間隔作用關(guān)鍵字:在標(biāo)準(zhǔn)C中規(guī)定了32個英文單詞,它們具有特定含義,必須用小寫字母表示,不能另作他用,稱為關(guān)鍵字,例如前面例題中的int、float、if、for等,隨著學(xué)習(xí)的深入會逐漸介紹其他關(guān)鍵字。1.2.4C語言中的符號在C程序中為了區(qū)別各個變量、各個函數(shù)、各種類型,都必須為它們?nèi)〔煌拿?。這些名字都用標(biāo)識符來表示。C語言規(guī)定,標(biāo)識符以字母或下劃線開頭,后跟若干個字母、下劃線或數(shù)字。(1)大小寫字母組成的標(biāo)識符是不同的(2)標(biāo)識符的長度沒有限制,但不宜過長,建議命名時遵循“見名之意”(3)關(guān)鍵字不能作為標(biāo)識符使用,C系統(tǒng)已有的標(biāo)識符也不要重新命名為標(biāo)識符,如main,printf等。1.2.4C語言中的符號合法的標(biāo)識符有:a,x,x3,BOOK_1,sum5非法的標(biāo)識符如:3s(以數(shù)字開頭),s*T(出現(xiàn)非法字符*),-3x(以減號開頭),bowy-1(出現(xiàn)非法字符-)注意:在關(guān)鍵字、標(biāo)識符之間必須要有一個或以上的空格符做間隔,否則將會出現(xiàn)語法錯誤。例如把inta;寫成inta;1.2.4C語言中的符號C語言是一種編譯型的高級語言,描述解決問題算法的C語言源程序文件(.c)必須先用C語言編譯程序(Compiler)將其編譯,形成中間目標(biāo)程序文件(.obj),然后再用連接程序(Linker)將該中間目標(biāo)程序文件與有關(guān)的庫文件(.lib)和其他有關(guān)的中間目標(biāo)程序文件連接起來,形成最終可以在操作系統(tǒng)平臺上運行的二進(jìn)制形式的可執(zhí)行程序文件(.exe)。1.3C程序的上機(jī)調(diào)試1.3C程序的上機(jī)調(diào)試Code::Blocks(簡稱CB)是一款自由軟件,一個集程序編輯、編譯、連接、調(diào)試為一體的C/C++程序集成開發(fā)環(huán)境(IDE)。1.4Code::Blocks集成開發(fā)環(huán)境官網(wǎng)下載地址:/downloads/binaries1.4.1Code::Blocks的下載安裝配置上機(jī)的一般過程,上課時進(jìn)行操作演示1.4.2C程序上機(jī)的一般過程梅花香自苦寒來TheEnd第2章數(shù)據(jù)類型、運算符和表達(dá)式2.1數(shù)據(jù)類型概述不同類型的數(shù)據(jù),其表現(xiàn)形式不一樣,占用的內(nèi)存空間不一樣,表示的數(shù)據(jù)范圍和精度也不一樣。如:5、5.0、'5'和"5"等分別表示的是整型、浮點型、字符型和字符串的數(shù)據(jù)。基本類型的數(shù)據(jù)都有常量與變量之分2.1數(shù)據(jù)類型概述C語言中,整型又分為短整型、基本整型和長整型,每種整型又分為有符號和無符號。2.2整型1.整型常量的3種表示形式整型常量可以用下面3種形式表示。(1)十進(jìn)制整數(shù):如2022,-10,0。(2)八進(jìn)制整數(shù):在八進(jìn)制整數(shù)的前面加一個0。如0236表示(236)8、-017表示(-17)8。(3)十六進(jìn)制整數(shù):在十六進(jìn)制整數(shù)的前面加一個0x(或者0X)。如0x236表示(236)16,0xAB12表示(AB12)16。2.2.1整型常量在C語言中不同的書寫形式表示不同的整型常量:(1)直接書寫,表示的是短整型常量或基本整型常量,如588,-100等。(2)在常量后面加上l(L的小寫形式)或L,表示的是長整型常量,如588L,-100L等。(3)在常量后面加上u或U,表示的是無符號整型常量,如588U表示的是無符號整型常量,588UL表示的是無符號長整型常量。2.2整型常量C語言規(guī)定程序中使用的變量必須“先定義,后使用”。變量定義的格式如下:數(shù)據(jù)類型

變量名;例如:intx,y,z;/*定義了三個有符號基本整型變量x,y,z*/unsigneda,b;//定義了兩個無符號基本整型變量a,blongk;//定義了有符號長整型變量kshortm,n;//定義了有符號短整型變量m,n2.2.2整型變量1.帶格式的輸出函數(shù)printf()printf()函數(shù)的一般格式如下: printf(格式控制字符串,輸出值參數(shù)表);例如:printf(“%d,%d”,a,b); /*以十進(jìn)制整型變量a和b的值*/2.2.3整型數(shù)據(jù)的輸入與輸出格式控制字符串輸出值參數(shù)表(1)格式控制字符串格式控制字符串(在C語言中,用雙引號引起來的字符序列叫字符串)包括三部分:按照原樣輸出的普通字符、用于控制printf()函數(shù)中形參轉(zhuǎn)換的格式轉(zhuǎn)換說明符和轉(zhuǎn)義字符組成。2.2.3整型數(shù)據(jù)的輸入與輸出2.2.3整型數(shù)據(jù)的輸入與輸出格式轉(zhuǎn)換說明符形參類型和輸出形式%d,%iint類型;帶符號的十進(jìn)制整數(shù),正數(shù)的符號省略%uint類型;無符號的十進(jìn)制整數(shù)%oint類型;無符號的八進(jìn)制整數(shù),不輸出前導(dǎo)符0%x,%Xint類型;無符號十六進(jìn)制整數(shù),不輸出前導(dǎo)符0x表2-2printf()函數(shù)的整型數(shù)據(jù)格式轉(zhuǎn)換說明符說明:在%和說明符之間可以加上如l,h,-,n等修飾符來說明是長整型、短整型、對齊和域?qū)挕纠?.1】寫出下列程序的運行結(jié)果。/*liti2-1.c,同一個數(shù),采用不同的格式說明符,輸出不同的進(jìn)制*/#include<stdio.h>intmain(){ intx=156; printf("十進(jìn)制表示為%d,八進(jìn)制為%o,十六進(jìn)制為%0x\n",x,x,x); return0;}2.2.3整型數(shù)據(jù)的輸入與輸出【例2.2】寫出下列程序的運行結(jié)果。/*liti2-2.c指定輸出位數(shù)、對齊方式和填補(bǔ)內(nèi)容*/#include<stdio.h>intmain(){intx=156;printf("123456789\n");//輸出123456789,作為下面輸出的參照物printf("%6d#\n",x);//占6列寬,域?qū)捴荡笥趯嶋H位數(shù)時,右對齊,左補(bǔ)空格printf("%06d#\n",x);//有前導(dǎo)0時,右對齊,左補(bǔ)0printf("%-6d#\n",x);//域?qū)挒樨?fù)數(shù),左對齊,右補(bǔ)空格printf("%2d#\n",x);//域?qū)捴敌∮趯嶋H位數(shù)時,按實際位數(shù)輸出return0;}2.2.3整型數(shù)據(jù)的輸入與輸出(2)輸出值參數(shù)表輸出值參數(shù)表可以是常量、變量和表達(dá)式,它們之間用逗號隔開,若是表達(dá)式,則先計算表達(dá)式的結(jié)果,再輸出。輸出值的數(shù)據(jù)類型和個數(shù)應(yīng)該與格式轉(zhuǎn)換說明符相匹配。2.2.3整型數(shù)據(jù)的輸入與輸出/*liti2-3.c格式轉(zhuǎn)換說明符與輸出值參數(shù)匹配演示*/#include<stdio.h>intmain(){intx=-2;longy=32768;printf("x=%d\n",x);//輸出值與格式轉(zhuǎn)換說明符匹配,輸出正確printf("x=%u\n",x);//輸出值與格式轉(zhuǎn)換說明符不匹配,輸出的結(jié)果有出入printf("y=%ld\n",y);//輸出值與格式轉(zhuǎn)換說明符匹配,輸出正確printf("y=%hd\n",y);//輸出值與格式轉(zhuǎn)換說明符不匹配,輸出的結(jié)果有出入printf("%ld,%d,%d\n",x+y);printf("%d\n",x,x+1,x+2);return0;}2.2.3整型數(shù)據(jù)的輸入與輸出2.帶格式的輸入函數(shù)scanf()scanf()函數(shù)的一般格式為:scanf(格式控制字符串,參數(shù)地址表);例如:scanf("%d%d",&i,&j);2.2.3整型數(shù)據(jù)的輸入與輸出格式控制字符串輸入?yún)?shù)地址表(1)格式控制字符串格式控制字符串包括兩部分:格式轉(zhuǎn)換說明符和分隔符。表2-3scanf()函數(shù)的整型數(shù)據(jù)的格式轉(zhuǎn)換說明符2.2.3整型數(shù)據(jù)的輸入與輸出格式轉(zhuǎn)換說明符輸入數(shù)據(jù)%d十進(jìn)制整數(shù)%o八進(jìn)制整數(shù)%x,%X十六進(jìn)制整數(shù),大、小寫等價%u無符號十進(jìn)制整數(shù)說明:可以加上"l"或"h"來修飾格式轉(zhuǎn)換說明符,表示輸入的是長整型或短整型數(shù)據(jù),例如%ld,%lu,%ho表示的是十進(jìn)制長整型,無符號十進(jìn)制長整型,八進(jìn)制短整型。在"%"和轉(zhuǎn)換說明符之間,可以加上一個整數(shù)n,來限定輸入數(shù)據(jù)的位數(shù),當(dāng)輸入的位數(shù)達(dá)到n時,表示輸入數(shù)據(jù)結(jié)束。在格式控制字符串中除格式轉(zhuǎn)換說明符外的字符都是分隔符。在輸入數(shù)據(jù)時要輸入與它們相同的字符。2.2.3整型數(shù)據(jù)的輸入與輸出【例2.4】寫出下列程序的運行結(jié)果。/*liti2-4.cscanf()函數(shù)的輸入*/#include<stdio.h>intmain(){intx,y,z;scanf("%d,%d%d",&x,&y,&z);printf("x=%d\ny=%d\nz=%d\n",x,y,z);return0;}2.2.3整型數(shù)據(jù)的輸入與輸出當(dāng)輸入數(shù)據(jù)時,若沒有指定分隔符,則遇到以下情況時認(rèn)為數(shù)據(jù)輸入結(jié)束:空格(Space)鍵、回車(Enter)鍵或者制表(Tab)鍵。達(dá)到指定的數(shù)據(jù)域?qū)?。非法輸入?.2.3整型數(shù)據(jù)的輸入與輸出(2)參數(shù)地址列表scanf()函數(shù)中接收數(shù)據(jù)的必須是變量的地址,即在參數(shù)變量前要加上取地址運算符&。如:scanf("%d",&x);寫成如下形式就是錯誤的scanf("%d",x);//×2.2.3整型數(shù)據(jù)的輸入與輸出浮點型(又稱實型)數(shù)據(jù)是指帶小數(shù)點的數(shù)值型數(shù)據(jù),如7.19、31.5、.306、-10.01等。C語言中,浮點型數(shù)據(jù)又可分float(單精度實型)、double(雙精度實型)和longdouble(長雙精度實型)三種類型。2.3浮點型表2-4浮點類型2.3浮點型類

名占內(nèi)存的位數(shù)(字節(jié)數(shù))取值范圍float32(4)-3.4*1038~3.4*1038double64(8)-1.7*10308~1.7*10308longdouble128(16)-1.2*104932~1.2*1049322.3.1浮點型常量1.浮點型常量的兩種表示方式(1)十進(jìn)制小數(shù)形式。要注意,一定要有小數(shù)點,如2022.、.2022。(2)指數(shù)形式。由數(shù)字部分、小寫字母e(或大寫字母E)和作為指數(shù)的整數(shù)組成?!耙?guī)范化的指數(shù)形式”是指尾數(shù)部分中的整數(shù)部分只有一位大于0的數(shù)字,如2.022719e3。一個實數(shù)在按指數(shù)格式輸出時,是按規(guī)范化指數(shù)形式輸出的。2.浮點型常量的分類(1)直接書寫是指double類型,如7.19,2.24E3。(2)數(shù)值后面加F或f,是float類型,如7.19F,2.24E3f。2.3.1浮點型常量1.浮點型變量的分類與大小與浮點型常量一致,見表2-4。2.浮點型變量的定義floata,b;//定義了兩個單精度浮點型變量a和bdoublex,y=3.15;//定義了變量x和y,并給y賦初值3.152.3.2浮點型變量/*liti2-5.c理解單精度和雙精度數(shù)的有效位*/#include<stdio.h>intmain(){floatx1,x2,x3;doubley1,y2;x1=1.234567899e8f;x2=1234567.899e2f;x3=x1+1;printf("x1=%f\nx2=%f\nx3=%f\n",x1,x2,x3);y1=1.234567899e8;y2=y1+1;printf("y1=%f\ny2=%f\n",y1,y2);return0;}2.3.2浮點型變量1.浮點型數(shù)據(jù)的輸出表2-5printf()函數(shù)的浮點型數(shù)據(jù)格式轉(zhuǎn)換說明符2.3.3浮點型數(shù)據(jù)的輸入與輸出格式轉(zhuǎn)換說明符形參類型和輸出形式%f浮點類型;十進(jìn)制小數(shù),默認(rèn)值為6位小數(shù)

%e,%E浮點類型;指數(shù)形式,尾數(shù)默認(rèn)值為6小數(shù)

%g,%G浮點類型;自動選取f格式或e格式中輸出寬度較小的一種,有效位6位,且不輸出無意義的0

說明:(1)在“%”和轉(zhuǎn)換說明符之間可以用n.m的形式指定輸出域?qū)挘ㄝ敵鰰r占的總位數(shù))n和精度(小數(shù)位)m,若指定的域?qū)捫∮跀?shù)據(jù)的實際位數(shù),則按實際位數(shù)輸出。(2)默認(rèn)的是右對齊,左補(bǔ)空,可以加前導(dǎo)0,則會左補(bǔ)0;加“-”,表示左對齊右補(bǔ)空。2.3.3浮點型數(shù)據(jù)的輸入與輸出【例2.6】上機(jī)運行下列程序,觀察并理解程序的運行結(jié)果。/*liti2-6.c演示%f,%e,%g的區(qū)別*/#include<stdio.h>intmain(){ floatx=12.3456789f; doubley=1234567891234.123456789; doublez=1234.567; printf("%f\n",x);//單精度,保留6位小數(shù),有效位7位 printf("y=%f,z=%f\n",y,z);//雙精度浮點數(shù)輸出,保留6位小數(shù),有效位16位 printf("y=%e,z=%e\n",y,z);//雙精度,指數(shù)形式輸出,保留6位小數(shù) printf("y=%g,z=%g\n",y,z);//雙精度,%f和%e中短的那種格式輸出,有效位6位 return0;}2.3.3浮點型數(shù)據(jù)的輸入與輸出【例2.7】上機(jī)運行下列程序,觀察并理解程序的運行結(jié)果。/*liti2-7.c域?qū)?精度,對齊方式*/#include<stdio.h>intmain(){ floatx=1234.5678; printf("12345678901234567890\n");//輸出參照字符,作為下面輸出的參照 printf("%.2f#\n",x);//保留兩位小數(shù)輸出,字符#,標(biāo)明輸出數(shù)據(jù)的結(jié)束位置 printf("%3.2f#\n",x);//指定域?qū)捫∮趯嶋H位數(shù),按實際位數(shù)輸出,并保留2位小數(shù) printf("%12.2f#\n",x);//右對齊,左補(bǔ)空 printf("%012.2f#\n",x);//右對齊,左補(bǔ)0 printf("%-12.2f#\n",x);//左對齊,右補(bǔ)空 return0;}2.3.3浮點型數(shù)據(jù)的輸入與輸出2.浮點型數(shù)據(jù)的輸入表2-6scanf()函數(shù)的浮點型數(shù)據(jù)的格式轉(zhuǎn)換說明符2.3.3浮點型數(shù)據(jù)的輸入與輸出格式轉(zhuǎn)換說明符輸入數(shù)據(jù)%f十進(jìn)制小數(shù)形式或指數(shù)形式均可;當(dāng)輸入double類型的實數(shù)時,須用%lf%e,%E,%g,%G與%f作用相同,可以相互轉(zhuǎn)換;當(dāng)輸入double類型的實數(shù)時,須加前綴l【例2.8】上機(jī)運行下列程序,觀察并理解程序的運行結(jié)果。/*liti2-8.c浮點數(shù)的正確輸入*/#include<stdio.h>intmain(){floatx;doubley;scanf("%f%f",&x,&y);//雙精度浮點數(shù)以%f格式輸入,得不到正確的結(jié)果printf("x=%f,y=%f\n",x,y);scanf("%f%lf",&x,&y);printf("x=%f,y=%f\n",x,y);return0;}2.3.3浮點型數(shù)據(jù)的輸入與輸出表2-7字符類型2.4字符類型類

名占內(nèi)存的位數(shù)(字節(jié)數(shù))取值范圍[signed]char8(1)–128~+127即-27~(27-1)unsignedchar8(1)0~255即0~(28-1)字符常量可看成是一個整數(shù),其值是字符對應(yīng)的ASCII碼值。字符常量是用單引號括住的單個字符,如‘a(chǎn)’,‘A’,‘x’,‘$’等都是字符常量。例如字符’a’的ASCII碼是97,所以可以把字符’a’看成97。2.4.1字符常量例2.9】寫出下列程序的運行結(jié)果。/*liti2-9.c理解字符型數(shù)據(jù)的存儲,字符與整型的關(guān)系*/#include<stdio.h>intmain(){printf("%c,%c\n",'A','F');printf("%d,%d\n",'A','F');printf("%d,%c\n",'F'-'A','A'+5);return0;}2.4.1字符常量表2-8常用的轉(zhuǎn)義字符2.4.1字符常量字符形式含

義\n換行\(zhòng)v垂直跳格\0空字符,作為字符串的結(jié)束標(biāo)記\t水平跳格,跳到下一個Tab位置\b退格\r回車,不換行\(zhòng)f換頁\\一個反斜線\"一個雙引號\'一個單引號\ddd1~3位八進(jìn)制所代表的字符,其中d為一位八進(jìn)制數(shù)\xhh1~2位十六進(jìn)制所代表的字符,其中h為一位十六進(jìn)制數(shù)【例2.10】理解轉(zhuǎn)義字符,寫出下列程序的運行結(jié)果。/*理解各轉(zhuǎn)義字符的含義,寫出程序的運行結(jié)果*/#include<stdio.h>intmain(){printf("十進(jìn)制\t,八進(jìn)制\t,十六進(jìn)制\n");printf("65\t,\65\t,\x65\n");return0;}2.4.1字符常量字符型變量的定義形式像整型變量和浮點型變量的定義形式一樣,例如:

charc1,c2; /*定義c1,c2為字符型變量*/【例2.11】寫出下列程序的運行結(jié)果。/*liti2-11.c*/#include<stdio.h>intmain(){charc1='A',c2;

c2=c1+1;printf("%c,%c\n",c1,c2); /*以字符形式輸出*/printf("%d,%d\n",c1,c2); /*輸出字符的ASCII碼值*/return0;}2.4.2字符型變量字符型數(shù)據(jù)輸入輸出可以使用標(biāo)準(zhǔn)庫中的getchar()和putchar()兩個函數(shù)進(jìn)行,也可以使用帶格式的輸入輸出函數(shù)scanf()和printf()函數(shù),格式轉(zhuǎn)換說明符為“%c”。如例2-11。2.4.3字符型數(shù)據(jù)的輸入與輸出【例2.13】從鍵盤輸入一個小寫英文字母,將其轉(zhuǎn)換為大寫英文字母并輸出。/*liti2-13.c*/#include<stdio.h>intmain(){ charc; printf("Inputacharacter:");c=getchar();/*輸入一個小寫英文字母*/ c=c-32;/*將其轉(zhuǎn)換為大寫英文字母*/ putchar(c);/*輸出轉(zhuǎn)換后的字符*/ putchar('\n');/*換行*/ return0;}2.4.3字符型數(shù)據(jù)的輸入與輸出字符串常量也叫字符串字面值,是用一對雙引號括住的、由0個或多個字符組成的字符序列。例如,"China"、"Windows10"和""(空字符串)等。C語言規(guī)定:在每一個字符串的結(jié)尾系統(tǒng)自動加上一個字符串結(jié)束標(biāo)志符'\0',以便判斷字符串是否結(jié)束。圖2-3字符串“China”的存儲格式2.5.1字符串常量'C''h''i''n''a''\0'【例2.15】寫出下列程序的運行結(jié)果,其中格式轉(zhuǎn)換說明符"%s"用于字符串的輸出。/*liti2-15.c字符串的輸出*/#include<stdio.h>intmain(){printf("%c%s\n",'T',"hisisastring.");printf("%s,%5.2s\n","Language.","Language.");return0;}2.5.1字符串常量符號常量是指用一個標(biāo)識符來代表的一個常量。#definePI3.1415926定義了一個符號常量PI,在預(yù)編譯程序時將代碼中所有的PI都用3.1415926來代替。2.5.2符號常量【例2.16】編程輸入半徑r,并求其所對應(yīng)的圓的面積和周長,圓周率π用符號常量PI定義。/*liti2-16.c符號常量的使用*/#include<stdio.h>#definePI3.1415926 /*定義符號常量PI*/intmain(){doubler,area,circumference;printf("radius=");scanf("%lf",&r);area=PI*r*r;circumference=2*PI*r;printf("Area=%f\nCircumference=%f\n",area,circumference);return0;}2.5.2符號常量C語言的運算符非常豐富,根據(jù)運算符的性質(zhì)可以分為算術(shù)運算符、關(guān)系運算符、邏輯運算符、賦值運算符、位運算符、條件運算符、自增和自減運算符、逗號運算符、指針運算符、強(qiáng)制類型轉(zhuǎn)換運算符、分量運算符、下標(biāo)運算符、求字節(jié)數(shù)運算符、函數(shù)調(diào)用運算符等。操作數(shù)個數(shù),運算符又可以分成單目運算符、雙目運算符和三目運算符。表達(dá)式是指用運算符和小括號把運算對象連接起來的式子。運算對象可以是常量、變量、函數(shù)和表達(dá)式等2.6運算符與表達(dá)式1.算術(shù)運算符算術(shù)運算符包括以下幾個:+、-、*、/、%(整數(shù)求余)(1)兩個類型相同的操作數(shù)進(jìn)行運算,其結(jié)果類型與操作數(shù)類型相同。例如7/4的結(jié)果值為1。不同類型的數(shù)據(jù)要先轉(zhuǎn)換成同一類型,然后才能進(jìn)行運算。例如7.0/47.0/4.02.6.1算術(shù)運算符與算術(shù)表達(dá)式(2)求余運算要求運算符%的兩邊的操作數(shù)必須為整數(shù),余數(shù)的符號與被除數(shù)符號相同。例如:15%(-7)=1,(-15)%7=-1。2.算術(shù)表達(dá)式用算術(shù)運算符和括號將運算對象連接起來的式子稱為算術(shù)表達(dá)式。運算對象包括常量、變量和函數(shù)等。例如x*y/z+2022.719–15%(-7)+'A'。2.6.1算術(shù)運算符與算術(shù)表達(dá)式C語言規(guī)定算術(shù)運算符的優(yōu)先級為先做*、/、%;后做+、-。即“*、/、%”屬同一優(yōu)先級,“+、-”屬同一優(yōu)先級,而且前者優(yōu)先級高于后者。在表達(dá)式求值時,同一優(yōu)先級的運算符的運算順序規(guī)定為“自左至右”,即運算對象先與左面的運算符結(jié)合,也稱為“左結(jié)合性2.6.1算術(shù)運算符與算術(shù)表達(dá)式在將復(fù)雜的數(shù)學(xué)表達(dá)式寫成C語言表達(dá)式時,要注意以下幾個方面:(1)數(shù)學(xué)表達(dá)式中乘法運算符可以省略不寫,C表達(dá)式中所有運算符都必須寫,不能省略。(2)為了保持與數(shù)學(xué)表達(dá)式結(jié)果一致,數(shù)學(xué)表達(dá)式中的兩個整數(shù)相除,在C表達(dá)式中至少要把一個整數(shù)寫成浮點數(shù)的形式。(3)在C表達(dá)式中,適當(dāng)?shù)匾由闲±ㄌ枺员3诌\算順序。(4)數(shù)學(xué)中有的運算符,C語言中沒有,則要使用到一些標(biāo)準(zhǔn)數(shù)學(xué)函數(shù)來代替。2.6.1算術(shù)運算符與算術(shù)表達(dá)式賦值運算符用“=”來表示。它的一般形式為:變量=表達(dá)式其執(zhí)行過程是先計算右邊表達(dá)式的結(jié)果,再把結(jié)果賦給左邊的變量。凡是雙目(二元)運算符,都可以與賦值符一起組成復(fù)合賦值符。它的一般形式為:變量雙目運算符=表達(dá)式其等價于:變量=變量雙目運算符(表達(dá)式)2.6.2賦值運算符和賦值表達(dá)式例如 x%=3等價于x=(x%3)賦值運算符的優(yōu)先級倒數(shù)第二,僅高于逗號運算符。其結(jié)合是右結(jié)合性。2.6.2賦值運算符和賦值表達(dá)式【例2.17】上機(jī)運行下面的程序,理解復(fù)雜賦值表達(dá)式的求值。/*liti2-17.c復(fù)雜的賦值表達(dá)式*/#include<stdio.h>intmain(){intx,y,z;x=y=z=10;//求值過程為依次將8賦給z、y、xprintf("x=%d\ty=%d\tz=%d\n",x,y,z);x*=y+8;//等價于x=x*(y+8)printf("x=%d\ty=%d\tz=%d\n",x,y,z);x=(y=12)*(z=8);//先把12賦給y,8賦給z,再把y*z的結(jié)果賦給xprintf("x=%d\ty=%d\tz=%d\n",x,y,z);x=2;x+=x-=x*(y=11);printf("x=%d\ty=%d\tz=%d\n",x,y,z);return0;}2.6.2賦值運算符和賦值表達(dá)式強(qiáng)制類型轉(zhuǎn)換運算符的一般形式如下:

(類型名)表達(dá)式例如:15%(int)7.415%7結(jié)果為1強(qiáng)制類型轉(zhuǎn)換是單目運算符,優(yōu)先級較高。如果要將x+y的結(jié)果類型轉(zhuǎn)換成int型,應(yīng)寫成(int)(x+y),不能錯寫成(int)x+y,否則只是先將x轉(zhuǎn)換成int型,然后再與y相加。2.6.3強(qiáng)制類型轉(zhuǎn)換運算符C語言為變量值的增加與減少提供了兩個特殊的運算符:(1)自增運算符:++,用于使變量值加1;(2)自減運算符:--,用于使變量減1。例如:intx=5,y=10;x++;y--;2.6.4自增、自減運算符++與--這兩個運算符奇特的方面在于,它們既可以用做前綴運算符(用在變量前面,如++n),也可以用做后綴運算符(用在變量后面,如n++)這兩種的共同點都是使n加1。但不同點在于:++n和n++都是表達(dá)式,二者表達(dá)式的值不同;表達(dá)式++n的值是變量n加1后的值,表達(dá)式n++的值是n沒有加1之前的值。2.6.4自增、自減運算符【例2.19】上機(jī)運行下面的程序,理解自增、自減運算。/*liti2-19.c自增、自減運算示例*/#include<stdio.h>intmain(){intx,y,z;x=2;y=x++;//相當(dāng)于先后執(zhí)行了y=x;x=x+1;printf("x=%d,y=%d\n",x,y);z=++x;//相當(dāng)于先后執(zhí)行了x=x+1;z=x;printf("x=%d,z=%d\n",x,z);return0;}2.6.4自增、自減運算符逗號運算符也叫順序求值運算符,由逗號運算符將兩個表達(dá)式連接起來稱為逗號表達(dá)式。其一般格式為:

表達(dá)式1,表達(dá)式2例如:intx;x=2*8,x*10;整個逗號表達(dá)式的值為160,x的值為16。2.6.5逗號運算符和逗號表達(dá)式逗號表達(dá)式中的表達(dá)式又可以是一個逗號表達(dá)式,這樣逗號表達(dá)式的一般形式就可以擴(kuò)展成:

表達(dá)式1,表達(dá)式2,表達(dá)式3,…,表達(dá)式n2.6.5逗號運算符和逗號表達(dá)式【例2.20】上機(jī)運行下面的程序,理解逗號運算符和逗號表達(dá)式。/*liti2-20.c理解逗號運算符與逗號表達(dá)式*/#include<stdio.h>intmain(){intx,y,z;y=(x=10,10+20);printf("x=%d,y=%d\n",x,y);z=x=10,10+20;printf("x=%d,z=%d\n",x,z);y=(x=10,x++,x+5);printf("x=%d,y=%d\n",x,y);return0;}2.6.5逗號運算符和逗號表達(dá)式所謂位運算,就是指對一個數(shù)的二進(jìn)制位的運算,例如位的或、與、非、異或運算和位的左、右移動運算。在匯編語言里有位操作指令,C語言也提供了位運算功能。C語言提供了6個用于位操作的運算符,這些運算符只能作用于各種整型數(shù)據(jù)(如char型、int型、unsigned型、long型)。& 按位與AND(二元運算符)| 按位或OR(二元運算符)^ 按位異或XOR(二元運算符)<< 按位左移(二元運算符)>> 按位右移(二元運算符)~ 按位取反(一元運算符)2.6.6位運算梅花香自苦寒來TheEnd第3章算法與程序設(shè)計基礎(chǔ)算法+數(shù)據(jù)結(jié)構(gòu)=程序數(shù)據(jù)結(jié)構(gòu)表示數(shù)據(jù)間的關(guān)系,算法則指明了對數(shù)據(jù)處理的步驟和方法。3.1算法解決一個實際問題而采取的方法和步驟,稱之為“算法”【例3.1】求1+2+3+4+…+100=?算法1步驟1:1+2=3步驟2:3+3=6步驟3:6+4=10…步驟99:4950+100=5050算法2步驟1:0+100=100步驟2:1+99=100步驟3:2+98=100…步驟50:49+51=100步驟51:100*50=5000步驟52:5000+50=50503.1.1算法的概念算法3步驟1:k=1,s=0步驟2:如果k>100,則算法結(jié)束,s即為所求的和,輸出s;否則轉(zhuǎn)向步驟3步驟3:s=s+k,k=k+1步驟4:轉(zhuǎn)向步驟2總結(jié):對于同一個問題,可以有多種算法,算法2比算法1步驟少,算法3比算法2步驟少,算法3的質(zhì)量最優(yōu)。3.1.1算法的概念一個算法應(yīng)具有如下五個特點。1.有窮性一個算法必須包含有限的操作步驟。2.確定性算法中的每一個步驟應(yīng)當(dāng)是確定的,而不應(yīng)當(dāng)是含糊的、模棱兩可的。3.可行性每一個算法是可行的,即算法中的每一個步驟都可以有效地執(zhí)行,并得到確定的結(jié)果。因此,算法的可行性也稱為算法的有效性。3.1.2算法的特性4.有零個或多個輸入所謂輸入是指在執(zhí)行算法時,計算機(jī)需從外界取得必要的信息。一個算法可以有多個輸入,也可以沒有輸入。5.有一個或多個輸出算法的目的是為了求解,“解”就是輸出。一個算法可以有一個或多個輸出,沒有輸出的算法是沒有意義的。3.1.2算法的特性為了表示一個算法,可以用不同的方法。常用的有自然語言、傳統(tǒng)的流程圖、N-S流程圖、偽代碼、PAD圖和計算機(jī)語言等。3.2算法的常用表示方法傳統(tǒng)流程圖是用圖形的方式來表示算法,用一些幾何圖形來代表各種不同性質(zhì)的操作。3.2.1傳統(tǒng)流程圖結(jié)構(gòu)化程序設(shè)計中采用三種基本結(jié)構(gòu),即順序結(jié)構(gòu)、選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu),其共同特點如下:(1)只有一個入口;(2)只有一個出口;(3)結(jié)構(gòu)內(nèi)的每一部分都有機(jī)會被執(zhí)行到;(4)結(jié)構(gòu)內(nèi)不存在“死循環(huán)”(無終止的循環(huán))。3.2.1傳統(tǒng)流程圖1.順序結(jié)構(gòu)順序結(jié)構(gòu)的程序是按語句的書寫順序執(zhí)行的2.選擇結(jié)構(gòu)選擇結(jié)構(gòu)或稱分支結(jié)構(gòu)、條件結(jié)構(gòu),根據(jù)給定的條件P是否成立來進(jìn)行選擇。若P成立,則執(zhí)行A框中的操作,否則執(zhí)行B框中的操作。3.2.1傳統(tǒng)流程圖3.循環(huán)結(jié)構(gòu)一種是先判斷條件,若條件成立再進(jìn)入循環(huán)體另一種是先進(jìn)入循環(huán)體執(zhí)行,再判斷條件是否成立3.2.1傳統(tǒng)流程圖【例3.2】用流程圖表示求:的算法3.2.1傳統(tǒng)流程圖N-S流程圖中把流程線完全去掉了,全部算法寫在一個矩形框內(nèi),在框內(nèi)還可以包含其他框,即由一些基本的框組成一個較大的框。3.2.2N-S結(jié)構(gòu)流程圖1.順序結(jié)構(gòu)2.選擇結(jié)構(gòu)3.2.2N-S結(jié)構(gòu)流程圖3.循環(huán)結(jié)構(gòu)

3.2.2N-S結(jié)構(gòu)流程圖例3.2的算法的N-S流程圖3.2.2N-S結(jié)構(gòu)流程圖/*liti3-3.c*/#include<stdio.h>intmain(){intsign,i,n; floatsum;printf("Pleaseinputanintegerton:");scanf("%d",&n);sign=1;sum=1;i=1;while(i<=n){sign=(-1)*sign;sum=sum+sign/(3.0*i);i=i+1;}printf("sum=%f\n",sum);return0;}3.2.3用計算機(jī)語言表示算法要設(shè)計出結(jié)構(gòu)化的程序,可采取以下的方法:(1)自頂向下。(2)逐步細(xì)化。(3)模塊化。(4)結(jié)構(gòu)化編碼。3.3結(jié)構(gòu)化程序設(shè)計方法例3.4:輸入10個大于3的整數(shù),打印出其中的素數(shù)(質(zhì)數(shù))。分析:素數(shù)又稱質(zhì)數(shù),是指只能被1和它本身整除的整數(shù)。本題采用“自頂向下、逐步細(xì)化”的方法來處理。分解步驟:1、把求解問題分為A、B和C三個部分,如圖3-14所示3.3結(jié)構(gòu)化程序設(shè)計方法2、對A(即輸入10個數(shù)據(jù))細(xì)化,如圖3-15所示3、對B(即將所有的非素數(shù)置為0)細(xì)化,如圖3-16所示3.3結(jié)構(gòu)化程序設(shè)計方法4、

對D框進(jìn)一步細(xì)化如圖3-17所示。5、對其中的E框還要進(jìn)一步細(xì)化,如圖3-18所示。3.3結(jié)構(gòu)化程序設(shè)計方法6、對圖3-16的C框可以進(jìn)行細(xì)化,如圖3-19所示。7、對圖3-19中F框的細(xì)化如圖3-20所示。3.3結(jié)構(gòu)化程序設(shè)計方法8、完整流程圖3.3結(jié)構(gòu)化程序設(shè)計方法當(dāng)j<=xi-1且xi!=0/*例3.4程序清單*/#include<stdio.h>#defineN10voidinput(intx[],intn);voidprime(intx[],intn);voidoutput(intx[],intn);intmain(){intx[N];input(x,N);//對應(yīng)A模塊,輸入10個數(shù)prime(x,N);//對應(yīng)B模塊,把非素數(shù)置0output(x,N);//對應(yīng)C模塊,輸出素數(shù)

return0;}/*對應(yīng)A模塊,input函數(shù)的功能是輸入10整數(shù)*/voidinput(intx[],intn){inti;for(i=0;i<n;i++){printf("請輸入第%d個整數(shù):",i+1);scanf("%d",&x[i]);}return;}3.3結(jié)構(gòu)化程序設(shè)計方法/*對應(yīng)B模塊,prime函數(shù)的功能是把數(shù)組x中非素數(shù)的元素置0*/voidprime(intx[],intn){inti,j,r;for(i=0;i<n;i++)for(j=2;j<=x[i]-1&&x[i]!=0;j++){r=x[i]%j;if(r==0)x[i]=0;}return;}/*對應(yīng)C模塊,輸出10個整數(shù)中的素數(shù)*/voidoutput(intx[],intn){inti;printf("\n10個整數(shù)中素數(shù)有:\n");for(i=0;i<n;i++)if(x[i]!=0)printf("%8d",x[i]);printf("\n");}3.3結(jié)構(gòu)化程序設(shè)計方法在C語言中,if和switch語句用來實現(xiàn)選擇結(jié)構(gòu),這種語句的特點是,根據(jù)所給出的條件,決定從給出的操作中選擇一組去執(zhí)行。3.4選擇結(jié)構(gòu)程序設(shè)計1.關(guān)系運算符及優(yōu)先次序表3-1關(guān)系運算符的含義、優(yōu)先級和結(jié)合性3.4.1關(guān)系運算符和關(guān)系表達(dá)式關(guān)系運算符功能含義優(yōu)先級結(jié)合性<

小于優(yōu)先級相同(高)左結(jié)合性<=小于等于>

大于>=大于等于==等于優(yōu)先級相同(低)!=不等于關(guān)系運算符與其他運算符的運算優(yōu)先次序如下:(1)關(guān)系運算符的優(yōu)先級低于算術(shù)運算符;(2)關(guān)系運算符的優(yōu)先級高于賦值運算符。關(guān)系運算符的結(jié)合性為左結(jié)合,即當(dāng)優(yōu)先級相同時從左算到右。例如:a=b>c 相當(dāng)于 a=(b>c)a>b<c相當(dāng)于

(a>b)<c3.4.1關(guān)系運算符和關(guān)系表達(dá)式2.關(guān)系表達(dá)式用關(guān)系運算符連接起來的表達(dá)式稱為關(guān)系表達(dá)式,關(guān)系表達(dá)式的結(jié)果為邏輯值真(用“1”表示)或假(用“0”表示)。例如:c>a+b 若a=3,b=4,c=9 則結(jié)果為1若x=2,計算表達(dá)式10<=x<=30的結(jié)果?3.4.1關(guān)系運算符和關(guān)系表達(dá)式1.邏輯運算符及優(yōu)先次序表3-2邏輯運算符的含義、優(yōu)先級和結(jié)合性3.4.2邏輯運算符和邏輯表達(dá)式邏輯運算符功能含義優(yōu)先級結(jié)合性!邏輯非(取反)1(高)右結(jié)合性&&邏輯與2左結(jié)合性||邏輯或3(低)左結(jié)合性表3-3邏輯運算符的運算規(guī)則3.4.2邏輯運算符和邏輯表達(dá)式ab!a!ba&&ba||b真真假假真真真假假真假真假真真假假真假假真真假假邏輯運算符!為右結(jié)合性,&&和||為左結(jié)合性。3.4.2邏輯運算符和邏輯表達(dá)式2.邏輯表達(dá)式用邏輯運算符將運算對象(大多數(shù)情況下是關(guān)系表達(dá)式或邏輯表達(dá)式)連接起來的式子稱邏輯表達(dá)式。

例如,若a=4,b=2,x=6,y=7,則:a>b&&x>y//表達(dá)式的結(jié)果為0若用變量year表示年份,則判斷閏年的條件寫成C語言的表達(dá)式為:(year%4==0&&year%100!=0)||year%400==03.4.2邏輯運算符和邏輯表達(dá)式(1)在C語言中規(guī)定:非零為“真”,“真”用1表示;零為“假”,“假”用0表示。例如:'a'&&'b' 其結(jié)果為1(2)邏輯運算符&&和||具有惰性求值或邏輯短路的特點,當(dāng)連接多個表達(dá)式時只計算必須要計算的值。也即是當(dāng)計算了某個表達(dá)式的結(jié)果后,就能決定整個邏輯表達(dá)式的結(jié)果,則后面的表達(dá)式將不計算。3.4.2邏輯運算符和邏輯表達(dá)式/*liti3-5.c寫出下面程序的運行結(jié)果。*/#include<stdio.h>intmain(){intx=3,y=2,z=1,m,n,k;m=x>y||z++;printf("%d,%d,%d,%d\n",x,y,z,m);n=x>y&&z++;printf("%d,%d,%d,%d\n",x,y,z,n);k=x<y&&z++;printf("%d,%d,%d,%d\n",x,y,z,k);return0;}3.4.2邏輯運算符和邏輯表達(dá)式請思考:假設(shè)該行改成:intx=2,y=3,z=0,m,n,k;運行結(jié)果又如何?【例3.6】把下列命題寫成等價的C語言的表達(dá)式。(1)變量ch是一個字母字符;(2)變量x是一個小于100的偶數(shù)(3)變量x和y都是非零數(shù),且x+y>10。答:(1)ch>=’a’&&ch<=’z’||ch>=’A’&&ch<=’Z’(2)x<100&&x%2==0(3)x!=0&&y!==0&&x+y>103.4.2邏輯運算符和邏輯表達(dá)式1.單分支的if語句的格式:if(表達(dá)式)

語句1;該語句的功能是:首先計算表達(dá)式的值,然后判斷表達(dá)式的值是否為非零(真),若為非零(真),則執(zhí)行語句1。其執(zhí)行過程見圖3-22所示3.4.3if語句1特別提醒:(1)if后面的表達(dá)式必須加小括號,且括號后面沒有分號;(2)當(dāng)條件成立時,若要執(zhí)行多條語句,則語句1部分要寫成復(fù)合語句的形式,即要用花括號括起來。【例3.7】從鍵盤輸入一個字符賦給變量c,若c是字母字符,則輸出“Yes!”。/*liti3-7.c單分支的if語句*/#include<stdio.h>intmain(){charc;c=getchar();if(c>='a'&&c<='z'||c>='A'&&c<='Z')printf("Yes!");return0;}3.4.3if語句【例3.8】輸入兩個浮點數(shù),按從大到小的順序輸出。/*liti3-8-1.c單分支的if語句,例3.8的第一種寫法*/#include<stdio.h>intmain(){floatx,y,t;scanf("%f%f",&x,&y);if(x<y)//若x小于y,則交換x,y

{t=x;x=y;y=t;

}printf("%f,%f\n",x,y);return0;}3.4.3if語句2.雙分支選擇結(jié)構(gòu):

if(表達(dá)式)

語句1;else

語句2;功能:首先計算表達(dá)式的值,然后判斷表達(dá)式的值是否為非零(即真);若非零(真),則執(zhí)行語句1,否則執(zhí)行語句2。3.4.3if語句特別提醒:(1)if后面的表達(dá)式必須加小括號,且括號后面沒有分號,else后面也沒有分號;(2)當(dāng)滿足條件或不滿足條件要執(zhí)行多條語句,語句1或語句2要寫成復(fù)合語句的形式,即要用花括號括起來。(3)if后面的表達(dá)式可以為任何類型的表達(dá)式,只要表達(dá)式的結(jié)果為非零,則表示條件成立,否則表示條件不成立if…else語句的圖解如下:3.4.3if語句【例3.8】輸入兩個浮點數(shù),按從大到小的順序輸出。/*liti3-8-4.c雙分支的if…else語句,例3.8的第4種寫法*/#include<stdio.h>intmain(){

floatx,y;scanf("%f%f",&x,&y);if(x>=y)printf("%f,%f\n",x,y);elseprintf("%f,%f\n",y,x);return0;}3.4.3if語句【例3.9】從鍵盤上輸入一個三位的正整數(shù)x,判斷x是否是水仙花數(shù),若是則輸出“x是水仙花數(shù)”,否則輸出“x不是水仙花數(shù)”。(提示:水仙花數(shù)是指一個三位的整數(shù)且各位數(shù)字的立方和等于其本身,例如:371=33+73+13)3.4.3if語句/*liti3-9.c求水仙花數(shù)*/#include<stdio.h>intmain(){intx,g,s,b;printf("請輸入一個三位正整數(shù):");scanf("%d",&x);g=x%10;//求x的個位數(shù)

s=x/10%10;//求x的十位數(shù)

b=x/100;//求x的百位數(shù)

if(g*g*g+s*s*s+b*b*b==x)printf("%d是水仙花數(shù)!\n",x);elseprintf("%d不是水仙花數(shù)!\n",x);return0;}3.4.3if語句if嵌套的一般形式如下:if(表達(dá)式1)

語句1;else

if(表達(dá)式2)

語句2;

else

語句3;if(表達(dá)式1)

if(表達(dá)式2)

語句1;else

語句2;else

語句3;3.4.3if語句嵌套在else后面嵌套在if后面例3.11編寫程序,求下列分段函數(shù)的值。3.4.4if語句的嵌套/*liti3-11-1.c用嵌套的if語句實現(xiàn)分段函數(shù),嵌在else分支后面*/#include<math.h>#include<stdio.h>intmain(){floatx;doublez;printf("x=");scanf("%f",&x);if(x<0)z=-1;elseif(x>0)z=log(x);elsez=0;printf("z=%f\n",z);return0;}3.4.4if語句的嵌套/*liti3-11-2.c用嵌套的if語句實現(xiàn)分段函數(shù),嵌在if分支后面*/#include<math.h>#include<stdio.h>intmain(){floatx;doublez;printf("x=");scanf("%f",&x);if(x<=0)if(x<0)z=-1;elsez=0;elsez=log(x);printf("z=%f\n",z);return0;}3.4.4if語句的嵌套總結(jié)提醒:1、內(nèi)層的if語句,既可嵌套在if后面,也可嵌套在else后面;2、else不能單獨出現(xiàn),它總是與if配對出現(xiàn);3、else與if的配對原則為:在同一層次的語句塊中,else總是與它上面最近的且又沒有配對的if語句進(jìn)行配對。3.4.4if語句的嵌套條件運算符(?:)是C語言中唯一一個三目運算符,條件表達(dá)式的一般形式為:

表達(dá)式1?表達(dá)式2:表達(dá)式3說明:(1)條件表達(dá)式的執(zhí)行順序為先計算表達(dá)式1的值,若表達(dá)式1的值

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論