C程序設計課件_第1頁
C程序設計課件_第2頁
C程序設計課件_第3頁
C程序設計課件_第4頁
C程序設計課件_第5頁
已閱讀5頁,還剩404頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1

C語言概述2-1C語言發(fā)展特點(了解)2-2 C程序基本結構(熟練掌握)2-3C程序上機步驟(熟練掌握)作業(yè)22-1 C語言簡介背景:匯編語言可移植性差其他高級語言不能對硬件操作發(fā)展:63年CPL--67年BCPL--70年B語言--73年C語言75年C語言引起注意(寫UNIX6)78年K&R合著《TheProgrammingLanguage》(標準C)83年美國家標準化協(xié)會ANSI制訂ANSIC--87ANSI3C語言特點允許直接訪問物理地址,能進行位操作語言簡潔,使用靈活數(shù)據類型豐富運算符豐富目標代碼質量高可移植性好(與匯編比)結構化的控制語句語法限制不嚴,程序設計自由度大概述42-2 C程序基本結構幾個簡單例子C程序一般結構概述5例2.1在屏幕上輸出一句話main()/*函數(shù)頭*/{/*函數(shù)體*/

printf(“Howareyou?\n”);}運行結果:Howareyou?說明:該程序只包含一個函數(shù)(函數(shù)名為main),函數(shù)體內只有一個語句。6例2.2已知圓的半徑為6,計算圓的周長和面積。main(){/*定義三個實型變量,分別表示半徑、周長和面積*/

floatr,length,area;r=6;/*賦值:將6送給r*/length=2*3.14*r;/*計算周長,結果送length*/area=3.14*r*r;/*計算面積,結果送給area*/

printf("\nlength=%f,area=%f\n",length,area);/*輸出周長、面積*/}7說明:該程序只由一個main函數(shù)組成。main函數(shù)的函數(shù)體中可包含多個語句。根據語句的功能,該語句分為兩類:說明語句和可執(zhí)行語句。注釋:/*……*/8main(){intn,s;

printf(“entern:”);scanf(“%d”,&n);/*輸入n*/s=sum(n);/*函數(shù)調用*/

printf(“\ntheresultis:%d”,s);/*輸出結果*/}intsum(intm)/*函數(shù)定義*/{intj,s1=0;for(j=1;j<=m;j++)/*求和*/

s1=s1+j;return(s1);}/*返回和值*/例2.3求1+2+3+4+……+n(其中n由用戶輸入)9一個完整的C語言程序一般包含以下4部分:

(1)編譯預處理命令(2)全局變量及函數(shù)說明(3)main()函數(shù)(4)用戶自定義函數(shù)10關于C源程序結構的說明1.程序的基本組成單位是函數(shù)一個程序可以由一個或多個函數(shù)組成。函數(shù)有兩類:庫函數(shù)和用戶自定義函數(shù)。庫函數(shù)是系統(tǒng)提供的,用戶可直接調用,如求正弦的函數(shù)sin(),開平方函數(shù)sqrt()等。對于庫函數(shù)中沒有的功能,需要用戶自己編程實現(xiàn),即自己定義函數(shù)。11因為C程序總是從main函數(shù)開始執(zhí)行,所以一個C語言源程序中只能有且僅有一個main函數(shù)。該函數(shù)在程序中的位置任意:可以在用戶自定義的函數(shù)前面,也可以在后面,也可以在各個函數(shù)之間。2.main函數(shù)123.函數(shù)的一般結構C語言的函數(shù)由函數(shù)頭和函數(shù)體兩部分組成:函數(shù)類型函數(shù)名(形參表)函數(shù)頭{說明部分函數(shù)體可執(zhí)行部分}其中:形參可以沒有,但括號不能省略。如:voidline(){printf(“-------------------”);}特別提示:函數(shù)體中,說明語句必須在所有可執(zhí)行語句之前

13C函數(shù)結構舉例變量定義執(zhí)行部分函數(shù)頭函數(shù)體函數(shù)參數(shù)函數(shù)名函數(shù)類型main(){inta,b,c;

scanf(“%d%d”,&a,&b);c=max(a,b);

printf(“max=%d\n”,c);}intmax(intx,inty)/*求兩數(shù)最大值*/{intz;

if(x>y)z=x;elsez=y;return(z);}144.語句

根據語句的復雜程度,可將C語言中的語句分為簡單語句和復合語句兩大類。簡單語句:一般表示一個基本操作,以分號結束。(其中分號是該語句的必要組成部分)復合語句:用花括號{}括起來的一系列語句,該語句以“{”開始,以“}”結束,末尾不需加分號。155.源程序的書寫格式

①書寫(或輸入)源程序時,可以一行寫一個語句,也可以一行寫多個語句,還可以一個語句分幾行寫。因為各語句之間是以分號或花括號間隔的。通常,一行寫一個語句,以保證程序結構清晰。②C語言中用“大括號對”即“{}”來表示程序的層次結構166.注釋

程序中用/*……*/給出注釋,注釋中可以是任意的內容。位置:原則上,注釋可以出現(xiàn)在程序中允許出現(xiàn)空格的位置;實際編程時,一般放在函數(shù)之前或語句之后。作用:編譯時注釋被忽略,因此注釋對程序的運行結果不起作用。使用注釋的目的是提高程序的可讀性177.C語言中,大小寫字符不通用如a和A表示兩個不同的符號。注意培養(yǎng)良好的編程風格,如加注釋、大括號的對齊、適當?shù)挠铱s等(參見P17例2.5)概述182.3C源程序的上機調試步驟TurboC上機調試包括:編輯、編譯、連接、運行4步1、編輯:包括源程序的輸入、修改、存盤。所用命令:File/New,Save,Load,EDIT2、編譯:翻譯成二進制并進行語法檢查。所用命令:Compile/CompiletoOBJ3、連接:目標程序模塊連接,生成可執(zhí)行文件。所用命令:Compile/Link。

