c語言程序設計與應用開發(fā)課件_第1頁
c語言程序設計與應用開發(fā)課件_第2頁
c語言程序設計與應用開發(fā)課件_第3頁
c語言程序設計與應用開發(fā)課件_第4頁
c語言程序設計與應用開發(fā)課件_第5頁
已閱讀5頁,還剩441頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第1章C語言概述本章要點:C語言的發(fā)展及特點C語言程序的格式C語言程序的構成C語言程序的基本要求C語言程序上機調試步驟和方法算法概述1.1C語言的發(fā)展及特點C語言是一種兼有匯編語言和高級語言特點的新語言,于20世紀70年代初期由貝爾實驗室研制。C語言的兩個標準ANSIC和ISOCC語言的編譯系統(tǒng)及其版本(TurboC,BorlandC等)C++語言是C語言的擴充和完善,是一種面向對象的程序設計語言1.1.1C語言的發(fā)展1.1.2C語言的特點C語言的主要特點如下:1.具有結構化控制語句如if…else、while、switch、for等語句2.語言簡潔,結構緊湊,使用方便靈活共有32個關鍵字,9條控制語句,書寫形式自由3.運算豐富,數(shù)據(jù)處理能力強42個運算符,表達式類型靈活多樣4.語言精練i+=1(i++);if(a)b;5.可移植性好與匯編語言相比

6.語言生成的代碼質量高,程序的執(zhí)行效率高

i+=2(i=i+2);7.能實現(xiàn)匯編語言的大部分功能,可以直接對硬件進行操作。(可寫系統(tǒng)軟件如:UNIX及應用軟件)另:C語言的其他優(yōu)點,同學們可在以后學習和實踐中體會1.2C語言程序的格式、構成及其基本要求先看幾個程序:例1.1

輸出“Howareyou!”main(){printf(“Howareyou!\n”);}程序的運行結果:Howareyou!例1.2

計算兩個給定整數(shù)的和main(){inta,b,sum;/*這是定義變量*/a=8;b=10;/*以下3行為C語句*/sum=a+b;printf(“Sumis%d\n”,sum);}程序的運行結果:Sumis18例1.3:從鍵盤輸入兩個整數(shù),并將最大的數(shù)顯示出來。#include<stdio.h> /*包含預處理語句*/intmax(intx,inty){intz;if(x>y)z=x;elsez=y;return(z);}main(){inta,b,c;

printf(“Pleaseinputtwointegers:\n”);scanf(“%d,%d”,&a,&b);

c=max(a,b);

printf(“max=%d\n”,c);}

程序運行情況:Pleaseinputtwointegers:8,5max=8通過以上例子可以看出:1.C程序是由函數(shù)構成的。每個程序由一個或多個函數(shù)組成,其中必須有且僅有一個主函數(shù)main()。函數(shù)容易實現(xiàn)程序的模塊化.2.一個可執(zhí)行的C語言程序總是從main函數(shù)開始執(zhí)行,而不論其在整個程序中的位置如何。3.每條語句和數(shù)據(jù)定義的最后必須有一個分號(;)。說明:在以下三種情況下不允許有分號:

a.所定義的函數(shù)的名稱后面不使用分號;

b.在右花括號“}”后面不使用分號;

c.預處理語句后面不使用分號。max();{……}while(i<=100){i++;s=s+i;};#include<math.h>;4.C對輸入輸出實行函數(shù)化。5.C程序書寫格式自由,一行內可以寫幾個語句,一個語句也可以分寫在多行上。6.可用/*……*/對C程序中的任何部分作注釋,注釋可以寫在程序的任何位置上,“/*”與“*/”也可不在同一行上。7.在C語言中,大小寫字母是有區(qū)分的(即大小寫敏感)。(C語言一般用小寫字母)

1.3C程序上機調試步驟和方法1.編輯:選擇適當?shù)木庉嫵绦?將C語言源程序通過鍵盤輸入到計算機中,并以文件的形式存入到磁盤中(.C)2.編譯:即將源程序翻譯成機器語言程序的過程。編譯出來的程序稱為目標程序(.OBJ)3.連接:編譯后生成的目標文件經(jīng)過連接后生成最終的可執(zhí)行程序(.EXE)4.運行:運行是將可執(zhí)行的目標程序投入運行,以獲取程序的運行結果;在操作系統(tǒng)中可以直接執(zhí)行擴展名為(.EXE)的文件

編輯編譯

出錯?連接出錯?執(zhí)行結果正確?

.C源程序

.OBJ目標程序

.EXE可執(zhí)行程序開始結束YYNYNN庫函數(shù)和其它目標程序在TurboC運行C程序的步驟:1.安裝TC編譯器:將:將tc的壓縮包的tc.rar文件夾復制到D盤,并解壓縮.2.運行TC.進入解壓縮后的tc文件夾,雙擊tc.exe(d:\tc)1.4算法要點:了解算法的基本概念掌握程序的基本結構程序包括:(1)對數(shù)據(jù)的描述數(shù)據(jù)結構(2)對數(shù)據(jù)處理的描述算法算法(algorithm)是對特定問題求解步驟的一種描述。程序=數(shù)據(jù)結構+算法+程序設計方法+編程語言1.4.1算法的概念算法應該具有如下特點:

有窮性:一個算法必須在執(zhí)行有窮步之后結束。確定性:算法的每一步必須是確切定義的。對于相同輸入必須得到相同結果。有效性:算法的每一步都是能夠實現(xiàn)的,即可操作的。輸入:算法有零個或多個輸入。有輸出:算法執(zhí)行完畢,必須有一個或若干個輸出結果。1.4.2算法的特性1.4.3算法的表示方法(1)自然語言描述法(2)傳統(tǒng)的流程圖表示常用符號有:(3)N-S流程圖表示(4)偽代碼表示算法(5)計算機語言表示算法起止框輸入/輸出框判斷框處理框流程線連接點一、順序結構

