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

下載本文檔

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

文檔簡介

第一章C語言概述

Hello,everyone!1.安裝TC編譯器:將:我的電腦/Holly/compilers/tc2.0檔夾複製到D盤,並重新命名為"TC".2.運行TC.進入TC檔夾,雙擊tc.exe1.1C語言出現(xiàn)的歷史自學(xué)1.2C語言的特點C語言的主要特點如下:1.語言表達能力強運算符豐富,運算式類型多樣化2.結(jié)構(gòu)化好while語句結(jié)構(gòu)化語句等,函數(shù)為單位3.具有較強的數(shù)據(jù)類型構(gòu)造能力4.語言精練i+=2(i=i+2);if(e)s;5.可移植性好6.生成的代碼品質(zhì)高,程式的執(zhí)行效率高

i+=2(i=i+2);7.能實現(xiàn)組合語言的大部分功能,可以直接對硬體進行操作。(可寫系統(tǒng)軟體UNIX及應(yīng)用軟體)1.3簡單的C程式介紹例1.1main(){printf(“Hello,everyone!\n”);}程式的運行結(jié)果:Hello,everyone!1.3簡單的C程式介紹例1.2main(){inta,b,sum;/*這是定義變數(shù)*/a=123;b=456;/*以下3行為C語句*/sum=a+b;printf(“Sumis%d\n”,sum);}程式的運行結(jié)果:Sumis5791.3簡單的C程式介紹例1.3:從鍵盤輸入兩個整數(shù),並將最大的數(shù)顯示出來。

#include“stdio.h” /*包含預(yù)處理語句*/main(){inta,b,c;printf(“Pleaseinputtwointegers:\n”);scanf(“%d,%d”,&a,&b);c=max(a,b);printf(“max=%d\n”,c);}intmax(intx,inty){intz;if(x>y)z=x;elsez=y;return(z);}

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

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

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

c.預(yù)處理語句後面不使用分號。sum();{……}while(total<=2000){limit++;total=total+limit;};#include“stdio.h”;4.C對輸入輸出實行函數(shù)化。5.C程式書寫格式自由,一行內(nèi)可以寫幾個語句,一個語句也可以分寫在多行上。6.可用/*……*/對C程式中的任何部分作注釋,注釋可以寫在程式的任何位置上,“/*”與“*/”也可不在同一行上。7.在C語言中,大小寫字母是有區(qū)別的。(C語言習(xí)慣用小寫字母)

1.4C程式的開發(fā)過程1.編輯:選擇適當(dāng)?shù)木庉嫵淌?將C語言根源程式通過鍵盤輸入到電腦中,並以檔的形式存入到磁片中(.C)2.編譯:即將根源程式翻譯成機器語言程式的過程。編譯出來的程式稱為目標(biāo)程式(.OBJ)3.連接:編譯後生成的目標(biāo)檔經(jīng)過連接後生成最終的可執(zhí)行程式(.EXE)編輯編譯

出錯?連接出錯?執(zhí)行

結(jié)果正確?

.C根源程式

.OBJ目標(biāo)程式

.EXE可執(zhí)行程式開始結(jié)束YYNYNN庫函數(shù)和其他目標(biāo)程式main(){intx,num1=0,num2=0;printf("inputnum");scanf("%d",&x);while(x!=0){if(x>0)num1=num1+1;elsenum2=num2+1;scanf("%d",&x);}printf("Positivenumis:%d\n",num1);printf("Negativenumis:%d\n",num2);}

2345–10–8920660請讀出該程式的功能main(){intnum1=0,num2=0;printf("inputnum");scanf("%d",&x);while(x!=0){if(x>0)num1=num1+1;elsenum2=num2+1;scanf("%d",&x);}printf("Positivenumis:%d\n",num1);printf("Negativenumis:%d\n",num2);}

x程式有錯嗎?main(){printf(“*****************\n”);printf(“\n”);printf(“Verygood!\n”);printf(“\n”);printf(“*****************\n”);}運行結(jié)果:*********************Verygood!*********************main(){inta,b,c,max;printf(“inputnumbera,b,c:\n”);scanf(“%d,%d,%d”,&a,&b,&b);max=a;if(max<b)max=b;if(max<c)max=c;printf(“MAX:%d”,max);}運行結(jié)果:inputnumbera,b,c:6,5,1MAX:6在TurboC運行C程式的步驟我的電腦/Holly/compilers/tc2.0檔夾複製到D盤,並重新命名為"TC".2.運行TC.進入TC檔夾,雙擊tc.exe

