《C語言程序設(shè)計(jì)》中職全套教學(xué)課件_第1頁
《C語言程序設(shè)計(jì)》中職全套教學(xué)課件_第2頁
《C語言程序設(shè)計(jì)》中職全套教學(xué)課件_第3頁
《C語言程序設(shè)計(jì)》中職全套教學(xué)課件_第4頁
《C語言程序設(shè)計(jì)》中職全套教學(xué)課件_第5頁
已閱讀5頁,還剩578頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

模塊1C語言簡介全套可編輯PPT課件共12個模塊,內(nèi)容包括:C語言簡介,C語言快速入門——C語言程序結(jié)構(gòu)認(rèn)識,數(shù)據(jù)類型、變量、常量及格式聲明,運(yùn)算符——C語言的血液,C語言程序的三種結(jié)構(gòu),數(shù)組,函數(shù),指針,結(jié)構(gòu)體與聯(lián)合體,預(yù)處理命令,鏈表的基本概念及要點(diǎn)和文件等。1.1計(jì)算機(jī)語言發(fā)展簡介計(jì)算機(jī)語言總的來說可以分為機(jī)器語言、匯編語言和高級語言三大類。這一分類同時體現(xiàn)了計(jì)算機(jī)語言發(fā)展的一個過程。為了減輕使用機(jī)器語言編程的痛苦,人們進(jìn)行了一種有益的改進(jìn):用一些簡潔的英文字母或符號串來代替一個特定指令的二進(jìn)制串,如用“MOV”代表數(shù)據(jù)傳遞,用“ADD”代表加法等,從而使程序具備了一定的可讀性,這就是匯編語言。但是計(jì)算機(jī)是不能直接識別這些符號的,需要專門的程序來將這些字符翻譯成二進(jìn)制的機(jī)器語言,這種翻譯程序就是匯編程序。匯編語言和機(jī)器語言實(shí)質(zhì)相同,都依賴于機(jī)器硬件,直接對硬件進(jìn)行操作,程序的可讀性和可移植性均不好,不利于計(jì)算機(jī)的推廣使用。匯編語言屬于計(jì)算機(jī)低級語言。1631.1計(jì)算機(jī)語言發(fā)展簡介隨著計(jì)算機(jī)技術(shù)的不斷發(fā)展,計(jì)算機(jī)語言也逐步發(fā)展到了高級語言階段。高級語言與低級語言的顯著不同點(diǎn)就是:高級語言以接近人類思維的語言描述方式來進(jìn)行編程,因而程序的可讀性很好,易學(xué)易用。高級語言經(jīng)歷了從早期語言到結(jié)構(gòu)化程序設(shè)計(jì)語言、從面向過程到面向?qū)ο蟪绦蛟O(shè)計(jì)語言的發(fā)展過程。現(xiàn)在,高級語言有Basic、C、C++、C#、Pascal、Fortran、PHP、Delphi、Java等,計(jì)算機(jī)語言的蓬勃發(fā)展,極大地拓展了計(jì)算機(jī)的開發(fā)應(yīng)用。高級語言組織的代碼同樣不能直接被計(jì)算機(jī)識別執(zhí)行,必須經(jīng)編譯器編譯生成可執(zhí)行文件,程序方可運(yùn)行。在所有計(jì)算機(jī)高級語言中,可以說C語言是很經(jīng)典的一門基礎(chǔ)性高級語言。它是一門過程語言,兼有匯編和高級語言的特性,很受廣大編程愛好者的歡迎。1.2C語言的特點(diǎn)C語言誕生于20世紀(jì)70年代初,后來美國政府為C語言制定了一套ANSI標(biāo)準(zhǔn),成為現(xiàn)行的C語言標(biāo)準(zhǔn)。自1978年開始,C語言先后被移植到大、中、小、微型機(jī)上。下面是一個簡單的C程序例子,其功能是輸出《登鸛雀樓》全詩到顯示器上:1.2C語言的特點(diǎn)#include<stdio.h>main(){printf("登鸛雀樓\n");printf("王之煥\n");printf("白日依山盡,\n");printf("黃河入海流。\n");printf("欲窮千里目,\n");printf("更上一層樓。\n");}程序中#include<stdio.h>是包含頭文件,main()是C程序必備的主函數(shù),{}中間的是main函數(shù)的函數(shù)體,printf()是頭文件stdio.h中定義的庫函數(shù),其功能是向屏幕輸出""中的內(nèi)容,\n是換行符。1.2C語言的特點(diǎn)說明:入門學(xué)習(xí)者常用的TurboC或Win-TC是不支持中文字符的,建議讀者安裝Dev-C++進(jìn)行學(xué)習(xí)??傮w上來說,C語言具有以下顯著的特點(diǎn):(1)語言簡潔、緊湊,使用方便、靈活。C語言使用32個關(guān)鍵字、9種控制語句,程序書寫形式自由。(2)數(shù)據(jù)類型和運(yùn)算符豐富。C語言共有45個運(yùn)算符,豐富的運(yùn)算符說明C語言能進(jìn)行豐富的運(yùn)算。(3)可移植性強(qiáng)。C程序不做修改基本上就可用于各種型號的計(jì)算機(jī)和各種操作系統(tǒng)中。(4)能直接操作硬件。C語言能實(shí)現(xiàn)匯編語言的大部分功能,可以直接對硬件進(jìn)行操作。這是其他高級語言所不能達(dá)到的。1.3附表1.3.1C語言的數(shù)據(jù)類型C語言的數(shù)據(jù)類型如圖11所示。圖1-1C語言的數(shù)據(jù)類型1.3附表1.3.2C語言運(yùn)算符表C語言共有45個運(yùn)算符,按運(yùn)算符的級別高低(執(zhí)行的先后順序)排列如表1-1所示。表1-1C語言運(yùn)算符1.3附表1.3.2C語言運(yùn)算符表表1-1C語言運(yùn)算符續(xù)表1.3附表1.3.3C語言的32個關(guān)鍵字所謂關(guān)鍵字,就是C語言已內(nèi)定其功能而不能做其他用途的詞,如auto用于定義自動變量、break用于中止循環(huán)等。1.3附表1.3.4C語言的9種控制語句(1)if()~else:條件控制語句;(2)for()~:循環(huán)語句;(3)while()~:循環(huán)語句;(4)do~while():循環(huán)語句;(5)continue:結(jié)束本次循環(huán)語句;(6)break:中止循環(huán)或switch語句;(7)switch:多分支選擇語句;(8)goto:轉(zhuǎn)向語句;(9)return:從函數(shù)返回語句。1.4C程序上機(jī)步驟1.4.1C語言集成開發(fā)環(huán)境簡介C語言的編譯器比較多,對于一個初學(xué)者來說,用Win-TC或Turbo-C均可入門,隨著學(xué)習(xí)的深入,可逐漸向集成開發(fā)環(huán)境轉(zhuǎn)換。由于C語言簡單易學(xué)、使用廣泛,因而其集成開發(fā)環(huán)境也是很豐富的,如CodeBlocks、EclipseCDT、Dev-C++、AnjutaDevStudio等。下面簡單介紹Dev-C++的使用方法。1.4C程序上機(jī)步驟1.4.2Dev-C++上機(jī)步驟在Windows7環(huán)境下,下載并安裝好Dev-C++。首次運(yùn)行軟件時,在語言環(huán)境選項(xiàng)中注意選擇“簡體中文/Chinese”。進(jìn)入軟件界面后,按Ctrl+N快捷鍵或執(zhí)行“文件”→“新建”→“源代碼”菜單命令(圖1-2),打開代碼編輯器。圖1-2打開代碼編輯器1.4C程序上機(jī)步驟1.4.2Dev-C++上機(jī)步驟在代碼編輯器中編輯好代碼,保存文件,按F9執(zhí)行編譯,再按F10執(zhí)行運(yùn)行(或按F11直接執(zhí)行編譯和運(yùn)行)。若程序有誤,將會給出提示;若程序無誤,將直接生成一個可執(zhí)行文件(.exe)予以執(zhí)行,并顯示程序運(yùn)行結(jié)果,如圖1-3所示。圖1-3顯示程序運(yùn)行結(jié)果1.4C程序上機(jī)步驟1.4.3一個C語言程序的完成過程從上面的例子可以看出,一個C程序的完成過程是:(1)編輯:輸入源程序并存盤(擴(kuò)展名為.c);(2)編譯:將源程序翻譯為目標(biāo)文件(擴(kuò)展名為.obj);(3)鏈接:將目標(biāo)文件生成可執(zhí)行文件(擴(kuò)展名為.exe);(4)運(yùn)行:執(zhí)行.exe文件,得到運(yùn)行結(jié)果。C語言優(yōu)點(diǎn)很多,亦有不足,如語法限制不太嚴(yán)格、程序安全性較低等。但瑕不掩瑜,時至今日,C語言仍然為全球廣泛使用的計(jì)算機(jī)語言之一。ThankYou!C語言快速入門——C語言程序結(jié)構(gòu)認(rèn)識模塊22.1一個C程序例子——快速認(rèn)識C語言程序結(jié)構(gòu)本節(jié)通過一個例子來認(rèn)識C語言程序的基本結(jié)構(gòu)。在程序中,除注釋里的內(nèi)容外,所有的符號都必須是英文符號。注釋符為/*…*/。程序示例(程序中的行號不是程序的一部分,只是方便解釋程序):/*程序功能:比較輸入的兩個整數(shù),輸出最大的那一個,再輸出3.14乘以最大值的積*/1.#include"stdio.h"/*預(yù)處理,包含頭文件stdio.h*/2.#definePI3.14/*定義宏名PI*/3.intmax(intx,inty);/*聲明函數(shù)原型*/4.intmain()/*主函數(shù)*/5.{/*主函數(shù)體開始*/6.inta,b,c=0;/*聲明部分。定義3個整型變量*/7.scanf("%d%d",&a,&b);/*執(zhí)行語句。在鍵盤上輸入2個10進(jìn)制整數(shù)*/8.c=max(a,b);/*執(zhí)行語句。調(diào)用自定義max函數(shù),把結(jié)果賦給c。此句執(zhí)行的是第12~18行*/2.1一個C程序例子——快速認(rèn)識C語言程序結(jié)構(gòu)9.printf("Themaxnumberis%d\n",c);/*執(zhí)行語句。在屏幕上輸出最大的數(shù)并換行*/10.printf("PI*c=%f\n",PI*c);/*執(zhí)行語句。輸出PI*c的結(jié)果并換行*/11.}/*主函數(shù)體結(jié)束*/12.intmax(intx,inty)/*自定義函數(shù)max*/13.{/*max()函數(shù)體開始*/14.intz;/*聲明部分。定義一個整型變量z*/15.if(x>y)z=x;/*執(zhí)行語句。若x>y,則把x賦給z*/16.elsez=y;/*執(zhí)行語句。否則把y賦給z*/17.return(z);/*執(zhí)行語句。z值返回到max函數(shù)的調(diào)用處c=max(a,b);*/18.}/*max()函數(shù)體結(jié)束*/2.2程序詳解2.2.1預(yù)處理——#include"stdio.h"(1)#開頭為“預(yù)處理命令”(關(guān)于預(yù)處理,詳見模塊10)。(2).h表示該文件是頭文件(關(guān)于頭文件,詳見模塊10.4)。stdio.h為C語言標(biāo)準(zhǔn)輸入/輸出頭文件,它里面定義了scanf()和printf()等標(biāo)準(zhǔn)輸入/輸出函數(shù)。在一個C語言程序中,當(dāng)要使用到庫函數(shù)時,必須包含該庫函數(shù)所在的頭文件。(3)包含頭文件有兩種方式:#include"stdio.h"和#include<stdio.h>。<>和""的區(qū)別是:①<>表示編譯時直接在軟件設(shè)置指定的路徑(如TurboC或Win-TC所在文件夾下的include文件夾)尋找stdio.h頭文件。有則加載,沒有則報(bào)錯。②""表示編譯時先在正在編輯的源代碼文件所在的文件夾里面尋找stdio.h頭文件,如果沒有,就轉(zhuǎn)到軟件設(shè)置指定的路徑中尋找(轉(zhuǎn)為<>尋找方式)。2.2程序詳解2.2.2宏定義——#definePI3.14define是宏定義命令,PI是宏名(通常用大寫字母表示),3.14是字符串常量,意思是用PI這個宏名來代表3.14這個常量。2.2程序詳解2.2.3函數(shù)原型聲明——intmax(intx,inty);什么是函數(shù)?函數(shù)就是一個子程序(或模塊),這個子程序?qū)崿F(xiàn)一個單一的功能,如求面積的功能、求最小公倍數(shù)的功能等(關(guān)于函數(shù),詳見模塊7)。max()是一個自定義函數(shù),其調(diào)用于第8行,定義于第12行,因此,調(diào)用處于定義之前。規(guī)則是:當(dāng)自定義函數(shù)定義于其調(diào)用之后時,要在其調(diào)用之前對函數(shù)原型進(jìn)行聲明。一般來說,函數(shù)原型聲明于main()外面的程序頭部位置,且以“;”結(jié)束。2.2程序詳解2.2.4主函數(shù)——intmain()main()是C程序的主函數(shù)。一個C程序有且只能有一個main()函數(shù)。C程序的執(zhí)行始于main()函數(shù)也終于main()函數(shù)。(1)int指函數(shù)類型為int型。因?yàn)閙ain()函數(shù)是系統(tǒng)調(diào)用的,運(yùn)行完畢要返回一個值給操作系統(tǒng),以確定main()是否正確執(zhí)行。返回0表示main()正常結(jié)束,否則說明程序運(yùn)行出錯,需調(diào)用錯誤處理。(2)main()函數(shù)在程序中的位置可隨意,不會影響程序的執(zhí)行。(3)2.2程序詳解2.2.5函數(shù)體開始和結(jié)束——{和}在這里“{”是main()函數(shù)的函數(shù)體開始的地方,到第11行“}”處則是main()函數(shù)的函數(shù)體結(jié)束的地方。C語言的函數(shù)由函數(shù)首部和函數(shù)體構(gòu)成。函數(shù)首部包括函數(shù)名、函數(shù)返回值類型、參數(shù)名、參數(shù)類型等;函數(shù)體則由“{}”括起來。2.2程序詳解2.2.6變量的定義及初始化——inta,b,c=0;這是函數(shù)體的聲明部分,聲明必須以“;”結(jié)束。在這里聲明了3個整型(int)變量,分別是a、b、c;聲明多個變量時變量之間用“,”隔開,其中,變量c被初始化為0。變量,意即變化的量,是相對于常量而言的。變量是C語言中最重要的名詞之一??梢哉f,變量是C語言活的靈魂。2.2程序詳解2.2.6變量的定義及初始化——inta,b,c=0;數(shù)據(jù)類型變量名;例如:(1)“inta;”定義(或聲明)一個名為a的整型(int)變量。(2)“floatb_1;”聲明一個名為b_1的單精度浮點(diǎn)型(float)變量。(3)“l(fā)ongx;”聲明一個名為x的長整型(long)變量。具體數(shù)據(jù)類型請查閱“1.3.1C語言的數(shù)據(jù)類型”。變量的聲明一般在函數(shù)體的首部,必須以“;”結(jié)束。1.變量的定義方法2.2程序詳解2.2.6變量的定義及初始化——inta,b,c=0;(1)變量名只能由字母、數(shù)字和下劃線組成,不能用關(guān)鍵字做變量名。(2)變量名不能以數(shù)字開頭,長度不能超過32個字符,多余的不被識別。(3)變量名中大、小寫字母被視為不同的字符,習(xí)慣上變量名用小寫字母表示。(4)可以同時聲明多個同類型變量,變量名中間用“,”隔開。(5)變量定義必須放在變量使用之前,一般放在函數(shù)體的開始部分。2.變量的命名規(guī)則2.2程序詳解2.2.6變量的定義及初始化——inta,b,c=0;變量的初始化就是在定義(聲明)變量時給變量賦一個初始值。賦值方法是用賦值運(yùn)算符“=”。注意它不是數(shù)學(xué)運(yùn)算中的“等于”符號,C語言中“等于”符號的寫法是“==”。例如:(1)“inta=5;”讀作:定義(或聲明)一個整型變量a并初始化其值為5。這樣,在變量a的內(nèi)存中就有了一個整型值5。(2)“floatx_1=3.65;”讀作:聲明一個單精度浮點(diǎn)型變量x_1并初始化其值為3.65。3.變量的初始化此句以下為語句執(zhí)行部分。本句表示輸入兩個十進(jìn)制整數(shù)到變量a和b所在的內(nèi)存空間中。(1)C語言的函數(shù)體由聲明部分和執(zhí)行部分組成。執(zhí)行部分就是一系列執(zhí)行語句的組合。語句必須以“;”結(jié)束(C語言語句有5種形式,見模塊2.3)。2.2程序詳解2.2.7C語言標(biāo)準(zhǔn)輸入函數(shù)——scanf("%d%d",&a,&b);2.2程序詳解2.2.7C語言標(biāo)準(zhǔn)輸入函數(shù)——scanf("%d%d",&a,&b);(2)scanf()是C語言的標(biāo)準(zhǔn)輸入函數(shù),使用方法是:①scanf(“格式控制”,地址列表);②%d是格式聲明,按指定的格式輸入。格式聲明的方法是:%+格式字符這里%d表示十進(jìn)制帶符號的整數(shù)。③地址列表中的變量必須帶地址與運(yùn)算符&。④“格式控制”和地址列表之間必須用“,”隔開。“scanf("%d%d",&a,&b);”表示輸入兩個十進(jìn)制整數(shù)到變量a和b所在的內(nèi)存空間中。⑤輸入時只能用空格、回車或Tab鍵作為數(shù)據(jù)分隔符,不可用其他符號。⑥格式控制里如果有普通字符(除格式聲明和轉(zhuǎn)義字符外的字符),則需原樣輸入。2.2程序詳解2.2.8自定義函數(shù)調(diào)用——c=max(a,b);該句是執(zhí)行語句,調(diào)用自定義函數(shù)max(執(zhí)行第12~18行),a,b是實(shí)參(實(shí)際參數(shù)),并把結(jié)果賦值給變量c。該句包含函數(shù)調(diào)用語句“max(a,b);”,整體上是賦值語句“c=max(a,b);”。執(zhí)行該語句后,變量c內(nèi)存中的原值(0)將被新值[max(a,b)的調(diào)用結(jié)果]覆蓋,即c中的值不再是0,而是函數(shù)調(diào)用結(jié)果這個新值。2.2程序詳解2.2.9C語言標(biāo)準(zhǔn)輸出函數(shù)—printf("Themaxnumberis%d\n",c);該句是執(zhí)行語句,輸出最大的數(shù)并換行。(1)printf()是C語言的標(biāo)準(zhǔn)輸出函數(shù),使用方法是:printf(“格式控制”,輸出列表);“格式控制”和輸出列表之間用“,”隔開。(2)格式控制包括:①普通字符:需原樣輸出的字符。“Themaxnumberis”(包括空格)是普通字符,原樣輸出。②格式聲明:%d是格式聲明(說明同上)。③轉(zhuǎn)義字符:用于實(shí)現(xiàn)指定的功能,如\n用于實(shí)現(xiàn)換行(也稱換行符)。01左邊“PI*c=”是普通字符,原樣輸出。02%f是格式聲明,輸出浮點(diǎn)數(shù)。03\n是轉(zhuǎn)義字符,換行。04右邊PI*c是輸出列表,即PI*c的結(jié)果。2.2程序詳解2.2.10格式控制運(yùn)用——printf("PI*c=%f\n",PI*c);該句是執(zhí)行語句。輸出PI*c的結(jié)果并換行。2.2程序詳解2.2.11自定義函數(shù),形參與實(shí)參——intmax(intx,inty)自定義函數(shù)max()的功能是比較兩個數(shù)的大小,并返回大的那個數(shù)。函數(shù)首部說明如圖2-1所示。圖2-1函數(shù)首部說明“intmax(intx,inty)”是函數(shù)首部,注意不能像語句一樣帶“;”。(1)max為函數(shù)名。取函數(shù)名時最好能和函數(shù)的功能意思接近。因?yàn)楫?dāng)一個程序自定義多個函數(shù)時,函數(shù)名有助于我們快速地判定該函數(shù)的功能。(2)(intx,inty)中的x和y是max函數(shù)的兩個形參(形式參數(shù))。定義形參時必須定義其數(shù)據(jù)類型(此處為int型)。形參的類型必須和實(shí)參一致。第8行“c=max(a,b);”的實(shí)參a和b的類型為int,所以形參x和y也必須定義為int型。(3)2.2程序詳解2.2.11自定義函數(shù),形參與實(shí)參——intmax(intx,inty)1.具體說明2.2程序詳解2.2.11自定義函數(shù),形參與實(shí)參——intmax(intx,inty)永遠(yuǎn)是形參調(diào)用實(shí)參,即形參把實(shí)參調(diào)過來進(jìn)行運(yùn)算,再把運(yùn)算結(jié)果返回。形參在調(diào)用實(shí)參的過程中占用存儲單元,該存儲單元不是實(shí)參所在存儲單元。2.形參和實(shí)參的關(guān)系第13行“{”是max函數(shù)體開始的地方,第18行“}”是max函數(shù)體結(jié)束的地方?!癷ntz;”是max()函數(shù)體的聲明部分,它定義一個整型變量z。2.2程序詳解2.2.12自定義函數(shù)體聲明部分——intz;第15~17行是函數(shù)體執(zhí)行部分。本句意為:如果x>y成立,就執(zhí)行“z=x;”,即把x賦值給變量z。if()是C語言條件判斷語句,具體用法如下:if(表達(dá)式)表達(dá)式1;/*注意中間不能有任何符號*/else表達(dá)式2;/*注意中間不能有任何符號*/運(yùn)算過程是:如果表達(dá)式成立(為真),就執(zhí)行表達(dá)式1;否則,就執(zhí)行表達(dá)式2?!癳lsez=y;”是執(zhí)行語句。如果x>y不成立,就執(zhí)行“z=y;”,即把y賦值給變量z。2.2程序詳解2.2.13自定義函數(shù)體執(zhí)行部分——if(x>y)z=x;返回運(yùn)算結(jié)果z。return為函數(shù)返回語句,返回到main()函數(shù)調(diào)用處。如果一個函數(shù)被定義為void型,則不能用return語句,也不能在主函數(shù)中使用該函數(shù)的值;若定義非void型,需用return返回結(jié)果。一個return只能返回一個結(jié)果。2.2程序詳解2.2.14函數(shù)返回語句——return(z);2.3知識要點(diǎn)通過例子清晰地認(rèn)知了C語言的程序結(jié)構(gòu)。本模塊應(yīng)掌握以下知識要點(diǎn):(1)C語言程序由函數(shù)組成,即函數(shù)是構(gòu)成C語言程序的基本單位。(2)函數(shù)由函數(shù)首部和函數(shù)體構(gòu)成。①函數(shù)首部一般包括函數(shù)名、函數(shù)返回值類型、參數(shù)名和參數(shù)類型。②函數(shù)體由聲明部分和執(zhí)行部分(語句)組成,處于一對{}中。③聲明和語句的區(qū)別:聲明確定了變量等在內(nèi)存中有了位置和內(nèi)存空間的大小,語句是可以執(zhí)行的運(yùn)算過程。④C語言語句可以描述如下:a.控制語句:如if等9種控制語句。b.函數(shù)調(diào)用語句:如“printf("good");”。c.表達(dá)式語句:如“x=y;a=a+b;”等。d.空語句(只有分號),如“;;”表示兩條空語句。e.復(fù)合語句:多條語句在一對{}中,視為一條語句,如“{t=a;a=b;b=t;}”,注意復(fù)合語句{}外不能加“;”。2.3知識要點(diǎn)(3)函數(shù)功能是單一的,即一個函數(shù)只能實(shí)現(xiàn)一個功能。(4)一個C程序有且只能有一個main()函數(shù)(主函數(shù)),程序的執(zhí)行始于它,也終于它。其位置可以任意,不影響程序的執(zhí)行。(5)當(dāng)自定義函數(shù)定義在調(diào)用之后時,應(yīng)在調(diào)用之前聲明該函數(shù)的原型。一般聲明在程序頭部位置。(6)程序注釋“/**/”位置也可隨意,不影響程序的執(zhí)行。(7)C語言程序允許一行寫幾條語句,也允許一條語句拆開寫在幾行上,習(xí)慣用小寫字母書寫語句。(8)C語言程序所有的符號都必須使用英文符號。1232.4自我測試在顯示器屏幕上分行輸出“school”“student”“study”3個單詞。在顯示器屏幕上用“*”號輸出字符“E”。仿照本模塊程序結(jié)構(gòu)示例,試寫一個程序,實(shí)現(xiàn)過程是:從鍵盤輸入2個整數(shù),自定義一個名為sum的求和函數(shù),該函數(shù)的功能是對輸入的兩個整數(shù)進(jìn)行求和并將值返回主函數(shù)。在主函數(shù)中輸出該值。ThankYou!數(shù)據(jù)類型、變量、常量及格式聲明模塊33.1常量3.1.1常量的類型1)2)3)常量可分為整型常量、實(shí)型常量、字符常量和字符串常量。十進(jìn)制整型常量:由正負(fù)號和數(shù)字0~9組成,如-36、25等。1.整型常量八進(jìn)制整型常量:由正負(fù)號和數(shù)字0~7組成,且必須以0開頭,如025(對應(yīng)十進(jìn)制數(shù)為:2×81+5×80=21)等。十六進(jìn)制整型常量:由正負(fù)號、數(shù)字0~9和字母A~F(不區(qū)分大小寫)組成,且必須以0x開頭,其中字符A~F依次表示10~15,如0xd、0x15(對應(yīng)十進(jìn)制數(shù)為:1×161+5×160=21)等。1)十進(jìn)制實(shí)型常量由正負(fù)號、數(shù)字0~9和小數(shù)點(diǎn)組成,如1.23、-3.4等。在C語言中,5/2和5.0/2結(jié)果是不同的,前者被認(rèn)為是兩個整型數(shù)據(jù)相除,結(jié)果仍為整型,后者5.0為實(shí)型常量,則結(jié)果為實(shí)型。因此,5/2結(jié)果為2(取整),5.0/2結(jié)果為2.5。2)指數(shù)形式的實(shí)型常量由正負(fù)號、數(shù)字0~9、小數(shù)點(diǎn)和字母E(不區(qū)分大小寫)組成。其一般形式是aEn。其中,a為1~9的實(shí)數(shù),默認(rèn)小數(shù)位為6位;E為階碼標(biāo)志,代表底數(shù)10;n為階碼,只能是十進(jìn)制整數(shù)。例如:0.11寫成指數(shù)形式就是1.100000E-01,即1.100000×10-1。125.6寫成指數(shù)形式就是1.256000E+02,即1.256000×102。3.1常量3.1.1常量的類型2.實(shí)型常量注意:小數(shù)點(diǎn)是實(shí)數(shù)的標(biāo)志。3.1常量3.1.1常量的類型3.字符常量1)普通字符常量由單引號''括起來的單個字符就是普通字符常量,如'A','a'等。字符常量在內(nèi)存中占1個字節(jié)(B)的內(nèi)存空間。2)轉(zhuǎn)義字符由一個斜杠“\”開頭,不同于字符原有意義,故稱為轉(zhuǎn)義字符。\':表示單引號字符,即。\":表示雙引號字符,即"。\\:表示反斜杠字符,即\。\a:響鈴。\b:退格。\n:換行。\f:換頁。\r:回車。\t:到下一個制表位。\ddd:表示3位八進(jìn)制數(shù)所代表的字符,\xhh:表示2位十六進(jìn)制數(shù)所代表的字符,3.1常量3.1.1常量的類型由一對雙引號括起來的字符序列就是字符串常量,如"English","A"等。系統(tǒng)會自動給字符串常量加一個結(jié)尾符'\0',因而字符串常量在內(nèi)存中所占的空間為實(shí)際長度+1,故"A"和'A'是完全不同的,"A"是字符串常量,在內(nèi)存中占2B的空間;'A'是字符常量,在內(nèi)存中占1B的空間。4.字符串常量3.1常量3.1.2常量的進(jìn)制轉(zhuǎn)換(1)十進(jìn)制(D)。例如,(35)10或35D。(3)八進(jìn)制(O)。例如,(145.65)8或145.65O。(4)十六進(jìn)制(H)。例如,(3C)16或3CH。1.數(shù)制的表示(2)二進(jìn)制(B)。例如,(10000001)2或10000001B。3.1常量3.1.2常量的進(jìn)制轉(zhuǎn)換2.進(jìn)制相互轉(zhuǎn)換(1)十進(jìn)制轉(zhuǎn)二進(jìn)制(基數(shù)2)。整數(shù)部分“除2取余”,小數(shù)部分“乘2取整”。例如:13.625D=B?所以,13.625D=1101.101B。以此類推,十進(jìn)制轉(zhuǎn)八進(jìn)制(基數(shù)8)、十六進(jìn)制(基數(shù)16)方法同上。(2)二進(jìn)制轉(zhuǎn)十進(jìn)制。例如:1101.101B=1×23+1×22+0×21+1×20+1×2-1+0×2-2+1×2-3=13.625D,即數(shù)碼(如1)乘以位權(quán)(如23)之和。3.1常量3.1.2常量的進(jìn)制轉(zhuǎn)換(3)二進(jìn)制與八進(jìn)制互轉(zhuǎn)。八進(jìn)制范圍內(nèi)的有效數(shù)字與其二進(jìn)制的對應(yīng)如下:①二進(jìn)制轉(zhuǎn)八進(jìn)制——“三位一并”法,即整數(shù)部分自低(右)至高(左)三位一并,小數(shù)部分自高(左)至低(右)三位一并,不足部分補(bǔ)0。即1100101.1101B=145.64O。②八進(jìn)制轉(zhuǎn)二進(jìn)制——“一分為三”法。3.1常量3.1.2常量的進(jìn)制轉(zhuǎn)換(4)二進(jìn)制與十六進(jìn)制互轉(zhuǎn)。十六進(jìn)制范圍內(nèi)的有效數(shù)字與其二進(jìn)制的對應(yīng)如下:①二進(jìn)制轉(zhuǎn)十六進(jìn)制——“四位一并”法,方法同二進(jìn)制轉(zhuǎn)八進(jìn)制類似。1011101010.11101B=001011101010.11101000B=2EA.E8H②十六進(jìn)制轉(zhuǎn)二進(jìn)制——“一分為四”法,方法同八進(jìn)制轉(zhuǎn)二進(jìn)制類似。3C9.7AH=001111001001.01111010B=11111001001.0111101B3.2變量3.2.1整型變量1.基本型整型(int)和短整型(short)例如,“intx_1=128;”聲明一個名為x_1的int型變量并初始化其值為128?!皊hortx_2=-1;”聲明一個名為x_2的short型變量并初始化其值為-1。(1)內(nèi)存空間長度:2B(16bit)。(2)所表數(shù)的范圍:-32768~32767(-215~215-1)。(3)對應(yīng)的格式聲明:①%d或%i:有符號十進(jìn)制整數(shù),若為正,則省略“+”號。②%u:無符號十進(jìn)制整數(shù)。③%o:八進(jìn)制整數(shù)。④%x:十六進(jìn)制整數(shù)。3.2變量3.2.1整型變量1.基本型整型(int)和短整型(short)(4)說明:關(guān)于負(fù)數(shù)的%u(無符號)、%o(八進(jìn)制)、%x(十六進(jìn)制)輸出。整數(shù)在內(nèi)存中都是以補(bǔ)碼形式存在的,因而對負(fù)數(shù)的運(yùn)算必須先求其補(bǔ)碼,然后按指定的格式輸出,如-1(長度2B,16bit,即16位)。提示:①原碼:最高位為符號位,1表示負(fù),0表示正。正數(shù)的原碼、反碼、補(bǔ)碼一致。②反碼:保持最高位不變,其余按位取反。③補(bǔ)碼:在反碼的基礎(chǔ)上加1,即反碼+1(二進(jìn)制1)。3.2變量3.2.1整型變量2.無符號整型(unsignedint)和無符號短整型(unsignedshort)例如:unsignedintx_3=16;unsignedshortx_4;(1)內(nèi)存空間長度:2B(16bit)。(2)所表數(shù)的范圍:0~65535(0~216-1)。(3)對應(yīng)格式聲明:%d、%u、%o、%x。unsigned的數(shù)據(jù)范圍是0~65535,-1按%u輸出時為65535,即65536-1。由此可知:-2按%u輸出對應(yīng)65536-2=65534;-3按%u輸出對應(yīng)65536-3=65533;……以此類推。3.2變量3.2.1整型變量3.長整型(long)例如:longx_5;(1)內(nèi)存空間長度:4B(32bit)。(2)所表數(shù)的范圍:-2147483648~2147483647(-231~231-1)。(3)對應(yīng)格式聲明:%ld、%lu。4.無符號長整型(unsignedlong)例如:unsignedlongx_5;(1)內(nèi)存空間長度:4B(32bit)。(2)所表數(shù)的范圍:0~4294967295(0~232-1)。(3)對應(yīng)格式聲明:%ld、%lu。3.2變量3.2.2實(shí)型變量例如:floaty_1=3.14;聲明一個名為y_1的單精度浮點(diǎn)型變量并初始化其值為3.14。(1)內(nèi)存空間長度:4B(32bit)。(2)所表數(shù)的范圍:10-37~1038。有效數(shù)字:6~7位。(3)對應(yīng)格式聲明:①%f:單精度浮點(diǎn)數(shù),默認(rèn)保留6位小數(shù)。②%e:指數(shù)形式。③%g:浮點(diǎn)數(shù)形式,輸出時省略無意義的0。1.單精度浮點(diǎn)型(float)3.2變量3.2.2實(shí)型變量2.雙精度浮點(diǎn)型(double)例如:doubley_2;(1)內(nèi)存空間長度:8B(64bit)。(2)所表數(shù)的范圍:10-307~10308。有效數(shù)字:15~16位。(3)對應(yīng)格式聲明:%f、%e、%g。3.長雙精度浮點(diǎn)數(shù)(longdouble)例如:longdoubley_3;(1)內(nèi)存空間長度:16B(128bit)。(2)所表數(shù)的范圍:10-4931~104932。有效數(shù)字18~19位。(3)對應(yīng)格式聲明:%lf、%le、%lg。3.2變量3.2.3字符變量例如:charc='A';聲明一個名為c的字符變量并初始化其值為字符A。(1)內(nèi)存長度:1B(8bit)。(2)格式聲明:①%c:單個字符。②%d:該字符的ASCII碼值。1.字符型(char)3.2變量3.2.3字符變量“charch[]="Howareyou";”聲明一個字符數(shù)組ch并初始化其值為字符串"Howareyou",“char*p="WelcometoChina!";”定義一個字符指針變量并初始化其值為字符串"WelcometoChina!"的首地址。例如:charch[]="Howareyou";char*p="WelcometoChina!";printf("%s\n",ch);/*輸出字符串"Howareyou"*/printf("%s\n",p);/*輸出字符串"WelcometoChina!"*/關(guān)于字符指針變量和字符數(shù)組,以后再講。2.字符串只能賦給字符數(shù)組或?qū)ψ址羔樧兞砍跏蓟?/p>