其中2和3可以合為一步Compile/MakeEXEfile4、運行:RUN/RUN,查看結果:RUN/Userscreen19C程序調試過程圖示新建或打開文件編輯程序保存文件編譯運行查看結果出錯正確20說明:舉例講解:輸入一源程序,演示上述過程的各個調試步驟。將源程序改為錯誤的程序,演示調試、排錯的過程。概述21作業(yè)1.課后上機練習題2.習題1、2

預習:第三章數(shù)據類型、運算符和表達式問題:1.整型、實型、字符型變量所占內存空間的大小、表示數(shù)據的范圍有何區(qū)別?2.如何根據要處理的數(shù)據確定其類型?3.為什么在處理數(shù)據之前要先確定其數(shù)據類型?4.i++、++i有何區(qū)別?概述22第1章程序設計基礎主要內容:1、程序設計概述(理解)程序、程序設計語言的概念程序設計的一般過程如何學習程序設計2、算法定義、特點與描述(熟悉)3、結構化程序設計方法(了解)小結231.1程序設計概述一、概念:1、程序:程序是為解決某一問題而編寫的語句序列。通俗的說,將解決一個實際問題的具體操作步驟用某種計算機語言描述出來,就形成了程序。24例如:判斷輸入的任意整數(shù)n能否被3整除,程序如下:main(){intn;

printf("\nenterainteger:");

scanf("%d",&n);if(n%3==0)

printf("\n%dcanbedividedby3",n);elseprintf("\n%dcan'tbedividedby3",n);}252、程序設計語言:即計算機語言分類:機器語言:用計算機能直接理解和執(zhí)行的“0”和“1”表示各種操作的程序設計語言,很難使用。匯編語言:用助記符號來表示各個基本操作的程序設計語言,如addr1,4高級語言:用接近自然語言和數(shù)學語言的語法符號描述基本操作的程序設計語言26二、程序設計的一般過程用計算機解決問題的基本過程如圖1.1所示:27程序設計基本步驟(1)分析要解決的問題,明確任務。即分析要處理的數(shù)據是什么,從哪里來,作怎樣的處理,結果送往那里。例如:求學生的平均成績。分析該問題,明確它有三項功能:1、輸入學生成績2、求平均成績3、輸出結果;要處理的原始數(shù)據為:學生的成績;要進行的處理為:求平均;結果為:平均值,送屏幕顯示或保存于文件中。28(2)分析問題,建立數(shù)學模型,并選擇合適的解決方案;例如:求平均成績的處理過程,可以抽象為:計算一批數(shù)據的平均值。(3)確定數(shù)據結構和算法:數(shù)據結構即數(shù)據的組織方式,算法是對數(shù)據處理過程的具體描述。只有先確定了數(shù)據結構,才能設計相應的算法。例如:要處理的原始數(shù)據為學生成績,如何組織,如何在計算機中表示?對于簡單問題,前三步可看作一步,即分析問題、設計算法。29(4)編碼:即編寫程序。用某種計算機語言將上一步設計好的算法描述出來,就是程序??梢?,算法是編程的基礎。(5)調試程序:將源程序送入計算機,進行排錯、試運行,調試的結果是得到一個能正確運行的程序。通常,調試程序至少占整個程序設計工作量的一半。(6)整理資料,交付使用30三、學習程序設計的方法1、一講、二練、三思考2、多讀源程序、多編寫程序、多上機調試3、忌上課只聽不記、忌“紙上談兵”、忌課下不練習具體要求:1、上課有重點、有選擇的記;2、上機有準備:準備好課本、筆記、作業(yè)等3、除課后習題必須全部解決外,多做一些二級考試的模擬題4、做一個自己感興趣的完整的程序(小項目)第一章31N.Wirth公式:程序=數(shù)據結構+算法+語言環(huán)境1-2算法定義:算法是指為解決一個問題而采取的方法和步驟。例如:復習算法、樂譜、看病算法等算法有優(yōu)劣32簡單算法舉例例1-1計算任意長方形的面積例1-2

計算1x2x3x4x5=?例1-3計算1-1/2+1/3-...+1/99-1/100=?例1-4判斷一個數(shù)是否素數(shù)第一章算法描述33計算任意長方形的值問題分析:輸入長和寬計算面積=長X寬輸出面積數(shù)據存放:長-len,寬-wid,面積-area設計算法:輸入len和wid的值;計算area=lenXwid;輸出面積area的值;34計算1x2x3x4x5方法一:數(shù)學思路方法二:利用變量P存放中間結果S1:P=1/I=2S2:P=PxIS3:I=I+1S4:如果I>5轉S5