(d:\tc\tc)第二章演算法簡介及程式的基本結(jié)構(gòu)本章要點:瞭解演算法的基本概念掌握程式的基本結(jié)構(gòu)演算法(algorithm)是對特定問題求解步驟的一種描述。程式=數(shù)據(jù)結(jié)構(gòu)+演算法+程式設(shè)計方法+編程語言2.1演算法的概念例1.

有50個學(xué)生,要求將他們之中成績在80分以上者列印出來。用n表示學(xué)號,n1代表第一個學(xué)生學(xué)號,ni代表第i個學(xué)生學(xué)號。用g代表學(xué)生成績,gi代表第i個學(xué)生成績,演算法可表示如下:S1:1iS2:如果gi80,則列印ni

和gi,否則不列印S3:i+1iS4:如果i50,返回S2,繼續(xù)執(zhí)行;否則,演算法結(jié)束。2.2簡單演算法舉例(用自然語言描述法)例2將學(xué)生百分成績按分?jǐn)?shù)段分級的程式。該演算法的核心部分是對輸入的每一個數(shù)進行比較判斷,以確定屬於的級別。若學(xué)生成績分佈是均勻的,演算法描述如下:S1:1iS2:a<60

a<70

a<80

a<90

不及格中等良好優(yōu)秀及格YNYNYNYN輸入10000個數(shù)據(jù),則需進行31500次比較。S3:i+1iS4:如果i10000,返回S2;否則,演算法結(jié)束。轉(zhuǎn)S3轉(zhuǎn)S3轉(zhuǎn)S3轉(zhuǎn)S3轉(zhuǎn)S3分?jǐn)?shù)0—5960—6970—7980—8990—99比例0.050.150.40.30.10

不及格Ya<90

a<80

a<70

a<60

優(yōu)秀中等及格良好YNNNYYY

學(xué)生成績分佈不是均勻的情況,演算法改進如下:輸入10000個數(shù)據(jù),僅需進行22000次比較。例3:對一個大於或等於3的正整數(shù),判斷它是不是一個素數(shù)。方法:將n(其中n3)作為被除數(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ù)”,演算法結(jié)束;否則執(zhí)行S5S5:i+1iS6:如果in-1,返回S3;否則,列印n“是素數(shù)”,演算法結(jié)束。例4:求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;否則演算法結(jié)束。2.3演算法的特性1.演算法(algorithm)是對特定問題求解步驟的一種描述。程式=數(shù)據(jù)結(jié)構(gòu)+演算法2.演算法的五個特性:有窮性:一個演算法必須在執(zhí)行有窮步之後結(jié)束。確定性:演算法的每一步必須是確切定義的。對於相同輸入必須得到相同結(jié)果。有效性:演算法的每一步都是能夠?qū)崿F(xiàn)的,即可操作的。輸入:演算法有零個或多個輸入。有輸出:演算法執(zhí)行完畢,必須有一個或若干個輸出結(jié)果。2.4怎樣描述演算法2.4.1自然語言描述法2.4.2流程圖表示常用符號有:起止框輸入/輸出框判斷框處理框流程線開始1=>ii>50輸出gi和nii+1=>ii>50結(jié)束YNN輸入ni和gi

i+1=>igi>=80N1=>iY2.4.3程式的三種基本結(jié)構(gòu)和改進的流程圖(N-S結(jié)構(gòu)流程圖)一、順序結(jié)構(gòu)

BA(a)AB(b)先執(zhí)行A操作,再執(zhí)行B操作,兩者是順序執(zhí)行關(guān)係。N-S結(jié)構(gòu)流程圖二、選擇結(jié)構(gòu)當(dāng)P條件為真時,執(zhí)行A模組,否則執(zhí)行B模組。APB真假(a)P真假AB(b)三、迴圈結(jié)構(gòu)當(dāng)P條件成立時,反復(fù)執(zhí)行A,直到P為假。1.當(dāng)型迴圈結(jié)構(gòu)PA假真(a)當(dāng)P為真A(b)當(dāng)P為真2.直到型迴圈結(jié)構(gòu)先執(zhí)行A操作,再判斷P是否為假,若P為假,再執(zhí)行A,直到P為真為止。AP假真(a)

A直到P為真(b)開始1=>ii>50輸出gi和nii+1=>ii>50結(jié)束YNN輸入ni和gi