BA(a)AB(b)先執(zhí)行A操作,再執(zhí)行B操作,兩者是順序執(zhí)行關系。N-S結構流程圖1.4.4結構化程序設計二、選擇結構當P條件為真時,執(zhí)行A模塊,否則執(zhí)行B模塊。APB真假(a)P真假AB(b)三、循環(huán)結構當P條件成立時,反復執(zhí)行A,直到P為假。1.當型循環(huán)結構PA假真(a)當P為真A(b)當P為真2.直到型循環(huán)結構先執(zhí)行A操作,再判斷P是否為假,若P為假,再執(zhí)行A,直到P為真為止。AP假真(a)A直到P為真(b)算法舉例1:對一個大于2的正整數(shù),判斷它是不是一個素數(shù)。方法:將n(其中n>2)作為被除數(shù),將2到(n-1)各個整數(shù)輪流作為除數(shù),如果都不能被整除,則n為素數(shù)。算法表示如下:S1:輸入n的值S2:2i(i作為除數(shù))

S3:n被i除,得余數(shù)rS4:如果r等于0,表示n能被i整除,則打印n“不是素數(shù)”,算法結束;否則執(zhí)行S5S5:i+1iS6:如果in-1,返回S3;否則,打印n“是素數(shù)”,算法結束。算法舉例2:求1-1/2+1/3–1/4+…+1/99–1/100。S1:

1signS2:1sumS3:2denoS4:(-1)*signsignS5:sign*(1/deno)termS6:sum+termsumS7:deno+1denoS8:若deno100返回S4;否則算法結束。算法舉例3:用偽代碼表示算法:用介于自然語言和計算機語言之間的文字和符號來描述算法

BEGIN1=>iwhile(i

50){inputni和gi

i+1=>I}

1=>iwhile(i

50){if(gi>=80)printni和gi

i+1=>i}END

算法舉例4:

用計算機語言表示算法

求1-1/2+1/3–1/4+…+1/99–1/100。S1:

1sS2:1sumS3:2dS4:(-1)*ssS5:s*(1/d)tS6:sum+tsumS7:d+1dS8:若d100返回S4;否則算法結束。main(){ints=1;floatd=2.0,sum=1.0,t;while(d<=100){s=-s;t=s/d;sum=sum+t;d=d+1;}printf(“%f”,sum);}242.1C語言的數(shù)據(jù)類型整型字符型實型(浮點型)枚舉類型單精度型雙精度型數(shù)組類型結構體類型共用體類型構造類型基本類型指針類型空類型數(shù)據(jù)類型252.2常量、變量和標識符2.2.1標識符C語言中的標識符可以分為系統(tǒng)定義標識符和用戶定義標識符。系統(tǒng)定義標識符關鍵字關鍵字是C語言系統(tǒng)使用的具有特定含義的標識符,不能作為預定義標識符和用戶定義標識符使用。C語言定義了32個關鍵字,如表2.1所示。2) 預定義標識符預定義標識符也是具有特定含義的標識符,包括系統(tǒng)標準函數(shù)名和編譯預處理命令等,如scanf、printf、define和include等都是預定義標識符。

26表2.1C語言中的關鍵字autobreakcasecharconstcontinuedefaultdodoubleelseenumexternfloatforgotoifintlongregisterreturnshortsignedsizeofstaticstructswitchtypedefunsignedunionvoidvolatilewhile關鍵字必須用小寫字母;不允許使用關鍵字為變量、數(shù)組和函數(shù)等操作對象命名。

272.用戶定義標識符用戶定義標識符用于對用戶使用的變量、數(shù)組和函數(shù)等操作對象進行命名。例如將一個變量命名為a,將一個數(shù)組命名為date,將一個函數(shù)命名為fun等。用戶標識符命名時要注意:

(1) C語言對英文字母的大小寫敏感,即同一字母的大小寫被認為是兩個不同的字符。例如total與TOTAL是不同的標識符。

(2) 標識符必須由字母或下劃線開頭,并且除了字母、數(shù)字和下劃線外,不能含有其他字符。

(3) 標識符的命名要見名知意,即通過變量名就知道變量值的含義。

(4) 標識符的有效長度隨系統(tǒng)而異,但至少前8個字符有效。如果超長,則超長部分被舍棄。282.2.2常量1.定義:在程序執(zhí)行期間,其值不可改變的量稱為常量2.類型:數(shù)值常量例如:5,-10,3.14等符號常量即用一個符號代表一個常量例2.1用標識符代表常量。#definePI3.1415926main(){

floats,r;

r=5;

s=PI*r*r;

printf("%f",s);}29說明:符號常量必須先定義后才能用它表示一個數(shù)值。符號常量的值在其作用域內不能改變,也不能再被賦值。符號常量名習慣用大寫字母表示。302.2.3變量1.變量概念:程序執(zhí)行期間值可以改變的量。

命名規(guī)則:

變量名由標識符表示,只能由字母、數(shù)字和下劃線三種字符組成,且第一個字符必須為字母或下劃線。例如:以下為不合法的變量名:

M.D.Jess,1add,age&,5th,lotus-1-2-3,cd*ef,int2.變量的定義要使用變量,必須為變量命名。變量名是用戶自己定義的標識符,習慣上由小寫字母組成。變量定義的一般格式為:數(shù)據(jù)類型標識符變量名1,變量名2,…,變量名n;

inta;

/*定義了整型變量a*/313.變量的初始化C語言允許在定義變量的同時給變量賦值,這稱為變量的初始化。變量初始化的一般格式為:數(shù)據(jù)類型標識符變量名1=初值1,變量名2=初值2,…,變量名n=初值n;C語言允許在定義變量的同時初始化變量,如:int a=2; /*指定a為整型變量,初值為2*/float f=3.45; /*指定f為實型變量,初值為3.45*/char c=‘A'; /*指定c為字符變量,初值‘A'*/也可以使被定義的變量的一部分賦初值,如:inta=1,b=-3,c;32在C語言中,變量必須強制定義,其目的是:1、凡未被事先定義的,不作為變量名。2、每一個變量被指定為一確定的類型,在編譯時就能為其分配相應的存儲單元。3、指定每一個變量為一確定的類型,在編譯時據(jù)此檢查該變量所進行的運算是否合法。*選變量名時,要做到“見名知意”例如:namest_agexmnlclasssum*大小寫字母是兩個不同的字符,C變量名習慣用小寫字母表示。*建議變量名的長度不要超過8個字符。注意:332.3整型數(shù)據(jù)2.3.1整型常量1.整型常量的形式十進制整數(shù):由數(shù)字(0-9)和正負號表示