否則轉S2S5:打印P的值P=11x2PPx3PPx4PPx5P打印P的值P=1/I=2PxIP/I=I+1PxIP/I=I+1PxIP/I=I+1PxIP/I=I+1當I>5時打印P的值351-1/2+1/3-...+1/99-1/100=?提示:首先考慮實現(xiàn)1+2+3+4+…+100其次考慮實現(xiàn)1/1+1/2+1/3+1/4+...+1/100最后考慮實現(xiàn)1/1-1/2+1/3-1/4+...+1/100思路:S1:sum=0,I=1S2:SUM=SUM+IS3:I=I+1S4:如果I<=100則轉S2否則轉S5S5:打印SUM的值1/I,P=1P*1/I,P=-P;36判斷一個數(shù)是否素數(shù)分析:本題要點是先搞清楚什么是素數(shù)。思路:輸入一個大于3的正整數(shù)N定義一個變量I從2~N-1,I每取一個值做:如果N能被I整除則中斷循環(huán),N不是素數(shù);否則I繼續(xù)取下一個值;若當I取完所有值都不能整除N,則N是素數(shù)一個正整數(shù),若不能被除1和它本身以外的任何整數(shù)整除,則是素數(shù)。37算法的特性有窮性指一個算法經過有限步驟后停止(或在合理范圍內)確定性算法的每一步都應當是確定的,無歧義的有效性算法的每一步計算機都能有效執(zhí)行有0個或多個輸入一個算法可以沒有輸入,即執(zhí)行時無需輸入信息有1個或多個輸出一個算法必須有輸出,運算過程或運算結果38算法的描述描述算法的方法有多種,常用有:自然語言(描述不夠嚴格,容易出現(xiàn)歧義性)結構化流程圖*(同一問題的流程圖不唯一)N-S圖*(結構清晰,但難于修改)PAD圖(結構清晰,唯一性好)偽代碼*(靈活,但需要有一定的程序設計基礎)學習建議:流程圖或N-S圖一定要熟練掌握,偽代碼表示法在學習完基本的流程控制語句后也經常使用。39流程圖流程圖是用幾種圖形、箭頭線和文字說明來表示算法的框圖。流程圖中規(guī)定使用的符號如圖1.2所示用流程圖的優(yōu)點是:直觀形象、易于理解,能將設計者的思路清楚地表達出來,便于以后檢查修改和編程。40例如:計算1+2+3+……+100=?畫流程圖S=0,I=1I<=100輸出SN開始結束S=S+II=I+1Y41S=0,I=1S=S+II=I+1I>100輸出SYN開始結束例如:計算1+2+3+……+100=?畫流程圖練習42結構化流程圖三種基本結構:順序結構選擇結構循環(huán)結構說明舉例練習ABPYAN當型循環(huán)直到型循環(huán)PABYNANPY43三種基本結構說明循環(huán)結構:當型循環(huán)先判斷后執(zhí)行;即當條件P成立時重復執(zhí)行循環(huán)體A;直到型循環(huán)先執(zhí)行后判斷;即重復執(zhí)行循環(huán)體A直到條件P成立結束;三種基本結構特點:只有一個入口和一個出口;結構內每一部分都有機會執(zhí)行到;結構內不存在“死循環(huán)”N-S44求N!流程圖輸入NN

0S=1打印ERRORNYI=1I

NS=S*I/I=I+1YN打印S45N-S圖三種基本結構:順序結構選擇結構循環(huán)結構說明舉例練習ABTPFAB當P成立

A

A

直到P成立當型循環(huán)直到型循環(huán)46求N!N-S圖輸入NN

0YNS=1,I=1當I<=NS=S*II=I+1輸出S輸出ERROR第一章471-3結構化程序設計方法總的原則:自頂向下,逐步細化,模塊化設計,結構化編碼也就是說:當面臨一個復雜問題時,先進行整體設計,將問題分為幾個大模塊;然后再對每個模塊進一步分解為較小模塊;每個模塊還可再分,直到不能再細分為止。設計思路:給定問題,先搞清楚已知哪些數(shù)據(輸入),需要什么結果?(輸出)然后再分析如何解決。第一章48本章小結本章介紹程序設計及算法的基本知識重點:分析問題,設計算法習題:P12習題第3、4題第一章49第3章數(shù)據類型、運算符和表達式主要學習內容:1.數(shù)據類型2.常量和變量3.基本數(shù)據類型:整型、實型、字符型4.最常用的運算符和表達式:算術運算符和算術表達式賦值運算符和賦值表達式逗號運算符和逗號表達式50引入假設某任務中有如下數(shù)據需要處理:1024、65536、123.5、123.456789e10、'a'、"name"設計算法前,需要先定義數(shù)據結構:即如何在計算機中表示這些數(shù)據?編程時,函數(shù)的說明部分就是對數(shù)據結構的描述,可執(zhí)行部分是對算法的具體描述。那么,在C語言中如何描述數(shù)據結構呢?——

數(shù)據類型數(shù)據結構描述完畢,然后是算法的C語言描述了。算法是對數(shù)據處理過程的描述,數(shù)據處理過程許多基本操作是如何實現(xiàn)的呢?——運算符和表達式513.1C的基本語法單位1、字符集-包括字母、數(shù)字和特殊符號;2、關鍵字-C系統(tǒng)保留字;3、標識符-用戶為自定義變量、函數(shù)等所起的名字;

標識符命名規(guī)則:(1)由字母、數(shù)字及下劃線組成,且不能以數(shù)字開頭。(2)不能與關鍵字同名(3)盡量“見名知義”例如:下列標識符,是否合法?為什么?area if score student_no 2daymonth_3 int _sumno*3&aa數(shù)據類型523.2常量和變量例1:輸入任一半徑,計算球的體積。#definePI3.1415926/*定義符號常量PI*/main(){floatr,v;/*定義變量r、v*/

printf("\nenterr:");

scanf("%f",&r);v=PI*r*r*r*4/3;/*3、4是常量*/

printf("\nvolume:%f",v);}53分析例題中處理的數(shù)據有兩類:常量和變量常量:在程序的運行過程中其值不能被改變的量。如程序中的3,4符號常量:用一個標識符代表一個有特定含義的常量如PI變量:在程序的運行過程中其值可以被改變的量。如r,v54符號常量名一般用大寫,變量名用小寫;選擇標識符應“見名知義”;變量必須先定義,后使用;C中要求所有變量“先定義,后使用”,目的是:(1)保證程序中變量名使用正確;(2)系統(tǒng)編譯時根據變量的類型為其分配合適的存儲單元。如系統(tǒng)給r,v各分配大小為4B的單元(3)編譯系統(tǒng)根據變量的類型進行語法檢查。如r%5是非法的表達式提示:數(shù)據類型553.3基本數(shù)據類型主要掌握整型、實型、字符型三種類型的:常量表示變量的定義所占存儲空間的大小取值范圍56用于表示整數(shù)所占內存空間:隨機器而異,一般微機上一個整型數(shù)據占2Byte

的內存空間。整型的可用修飾符:

int

short[int]long[int]unsignedint

unsignedshortunsignedlong一、整型:57整型變量的定義:類型說明符變量名表;如:inta,c,no;longs;unsignedx,y;整型常量:十進制整數(shù): 12-30

八進制整數(shù):024056

十六進制整數(shù):0x3A-0X34longint:12L0L58整型變量內存中的存放形式(在內存中占2個字節(jié))正數(shù)以原碼存放;負數(shù)以補碼存放;最高位為符號位,0表示正數(shù),1表示負數(shù);如:10