i+1=>igi>=80N1=>iY2.4.5用偽代碼表示演算法:用介於自然語言和電腦語言之間的文字和符號來描述演算法

BEGIN1=>iwhile(i

50){inputni和gi

i+1=>I}

1=>iwhile(i

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

i+1=>i}END

2.4.6用電腦語言表示演算法

例4:求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;否則演算法結(jié)束。main(){intsign=1;floatdeno=2.0,sum=1.0,term;while(deno<=100){sign=-sign;term=sign/deno;sum=sum+term;deno=deno+1;}printf(“%f”,sum);}2.4結(jié)構(gòu)化程式設(shè)計方法1.自頂向下2.逐步細化3.模組化設(shè)計4.結(jié)構(gòu)化編碼讀輸入{

輸入處理;

return輸入;}編輯輸入{

編輯輸入處理;

return

編輯好的輸入;}383.1C語言數(shù)據(jù)類型3.1.1C語言數(shù)據(jù)類型

整型字元型實型(浮點型)

枚舉類型

數(shù)組結(jié)構(gòu)體類型共用體類型

單精確度型雙精度型基本類型構(gòu)造類型指針類型空類型數(shù)據(jù)類型393.1C的數(shù)據(jù)類型整型字元型實型(浮點型)枚舉類型單精確度型雙精度型數(shù)組類型結(jié)構(gòu)體類型共用體類型構(gòu)造類型基本類型指針類型空類型數(shù)據(jù)類型403.2常量與變數(shù)3.2.1常量1.定義:在程式執(zhí)行期間,其值不可改變的量稱為常量2.類型:數(shù)值常量例如:10,3,2.68等符號常量即用一個符號代表一個常量例如:#definePI3.1415926main(){floatr,l,s;

r=2;l=2*PI*r;s=PI*r*r;

printf(“l(fā)=%d,s=%d”,l,s);}41說明:符號常量必須先定義後才能用它表示一個數(shù)值。符號常量的值在其作用域內(nèi)不能改變,也不能再被賦值。符號常量名習(xí)慣用大寫字母表示。423.2.2變數(shù)1.定義:程式執(zhí)行期間值可以改變的量。2.命名規(guī)則:

變數(shù)名由識別字表示,只能由字母、數(shù)字和下劃線三種字元組成,且第一個字元必須為字母或下劃線。

例如:下列識別字中,不合法的變數(shù)名有:

M.D.John,12%gf,1add,_ce36,age&5thclass,lotus-1-2-3,cd*ef,float3.變數(shù)要“先定義,後使用”

定義格式:類型說明符識別字1,…,識別字n

例如:intx,y,z;(每個變數(shù)分配2個位元組)

floata,b,c,d;(每個變數(shù)分配4個位元組)3a43在C語言中,變數(shù)必須強制定義,其目的:1、凡未被事先定義的,不作為變數(shù)名。2、每一個變數(shù)被指定為一確定的類型,在編譯時就能為其分配相應(yīng)的存儲單元。3、指定每一個變數(shù)為一確定的類型,在編譯時據(jù)此檢查該變數(shù)所進行的運算是否合法。例如:如果變數(shù)a,b是整型類型,則可以進行求餘運算:

a%b

而兩個實數(shù)類型的變數(shù)求餘是不允許的。44*選變數(shù)名時,要做到“見名知意”例如:namest_agexmnlclasssum*大小寫字母是兩個不同的字元,C變數(shù)名習(xí)慣用小寫字母表示。*建議變數(shù)名的長度不要超過8個字元。請注意453.3整型數(shù)據(jù)3.3.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)10

-0x12即(-12)16=(-18)10463.3.2整型變數(shù)整型數(shù)據(jù)在內(nèi)存中的存放形式(補數(shù)表示法:便於加減運算)inti;i=10;

10=(1010)22102522210餘數(shù)0101首位00000000

0000101000000000

0000101011111111

111101011111111

11111011010的原碼取反取反後再加1,得-10的補數(shù)10的表示法,正數(shù)的補數(shù)等於它的原碼-10472整型變數(shù)的分類

基本型:以int

表示短整型:以shortint

或short

表示

1.類型長整型:以longint

或long

表示

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

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