例如:123、-456、0等八進制整數(shù):以0開頭數(shù)是八進制數(shù)例如:

0123即(123)8=(83)10(123)8=182+281+380=(83)10十六進制整數(shù):以0x或0X開頭,例如:

0x123即(123)16=(291)10main(){inta=0123;b=0x123; /*0123是八進制數(shù),0x123是十六進制*/printf("a=%d,b=%d",a,b);}程序運行結果為:a=83,b=291342.整型常量的類型我們已知整型變量可分為int、shortint、1ongint和unsignedint、unsignedshort、unsignedlong等類別。(1) 一個整常量,如果其值在-32768~+32767范圍內,則認為它是int型??梢詫⑺x值給int型和1ongint型變量。一個整常量,如果其值超過了上述范圍,而在-2147483648~2147483647范圍內,則認為它是1ongint型。(3) 如果某一計算機系統(tǒng)的C版本確定的shortint與int型數(shù)據(jù)在內存中占據(jù)的長度相同,則它的表示范圍與int型相同。(4) 常量中無unsigned型,但一個非負值的整常量可以賦值給unsigned型整變量,只要它的范圍不超過變量的表示范圍即可。(5) 在一個整常量后面加一個字母l或L則認為是1ongint型常量,例如123l、432L,這往往用于函數(shù)調用中。352.3.2整型變量的分類

基本型:以int

表示短整型:以shortint

或short

表示

1.類型長整型:以longint

或long

表示

(123l、123L)無符號基本型(unsignedint)

無符號型無符號短整型(unsignedshort)

無符號長整型(unsignedlong)(-32768~32767)一個無符號整型變量中可以存放的正數(shù)的范圍比一般整型變量中正數(shù)的范圍擴大一倍。inti;/*變量i的數(shù)值范圍:-32768~32768*/unsignedintj;/*變量j的數(shù)值范圍:0~65535*/1.整型變量的類型36

整型變量的字長short型∶字長16位(2個字節(jié))。long型∶字長32位(4個字節(jié))。int型∶隨編譯程序而定(可以是2個字節(jié),也可以是4個字節(jié))C要求long型數(shù)據(jù)長度不短于int型,

short型不長于int型。(short<=int<=long)long型可以得到大范圍的數(shù)據(jù),但同時會降低運算速度,因此除非不得已,不要隨便使用long型。37整型數(shù)據(jù)的溢出:main(){inta,b;a=32767;b=a+1;printf(“”%d,%d”,a,b);}運行結果:32767,-32767改進:將變量a和b改成long型,并按%ld格式輸出。382.整型變量的定義前面已提到,C規(guī)定在程序中所有用到的變量都必須在程序中指定其類型,即“定義”。這是和BASIC、FORTRAN不同的,而和PASCAL相類似。例如:inta,b; /*指定變量a,b為整型*/unsignedshortc,d; /*指定變量c,d為無符號短整型*/1onge,f; /*指定變量e,f為長整型*/對變量的定義,一般是放在一個函數(shù)的開頭部分(也可以放在程序中間,但作用域只限于某一部分程序)。

例2.4整型變量的定義與使用。main(){inta,b,c,d; /*指定a,b,c,d為整型變量*/unsignedu; /*指定u為無符號整型變量*/a=20;b=-40;u=10;c=a+u;d=b+u;printf("c=%dd=%d",c,d);}運行結果為:c=30,d=-30392.4實型數(shù)據(jù)2.4.1實型常量1.實型常量的形式(兩種):

十進制數(shù)形式:由數(shù)字和小數(shù)點及正負號組成。

(注意:必須有小數(shù)點)

例如:3.148.6-23.

指數(shù)形式:由數(shù)字、小數(shù)點、字母e或E及正負號組成。

(注:e或E之前必須有數(shù)字,且后指數(shù)必須為整數(shù))例如:正確:3.5E-52e3錯誤:E23.6e3.5.e62.實型常量的類型多數(shù)C編譯系統(tǒng)對實型常量按雙精度(double)類型處理,以提高運算精度。此時系統(tǒng)為實型常量分配8個字節(jié)的存儲空間。如果在實型常量后加字母f或F,則強調表示該數(shù)是float型常量,這時系統(tǒng)會為其分配4個字節(jié)的存儲空間。402.4.2實型變量實型變量可分為:

單精度(float型)如:floatx,y;

雙精度型(double型)如:doublea,b,c;說明:1.float型變量在內存中占4個字節(jié);double型變量在內存中占8個字節(jié)。2.單精度實數(shù)提供7位有效數(shù)字;雙精度實數(shù)提供15~16位有效數(shù)字。3.一個實型常量不分float和

double型,一個實型常量可以賦給一個float型或

double型變量,并根據(jù)變量的類型截取實型常量中相應的有效位數(shù)字。

例如:

floata;doubleb;a=123456.789e5;b=123456.789;

413.5字符型數(shù)據(jù)3.5.1字符常量

1.字符常量:用單引號括起來的一個字符。例如:‘a(chǎn)’‘B’‘#’‘!’2.轉義字符:指不能用符號直接表示的字符常量。將反斜杠(\)后面的字符轉變成另外的意義。

如‘\n’中的“n”不代表字母n而作為“換行”符。例如:‘\n’換行‘\t’橫向跳格(水平制表)‘\b’退格‘\v’豎向跳格(垂直制表)‘\r’回車‘\f’走紙換頁‘\a’報警‘\0’空字符main(){printf("Y\b=\n");}運行結果:程序運行時在屏幕上顯示結果:=程序運行時在打印機上輸出結果:¥

42