-10010100001010111100000000111111111111111101101111取反加159問題:要定義兩個變量x和y,分別用于存放數(shù)據1024和65536,如何確定x和y類型?分析:首先,要處理的數(shù)據為整型;其次,根據數(shù)據的大小確定其具體類型:1024可用int型變量保存,65536必須用longint型變量才能保存。main(){intx;longy;x=1024;y=65536;

printf("\nx=%d,y=%ld",x,y);}說明:若x,y均定義為long型,程序運行如何?若x,y均定義為int型,程序運行結果如何?數(shù)據類型60二、實型

Float:

單精度浮點型Double:

雙精度浮點型longDouble:長雙精度浮點型所占空間大小:

float型數(shù)據占4B,double型數(shù)據占8B實型變量的定義:

floatr,v;doublez,a,x;floatresult;等61實型常量:(1)小數(shù)形式:可由正負號、小數(shù)點和數(shù)字組成。如:12.35-78.090.789.145(2)指數(shù)形式:用科學計數(shù)法表示的實數(shù)。如:44e–30.34e12問題:若程序要處理的數(shù)據為:123.5和123.456789e10設該數(shù)據分別用變量a、b保存,試問a、b的類型如何確定?分析:首先該數(shù)據均為實型;其次,根據數(shù)據的大小及精度,可確定a為float型即可,b必須為double型。62程序如下:main(){floata;doubleb;a=123.5;b=123.456789e10;

printf("\na=%f,b=%f",a,b);}運行結果:

a=123.500000,b=1234567890000.000000若改為:floatb;運行結果如下:

a=123.500000,b=1234567954432.000000數(shù)據類型63字符常量:字符常量:用單引號括起來的一個字符;如‘A’’%’轉義字符:以“\”開頭的特殊字符,含義見P33表3-3;字符變量:一個字符變量只能存放一個字符常量;定義形式:charc1,c2;存儲空間:1個字節(jié);如c1=‘a’;字符存儲及使用:實際存是字符的ASCII碼;如:‘a’10000110三、字符型64字符串用雙引號括起來的字符序列,如"a"、"123\n"注:字符串存儲時,系統(tǒng)自動在字符串的末尾加上字符串結束標記'\0'比較字符常量'a'與字符串常量"a":'a'"a"9797065例3.5定義兩個變量c、d,用于保存字符'a'、'b',然后按字符和數(shù)值兩種形式輸出變量c、d的值。

main(){charc,d;c='a';d='b';

printf("\n%c%c",c,d);

printf("\n%d%d",c,d);}結果:ab9798若將第三行改為:c=97;d=98;結果如何?結論:在字符的ASCII碼(0~255)內字符與整數(shù)可通用。數(shù)據類型663.4變量的初始化(自學)如intr=6;等價于

intr;r=6;應用:編程時,當定義變量時就已知該變量的值,則可以使用初始化的方式給變量賦值。注意:

inti=j=k=0;是錯誤的。正確的應為:

inti=0,j=0,k=0;數(shù)據類型673.5運算符和表達式運算符:規(guī)定了對數(shù)據的基本操作。主要掌握:各運算符的功能、優(yōu)先級和結合方向。本章只介紹最常用的運算符:算術運算符、賦值運算符及其表達式683.5.1算術運算符表達式基本算術運算符

+(加法運算符,或正值運算符。如3+5、+3)-(減法運算符,或負值運算符。如5-2、-3)*(乘法運算符。如3*5)/(除法運算符。如5/3)%(求余運算符,%兩側均為整型,如7%4為3)。說明:雙目運算符,即要求有兩個操作數(shù)?!?”兩邊都為整數(shù)時作整除;如5/2=269用算術運算符和括號將運算對象連接起來的符合C語法規(guī)則的式子,稱C算術表達式;如:a+b*c-5.5/d+’a’優(yōu)先級:表達式求值時,按運算符的優(yōu)先級別高低次序執(zhí)行;結合性:運算符的優(yōu)先級別相同,按自左至右的結合方向運算(左結合);如果一個運算符的兩側的數(shù)據類型不同,則先自動進行類型轉換,然后進行運算。算術表達式70++i,--i使用i之前,先使i的值加(減)1;i++,i--使用i之后,再使i的值加(減)1;如果i=3,則執(zhí)行語句:①

j=++i;j值為4;②

j=i++;j值為3;注意:++和――只能用于變量,不能用于常量或表達式。++和――的結合方向是“自右至左”。如:printf(“%d”,-i++),輸出為-3。自增、自減運算符:71例如:main(){inti=6,j=6,k=6,h=6,m,n,x,y;m=i++;n=++j;x=k--;y=--h;

printf("\ni=%d,m=%d,j=%d,n=%d",i,m,j,n);

printf("\nk=%d,x=%d,h=%d,y=%d",k,x,h,y);}運行結果:

i=7,m=6,j=7,n=7k=5,x=6,h=5,y=572前綴:n=++j;等價于j=j+1;n=j;(j先加1,后參與表達式的運算)后綴:m=i++;等價于m=i;i=i+1;(i先參與表達式的運算,然后加1)結論:73算術表達式的計算:當一個表達式中包含多個算術運算符時,如何計算呢?表達式的計算方法:按優(yōu)先級由高到低進行,相同優(yōu)先級的運算符按結合方向計算。例如計算:4+5*8/10–12%5/2算術表達式的書寫要求自學注意:表達式中的符號均寫在同一行中,不能有上標或下標。合理運用括號,保證原數(shù)學表達式的運算順序。數(shù)據類型743.5.2類型轉換1.當參加運算的兩個操作數(shù)類型不同時,先將“低”類型的數(shù)據轉換為“高”類型,再計算。——隱式轉換(系統(tǒng)自動進行的轉換)2.當需要將某數(shù)據轉換成指定類型時使用——強制類型轉換。75char,shortintunsignedlongdoublefloat低高圖中橫向向左的箭頭表示必定的轉換;縱向箭頭表示運算對象為不同類型時轉換的方向。1、隱式轉換(自動進行的轉換)762、強制類型轉換一般形式為:(類型名)(表達式)例如:(double)a(將a轉換成double型)(int)(x+y)(將x+y的值轉換成整型)說明:強制類型轉換得到一個所需類型的中間變量,原來變量的類型未發(fā)生變化。77例3.8含有牽制類型轉換的表達式的計算。

