《C語言程序設計》中職全套教學課件_第1頁
《C語言程序設計》中職全套教學課件_第2頁
《C語言程序設計》中職全套教學課件_第3頁
《C語言程序設計》中職全套教學課件_第4頁
《C語言程序設計》中職全套教學課件_第5頁
已閱讀5頁,還剩578頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

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

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

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

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

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

溫馨提示

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

評論

0/150

提交評論