注意:字符常量首尾的單引號是定界符,不占存儲空間。在C語言中,‘a(chǎn)’和a是不同的。前者代表字符常量,后者代表一個標識符?!產(chǎn)’和‘A’是不同的字符常量。前者存儲的是小寫字母a的ASCII碼值為97,后者存儲的是大寫字母A的ASCII碼值為65。轉義字符代表一個字符,在內存中只占一個字節(jié)的存儲空間。轉義字符‘\0’就是ASCII碼值為0的字符,常用于表示字符串結束的標志符?!甛ddd’形式的轉義字符是用ASCII碼(八進制數(shù))表示的一個字符,例如‘\101’代表字符‘A’,‘012’代表“換行”?!甛xhh’形式的轉義字符也代表一個字符,反斜杠后必須以小寫字母x開頭,后面的兩位數(shù)字為十六進制數(shù)。例如,‘\xa’和‘\xA’都代表回車換行符,等價于轉義字符‘\n’。433.5.2字符變量定義形式:char

標識符1,標識符2,…,標識符n

例如:charc1,c2,c3,ch;c1=‘a(chǎn)’;c2=‘b’;c3=‘c’;ch=‘d’;說明:1、字符變量在內存中占一個字節(jié)。2、在內存中,是把字符對應的ASCII碼值放到存儲單元中.3、字符型數(shù)據(jù)與整型數(shù)據(jù)之間可以通用.44main(){charc1,c2;c1=97;c2=98;printf(“%c%c\n”,c1,c2);printf(“%d%d\n”,c1,c2);}輸出結果:ab9798main(){inti;charc;i=‘a(chǎn)’;c=97;printf(“%c,%d\n”,c,c);printf(“%c,%d\n”,i,i);}輸出結果:a,97a,97452.5.3字符串常量1.定義:括在一對雙引號之內的字符序列或轉義字符序列稱為字符串常量。例如:“Howareyou!”“a”“*abc\n\t”2.存儲:字符串中的字符依次存儲在內存中一塊連續(xù)的區(qū)域內,并且把空操作字符‘\0’自動附加到字符串的尾部作為字符串的結束標志。故字符個數(shù)為n的字符串在內存中應占n+1個字節(jié)。例:c=“china”

china\046‘b’與‘B’是否相同?‘b’與“b”是否相同?b為98,B為66'b'是字符常量,“b"是字符串常量思考?注意:字符串常量首尾的雙引號是定界符,不屬于字符串的內容。如果字符串本身包括了雙引號或反斜杠,必須使用轉義字符。不要將字符常量與字符串常量混淆,‘a(chǎn)’是字符常量,“a”是字符串常量,二者不同。前者只占一個字節(jié)的存儲空間,存放字符‘a(chǎn)’的ASCII碼值;后者占兩個字節(jié)的存儲空間,分別存放字符‘a(chǎn)’和字符串結束標志‘\0’。字符串常量中包含轉義字符時,一定要注意其長度的計算。在寫字符串時不必加‘\0’,字符‘\0’是系統(tǒng)自動加上的。

472.6算術運算符和算術表達式2.6.1基本的算術運算符和算術表達式1.基本的算術運算符

在C語言中,基本的算術運算符有5個:

+(加法運算符,正值運算符),-(減法運算符,負值運算符),*(乘法運算符),/(除法運算符),%(模運算符)

注意:除法運算符“/”的運算對象可以是各種類型的數(shù)據(jù),但是當進行兩個整型數(shù)據(jù)相除時,運算結果也是整型數(shù)據(jù),即只取商的整數(shù)部分;而操作數(shù)中有一個為實型數(shù)據(jù)時,則結果為雙精度實型數(shù)據(jù),即double型。例如,5.0/10的運算結果是0.5,5/10的運算結果是0,而不是0.5,10/4的運算結果是2。求余運算符“%”要求運算對象必須是整型操作數(shù),它的功能是求兩個操作數(shù)相除的余數(shù),余數(shù)的符號與被除數(shù)的符號相同。例如,11%3的值為2,-11%3的值為-2,2%-5的值為2。

482.算術表達式

算術表達式是指用算術運算符和括號將運算對象(也稱操作數(shù),如常量、變量、函數(shù)等)連接起來、符合C語法規(guī)則的式子,如:

a*b/c-1.5+'a'

在算術表達式中,運算對象可以是各種類型的數(shù)據(jù),包括整型、實型或字符型的常量、變量及函數(shù)調用。

2.6.2算術運算符的優(yōu)先級、結合性

在5個算術運算符中,*、/和%的優(yōu)先級相同且高于+、-。當運算符的優(yōu)先級相同的情況下,這5個運算符的結合方向為從左至右(先左后右,簡稱左結合)。例:

a-b+c

由于算術運算符為左結合,故先執(zhí)行a-b,再執(zhí)行加c的運算。492.7賦值運算符和賦值表達式2.7.1基本賦值運算符(=)形式:變量名=常量或表達式作用:將右邊常量或表達式的值賦給左邊的變量例如:

b=c+d

賦值符號“=”就是賦值運算符,它的作用是將一個數(shù)據(jù)賦給一個變量。如x=5的作用是執(zhí)行一次賦值操作,將常量5賦給變量x。結合方向:從右向左。例如:“a=b=c=10;”等價于“a=(b=(c=10));”即先將常量10賦給變量c,然后再將10賦給變量b,最后將10賦給變量a。注意:如果表達式類型與左邊的變量的類型不匹配,自動進行類型轉換。

502.7.2復合賦值運算符復合賦值運算符:在賦值符“=”之前加上其它運算符共有10種復合賦值運算符

+=,-=,*=,/=,%= /*復合算術運算符5個*/&=,^=,|=,<<=,>>= /*復合位運算符5個*/例如:a+=3a=a+3x*=y+3x=x*(y+3)注意,a=a+b如果b是包含若干項的表達式,則相當于它有括號。如:x%=y+3x%=(y+3)x=x%(y+3) /*不要寫成x=x%y+3*/

512.8逗號運算符和逗號表達式1.逗號運算符:即“,”優(yōu)先級:為所有運算符中級別最低的。2.逗號表達式形式:表達式1,表達式2,……,表達式n

求解過程:順次求解表達式1,表達式2……