main(){inta=2,b=3;floatx=3.5,y=2.5,z;z=(float)(a+b)/2+(int)x%(int)y;

printf("\n%f",z);}

運行結果:3.500000數(shù)據類型783.5.3賦值運算符和表達式賦值:給變量提供數(shù)據的一種方法。1.賦值表達式:變量=表達式作用:先計算“=”右邊表達式的值,然后將其送給“=”左邊的變量。如area=r*r*3.14s=0優(yōu)先級:比算術運算符低,僅高于逗號運算符。結合性:自右向左79復合賦值表達式:在賦值符“=”之前加上其他運算符。例如:a+=3等價于a=a+3x*=y+8等價于x=x*(y+8)說明:賦值表達式也可以包含復合的賦值運算符。凡是二元運算符都可與賦值符一起組合成復合賦值符。若定義:inta=2;則表達式b=c=a+4的計算過程為:先計算:c=a+4得該表達式的值為6;然后計算:b=6得該賦值表達式的值為6。803.賦值運算中的類型轉換:當賦值號“=”右邊表達式的值與“=”左邊的變量的類型不同時,先將“=”右邊表達式的值轉換成“=”左邊變量的值,然后再賦值。例如:intn=4;floats;s=n*5;結果類型:float數(shù)據類型813.5.4逗號運算符用逗號運算符將兩個表達式連接起來稱為逗號表達式。一般形式為:表達式1,表達式2如:3+5,6+8逗號表達式的計算:自左向右依次計算各表達式逗號表達式的值:最右邊一個表達式的值如:for(j=0,s=0,p=1;j<10;j++){s+=j;p*=j;}注意:并不是任何地方出現(xiàn)的逗號都是作為逗號運算符。例如:printf(“%d,%d,%d”,a,b,c);82作業(yè)上機練習:1習題1、3、5、6、7預習:第四章順序結構程序結構要求明確:Getchar()putchar()scanf()printf()的使用數(shù)據類型83順序結構程序設計C語句概述輸入輸出概述字符輸入輸出格式輸出printf格式輸入scanf順序程序設計要求:熟練掌握用合適的格式輸入/輸出不同類型的數(shù)據;會編寫簡單的程序。84C語句概述順序結構C基本語句:表達式語句:在一個表達式的后面加上分號即構成表達式語句。例如x=0;k++;printf("\nwelcome");流程控制語句:用來控制程序中語句的執(zhí)行順序。C語言中提供了9種流程控制語句;

If~else/switch/for()~/while()~/do~while()/continue/break/goto

/return85順序結構例:重復(10次)輸入兩個整數(shù),輸出兩數(shù)之和。main(){inta,b,c,n;

for(n=1;n<=10;n++)/*for語句控制重復10次*/{printf("\ninput2integers:");

scanf("%d%d",&a,&b);c=a+b;

printf("sum:%d\n",c);

}}3.復合語句:用一對花括號{}括起來的多個語句序列,有時稱為分程序。86輸入/輸出概述C不提供輸入輸出語句,輸入輸出操作由函數(shù)實現(xiàn)。printf函數(shù)和scanf函數(shù)不是輸入輸出語句,而是C標準函數(shù);可以使C編譯系統(tǒng)簡單化,避免在編譯階段處理與硬件有關問題。使用C庫函數(shù)時,必須將該函數(shù)所在頭文件(.h)包含到源文件中。如:#include“stdio.h”順序結構87字符數(shù)據輸入輸出putchar函數(shù)(字符輸出函數(shù))格式:putchar(字符型數(shù)據);功能:向終端輸出一個字符;說明:函數(shù)參數(shù)可以為char或int型常量、變量、表達式;也可以輸出控制字符或其他轉義字符,如putchar(\n);putchar(\015);如在函數(shù)中調用putchar()函數(shù),應在函數(shù)前加上包含命令:#include“stdio.h”順序結構88例:輸出三個字符:A*B。#include“stdio.h”main(){charc1;intc2;c1='A';c2=66;/*給變量c1,c2賦值*/

putchar('\n');/*輸出字符'\n'*/

putchar(c1);/*輸出變量c1中的字符:'A'*/

putchar('*');/*輸出字符'*'*/

putchar(c2);/*輸出變量c2中的字符:'B'*/}89字符數(shù)據輸入輸出getchar函數(shù)格式:getchar();功能:從鍵盤輸入一個字符;注意:getchar()只能接收一個字符;如在函數(shù)中調用getchar()函數(shù),應在函數(shù)前加上包含命令:#include“stdio.h”90例:輸入兩個字符,輸出每個字符及其ASCII碼。#include"stdio.h"main(){charc,d;

printf("\nentertwocharacters:");

c=getchar();d=getchar();

printf("%c:%d\n",c,c);/*輸出c字符及ASCII碼*/

printf("%c:%d",d,d);}順序結構91格式輸入printf()函數(shù)格式:printf(格式控制,輸出表列);其中:“格式控制”是用雙引號括起來的字符串,包括:格式說明,由%和格式字符組成,作用是將輸出項轉換為指定格式輸出。如%d,%f普通字符,格式控制串中除格式說明外的其他字符,是需要原樣輸出的字符。“輸出表列”是需要輸出的一些數(shù)據,可以是常量、變量、函數(shù)、表達式等。92如:a=5;b=7;printf(“%d,%d”,a,b);printf(“a=%d,b=%d\n”,a,b);如:inta=3;floatb=5;

printf("\nentername:");printf("\na=%d,b=%f",a,b);printf("%f",a*b);順序結構93main(){charch='Y';/*定義一個字符數(shù)組s,并保存字符串"verygood"*/chars[]="verygood";

printf("\nch:%c,s:%s",ch,s);}運行結果:ch:Y,s:verygood程序中,輸出項ch、s與控制項%c、%s一一對應,且類型匹配。