無符號長整型(unsignedlong)(-32768~32767)一個無符號整型變數(shù)中可以存放的正數(shù)的範(fàn)圍比一般整型變數(shù)中正數(shù)的範(fàn)圍擴大一倍。inta;/*變數(shù)a的數(shù)值範(fàn)圍:-32768~32768*/unsignedintb;/*變數(shù)b的數(shù)值範(fàn)圍:0~65535*/48

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

short型不長於int型。(short<=int<=long)long型可以得到大範(fàn)圍的數(shù)據(jù),但同時會降低運算速度,因此除非不得已,不要隨便使用long型。49整型數(shù)據(jù)的溢出:main(){inta,b;a=32767;b=a+1;printf(“”%d,%d”,a,b);運行結(jié)果:32767,-32767改進:將變數(shù)a和b改成long型,並按%ld格式輸出。50

整型數(shù)據(jù)的數(shù)據(jù)範(fàn)圍請看P43表。注意:

1、在一個整數(shù)常量後面加一個字母l或L,則認為是long型常量。

2、在一個整數(shù)常量後面加一個字母u或U,則認為是unsignedint型常量。513.4實型數(shù)據(jù)3.4.1實型常量表示形式有如下兩種:

十進位數(shù)形式:由數(shù)字和小數(shù)點及正負號組成。(注意:必須有小數(shù)點)

例如:23.678.67823.

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

(注:e或E之前必須有數(shù)字,且後指數(shù)必須為整數(shù))例如:3.5E-52e3

錯誤:E23.6e3.5.e6e

523.4.2實型變數(shù)實型變數(shù)可分為:

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

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

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

double型變數(shù),並根據(jù)變數(shù)的類型截取實型常量中相應(yīng)的有效位數(shù)字。例如:

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

53main(){floata,c;doubleb;a=123456.789e5;b=123456789111111.789;c=a+20;printf(“a=%f,b=%f,c=%f\n”,a,b,c);}輸出結(jié)果:a=12345678848.000000,b=123456789111111.781000,c=12345678848.000000(避免將一個很大的數(shù)與一個很小的數(shù)相加,,以免出現(xiàn)舍入誤差)543.5字元型數(shù)據(jù)3.5.1字元常量1.字元常量:用單引號括起來的一個字元。

例如:‘a(chǎn)’‘A’‘$’‘!’

注:‘a(chǎn)’與‘A’是的字元常量不同2.轉(zhuǎn)義字元:以一個‘\’開頭的字元序列

例如:‘\n’換行‘\t’橫向跳格(水準(zhǔn)製錶)‘\b’退格‘\v’豎向跳格(垂直製錶)‘\r’回車‘\f’走紙換頁‘\a’報警‘\0’空字元

55說明:1、“\ddd”與“\xhh”分別表示用八進制數(shù)或十六進制數(shù)表示一個字元。

例:‘\101’代表ASCII碼(十進位)為65的字元‘A’.

系統(tǒng)中所有字元都有ASCII值(見374頁)2、由於\’”在C語言中都有了特殊的意義,故要想在字串中使用它們,須在其前面再加上一個反斜線。例如:\\

反斜線\’

單引號\”

雙引號

3、除了前面介紹的特殊轉(zhuǎn)義字元外,‘\字母’代表字母本身。如‘\c’代表字母c。56判斷下列字串的長度:

“\\\’\054”“\x56\”\\\c\ta”

“\\\n\t\bab”

57583.5.2字元變數(shù)定義形式:char識別字1,識別字2,…

,識別字n

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

china\061‘b’與‘B’是否相同?‘b’與“b”是否相同?b為98,B為66'b'是字元常量,“b"是字串常量623.6變數(shù)賦初值1.初始化:在定義變數(shù)的同時為變數(shù)賦初值2.形式:類型識別字變數(shù)名=常量或常量運算式

例如:

intx=10;charch=‘a(chǎn)’;變數(shù)賦初值允許使用符號常量

例如:

#definePI3.1415926…...floatx=PI;…...

可對被定義的變數(shù)的一部分賦初值

例如:

inta,b,c=1,d=2;floatr=2,l,s;可對幾個變數(shù)賦以同一個初值

例如:

inta=6,b=6,c=6;

或可寫為:inta=b=c=6;633.7各類數(shù)值型數(shù)據(jù)間的混合運算一、運算過程:先自動轉(zhuǎn)換成同類數(shù)據(jù),再進行運算。

二、轉(zhuǎn)換規(guī)則:低字長類型轉(zhuǎn)換成高字長類型。double←float

↑long

↑unsigned

↑int←char,short①向左的橫向箭頭表示即使在同一種數(shù)據(jù)類型間進行運算時也要進行轉(zhuǎn)換。用於提高精度。②向上縱向箭頭表示當(dāng)運算對象類型不同時的轉(zhuǎn)換方向。643.7各類數(shù)值型數(shù)據(jù)間的混合運算形式:隱式轉(zhuǎn)換(由系統(tǒng)自動進行)顯式轉(zhuǎn)換(強制類型轉(zhuǎn)換)隱式轉(zhuǎn)換的轉(zhuǎn)換規(guī)則:

intunsignedintlongintunsignedlongintdoubleshort,charfloat(1)float型數(shù)據(jù)一律轉(zhuǎn)換成double型數(shù)據(jù)。(2)char和shortint型數(shù)據(jù)一律轉(zhuǎn)換成int型數(shù)據(jù)以上兩條轉(zhuǎn)換原則說明:即使兩個運算元類型相同,但只要它們同屬char,shortint或float類型,則轉(zhuǎn)換一定發(fā)生。65例:若有:inti;floatf;doubled;longe;

試判斷運算式

3+‘b’+i*f-d/e的類型intunsignedintlongintunsignedlongintdoubleshort,charfloatdouble型66

C語言使用的基本運算式有:

⑴賦值運算式,如:a=3⑵算數(shù)運算式,如:3+4*2⑶關(guān)係運算式,如:3>2⑷邏輯運算式,如:3>5&&a>=b⑸條件運算式,如:a>b?a:b⑹逗號運算式,如:a=3,b=4,c=5673.8算術(shù)運算符和算術(shù)運算式1、基本的算術(shù)運算符:

+-

*/%說明:(1)上述運算符均為雙目運算符(即有兩個運算元)(2)在“/”運算中,若運算元均為整數(shù),則執(zhí)行整除運算,舍去小數(shù)部分。例如:5/3=(3)“%”要求兩側(cè)均為整數(shù),“%”運算不能用於float和double型數(shù)據(jù)例如:5%3=2

682、算術(shù)運算式和運算符的優(yōu)先順序與結(jié)合性(1)算術(shù)運算式:用算術(shù)運算符和括弧將運算元連接起來的,符合C語法規(guī)則的式子。例如:‘a(chǎn)’+‘b’+a*b/c+2.8(2)優(yōu)先順序:*/%高於+-(3)結(jié)合性:“自左至右的結(jié)合方向”例如:a-b+c3、強制類型轉(zhuǎn)換

形式:(類型名)(運算式)例如:(double)(a+b)

69說明:(1)運算式應(yīng)用括弧括起例如:(int)(x+y);

若要得到x/2的小數(shù)部分,應(yīng)寫為:

(float)x/2還是float(x/2)(2)在強制類型轉(zhuǎn)換時,得到一個所需類型的中間變數(shù),原來變數(shù)類型未發(fā)生變化。例如:floatx=8.6;inty;y=(int)x;70請看下麵程式段:

main(){floatx;inti;x=3.6;i=(int)x;printf(“x=%f,i=%d”,x,i);}輸出結(jié)果:x=3.600000,i=3注意:強制類型轉(zhuǎn)換後並不改變原來變數(shù)的類型714、自增、自減運算符(++、--)作用:使變數(shù)的值增1或減1,如:++i,--i(使用之前,先使i的值加(減)1)

i++,i--(使用之後,使i的值加(減)1)

++i先執(zhí)行i=i+1,再使用i的值

i++先使用i的值,再執(zhí)行i=i+1例如:inta=1,b;b=++a;b=a++;舉例:

intj,i=3;j=++i;/*j的值為4,i為4*/j=i++;/*j的值為4,然後i的值變?yōu)?*/j=-i++;/*j的值-5,然後i的值變?yōu)?*/72說明:(1)為單目運算符(2)++、--只能用於變數(shù),而不能用於常量或運算式。

例如:10++,(x+y)++

,++’a’,b++中合法的為:(3)自增、自減運算符為右結(jié)合性(即自右至左)。例如:-a++

-(a++)

4、自增、自減運算符(++、--)錯誤的結(jié)合(-a)++73練習(xí)題設(shè)a=2,則執(zhí)行語句k=++a+a++後的k值為多少?(k=6,a=4)a=(i++)+(i++)+(i++)?printf(“%d,%d”,i,i++)?

請避免這種寫法743.9賦值運算符和賦值運算式1、賦值運算符(=)形式:變數(shù)名=常量或運算式作用:將右邊常量或運算式的值賦給左邊的變數(shù)例如:b=c+d要求:如果運算式類型與左邊的變數(shù)的類型不匹配,自動進行類型轉(zhuǎn)換。

752、類型轉(zhuǎn)換的原則(1)將實型數(shù)據(jù)賦給整型變數(shù)時,捨棄實數(shù)的小數(shù)部分如:若a為int型變數(shù),執(zhí)行a=3.56後,則a的值3(2)將整型數(shù)據(jù)賦給實型數(shù)據(jù)時,數(shù)值不變,但以浮點形式存儲到變數(shù)中。如:若b為float型變數(shù),執(zhí)行b=35後,則b為35.00000(3)整型數(shù)據(jù)賦給字元型變數(shù)時,只將低8位原封不動地送到字元變數(shù)中(即截斷)。001000010000000100100001如:i=289c=33c=‘!’76(4)字元型數(shù)據(jù)賦給整型變數(shù)時,將字元數(shù)據(jù)(8位)放到整型變數(shù)低8位中。高8位則需要依據(jù)“符號擴展”來決定。例1(無符號字元數(shù)據(jù)賦給整型變數(shù))

unsignedcharc;inti;c=254;i=c;11111110c=254i=2540000000011111110例2(TurboC系統(tǒng)把字元處理為帶符號的)

charc;inti;c=254;i=c;/*變數(shù)c以整數(shù)形式輸出為-2*/11111110c=254i=-211111111

1111111077(5)將帶符號數(shù)據(jù)賦給長度相同的無符號型變數(shù),原樣照賦。(6)double賦給float時,截取前面7位有效數(shù)字。78例3:(帶符號int型數(shù)據(jù)賦給long型變數(shù))

inta;longb;a=254;b=a;0000000000000000

0000000011111110a=2540000000011111110b=254例4:(帶符號int型數(shù)據(jù)賦給long型變數(shù))

inta;longb;a=-2;b=a;1111111111111111

1000000011111110a=-21111111111111110b=-279例5:(無符號int型數(shù)據(jù)賦給long型變數(shù))

unsignedinta;longb;a=65534;b=a;00000000000000001111111111111110a=655341111111111111110b=65534例6:(有符號數(shù)據(jù)賦給無符號變數(shù))

inta;unsignedintb;a=-2;b=a;1111111111111110a=-21111111111111110b=6553480P66(3.11)寫出下麵賦值的結(jié)果。格中寫了數(shù)值的是要將它賦給其他類型的變數(shù),將所有空格添上賦值後的數(shù)值。int9910076536842-1char‘c’‘d’‘L’‘5’‘D’‘*’X

unsignedint991007653684265535float99.000000100.00000076.00000053.6568.00000042.00000065535.000000longint991007653684265535813、複合賦值運算符複合賦值運算符:在賦值符“=”之前加上其他運算符共有10種複合賦值運算符

+=,-=,*=,/=,%=,

<<=,>>=,&=,^=,|=82例如:a+=3a=a+3x*=y+3x=x*(y+3)4、賦值運算式定義:由賦值運算符將一個變數(shù)和一個運算式連接起來的式子。形式:

變數(shù)=運算式說明:賦值運算式的值為被賦值的變數(shù)的值。例如:a=b=c=6a=(b=4)+(c=6)a=(b=4)*(c=6)83練習(xí):寫出順序執(zhí)行下列運算式運算後的x值:1.x=a=b=102.x=25%(c=3)

X=10X=1賦值運算式中可以包含複合賦值運算符例如:若a=12,計算運算式a+=a-=a*a運算後a的值

第一步:a-=a*aa=a-a*a=12-12*12=-132

第二步:a+=-132a=a+(-132)=-264843.10逗號運算符和逗號運算式1.逗號運算符:即“,”優(yōu)先順序:為所有運算符中級別最低的。2.逗號運算式形式:運算式1,運算式2,……,運算式n

求解過程:順次求解運算式1,運算式2……

最後求解運算式n。逗號運算式的值為運算式n的值。例如:a=3*5,a*4a=3*5,a*4,a+5x=(a=4%3,a+1,a*10)6020104.1C語句概述一、C程式結(jié)構(gòu)C程式根源程式檔1根源程式檔2根源程式檔n??????預(yù)處理命令全局變數(shù)聲明函數(shù)1函數(shù)n??????函數(shù)首部函數(shù)體局部變數(shù)聲明執(zhí)行語句二、C語句概述C語句分類:

1.控制語句

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

3.運算式語句

4.空語句

5.複合語句

一條完整的C語句必須以“;”結(jié)束?!?”是一個語句不可缺少的一部分。1.控制語句:完成一定的控制功能。C有9種控制語句:

⑴if()~else~(條件語句)

⑵for()~(迴圈語句)

⑶while()~(迴圈語句)

⑷do~while()(迴圈語句)

⑸continue(結(jié)束本次迴圈語句)

⑹break(中止執(zhí)行switch或迴圈語句)

⑺switch(多分支選擇語句)

⑻goto(轉(zhuǎn)向語句)

⑼return(從函數(shù)返回語句)2.函數(shù)調(diào)用語句

由一次函數(shù)調(diào)用加一個“;”構(gòu)成。如:printf(“HelloWorld!”);函數(shù)調(diào)用分號3.運算式語句

由運算式加上“;”構(gòu)成。如:x+4*y;算術(shù)運算式語句

4*7,4+8;逗號運算式語句

x=4*7;賦值運算式語句(賦值語句)4.空語句

由一個“;”構(gòu)成。即:;作用:①程式轉(zhuǎn)向點;

②什麼也不做的循環(huán)體。whiel(i<=11);5.複合語句

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

由一個“;”構(gòu)成。即:;作用:①程式轉(zhuǎn)向點;

②什麼也不做的循環(huán)體(待開發(fā))。5.複合語句

用{}括起的一組語句。①複合語句中的每一個語句還可以是複合語句;

②複合語句儘管可由多個語句組合,但它只相當(dāng)於一個語句,在任何單一語句可以存在的地方,複合語句都可以存在。4.2賦值語句

⑵賦值運算式和賦值語句不同,賦值運算式可以被包含在其他運算式之中。如:if((a=b)>0)t=a;

其執(zhí)行過程是:先進行賦值運算(將b的值賦給a),然後判斷a是否大於0,如大於0,執(zhí)行t=a。如果寫成:if((a=b;)>0)t=a;錯了。在if的條件中不能包含賦值語句⑴

C語言中的賦值號“=”是一個運算符。注意:4.3數(shù)據(jù)輸入輸出的概念及在C語言中的實現(xiàn)一、數(shù)據(jù)輸入輸出的概念電腦的輸入輸出是以電腦主機為主體而言。輸入:從外部通過輸入設(shè)備(如,鍵盤、磁片、光碟、掃描器等)向電腦輸入數(shù)據(jù)。輸出:從電腦向外部設(shè)備(如,顯示幕、打印機、磁片等)輸出數(shù)據(jù)。二、數(shù)據(jù)輸入輸出在C語言中的實現(xiàn)1.調(diào)用輸入輸出函數(shù)實現(xiàn)輸入輸出操作

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

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

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

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

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

gets函數(shù)——輸入字串1、C語言庫函數(shù)已被編譯成目標(biāo)檔(二進位形式)2、根源程式必須先編譯成目標(biāo)檔。根源程式中的輸入輸出函數(shù)等庫函數(shù),在編譯時並不被翻譯成目標(biāo)指令。3、生成好的目標(biāo)檔(.OBJ)必須與與系統(tǒng)的函數(shù)庫(以及其他的目標(biāo)檔)進行連接,,形成可執(zhí)行檔(EXE)4、運行EXE檔時,調(diào)用已被連接的函數(shù)庫中的系統(tǒng)函數(shù)。main(){inta,b;a=10;b=20;

printf(“a=%d,b=%d”,a,b);}printf()的目標(biāo)代碼系統(tǒng)函數(shù)庫……………….2.檔開頭應(yīng)有“#include”命令

在調(diào)用標(biāo)準(zhǔn)輸入輸出庫函數(shù)時,檔開頭應(yīng)有預(yù)編譯命令:

#include<stdio.h>

或#include“stdio.h”

其中,stdio.h是“頭檔”,包含了與用到的標(biāo)準(zhǔn)輸入輸出函數(shù)有關(guān)的資訊。

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

碼返回。說明:其中c可以是字元型常量、字元型變數(shù)、整型常量、整型變數(shù)運算式。例:#include<stdio.h>main(){chara,b,c;a=‘B’;b=‘O’;c=‘Y’;putchar(a);putchar(b);putchar(c);putchar(‘\’’);}輸出結(jié)果:BOY’一般格式:getchar()——沒有參數(shù)必須有預(yù)編譯命令∶#include<stdio.h>功能∶從終端輸入一個字元。#include”stdio.h”main(){charc;c=getchar();putchar(c);}

a例:a二、getchar函數(shù)(字元輸入函數(shù))4.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(格式控制,輸出表列)舉例:main(){inta=3,b=4;printf(“a=%db=%d\n”,a,b);}輸出結(jié)果:a=3b=4格式說明(格式字元)普通字元輸出表列轉(zhuǎn)義字元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);}aabbccabcANprintf(格式控制,輸出表列)1.格式說明,由“%”和格式字元組成,如%d,%f等。