最后求解表達式n。逗號表達式的值為表達式n的值。例如:a=3*4,a*5

a=3*4,a*5,a+5注意:并不是任何地方出現(xiàn)的逗號都是作為逗號運算符,函數(shù)參數(shù)也是用逗號來間隔的6017522.9自增運算符、自減運算符及C語言運算符的優(yōu)先級2.9.1自增運算符

自增運算符(++)是單目運算符,其作用是使單個變量的值增1。自增運算符種類有兩種:前置++i,先執(zhí)行i+1,再使用i值;后置i++,先使用i值,再執(zhí)行i+1。例如:

j=3;k=++j;則k=4,j=4;

j=3;k=j++;則k=3,j=4。532.9.2自減運算符

自減運算符(--)是單目運算符,其作用是使單個變量的值減1。自減運算符種類也有兩種:前置--i,先執(zhí)行i-1,再使用i值;后置i--,先使用i值,再執(zhí)行i-1。

例如:

j=3;k=--j;則k=2,j=2;

j=3;k=j--;則k=3,j=2。注意:自增運算符(++)、自減運算符(--),只能用于變量,不能用于常量和表達式。例如,5++、--(a+b)等都是非法的。++和--的結合方向是“自右至左”,其優(yōu)先級高于算術運算符。例如i=3,-i++相當于-(i++),因此表達式的值為-3,i=4。自增運算符、自減運算符,常用于循環(huán)語句中,使循環(huán)控制變量加(或減)1,以及指針變量中,使指針指向下(或向上)一個地址。542.9.3C語言運算符的優(yōu)先級與結合性C的運算符有以下幾類。(1) 算術運算符 (+-*/%)(2) 關系運算符 (><==>=<=!=)(3) 邏輯運算符 (?。Γ|)(4) 位運算符 (<<>>~|^&)(5) 賦值運算符 (=及其擴展賦值運算符)(6) 條件運算符 (?:)(7) 逗號運算符 (,)(8) 指針運算符 (*和&)(9) 求字節(jié)數(shù)運算符 (sizeof)(10) 強制類型轉換運算符 (類型)(11) 分量運算符 (.->)(12) 下標運算符 ([])(13) 其他(如函數(shù)調用運算符())55

C語言規(guī)定了運算符的優(yōu)先級和結合性。運算符的優(yōu)先級別從高到低依次為:初等運算符,如()、[]、->、.;單目運算符,如!、~、++、--、*(指針)、&、(類型);算術運算符(先乘除,后加減);關系運算符;邏輯運算符(不包括!);條件運算符;賦值運算符;逗號運算符。所謂結合性是指,當一個操作數(shù)兩側的運算符具有相同的優(yōu)先級時,該操作數(shù)是先與左邊的運算符結合,還是先與右邊的運算符結合。自左至右的結合方向,稱為左結合性;反之,稱為右結合性。結合性是C語言的獨有概念。除單目運算符、賦值運算符和條件運算符是右結合性外,其他運算符都是左結合性。562.10不同類型數(shù)據(jù)間的混合運算1.隱式類型轉換

隱式類型轉換主要又可分為兩類:算術轉換和賦值轉換。

(1) 算術轉換

當表達式中的運算對象不同時,系統(tǒng)會進行類型的自動轉換。轉換的基本原則是:自動將精度低、表示范圍小的運算對象類型向精度高、表示范圍大的運算對象轉換。

(2) 賦值轉換

賦值轉換主要出現(xiàn)在賦值表達式中,不管賦值運算符右邊是什么類型,都要轉換為賦值運算符左邊的類型。若賦值運算符右邊的值表示范圍更大,則左邊賦值所得到的值將失去右邊數(shù)據(jù)的精度。572.強制類型轉換C語言提供了強制類型轉換運算符來實現(xiàn)強制類型轉換。

格式:

(類型)表達式例如:(int)3.5注意:在進行類型轉換時,操作數(shù)的值并不發(fā)生改變,改變的只是表達式值的類型。例如:floatx=3.5;i=(int)x;/*i的值為3*/使用強制轉換類型得到的是一個所需類型的中間量,原表達式類型并不發(fā)生變化。例如,(double)a只是將變量a的值轉換成一個double型的中間量,其數(shù)據(jù)類型并未轉換成double型。(int)(x+y);/*將x+y的值轉換為int類型*/(int)x+y;/*將x的值轉換為int類型,再與y相加*/3.1C語句概述一、C程序結構C程序源程序文件1源程序文件2源程序文件n??????預處理命令全局變量聲明函數(shù)1函數(shù)n??????函數(shù)首部函數(shù)體局部變量聲明執(zhí)行語句二、C語句概述C語句分類:

1.控制語句

2.函數(shù)調用語句

3.表達式語句

4.空語句

5.復合語句

一條完整的C語句必須以“;”結束?!?”是一個語句不可缺少的一部分。1.控制語句:完成一定的控制功能。C有9種控制語句:⑴if()~else~(條件語句)⑵for()~(循環(huán)語句)⑶while()~(循環(huán)語句)⑷do~while()(循環(huán)語句)⑸continue(結束本次循環(huán)語句)⑹break(中止執(zhí)行switch或循環(huán)語句)⑺switch(多分支選擇語句)⑻goto(轉向語句)⑼return(從函數(shù)返回語句)2.函數(shù)調用語句

由一次函數(shù)調用加一個“;”構成。如:printf(“HelloWorld!”);函數(shù)調用分號3.表達式語句

由表達式加上“;”構成。如:x+4*y;算術表達式語句

4*7,4+8;逗號表達式語句

x=4*7;賦值表達式語句(賦值語句)4.空語句

由一個“;”構成。即:;

作用:①程序轉向點;②什么也不做的循環(huán)體。while(i<=11);5.復合語句

用{}括起的一組語句。如:if(x1>x2){y=x1*x1+x2;printf("y=%d",y);}不能省略不能加“;”

說明:(1)復合語句中的每一個語句還可以是復合語句;

(2)復合語句盡管可由多個語句組合,但它只相當于一個語句,在任何單一語句可以存在的地方,復合語句都可以存在。