例:輸出字符和字符串。94格式輸出scanf()函數(shù)scanf(格式控制串,地址表列);例如:scanf("%d%f",&a,&b);其中:“格式控制”是用雙引號括起來的字符串,包括:格式說明,由%和格式字符組成,作用按指定格式輸入。如%d,%f普通字符,格式控制串中除格式說明外的其他字符,是需要原樣輸入的字符?!暗刂繁砹小笔切枰斎氲淖兞康刂?,&表示取地址。95格式輸出scanf()函數(shù)注意事項P55:格式控制后應當是變量地址,不是變量名;若格式控制串中包含其他字符,輸入時也應包含它們;如:scanf(“a=%d,b=%d”,&a,&b);輸入時應輸入:a=5,b=7回車用%c格式時,空格和轉義字符都認為有效;如:scanf(“%c%c”,&c1,&c2);輸入:ab則c1=‘a’,c2=‘‘;96例:用scanf輸入整型數(shù)據、實型數(shù)據。#include<stdio.h>main(){inta,b;floatx,y;

scanf("%d%d",&a,&b);

scanf("%f,%f",&x,&y);

printf("\na=%d,b=%d,x=%f,y=%f",a,b,x,y);}運行結果:1224↙(12與24之間用空格分開)

15,30↙(注意兩數(shù)間的逗號)

a=12,b=24,x=15.000000,y=30.00000097例:輸入某商品的編號(整型)、類別(A~Z字符型)、價格(實型),并輸出該信息。#include<stdio.h>main(){intnum;charclass;floatprice;

printf("\nenternumber(A~Z):");

scanf("%d",&num);getchar();

printf("\nenterclass:");class=getchar();getchar();

printf("\nenterprice:");

scanf("%f",&price);getchar();

printf("no=%d,class=%c,price=%6.2f",no,class,price);}98混合輸入有兩種處理方法:一是在一個scanf()函數(shù)中實現(xiàn)所有數(shù)據的輸入;二是將數(shù)值與字符分別輸入,而不是用一個scanf()函數(shù)。通常采用第二種方法,用第一種方法輸入時容易出錯。本程序中分別用scanf()和getchar()輸入編號、價格和類別。并且每次輸入后用getchar()讀取多余的回車符,以免影響后面的正確輸入。順序結構99順序程序設計舉例順序結構例1:交換兩個整型變量的值。分析:首先定義程序中要用到的變量,設兩個整型變量為a、b。然后設計算法:①輸入兩個整數(shù)a、b②交換a、b的值③輸出交換后的a、b的值。其中,實現(xiàn)②的方法有兩種:一是用第三個變量c暫存其中一個數(shù),如程序1。二是不使用第三個變量,利用其中一個變量保存兩數(shù)之和,通過減法來實現(xiàn),如程序2。100程序1:main(){inta,b,c;

printf("\nenter2integerstoa,b:");

scanf("%d%d",&a,&b);c=a;a=b;b=c;/*交換*/

printf("\na=%d,b=%d",a,b);}運行結果:enter2integerstoa,b:46↙a=6,b=4思考:若將三個交換語句的順序調整,結果如何?101程序2:main(){inta,b,c;

printf("\nenter2integerstoa,b:");

scanf("%d%d",&a,&b);a=a+b;b=a-b;a=a–b;/*交換*/

printf("\na=%d,b=%d",a,b);}運行結果同上。102例2:輸入一個數(shù)字符號,并轉換成相應的整數(shù)輸出。如讀入字符'8',轉換成整數(shù)8輸出。分析:首先定義程序中要使用的變量,設字符變量ch存放讀入的字符,整型變量d存放轉換后的整數(shù)。然后設計算法:①輸入一個字符給ch②將字符ch轉換成對應的數(shù)值d③輸出d。第二步轉換利用ASCII碼的編碼規(guī)律:‘0’,‘1’,'2'…'9'的ASCII碼值是連續(xù)的,即48、49、50……57。只要將數(shù)字字符與字符'0'相減,結果就是該字符對應的數(shù)值。如'8'-'0'值為8。103程序:#include<stdio.h>main(){charch;intd;

printf("\nenteracharacter(0~9):");

ch=getchar();/*讀入一個字符并賦給ch*/

d=ch-'0';

printf("d=%d",d);}104作業(yè)P571.上機練習1~42.習題1,3順序結構105選擇結構程序設計關系運算符表達式邏輯運算符表達式IF語句SWITCH語句程序舉例根據選擇結構的組成特點,分析問題時著重明確以下兩點:1)條件是什么2)條件成立和不成立時分別執(zhí)行什么操作。106關系運算符與關系表達式所謂“關系運算”實際上是“比較運算”:若條件滿足,則關系表達式的值為ture(1);否則,關系表達式的值為false(0)。1.關系運算符:<<=>>===!=例如下列關系表達式:

a>b表示條件“a大于b“,x!=0表示條件“x等于0“,

a+b<x*y表示條件”a+b小于x*y“。107關系運算符優(yōu)先次序算術運算符>關系運算符>賦值運算符且<<=>>=高于==!=例如:c>a=b等效于

c>(a=b)a==b<c等效于

a==(b<c)a=b>c等效于a=(b>c)算術運算符關系運算符賦值運算符低高1082、關系表達式用關系運算符將兩個表達式連接起來的式子。如a>b,a>=80關系表達式的值是一個邏輯值,即“真”或“假”。如:5==3值為假,5>=0值為真。說明:表達式可以是算術或關系、字符等表達式。如a+b>b+c,’a’<’b’,a>(b<c)C語言以1代表“真”,以“0”代表“假”,如:d=5>3d的值為1。109關系運算符“==”與賦值運算符“=”不同。比較:k=1與k==1表達式a+b>d>c也是合法的關系表達式,但在實際應用中很少使用;因為它不能表示:a+b大于c且大于d。問題:如何表示:a<x<b0<y<10等條件特別提示選擇結構110邏輯運算符與邏輯表達式邏輯運算符&&邏輯與(相當于其他語言中的AND)||邏輯或(相當于其他語言中的OR)!