例如:printf("%-10d",12);10為輸出寬度,不足部分補(bǔ)空格。此處輸出時為:左對齊,右補(bǔ)8個空格,即12uuuuuuuu(12占兩個字符,u表示空格);“%10d”則為右對齊,左補(bǔ)空格,即uuuuuuuu12。(1)例如:printf("%#x",37);#x表示輸出時加前綴0x,輸出0x25;用于標(biāo)注數(shù)字為十六進(jìn)制。(2)例如:printf("%#o",37);#o表示輸出時加前綴0,輸出045;用于標(biāo)注數(shù)字為八進(jìn)制。(3)例如:printf("%10.3s","chinese");表示右對齊,位寬10,從左往右取前3個字符,輸出chi,左邊補(bǔ)7個空格。(4)3.3格式聲明補(bǔ)充說明“-”為左對齊;無“-”則為右對齊。

例如:printf("%10.3f",1234.67890);表示右對齊,位寬10,四舍五入保留3位小數(shù),輸出1234.679,左邊再補(bǔ)2個空格,即輸出uu1234.679。(5)例如:printf("%3d",1234);指定了位寬,在位寬不足時按實(shí)際長度輸出,輸出1234。(6)例如:floatx;……printf("%d",x);在進(jìn)行輸入/輸出時,最常見的錯誤就是格式聲明和所定義的變量類型不一致,如“%d”格式不是float類型的格式,出錯。(7)例如:printf("%%%.2f",3.145678);輸出%3.15。(8)3.3格式聲明補(bǔ)充說明3.4附表常量的類型見表3-1,變量的數(shù)據(jù)類型見表3-2。表3-1常量的類型3.4附表表3-2變量的數(shù)據(jù)類型3.4附表表3-2變量的數(shù)據(jù)類型續(xù)表3.5自我測試1.下列變量定義及初始化正確的是()。A.shorta_1=2.8;B.longenum=31415;C.floatjg=5;D.charxm="Jack";2.下列定義的變量中,在內(nèi)存中所占空間最大的是()。A.longx_1B.floatx_2C.doublex_3D.unsignedlongx_43.字符串"\\a\10123\x66\a"所占的內(nèi)存空間是()B。A.8B.9C.10D.114.下列各數(shù)中最大的是()。A.0x80B.0174C.11111011BD.125D5.有變量聲明“charcome=g;”,則“printf("%s","come");”的輸出結(jié)果是()。A.103B.gC.comeD.s一、選擇題3.5自我測試該段程序的功能是:根據(jù)Lucy輸入的x_1變量值來計(jì)算圓的面積,輸入數(shù)大于或等于5,就取變量x_2為半徑,否則就取變量x_3為半徑計(jì)算圓的面積,最后輸出:Lucysresultis:圓的面積。二、根據(jù)前面所學(xué)的關(guān)于變量定義和格式控制等的相關(guān)知識,指出下面程序的錯誤,修改后上機(jī)調(diào)試7.scanf("%d",x_1);8.if(x_1>=5)s=N*x_2*x_2;9.elses=N*x_3*x_3;10.printf("%csresultis:",name);11.printf("x_1=%f,s=%f\n",x_1,s);12.}1.include<stdio.h>2.defineN3.143.intmain()4.{charname="Lucy";5.intx_1,floatx_2=3,x_3=4;shorts;6.printf("Pleaseinputx_1\n");3.5自我測試三、指出下列printf()函數(shù)的輸出結(jié)果printf("%u,%d",-1,-1);printf("%o",10);printf("%x",10);printf("%x",10.00);printf("%x",-1);printf("%f",2.1);printf("%e",2.8);printf("%g",2.8000);printf("%c",c);printf("%d",A);printf("%c",97);printf("%s","abcd");printf("\123\164\165\x64\x65\x6e\164");inta=21;printf("%#x",a);intb=21;printf("%#o",b);charch[15]="goodluck";printf("%.4s",ch);floatP=3.1415926;printf("%5.4f",p);ThankYou!運(yùn)算符——C語言的血液模塊44.1第1級:()、[]、->、.(1)()運(yùn)算符:在多個運(yùn)算符中,括號運(yùn)算優(yōu)先運(yùn)算。這個與數(shù)學(xué)運(yùn)算方式保持一致。例如:inta;a=a+(a=4);/*先()號運(yùn)算,給變量a賦常量值4;因?yàn)椤?”運(yùn)算高于賦值“=”運(yùn)算,故先執(zhí)行4+4運(yùn)算;最后執(zhí)行賦值“=”運(yùn)算,結(jié)果a值等于8*/printf("%d",a);/*輸出8*/(2)[]為變址運(yùn)算符(后述)。(3)->為指向結(jié)構(gòu)體成員運(yùn)算符(后述)。(4).為結(jié)構(gòu)體成員運(yùn)算符(后述)。1.!:邏輯非運(yùn)算4.2第2級:!、~、++、--、+、-、(類型)、&、*、sizeof()(1)其值為:非0即1,即只有0和1兩個邏輯值。例如:inta=6,b=0,c=0,d;d=!a+!b+!c;/*!a結(jié)果為0;!b結(jié)果為1;!c結(jié)果為1;故d最后得2*/printf("%d-%d",!d,d);/*輸出0-2*/(2)要領(lǐng)會條件語句中的含義。例如:if條件判斷中,if(x)等同于if(x!=0),而if(!x)則等同于if(x==0)。while循環(huán)條件判斷中,while(x)等同于while(x!=0),而while(!x)則等同于while(x==0)。2.~:按位取反運(yùn)算(簡稱位非運(yùn)算)4.2第2級:!、~、++、--、+、-、(類型)、&、*、sizeof()(1)正整數(shù)的位非運(yùn)算。由于正整數(shù)的原反補(bǔ)一致,故直接對原碼取反,得新原碼,此時最高位變1,即為負(fù),對該新原碼求補(bǔ)碼即得位非值??梢姡麛?shù)位非結(jié)果變負(fù)。例如:inta=6;printf("%d",~a);/*輸出-7*/計(jì)算方法如下:2.~:按位取反運(yùn)算(簡稱位非運(yùn)算)4.2第2級:!、~、++、--、+、-、(類型)、&、*、sizeof()(2)負(fù)整數(shù)的位非運(yùn)算。由于負(fù)整數(shù)在內(nèi)存中是以補(bǔ)碼形式存在的,所以必須先對負(fù)整數(shù)求補(bǔ)碼,再取反。此時最高位為0,為正,正數(shù)原反補(bǔ)一致,直接計(jì)算結(jié)果即得位非值。可見,負(fù)整數(shù)位非結(jié)果變正。例如:inta=-6;printf("%d",~a);/*輸出5*/計(jì)算方法如下:3.++、--:自增自減運(yùn)算符4.2第2級:!、~、++、--、+、-、(類型)、&、*、sizeof()(1)前置時,如++i,--j,要先增減后運(yùn)算。(2)后置時,如i++,j--,要先運(yùn)算后增減。(3)只能用于單個變量自增自減,不能用于表達(dá)式,如(x+y)++或--(x+y)是錯誤的;也不能用于常量,如++3,4--等也都是錯誤的。例如:inti=3;printf("%d-%d\n",i++,++i);/*printf()函數(shù)里的運(yùn)算是從右往左的,故先計(jì)算++i,即先自增1到4,再做輸出運(yùn)算,輸出4;執(zhí)行i++時,先做輸出運(yùn)算,輸出4,再自增1,i實(shí)際變?yōu)?。故輸出4-4*/printf("%d\n",i);/*輸出自增后的值,即5*/3.++、--:自增自減運(yùn)算符4.2第2級:!、~、++、--、+、-、(類型)、&、*、sizeof()再如:intx=2,y=3,d;d=y*x+(y--)+(++x);/*先執(zhí)行++x,變量x增1得值3,而y--要先運(yùn)算再自減,故先不動,則右邊為3*3+3+3,得15,故d被賦值15,y參加了運(yùn)算,再自減1,為2*/printf("d=%d,x=%d,y=%d\n",d,x,y);/*輸出d=15,x=3,y=2*/(4)結(jié)合方式:自左向右。例如:a+++b---c;/*實(shí)際上就是:(a++)+(b--)-c;*/(5)i++本質(zhì)就是i=i+1。4.(類型):強(qiáng)制數(shù)據(jù)類型轉(zhuǎn)換運(yùn)算符4.2第2級:!、~、++、--、+、-、(類型)、&、*、sizeof()數(shù)據(jù)類型的轉(zhuǎn)換有兩種,一種是自動轉(zhuǎn)換,另一種是強(qiáng)制轉(zhuǎn)換。(1)自動轉(zhuǎn)換:由低向高自動轉(zhuǎn)換,其中有兩個必然轉(zhuǎn)換。①float型在運(yùn)算時一定會先自動轉(zhuǎn)換成double型。②short和char型在運(yùn)算時一定會先自動轉(zhuǎn)換成int型。4.(類型):強(qiáng)制數(shù)據(jù)類型轉(zhuǎn)換運(yùn)算符4.2第2級:!、~、++、--、+、-、(類型)、&、*、sizeof()(2)強(qiáng)制轉(zhuǎn)換:分為顯式強(qiáng)制轉(zhuǎn)換和隱形強(qiáng)制轉(zhuǎn)換,顯式強(qiáng)制轉(zhuǎn)換必須用()號把轉(zhuǎn)換類型括起來。例如:/*顯式強(qiáng)制轉(zhuǎn)換:*/(int)3.58;/*強(qiáng)制轉(zhuǎn)換3.58為整型,即為3*/intx=25,m;floaty=25.0;printf("%f\n",(float)x);/*強(qiáng)制轉(zhuǎn)換變量x為浮點(diǎn)型,輸出值為25.000000*//*隱形強(qiáng)制轉(zhuǎn)換:*/m=x+y;/*m是int型,故x+y雖是浮點(diǎn)型,但賦給m時強(qiáng)制轉(zhuǎn)換為int型,即m=50*/printf("%d",m);/*輸出50*/5.&地址與運(yùn)算符和*指針運(yùn)算符4.2第2級:!、~、++、--、+、-、(類型)、&、*、sizeof()(1)&地址與運(yùn)算。例如:inta;scanf("%d",&a);/*給變量a輸入值,就是輸入一個常值到a的內(nèi)存空間中。不可忘記&*/(2)*指針運(yùn)算:①定義指針變量。②對地址進(jìn)行取內(nèi)容運(yùn)算。例如:inta=5;int*p=&a;/*等同于“int*p;p=&a;”,定義一個整型指針p并指向變量a的地址*/printf("%d",*p);/*這里*p的含義是:對指針p進(jìn)行取內(nèi)容運(yùn)算。因?yàn)閜指向了變量a的地址,因此就是*(&a)運(yùn)算,即對變量a的地址進(jìn)行取內(nèi)容運(yùn)算,即為5*/6.sizeof():內(nèi)存空間長度運(yùn)算4.2第2級:!、~、++、--、+、-、(類型)、&、*、sizeof()(1)sizeof()計(jì)算的結(jié)果都是整型(int)值。(2)16位編譯環(huán)境下指針的內(nèi)存長度為2B(32位環(huán)境下為4B)。floatf_x;float*p=&f_x;printf("%d\n",sizeof(f_x));/*計(jì)算變量f_x的內(nèi)存空間長度,輸出4*/printf("%d\n",sizeof(p));/*計(jì)算指針變量p的內(nèi)存空間長度,輸出2*/4.3第3級:*、/、%(1)*乘法運(yùn)算符(略)。(2)/除法運(yùn)算符。除法規(guī)則:①若兩邊均為整型,則結(jié)果去掉小數(shù)部分只取整數(shù)部分。例如:printf("%d",5/2);/*取整,輸出2*/②若有實(shí)數(shù),則結(jié)果為浮點(diǎn)型。例如:printf("%f",5/2.0);/*2.0為實(shí)數(shù),輸出2.500000*/4.3第3級:*、/、%(3)%模運(yùn)算(求余運(yùn)算)。運(yùn)算規(guī)則:①要求兩邊都為整型。例如:printf("%d",5%2);/*輸出1*/;printf("%d",5%2.0);/*程序報(bào)錯*/最常用法:判斷一個數(shù)是偶數(shù)還是奇數(shù)。例如,有整型變量x,若x%2==0,則x為偶數(shù),x%2==1則為奇數(shù)。②被除數(shù)為負(fù),無論除數(shù)符號如何,結(jié)果都為負(fù)。除數(shù)的符號對結(jié)果無影響。例如:3%2=1,3%-2=1-3%2=-1,-3%-2=-1加法運(yùn)算和減法運(yùn)算比較簡單,不再詳細(xì)介紹。