(3)在復合語句內,不僅可以有執(zhí)行語句,還可以有定義部分,定義部分應該出現(xiàn)在可執(zhí)行語句的前面。3.2數(shù)據(jù)的輸出一、數(shù)據(jù)輸入輸出的概念計算機的輸入輸出是以計算機主機為主體而言。輸入:從外部通過輸入設備(如,鍵盤、磁盤、光盤、掃描儀等)向計算機輸入數(shù)據(jù)。輸出:從計算機向外部設備(如,顯示屏、打印機、磁盤等)輸出數(shù)據(jù)。二、數(shù)據(jù)輸入輸出在C語言中的實現(xiàn)1.調用輸入輸出函數(shù)實現(xiàn)輸入輸出操作

C語言本身不提供輸入輸出語句,輸入和輸出操作是通過調用C語言庫函數(shù)中輸入輸出函數(shù)來實現(xiàn)的。如:putchar函數(shù)——輸出字符

getchar函數(shù)——輸入字符

printf函數(shù)——格式輸出

scanf函數(shù)——格式輸入

puts函數(shù)——輸出字符串

gets函數(shù)——輸入字符串1、C語言庫函數(shù)已被編譯成目標文件(二進制形式)2、源程序必須先編譯成目標文件。源程序中的輸入輸出函數(shù)等庫函數(shù),在編譯時并不被翻譯成目標指令。3、生成好的目標文件(.OBJ)必須與與系統(tǒng)的函數(shù)庫(以及其他的目標文件)進行連接,,形成可執(zhí)行文件(EXE)4、運行EXE文件時,調用已被連接的函數(shù)庫中的系統(tǒng)函數(shù)。2.文件開頭應有“#include”命令

在調用標準輸入輸出庫函數(shù)時,文件開頭應有預編譯命令:

#include<stdio.h>

或#include“stdio.h”

其中,stdio.h是“頭文件”,包含了與用到的標準輸入輸出函數(shù)有關的信息。

系統(tǒng)允許在使用printf和scanf兩個函數(shù)時可不加“#include”命令。3.3字符數(shù)據(jù)的輸入與輸出一、putchar函數(shù)(字符輸出函數(shù))一般格式:putchar(c)必須有預編譯命令∶#include<stdio.h>功能∶從終端輸出一個字符,且轉換成ASCII

碼返回。說明:其中c可以是字符型常量、字符型變量、整型常量、整型變量表達式。一、putchar函數(shù)(字符輸出函數(shù))例:#include<stdio.h>main(){chara,b,c;a=‘B’;b=‘O’;c=‘Y’;putchar(a);putchar(b);putchar(c);putchar(‘\’’);}輸出結果:BOY’#include”stdio.h”main(){charc;c=getchar();putchar(c);}a例:一般格式:getchar()——沒有參數(shù)必須有預編譯命令∶#include<stdio.h>功能∶從終端輸入一個字符。a二、getchar函數(shù)(字符輸入函數(shù))3.5格式輸入輸出函數(shù)printf();scanf();格式字符說明d,i用來輸入有符號的十進制整數(shù)u用來輸入無符號的十進制整數(shù)o用來輸入無符號的八進制整數(shù)x,X用來輸入無符號的十六進制整數(shù)c用來輸入單個字符s用來輸入字符串f用來輸入實數(shù)(小數(shù)或指數(shù))e,E,g,G與f作用相同,e與f,g可以互相替換4.5.1printf函數(shù)(格式輸出函數(shù))功能:向終端輸出若干個任意類型的數(shù)據(jù)。(一)printf函數(shù)的一般格式printf(格式控制,輸出表列)如果在printf函數(shù)調用之后加上“;”,就構成了輸出語句。例如:printf("a=%d,b=%d",a,b);舉例:main(){inta=3,b=4;printf(“a=%db=%d\n”,a,b);}輸出結果:a=3b=4格式說明(格式字符)普通字符輸出表列轉義字符main(){charc1=‘a(chǎn)’,c2=‘b’,c3=‘c’,c4=‘101’,c5=‘116’;printf(“a%cb%c\tc%c\tabc\n”,c1,c2,c3);printf(“\t\b%c%c”,c4,c5);}aabbccabcAN(二)格式字符

對不同類型的數(shù)據(jù)用不同的格式字符。1.d格式符——用來輸出十進制整數(shù)。(1)%d:按整型數(shù)據(jù)的實際長度輸出。如:inta=123;printf(“%d”,a);

結果:123(2)%md:m為指定的輸出字段的寬度。若數(shù)據(jù)位數(shù)小于m,則左端補以空格;若大于

m,則按實際位數(shù)輸出。(3)%ld:輸出長整型數(shù)據(jù)。也可以對長整型數(shù)據(jù)指定字段寬度。2.o格式符——以8進制數(shù)形式輸出整數(shù).

輸出的數(shù)值不帶符號,即將符號也一起作為八進制數(shù)的一部分輸出。

如:inta=-1;printf(“%d,%o”,a,a);

結果:-1,177777

o格式符同d格式符一樣,可以輸出長整型數(shù)據(jù),也可以指定字段寬度。11111111111111113.x格式符——以16進制數(shù)形式輸出整數(shù)。同樣不會出現(xiàn)負的十六進制數(shù)。4.u格式符——以十進制形式輸出unsigned型數(shù)據(jù)如:main(){unsignedinta=65535;intb=-2;printf(“a=%d,%o,%x,%u\n”,a,a,a,a);printf(“b=%d,%o,%x,%u\n”,b,b,b,b);}輸出結果:a=-1,177777,ffff,65535b=-2,177776,fffe,655345.

C格式符——用來輸出一個字符。

一個整數(shù),只要它的值在0~255范圍內,也可以用字符形式輸出,在輸出前,將該整數(shù)轉換成相應的ASCII字符;反之,一個字符數(shù)據(jù)也可以用整數(shù)形式輸出。如:main(){charc=‘a(chǎn)’;inti=97;printf(“%c,%d\n”,c,c);printf(“%c,%d\n”,i,i);}