邏輯非(相當于其他語言中的NOT)邏輯運算規(guī)則:a&&b只有當a、b都為真時,a&&b才為真,否則為假。a||b若a、b之一為真,則a||b為真。(或只有當a、b都為假時,a||b才為假,否則為真)!a若a為真,則!a為假。111邏輯運算符與邏輯表達式優(yōu)先次序(見圖):算術運算符關系運算符賦值運算符低高!運算符&&.||運算符112邏輯運算符與邏輯表達式邏輯表達式邏輯表達式的值應該是一個邏輯量“真”或“假”。注意:C在給出運算結果時,0代表假,1代表真,但在判斷一個量是否為“真”時,0代表假,非0代表“真”。例如:

if(!x)

等價于if(x==0)4&&0||2=?113特別提示在邏輯表達式求解中,并不是所有的邏輯運算符都被執(zhí)行。a&&b只有a為真(非0)時,才需要判別b的值。a||b只要a為真(非0),就不必判斷b;只有a為假,才判別b。如當a=1,b=2,c=3,d=4,m=n=1時,執(zhí)行(m=a>b)&&(n=c>d);后n=?選擇結構114分支語句在程序的三種基本結構中選擇(分支)結構,根據條件的取值不同分別執(zhí)行不同的操作。C語言提供了兩種語句分別用于實現(xiàn)二分支和多分支。分別是IF語句

和SWITCH語句介紹這二種語句的語法結構和使用方法。選擇結構1155.3if語句if語句能實現(xiàn)所有的選擇結構例5.5將任意兩個整數(shù)m、n中的較大數(shù)送給x,較小數(shù)送給y,然后按大小順序輸出(設m、n的值由鍵盤輸入)分析:共分三步,

S1:輸入兩個整數(shù)給m和n。S2:判斷m、n的大小并分別給x和y賦值。

S3:輸出x和y。其中第二步用選擇結構.116main(){intm,n,x,y;

printf(“\npleaseentertwointegers:”);

scanf(“%d%d”,&m,&n);if(m>n){x=m;y=n;}/*復合語句*/

else{x=n;y=m;}

printf(“\nx=%d,y=%d”,x,y);}思考:若條件改為:m<n,如何實現(xiàn)?1171.If語句的一般形式:if(表達式)語句1else

語句2執(zhí)行過程:(如右圖)格式說明:語句1和語句2在語法上是一個語句,可以是簡單語句,也可以是復合語句。要特別注意復合語句中一對{}的正確使用。條件表達式語句1語句2YN1182.if語句的簡化形式例5.6從鍵盤接收一個字符,若為大寫字母,則將其轉換成小寫字母并輸出;否則輸出原字符。分析:判斷ch是大寫字母的條件是:ch在A~Z之間#include<stdio.h>main(){charch;

printf(“\nenteracharacter:”);

ch=getchar();getchar();if(ch>=’A’&&ch<=’Z’)/*判斷并處理*/

ch=ch+32;

putchar(ch);}119if語句的簡化形式if(表達式)語句1執(zhí)行過程如圖:例:輸入任意數(shù)n,輸出其絕對值。main(){floata;

scanf(“%f”,&a);if(a<0)a=-a;

printf(“\n|a|is:%f”,a);}

條件表達式語句1YN1203.if語句的嵌套當if語句中的語句1或語句2又是if語句時,就構成了if語句的嵌套嵌套的if語句能實現(xiàn)多分支結構。121假設m是一個整型數(shù)15,讓用戶從鍵盤上輸入所猜數(shù)字(用戶已知數(shù)的范圍是10~20),若猜對,則輸出“RIGHT”,否則,輸出”WRONG“,并指出所猜的數(shù)比m大還是小。分析:第一步,輸入猜測的數(shù)n。第二步,判斷并輸出結果:條件可以是“m等于n”,若條件成立,則輸出RIGHT;否則,需執(zhí)行兩步操作:①輸出WRONG,②判斷m、n的大?。簵l件可以是“n>m”;條件成立時輸出“big”;否則輸出“small”。例5.7猜數(shù)游戲:122main(){intm=15,n;

printf("\nguessanum:");

scanf("%d",&n);/if(m==n)printf("RIGHT");/*語句1*/

else{printf("\nWRONG");if(n>m)printf(“BIG”);/*語句2*/

elseprintf("SMALL");}}123例5.8某幼兒園只接收2~6歲的小孩,其中2~3歲編入小班,4~5歲編入中班,6歲編入大班。編程實現(xiàn),對輸入的任意一個年齡,輸出該編入什麼班,或者告知“不收“。分析:首先根據條件“年齡在2~6歲之間”判斷是“收”還是“不收“,若條件滿足,則執(zhí)行的操作為:(1)判斷該編入何班;否則,輸出“不收”。其次,分析(1)如何實現(xiàn)。提示:本例可用不同的程序實現(xiàn)。如將條件改為“年齡超出2~6歲”;或者從條件“年齡小于2”開始判斷。試編程實現(xiàn)。124main(){intage;

printf(“\nenterage:”);

scanf(“%d”,&age);if(age>=2&&age<=6)if(age<=3)/*語句1開始*/

printf(“\nsmallclass”);/*語句1_1*/

elseif(age<=5)/*語句1_2*/

printf(“\nmiddleclass”);else

printf(“\nbigclass”);/*語句1結束*/

else

printf(“\ncannotaccept”);/*語句2*/}125If語句中的語句1和語句2都可以包含if語句。If語句的嵌套結構中,因為else是可選項,所以要注意if與else的匹配。C語言規(guī)定:

else總是與其前面最近的、還沒有匹配過的if相匹配,并且是由里向外逐對對匹配。編程時,可以通過合理使用{}來明確if與else匹配關系。126例5.10:分析以下兩個程序,哪一個能實現(xiàn):從鍵盤上接收一個整數(shù),若該數(shù)為正偶數(shù),則輸出“positiveandeven.”;若為負數(shù),則輸出“negative”。提示:可畫出流程圖,即可看得很清楚。127程序(1):main(){intn;

printf(“\nenterainteger:”);

scanf(“%d”,&n);if(n>0)if(n%2==0)

printf(“positiveandeven.\n”);else

printf(“negative\n”);}128程序(2):main(){intn;

printf(“\nenterainteger:”);

scanf(“%d”,&n);if(n>0){if(n%2==0)

printf(“positiveandeven.\n”);}else

printf(“negative\n”);}1294.條件運算符使用if語句時,有時是根據條件給同一變量賦不同的值比如:main(){intx,y;

scanf(“%d”,&x);

if(x>0)y=x+1;elsey=x*x+1;

printf(“\nx=%d,y=%d”,x,y);}用C語言提供的條件運算符描述,比用if語句更簡練。上述if語句等價于:

y=x>0?x+1:x*x+1;130條件表達式的一般格式:表達式1?表達式2:表達式3計算過程:首先計算表達式1;若其值為真(非0),則計算表達式2,取表達式2的值作為整個條件表達式的值;否則,計算表達式3,取表達式3的值作為整個條件表達式的值。條件運算符:?:131優(yōu)先級:條件運算符的優(yōu)先級比關系運算符和算術運算符都低,比賦值運算符高。例如:y=x>0?x+1:x*x+1

等價于

y=((x>0)?(x+1):(x*x+1))說明:并不是所有的if語句都能用條件表達式實現(xiàn)。如if(n>0)a=6;elseb=8;132main()

{intn1,n2,n3,max;

printf("Pleaseinputthreenumbers:");

scanf("%d%d%d",&n1,&n2,&n3);

if(n1>n2)max=n1;

elsemax=n2;

if(n3>max)max=n3;

printf("max=%d\n",max);

}[案例]輸入任意三個整數(shù)n1、n2、n3,求三個數(shù)中的最大值。133main(){intn1,n2,n3,temp;

printf("Pleaseinputthreenumbers:");

scanf("%d%d%d",&n1,&n2,&n3);if(n1>n2){temp=n1;n1=n2;n2=temp;}if(n2>n3){temp=n2;n2=n3;n3=temp;}if(n1>n2){temp=n1;n1=n2;n2=temp;}

printf("Threenumbersaftersorted:%d,%d,%d\n",n1,n2,n3);}[案例]輸入任意三個數(shù)n1、n2、n3,按從小到大的順序排序輸出。選擇結構134SWITCH語句格式:switch(表達式){case常量表達式1:語句1;case常量表達式2:語句2;

case常量表達式n:語句n;

default語句n+1;}執(zhí)行順序:計算表達式的值;若值與某個常量表達式值相等,則轉到其后語句執(zhí)行;若值與所有常量表達式值都不等,則執(zhí)行default后語句;switch表達式常量1常量2常量3常量4其它語句1語句2語句3語句4語句5135舉例:百分制成績轉為五分制成績。輸入scorescore==100s=9S=score/10Switch(s)9876其它優(yōu)秀良好中等及格不及136main(){intscore,s;

printf(“Inputascore(0~100):”);

scanf(“%d”,&score);s=score/10;/*將成績整除10*/

switch(s){case10:case9:printf(“grade=A\n”); case8:printf("grade=B\n");case7:printf("grade=C\n");case6:printf("grade=D\n");default:printf(“grade=E\n”);}} 參考程序如下:137case后常量的值必須互不相同,否則會出現(xiàn)相互矛盾;case后面的常量表達式僅起語句標號作用,并不進行條件判斷。系統(tǒng)一旦找到入口標號,就從此標號開始執(zhí)行,不再進行標號判斷,所以必須加上break語句,以便結束switch語句。

各case及default子句的先后次序,不影響程序執(zhí)行結果;多個case子句,可共用同一語句(組)。說明:138main(){intscore,s;

printf(“Inputascore(0~100):”);

scanf(“%d”,&score);s=score/10;/*將成績整除10*/

switch(s){case10:case9:printf(“grade=A\n”);break; case8:printf("grade=B\n");break;case7:printf("grade=C\n");break;case6:printf("grade=D\n");break;default:printf(“grade=E\n”);}} 改進程序如下:選擇結構139程序舉例1、判斷某一年是否閏年,閏年的條件是:能被4整除、但不能被100整除,或者能被400整除。(使用IF的嵌套解決)設一標志變量leap,leap=1為閏年,leap=0為非閏年.輸入y如果y能被4整除則如果y能被100整除則如果y能被400整除則是閏年

否則不是閏年否則是閏年否則不是閏年140main(){intyear,leap=0; /*leap=0:預置為非閏年*/

printf("Pleaseinputtheyear:");

scanf("%d",&year);if(year%4==0){if(year%100!=0)leap=1;}else{if(year%400==0)leap=1;}if(leap)printf("%disaleapyear.\n",year);elseprintf("%disnotaleapyear.\n",year);}

參考程序如下:141main(){intyear;

printf("Pleaseinputtheyear:");

scanf("%d",&year);

if((year%4==0&&year%100!=0)||(year%400==0))

printf("%disaleapyear.\n",year);else

printf("%disnotaleapyear.\n",year);}利用邏輯運算能描述復雜條件的特點,可將上述程序優(yōu)化如下:142程序舉例2、求一元二次方程的解(使用if語句的嵌套解決)輸入a,b,c如果a=0則不是一元二次方程否則d=b*b-4*a*cp=-b/(2*a),q=sqrt(|d|)/(2*a)

如果d>0則輸出x1=p+q,x2=p-q

如果d==0則輸出x1=x2=p

如果d<0則輸出x1=p+iq,x2=p-iq143必要的注釋,可有效地提高程序的可讀性,從而提高程序的可維護性。在C語言源程序中,注釋可分為三種情況:(1)在函數(shù)體內對語句的注釋;(2)在函數(shù)之前對函數(shù)的注釋;(3)在源程序文件開始處,對整個程序的總體說明。加注釋的原則:如果不加注釋,理解起來就會有困難,或者雖無困難、但浪費時間。良好的源程序書寫風格──注釋144/*……(說明功能)*/

if(條件表達式) /*條件成立時的含義*/

{……}

溫馨提示

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

評論

0/150

提交評論