4.4第4級:+(加)、-(減)4.5第5級:<<(左移)、>>(右移)位移運(yùn)算符(1)移位規(guī)則:①正整數(shù)位移——左移右補(bǔ)0,右移左補(bǔ)0。例如:inta=7,b=7;printf("%d-%d",a<<2,b>>2);/*a左移2位后結(jié)果為28,b右移2位后結(jié)果為1*/4.5第5級:<<(左移)、>>(右移)位移運(yùn)算符②負(fù)整數(shù)位移——先求補(bǔ)碼再位移,左移右補(bǔ)0,右移左補(bǔ)1,位移后得到的是新原碼,再進(jìn)行求補(bǔ)碼運(yùn)算即得位移結(jié)果。例如:inta=-7,b=-7;printf("%d-%d",a<<2,b>>2);/*輸出-28和-2*/4.5第5級:<<(左移)、>>(右移)位移運(yùn)算符(2)當(dāng)位移與位非結(jié)合時,由于位非級別高于位移,要注意須先進(jìn)行位非運(yùn)算。例如:inta=7,b=-7;printf("%d-%d",~a<<2,~b>>2);/*輸出-32和1*/①~a<<2:先~a運(yùn)算,結(jié)果是-8,再-8<<2,-8×22,結(jié)果為-32。②~b>>2:先~b運(yùn)算,結(jié)果是6,再6>>2,6/22,結(jié)果為1。4.6第6級:關(guān)系運(yùn)算符:<、<=、>、>=常用于if條件控制語句和循環(huán)條件語句中。要特別注意不要把賦值符號“=”當(dāng)作“等于”符號?!埃健狈柼幱诘?4級的位置。