輸出結果:a,97a,976.s格式符——用來輸出一個字符串。(1)%s:按原長度輸出字符串。如:printf(“%s”,“CHINA”)

輸出結果:CHINA(2)%ms:輸出的字符串占m列,如字符串本身長度大于m,則突破m的限制,將字符串全部輸出,若串長小于m,則左補空格。(3)%–ms:如果串長小于m,則在m列范圍內,字符串向左靠,右補空格。(4)%m.ns:輸出占m列,但只取字符串中左端n個字符。輸出在列的右側,左補空格。如果n>m,則自動取值,即保證個字符正常輸出。(5)%–m.ns,其中m、n含義同上,n個字符輸出在m列范圍的左側,右補空格。如:printf(“%3s,%7.2s,%.4s,%-5.3s\n”,“CHINA”,“CHINA”,“CHINA”,“CHINA”);輸出結果:CHINA,CH,CHIN,CHI7.f格式符——以小數(shù)形式輸出實數(shù)。(1)%f:不指定字段寬度,由系統(tǒng)自動指定,使整數(shù)部分全部如數(shù)輸出,并輸出6位小數(shù)。注意float型和double型數(shù)據(jù)的有效位數(shù),如:floatx=123456.123;printf(“%f”,x);

輸出結果:123456.125000main(){doublex,y;x=1111111111111.111111111;y=1111111111111.111111111;printf(“%f”,x+y);}2222222222222.222170(2)%m.nf:指定輸出的數(shù)據(jù)共占m列,其中有n

位小數(shù)。若數(shù)據(jù)長度小于m,則左端補空格。(3)%–m.nf:與%m.nf基本相同,只是使輸出的數(shù)值向左端靠,右端補空格。如:floatf=123.456;printf(“%10.2f,%-10.2f”,f);

輸出結果:

123.46,123.468.e格式——以指數(shù)形式輸出實數(shù)。

(1)%e如:printf(“%e”,123.456);

輸出結果:1.234560e+0026位3位一般共占13列寬度(2)%m.ne和%–m.ne:m、n和“–”字符含義與前相同。此處n指數(shù)據(jù)的數(shù)字部分(又稱尾數(shù))

的小數(shù)位數(shù)。9.g格式符——用來輸出實數(shù),它根據(jù)數(shù)值的大小,自動選f格式或e格式(選擇輸出時占寬度較小的一種),且不輸出無意義的零。如:f=123.468;

printf(“%f,%e,%g”,f,f,f);輸出如下:123.468000,1.234680e+002,123.46810列13列如:f=123.468;

printf(“%f,%e,%g”,f,f,f);輸出如下:123.468000,1.234680e+002,123.46810列二、scanf函數(shù)(格式輸入函數(shù))(一)scanf(格式控制,地址表列)1015main(){inta,b,c;scanf(“%d,%d”,&a,&b);printf(“a=%d,b=%d”,a,b);輸入:10,15輸出:a=10,b=15ab如:inta,b,c;scanf(“%d%d%d”,&a,&b,&c);輸入形式:1017181inta,b,c;scanf(“%d,%d,%d\n”,&a,&b,&c);輸入形式:10,11,12

scanf(“%3d%3d%c”,&a,&b,&ch);

輸入形式:123456abc

結果:a=123b=456ch=‘a(chǎn)’scanf(“%d%d%c”,&a,&b,&ch);

輸入形式:123456abc

結果:a=123b=456ch=‘a(chǎn)’main(){charc1,c2;scanf(“c1=%c,c2=%c”,&c1,&c2);printf(“%c%c”,c1,c2);}輸入數(shù)據(jù):c1=a,c2=b輸出數(shù)據(jù):abmain(){intx,y,z;charch;scanf(“%7.2d%d%d%c”,x,y,z,ch);}main(){intx,y;scanf(“%5d,%3d”,&x,&y);}輸入數(shù)據(jù):345,567

有錯嗎?1.%后的“*”附加說明符,用來表示跳過它相應的數(shù)據(jù)。如:scanf(“%2d,%*3d,%2d”,&a,&b);

輸入:12,456,67

結果:a=12b=672.輸入數(shù)據(jù)時不能規(guī)定精度。╳

Scanf(“%7.2f”,&a);3、scanf(“a=%d,b=%d”,&a,&b);

輸入:a=12,b=134、scanf(“%c%c%c”,&a,&b,&c);輸入:abc

空格和轉義字符都作為有效字符輸入說明:main(){inta,b;floatx,y;charc1,c2;scanf(“a=%db=%d”,&a,&b);scanf(“%f%e”,&x,&y);scanf(“%c%c”,&c1,&c2);printf(“%d,%d,%f,%f,%c,%c”,a,b,x,y,c1,c2);}輸入數(shù)據(jù):a=10b=201010ab輸出數(shù)據(jù):10,20,10.00000,20.00000,a,b輸入方式2:a=10b=201020abmain(){inta,b;floatx,y;charc1,c2;scanf(“a=%db=%d”,&a,&b);scanf(“x=%fy=%e”,&x,&y);scanf(“c1=%cc2=%c”,&c1,&c2);printf(“%d,%d,%f,%f,%c,%c”,a,b,x,y,c1,c2);}輸入數(shù)據(jù):a=10b=20x=10y=10c1=ac2=b輸出數(shù)據(jù):10,20,10.00000,20.00000,a,b3.4順序結構程序設計(順序結構)(選擇結構)(循環(huán)結構)特點:程序按語句從上到下的排列順序依此執(zhí)行,每條語句必須執(zhí)行且只能執(zhí)行一次,沒有執(zhí)行不到或執(zhí)行多次的語句。例如:已知圓柱體半徑6米,高7米,求體積。#definePI3.1415main(){floatr,h,s,v;r=6;h=7;s=PI*r*r;v=s*h;printf(“V=%f\n”,v);}例3.1輸入三角形的三條邊,求三角形的面積。分析:已知∶三角形的三條邊a,b,c。求解∶三角形的面積area。計算公式∶設s=(a+b+c)/2area=開始給a,b,c賦值計算s=(a+b+c)/2計算area=結果輸出結束#include<math.h>main(){floata,b,c,s,area;scanf(“%f%f%f”,&a,&b,&c);s=(a+b+c)/2.0;area=sqrt(s*(s-a)*(s-b)*(s-c));printf(“a=%fb=%fc=%fs=%f”,a,b,c,s);printf(“area=%f”,area);}例3.2從鍵盤輸入一個大寫字母,要求改用小寫字母輸出。分析:已知∶字符變量c1為大寫字母。求解∶將字符變量c2中放入相應的小寫字母。計算公式∶c2=c1+32(小寫改成大寫字母?)開始計算c2=c1+32輸出c1結束輸入一大寫字母放入c1中輸出c2#include<stdio.h>main(){charc1,c2;c1=getchar();/*鍵盤輸入一個大寫字母*/

printf(“%c,%d\n”,c1,c1);c2=c1+32;printf(“%c,%d\n”,c2,c2);}輸入:A