說明:“輸出表列”是需要輸出的一些數(shù)據(jù)(變數(shù)、表達式)?!案袷娇刂啤笔怯秒p引號括起來的字元也稱“轉(zhuǎn)換控制字串”,它包括三種資訊:3.轉(zhuǎn)義字元,將\後面的字元轉(zhuǎn)換成另外的意義P48表2.普通字元,即需要原樣輸出的字元。(二)格式字元

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

結(jié)果:123(二)格式函數(shù)

對不同類型的數(shù)據(jù)用不同的格式字元。1.d格式符——用來輸出十進位整數(shù)。(2)%md:m為指定的輸出字段的寬度。若數(shù)據(jù)位數(shù)小於m,則左端補以空格;若大於

m,則按實際位數(shù)輸出。如:inta=123,b=12345;printf(“%4d,%4d”,a,b);

結(jié)果:123,12345(二)格式函數(shù)

對不同類型的數(shù)據(jù)用不同的格式字元。1.d格式符——用來輸出十進位整數(shù)。(3)%ld:輸出長整型數(shù)據(jù)。也可以對長整型數(shù)據(jù)指定字段寬度。如:longa=1234567;printf(“%ld,%8ld,%5ld”,a,a,a);

結(jié)果:1234567,1234567,12345672.o格式符——以8進制數(shù)形式輸出整數(shù).

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

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