4.7第7級:等于符號==和不等于符號=4.8第8級:&按位與運(yùn)算符運(yùn)算法則:1&1為1,其他為0(1&0、0&1、0&0)。例如:inta=7,b=-7;printf("%d",a&b);/*輸出1*/運(yùn)算過程如右。思考:任意一個數(shù)與0進(jìn)行&運(yùn)算,結(jié)果如何?4.9第9級:^按位異或運(yùn)算符運(yùn)算法則:1^1為0,0^0為0,1^0為1,0^1為1。例如:inta=7,b=-7;printf("%d",a^b);/*輸出-2*/運(yùn)算過程如右。思考:任意一個數(shù)與0進(jìn)行^運(yùn)算,結(jié)果如何?4.10第10級:|按位或運(yùn)算符運(yùn)算法則:1|1為1,1|0為10|1為1,0|0為0。例如:inta=7,b=-7;printf("%d",a|b);/*輸出-1*/運(yùn)算過程如下:思考:任意一個數(shù)與0進(jìn)行|運(yùn)算,結(jié)果如何?4.11第11級:&&邏輯與運(yùn)算符運(yùn)算法則:自左向右運(yùn)算。①兩邊同時為真(邏輯值1),表達(dá)式的值才為真;②左邊為真,繼續(xù)右邊運(yùn)算;③左邊為假(邏輯值0),停止右邊運(yùn)算。例如:inta=7,b=-7;printf("%d\n",a>0&&b>0);/*a>0為真,b>0為假,故a>0&&b>0的值為0,輸出0*/printf("%d\n",a>0&&b<0);/*a>0為真,b<0為真,故a>0&&b<0的值為1,輸出1*/printf("%d\n",++a>0&&++b);/*++a得8,大于0成立,++b得-6,不為0,故輸出1*/printf("%d\n",--b&&++a<0);/*--b得-7,不為0,執(zhí)行右邊;++a得9,小于0不成立,故輸出0*/printf("%d"\n,b>0&&++a);/*b>0不成立,不再執(zhí)行后面的++a,a的值不變,故輸出0*/printf("a=%d,b=%d",a,b);/*輸出a=9,b=-7*/4.12第12級:||邏輯或運(yùn)算符運(yùn)算法則:自左向右運(yùn)算。①任意一邊為真,表達(dá)式的值即可為真;②左邊為真,不再運(yùn)算右邊;③左邊為假,繼續(xù)右邊運(yùn)算。例如:inta=7,b=0;printf("%d\n",a>0||b>0);/*a>0為真,表達(dá)式的值為真,輸出1*/printf("%d\n",a<0||b);/*a<0為假,繼續(xù)右邊運(yùn)算;b為0,故表達(dá)式的值為0,輸出0*/printf("%d\n",a<0||++b);/*a<0為假,繼續(xù)右邊;++b得1,不為0,為真,故表達(dá)式值為1,輸出1*/printf("%d\n",b>0||++a);/*b>0為真,不再執(zhí)行右邊,a的值不變,表達(dá)式值為1,輸出1*/printf("a=%d,b=%d",a,b);/*輸出a=7,b=1*/例如:inta=3,b=-3,c=0;printf("%d\n",a+b||b+c&&a+c);/*先&&得1,再|(zhì)|得1*/printf("%d\n",a>c||a+b&&++c);/*先&&得0,再|(zhì)|得1*/4.13第13級:?:條件運(yùn)算符條件運(yùn)算符是C語言唯一的一個三目運(yùn)算符,結(jié)合方向自右向左。語法規(guī)則:表達(dá)式1?表達(dá)式2:表達(dá)式3;運(yùn)算法則:如果表達(dá)式1成立(值為真),則執(zhí)行表達(dá)式2作為整個表達(dá)式的值,否則執(zhí)行表達(dá)式3作為整個表達(dá)式的值。例如:inta=7,b=3,c,d;c=a>b?a+b:a-b;/*a>b成立,執(zhí)行a+b,并把運(yùn)算結(jié)果賦給變量c*/printf("c=%d\n",c);/*輸出10*/d=a>c?a+b:c>a?a-b:c-a;/*這里體現(xiàn)了自右向左的結(jié)合性(運(yùn)算方向),可書寫為“a>c?a+b:(c>a?a-b:c-a);”,c>a成立,執(zhí)行a-b,得4,a>c不成立,取“:”后面的值4,賦給變量d*/printf("d=%d",d);/*輸出d=4*/4.13第13級:?:條件運(yùn)算符模塊2.2.1的程序目的是讓我們快速了解C語言的程序結(jié)構(gòu)。該程序用?:條件運(yùn)算符寫則很簡單。比較輸入的2數(shù)大小:#include<stdio.h>intmain(){inta,b,c;scanf("%d%d",&a,&b);c=a>b?a:b;printf("%d\n",c);}同樣,比較輸入的3個數(shù)大小,也可用三目運(yùn)算符來實(shí)現(xiàn):(a>b?a:b)>c?(a>b?a:b):c;/*看作3個表達(dá)式*/“=”外,其他也稱復(fù)合運(yùn)算符(由2個運(yùn)算符構(gòu)成),運(yùn)算方向自右至左。1.=運(yùn)算符(1)一定要把它和等于符號==區(qū)分開來。①“a=2;”讀法是:把2賦給變量a。“a==2;”讀法是:a等于2。②“a=b+(a=2);”要注意括號里的“a=2”不能加分號,因?yàn)樗皇钦Z句里的一部分。(2)要特別注意只能給變量賦值,不能給表達(dá)式賦值。所謂表達(dá)式,就是由運(yùn)算符構(gòu)成的式子,如a+b。inta_1,b,c;a_1=10;/*給單個變量賦值,正確*/b+c=20;/*不能給表達(dá)式賦值,錯誤*/a_1=b+c=30;/*不能給表達(dá)式賦值,錯誤*/4.14第14級:=、+=、-=、*=、/=、%=、<<=、>>=、&=、^=、|=賦值運(yùn)算符除2.+=、-=、*=、/=、%=、<<=、>>=、&=、^=、|=復(fù)合賦值運(yùn)算符以+=為例:(1)“a+=b;”等同于“a=a+b;”。(2)“a+=b+c;”等同于“a=a+b+c;”,其他各運(yùn)算符一樣,以此類推。(3)有多個復(fù)合賦值運(yùn)算符時要注意變量值的變化。例如:inta=5;a+=a-=12+8;/*自右往左,加號優(yōu)于復(fù)合賦值符,故先算12+8得20;接著a-=20,即a=a-20,結(jié)果為-15,即a=-15;a被重新賦值,再運(yùn)算a+=-15,即a=a+(-15),結(jié)果為-30,即a=-30;a被重新賦值-30*/4.14第14級:=、+=、-=、*=、/=、%=、<<=、>>=、&=、^=、|=賦值運(yùn)算符除運(yùn)算方向自左至右。語法規(guī)則:表達(dá)式1,表達(dá)式2,…,表達(dá)式n。運(yùn)算規(guī)則:以最后一個表達(dá)式的值作為整個逗號表達(dá)式的值。4.15第15級:,逗號運(yùn)算符4.16程序示例:評比獎學(xué)金學(xué)校獎學(xué)金評比辦法:語、數(shù)、外各科均以100分計(jì),總的條件是語、數(shù)、外各科必須60分(含)以上方可評比。具體等級是:(1)語、數(shù)、外各科均在90分以上(含)或平均分在90分以上(含)為一等獎,輸出:“Firstprize!”。(2)語、數(shù)、外各科均在80分以上(含)90分以下或平均分在80分以上(含)90分以下為二等獎,輸出“Secondprize!”。(3)語、數(shù)、外各科均在70分以上(含)80分以下或平均分在70分以上(含)80分以下為三等獎,輸出“Thirdprize!”。不符合上述條件的沒有獎,輸出“Noprize!”。本程序主要是條件的滿足問題,哪些條件是邏輯與,哪些是邏輯或。另外,條件的書寫可能比較長,可以預(yù)先用變量保存條件的邏輯值。本程序用到的if…elseif…else,學(xué)習(xí)者可查閱“5.3.3程序示例——if()多分支選擇結(jié)構(gòu)”的介紹。ThankYou!C語言程序的三種結(jié)構(gòu)模塊55.1算法簡述算法是指對整個問題解決過程的描述。這個描述可以是自然語言,也可以是流程圖等,其中流程圖是算法描述中使用最為普遍的一種。例如:的士計(jì)費(fèi)規(guī)則:起步價5元,含2公里范圍,2~10公里(含)以內(nèi)每公里以1.5元計(jì),10公里以外(超出10公里的部分)每公里以2元計(jì)。程序圖如圖5-1所示。圖5-1的士計(jì)費(fèi)規(guī)則程序圖1有窮性:算法必須能在執(zhí)行有限個步驟之后終止。2確切性:算法的每一步驟必須有確切的定義。3輸入項(xiàng):一個算法有0個或多個輸入,以刻畫運(yùn)算對象的初始情況,所謂0個輸入是指算法本身定出了初始條件。4輸出項(xiàng):一個算法有一個或多個輸出,以反映對輸入數(shù)據(jù)加工后的結(jié)果。沒有輸出的算法是毫無意義的。5可行性:算法中執(zhí)行的任何計(jì)算步驟都是可以被分解為基本的可執(zhí)行的操作步,即每個計(jì)算步都可以在有限時間內(nèi)完成(也稱為有效性)。一般來說,算法具備五個明顯的特征:5.1算法簡述5.2順序結(jié)構(gòu)程序設(shè)計(jì)5.2.1順序結(jié)構(gòu)程序設(shè)計(jì)示例1.#include"stdio.h"2.intmain()3.{4.chara,b,c;/*定義a,b,c三個字符變量*/5.charch[10];/*定義一個名為ch的一維字符數(shù)組,數(shù)組長度10*/6.printf("PleaseinputT,o,m:\n");/*提示輸入T,o,m這3個字符*/7.a=getchar();/*從鍵盤獲取一個字符,賦給字符變量a*/8.b=getchar();/*從鍵盤獲取一個字符,賦給字符變量b*/9.scanf("%c",&c);/*從鍵盤給字符變量c輸入值*/10.putchar(a);/*輸出字符變量a的值*/5.2順序結(jié)構(gòu)程序設(shè)計(jì)5.2.1順序結(jié)構(gòu)程序設(shè)計(jì)示例11.putchar(b);/*輸出字符變量b的值*/12.printf("%c",c);/*輸出字符變量c的值*/13.putchar(!);/*輸出一個“!”號*/14.putchar(\n);/*輸出一個換行符,即換一行*/15.printf("TomsASCIIis:%d\n",a+b+c);/*輸出3個字符變量所存放字符的ASCII碼之和*/16.printf("PleaseinputLucy:\n");/*提示輸入“Lucy”*/17.scanf("%s",ch);/*輸入Lucy這個字符串*/18.printf("%s\n",ch);/*輸出Lucy這個字符串*/19.printf("LucysASCIIis:%d\n",L+u+c+y);/*輸出“Lucy”每個字符的ASCII碼之和*/20.}字符變量只能用來存放單個字符,在內(nèi)存中占1個字節(jié)的內(nèi)存空間。5.2順序結(jié)構(gòu)程序設(shè)計(jì)5.2.2程序詳解1.chara,b,c;——字符變量5.2順序結(jié)構(gòu)程序設(shè)計(jì)5.2.2程序詳解字符變量只能存放單個字符,那字符串怎么辦呢?當(dāng)然得用字符數(shù)組了。這里聲明了一個名為ch的一維字符數(shù)組,長度為10,即字符個數(shù)(包括空格及結(jié)尾符\0。C語言中空格也是字符)不能超過10個。這里要區(qū)分兩個概念,一個是字符數(shù)組實(shí)際長度,另一個是字符數(shù)組內(nèi)存長度。例如:①chara[10]="good";字符數(shù)組a的實(shí)際長度為4(4個字符),內(nèi)存長度為10。②charb[]="good";字符數(shù)組b的實(shí)際長度為4,內(nèi)存長度為5。上列表明,在給字符數(shù)組初始化賦字符串時,系統(tǒng)會自動在串后面加上結(jié)尾符\0,但是不會計(jì)入數(shù)組的長度,即數(shù)組實(shí)際長度仍為4。如果沒有定義數(shù)組長度而初始化了字符串,計(jì)算內(nèi)存長度時要加上這個結(jié)尾符(占1B),如“charb[]="good";”,則sizeof(b)的結(jié)果就是5。2.charch[10];——一維字符數(shù)組5.2順序結(jié)構(gòu)程序設(shè)計(jì)5.2.2程序詳解(1)輸入字符串:scanf("%s",ch)。(2)輸出字符串:printf("%s",ch)。要注意的是:在用scanf輸入字符串時,因?yàn)閟canf以空格、回車和Tab鍵作為分隔符,因此,若輸入了空格,系統(tǒng)將其默認(rèn)為結(jié)尾符,表示輸入到此結(jié)束,這點(diǎn)要特別注意。而且,數(shù)組名代表了數(shù)組首元素首地址,不用加地址與&運(yùn)算符。數(shù)組名代表了數(shù)組首元素首地址,只需數(shù)組名,便可輸出整個串。關(guān)于數(shù)組,我們以后再進(jìn)行詳述,這里略微提及一下。字符數(shù)組因?yàn)榇娣诺氖亲址?,因而可以?s這個字符串格式聲明進(jìn)行輸入和輸出。舉例說明:5.2順序結(jié)構(gòu)程序設(shè)計(jì)5.2.2程序詳解a=getchar();——C語言的getchar()函數(shù)。從鍵盤獲取一個字符給字符變量a。getchar()函數(shù)是C語言中用于從鍵盤獲取單個字符的函數(shù),不能用于獲取字符串。括號中不能有任何參數(shù)。給字符變量從鍵盤輸入值,除了用getchar()這個函數(shù)外,還可用scanf()函數(shù)。例如:a=getchar();/*等同于“scanf("%c",&a);”,第9行就是如此*/3.getchar()函數(shù)5.2順序結(jié)構(gòu)程序設(shè)計(jì)5.2.2程序詳解putchar(a);——C語言的putchar()函數(shù)。輸出變量a的值(字符)。putchar()函數(shù)是C語言中用于輸出單個字符的函數(shù)。其括號中的參數(shù)可以是變量,也可以是字符常量,輸出字符常量時,要加單引號。例如,第13行的“!”輸出“putchar('!');”和第14行的換行符輸出“putchar('\n');”。除了用putchar()外,單個字符輸出當(dāng)然也可以用printf()函數(shù),如第12行的“printf("%c",c);”。由此可見,若變量a中存放字符'g',則輸出g的方式:putchar(a);/*等同于“putchar('g');”,等同于“printf("%c",a);”*/4.putchar()函數(shù)5.2順序結(jié)構(gòu)程序設(shè)計(jì)5.2.2程序詳解printf("TomsASCIIis:%d\n",a+b+c);輸出存放在a、b、c這3個變量里的字符的ASCII碼值之和。要注意a、b、c是變量而不是常量字符,因而不能加單引號。第19行的“printf("LucysASCIIis:%d\n",L+u+c+y);”中,L、u、c、y是常量字符,因而需加單引號。5.字符變量與字符常量5.2順序結(jié)構(gòu)程序設(shè)計(jì)5.2.3順序結(jié)構(gòu)程序設(shè)計(jì)舉例【例5-1】求直角三角形的斜邊——hypot()函數(shù)。輸入兩直角邊的值,如果輸入了負(fù)數(shù),就取其絕對值,求第三邊的長。#include<stdio.h>#include<math.h>intmain(){floatx,y,z;printf("Input2sides:\n");scanf("%f,%f",&x,&y);z=hypot(fabs(x),fabs(y));/*調(diào)用數(shù)學(xué)庫函數(shù)hypot()求第三邊*/printf("TheNO.3sideis:%.2f\n",z);printf("TheNO.3integeris:%f\n",sqrt(abs(z)));/*輸出整數(shù)部分絕對值的開平方值*/}5.2順序結(jié)構(gòu)程序設(shè)計(jì)5.2.3順序結(jié)構(gòu)程序設(shè)計(jì)舉例輸入輸出效果:Input2sides:-1,2TheNO.3sideis:2.24TheNO.3integeris:1.414214(1)hypot()函數(shù)是求直角三角形斜邊的長度,包含于數(shù)學(xué)頭文件math.h中。用法是:doublehypot(doublex,doubley)。(2)函數(shù)fabs()是取浮點(diǎn)數(shù)的絕對值,這里是防止輸入了負(fù)數(shù),因?yàn)檫呴L不能為負(fù)。用法是:fabs(doublex)。(3)abs()是取整型數(shù)的絕對值。用法是:abs(intx)。(4)sqrt()是求算術(shù)平方根函數(shù)。sqrt(abs(z))意為:先取浮點(diǎn)數(shù)z的整數(shù)部分的絕對值,再對該絕對值開平方。5.3選擇結(jié)構(gòu)程序設(shè)計(jì)5.3.1程序示例——if()簡單的單分支選擇結(jié)構(gòu)使用方法:if(表達(dá)式){語句序列;}如果if()括號里的表達(dá)式為真,就執(zhí)行{}里的語句序列,否則不執(zhí)行。如果只有一條語句,則{}可以省略,如本例中就是如此。5.3選擇結(jié)構(gòu)程序設(shè)計(jì)5.3.2程序示例——if()簡單的雙分支選擇結(jié)構(gòu)使用方法:if(表達(dá)式){語句序列1;}else{語句序列2;}如果if()括號里的表達(dá)式值為真,執(zhí)行語句序列1,否則執(zhí)行語句序列2。5.3選擇結(jié)構(gòu)程序設(shè)計(jì)5.3.2程序示例——if()簡單的雙分支選擇結(jié)構(gòu)【例5-3】輸入一個年份,判斷是否為閏年。閏年的斷定方法是:能被4整除但不能被100整除或能被400整除的年份為閏年。#include<stdio.h>intmain(){intyear;scanf("%d",&year);if((year%4==0&&year%100=0)||year%400==0)printf("%d是閏年\n",year);elseprintf("%d不是閏年",year);}5.3選擇結(jié)構(gòu)程序設(shè)計(jì)5.3.3程序示例——if()多分支選擇結(jié)構(gòu)使用方法:if(表達(dá)式1){語句序列1;}elseif(表達(dá)式2){語句序列2;}elseif(表達(dá)式3){語句序列3;}……else{語句序列;}哪個if表達(dá)式的值為真,就執(zhí)行它的語句序列,如果都不為真,就執(zhí)行最后一個else的語句序列。5.3選擇結(jié)構(gòu)程序設(shè)計(jì)5.3.3程序示例——if()多分支選擇結(jié)構(gòu)模塊5.3.1的火車貨運(yùn)站計(jì)費(fèi)程序我們用多分支結(jié)構(gòu)編寫如下:printf("Pleaseinputw:");scanf("%d",&w);if(s<1000)money=M*s*w;elseif(s<2000)money=M*0.95*s*w;elseif(s<3000)money=M*0.92*s*w;elseif(s<5000)money=M*0.90*s*w;elsemoney=M*0.88*s*w;printf("\nmoney=%.2f",money);}模塊5.3.1的火車貨運(yùn)站計(jì)費(fèi)程序我們用多分支結(jié)構(gòu)編寫如下:#include<stdio.h>#defineM5.0intmain(){ints,w;floatmoney;printf("Pleaseinputs:");scanf("%d",&s);5.3選擇結(jié)構(gòu)程序設(shè)計(jì)5.3.4程序示例——if語句嵌套的多分支選擇結(jié)構(gòu)模塊5.3.1的火車貨運(yùn)站計(jì)費(fèi)程序我們用嵌套的多分支結(jié)構(gòu)編寫如下:elseif(s<3000)money=M*0.92*s*w;elseif(s<5000)money=M*0.90*s*w;elsemoney=M*0.88*s*w;elsemoney=M*s*w;/*不符合s>=1000這個條件,執(zhí)行這一句*/printf("\nmoney=%.2f",money);}#include<stdio.h>#defineM5.0intmain(){ints,w;floatmoney;printf("Pleaseinputs:");scanf("%d",&s);printf("Pleaseinputw:");scanf("%d",&w);if(s>=1000)/*在滿足這個條件的前提下,執(zhí)行下面的語句*/if(s<2000)money=M*0.95*s*w;5.3選擇結(jié)構(gòu)程序設(shè)計(jì)5.3.4程序示例——if語句嵌套的多分支選擇結(jié)構(gòu)要注意一種情況,有多個if和else時,else總是和它最近的if進(jìn)行配對。如下例,根據(jù)對輸入的兩個整型值進(jìn)行比較判斷,輸出相應(yīng)的結(jié)果:if(y<0)/*上面x>y若為1,再判斷此處x<0是否為真,為真輸出Tom,否則輸出Lucy*/printf("%s","Tom");elseprintf("%s","Lucy");elseprintf("Jack");/*第1個if里,若x>y為假,直接執(zhí)行這個else,輸出Jack*/}#include<stdio.h>intmain(){intx,y;scanf("%d%d",&x,&y);/*輸入2個整型值*/if(x>y)/*判斷x>y的邏輯值為1還是0,為1,執(zhí)行下面的if語句,否則,執(zhí)行和該if對應(yīng)的最末尾else,輸出Jack*/5.3選擇結(jié)構(gòu)程序設(shè)計(jì)5.3.5程序示例——switch()語句多分支選擇結(jié)構(gòu)結(jié)構(gòu)如下:switch(表達(dá)式){case常量1:語句序列1;/*注意常量值后面用的是冒號,不可與分號混淆*/case常量2:語句序列2;……case常量n:語句序列n;default:語句序列;}5.3選擇結(jié)構(gòu)程序設(shè)計(jì)5.3.5程序示例——switch()語句多分支選擇結(jié)構(gòu)switch()括號里的表達(dá)式將是一個確定的值。如果“{}”中哪個case后面的常量等于這個值,就從它后面的語句序列開始執(zhí)行,直到遇到break語句或switch語句結(jié)束的“}”為止。如果沒有和它相等的值,就直接執(zhí)行default后面的語句序列,退出switch。模塊5.3.1的火車貨運(yùn)站計(jì)費(fèi)程序我們用switch語句多分支結(jié)構(gòu)編寫如下:分析:條件中里程數(shù)都是1000的倍數(shù),根據(jù)題意有以下條件分段:s<1000有1~999/1000等于0的結(jié)果s>=1000&&s<2000有1000~1999/1000等于1的結(jié)果s>=2000&&s<3000有2000~2999/1000等于2的結(jié)果s>=3000&&s<5000有3000~3999/1000等于3和4000~4999/1000等于4的結(jié)果s>=5000去除上述條件后,剩最后這個條件,可設(shè)為default5.3選擇結(jié)構(gòu)程序設(shè)計(jì)5.3.5程序示例——switch()語句多分支選擇結(jié)構(gòu)由此,我們便可確定switch()括號里的表達(dá)式為s/1000,而case后面常量則是0~4的

溫馨提示

  • 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

提交評論