輸出:A,65

a,97

例3.3求ax2+bx+c=0的根,a,b,c由鍵盤輸入,設b2-4ac>0#include<math.h>main(){floata,b,c,disc,x1,x2,p,q;scanf("%f%f%f",&a,&b,&c);disc=b*b-4*a*c;p=-b/(2*a);q=sqrt(disc)/(2*a);x1=p+q;x2=p-q;printf(”x1=%fx2=%f",x1,x2);}運行情況:a=1,b=3,c=2x1=-1.000000x2=-2.0000003.5小結(1) C語言程序設計的三種基本的控制結構是:順序結構、選擇結構和循環(huán)結構。(2) C語言的語句類型有:表達式語句、函數(shù)調用語句、控制語句、空語句和復合語句。(3) 數(shù)據(jù)輸出函數(shù)有:putchar函數(shù)和printf函數(shù)。① putchar函數(shù)是單個字符輸出函數(shù)。函數(shù)調用的一般格式是:putchar(c);其中,putchar是函數(shù)名,圓括號中的c是函數(shù)參數(shù),可以是字符型或整型的常量、變量或表達式。② printf函數(shù)是格式輸出函數(shù)。作用是按格式控制所指定的格式,在標準輸出設備上輸出輸出項列表中列出的輸出項。

printf函數(shù)的一般調用格式為:

printf(格式控制,輸出項表)其中格式控制包括格式標識符和普通字符。輸出項表由若干個輸出項構成,輸出項之間用逗號隔開,每個輸出項既可以是常量、變量,也可以是表達式。4.1關系運算符和關系表達式

6種關系運算符:

①<(小于)②<=(小于或等于)③>(大于)④>=(大于或等于)⑤==(等于)⑥?。剑ú坏扔冢┮?、關系運算符及其優(yōu)先次序優(yōu)先級相同(高)優(yōu)先級相同(低)結合性:自左向右4.1關系運算符和關系表達式一、關系運算符及其優(yōu)先次序

與其它運算符優(yōu)先級的比較:算術運算符關系運算符賦值運算符(高)(低)例如:c=d>a+b等效于:c=(d>(a+b))1.什么是關系表達式?二、關系表達式如:(a>b)>(b<c)、‘a(chǎn)’<‘b’、x>y、s+f>d2.關系表達式的值運算結果∶邏輯值1——“真”,0——“假”如:設a=3,b=2,c=1求下面關系表達式的值:c>b(a-b)==1b+c<a值為0值為1值為0如果關系運算對象的類型不同,也要先進行類型轉換。4.2邏輯運算符和邏輯表達式

3種邏輯運算符:

①?。ㄟ壿嫹牵?&(邏輯與)③||(邏輯或)一、邏輯運算符及其優(yōu)先次序優(yōu)先級(高)(低)如:!aa為真,則!a為假。

a||ba、b之一為真,則a||b為真。

a&&ba、b同時為真,則a&&b為真。4.2邏輯運算符和邏輯表達式與其它運算符優(yōu)先級的比較:一、邏輯運算符及其優(yōu)先次序(高)(低)

!

算術運算符

關系運算符

&&和||

賦值運算符例如:c=d>a+b&&a>b等效于:

c=((d>(a+b))&&(a>b))1.什么是邏輯表達式?二、邏輯表達式用邏輯運算符將邏輯運算對象連結起來的式子。如:(a>b)&&(b<c)、!a||a>b2.邏輯表達式的值運算結果∶邏輯值(只有假為0、真為1兩種取值)如:5>3&&2||8<4‘b’&&’d’值為1值為1運算對象∶以數(shù)值非0為真、0為假4.3if語句1.if(表達式)語句一、if語句的三種形式執(zhí)行過程:當表達式的值為“真”(非零)時,執(zhí)行語句,否則,不執(zhí)行語句。如:if(x>y)z=x;2.if(表達式)語句1else語句2執(zhí)行過程:當表達式的值為“真”(非零)時,執(zhí)行語句1,否則,執(zhí)行語句2。如:

if(x>y)z=x;

elsez=y;3.if(表達式1)語句1elseif(表達式2)語句2elseif(表達式3)語句3:elseif(表達式m)語句melse語句n如:if(grade>=85)level=‘A’;elseif(grade>=70)level=‘B’;elseif(grade>=60)level=‘C’;elselevel=‘D’;

if語句說明:

⑴if后面的表達式一般為邏輯表達式或關系表達式,也可以是任意數(shù)值類型表達式。該語句是合法的:if(3)printf(“ok!”);⑵if語句中的“語句”為一個簡單語句或復合語句。

如:下面程序段是否有錯?if(x>=0)printf(“Xispositive.”);x++;elseprintf(“Xisnegative.”);if(x>=0){printf(“Xispositive.”);x++;}elseprintf(“Xisnegative.”);二、if語句的嵌套

在if語句中又包含一個或多個if語句稱為if語句的嵌套。一般形式:if(條件1)

if(條件2)語句1else語句2elseif(條件3)語句3else語句4內嵌if內嵌if如:if(x>0)if(y>0)printf("x>0,y>0");

溫馨提示

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

最新文檔

評論

0/150

提交評論