結(jié)果:-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);}輸出結(jié)果:a=-1,177777,ffff,65535b=-2,177776,fffe,655345.

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

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

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

輸出結(jié)果:CHINA(2)%ms:輸出的字串占m列,如字串本身長度大於m,則突破m的限制,將字串全部輸出,若串長小於m,則左補空格。(3)%–ms:如果串長小於m,則在m列範(fàn)圍內(nèi),字串向左靠,右補空格。(4)%m.ns:輸出占m列,但只取字串中左端

n個字元。輸出在列的右側(cè),左補空格。如果n>m,則自動取值,即保證個字元正常輸出。(5)%–m.ns,其中m、n含義同上,n個字元輸出在m列範(fàn)圍的左側(cè),右補空格。如:printf(“%3s,%7.2s,%.4s,%-5.3s\n”,“CHINA”,“CHINA”,“CHINA”,“CHINA”);輸出結(jié)果: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);

輸出結(jié)果:123456.125000main(){

double

x,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);

輸出結(jié)果:

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

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

輸出結(jié)果: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

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

輸入形式:123456abc

結(jié)果: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.%後的“*”附加說明符,用來表示跳過它相應(yīng)的數(shù)據(jù)。如:scanf(“%2d,%*3d,%2d”,&a,&b);

輸入:12,456,67

結(jié)果: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

空格和轉(zhuǎn)義字元都作為有效字元輸入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,b4.6順序結(jié)構(gòu)程式設(shè)計(順序結(jié)構(gòu))(選擇結(jié)構(gòu))(迴圈結(jié)構(gòu))二、順序結(jié)構(gòu)程式設(shè)計特點:程式按語句從上到下的排列順序依此執(zhí)行,每條語句必須執(zhí)行且只能執(zhí)行一次,沒有執(zhí)行不到或執(zhí)行多次的語句。例如:已知圓柱體半徑6米,高7米,求體積。#definePI3.14159main(){floatr,h,s,v;r=6;h=7;s=PI*r*r;v=s*h;printf(“V=%f\n”,v);}例4.10輸入三角形的三條邊,求三角形的面積。分析:已知∶三角形的三條邊a,b,c。求解∶三角形的面積area。計算公式∶設(shè)s=

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論