




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
c++全冊配套完整課件3C
語言程序設計但愿她是你知識大廈的又一塊基石。但愿她是開啟你智慧的又一把鑰匙!CLanguageProgramming高級語言的概念
計算機的語言在發(fā)展的過程中經(jīng)歷了三個階段:如:表示2+301110000110101000010MOV
AC,3ADD
AC,22+3面向機器的二進制語言、CPU直接運行。面向機器符號化語言,翻譯后運行。面向問題的類自然語言,翻譯后運行。編譯或解釋系統(tǒng)SourceObject機器語言匯編語言高級語言
語言的基本元素、構詞方法、句法、程序結構等規(guī)則的集合。解決特定問題的步驟描述。結構化程序設計的思想方法。學習的層次語法算法方法
把我所考察的每一個難題,都盡可能地分成細小的部分,直到可以而且適于加以圓滿解決的程度為止。
———笛卡爾(法)實踐FromRequirementtoProgramRequirement:Triangle’sareaInput:a、b、cabcInput:a,b,cOutputareaBlackboxFromRequirementtoProgram約束:任意兩邊和大于第三邊。第一章C語言概論Chapter1Introduction1.1C語言的特點C語言是由DennisMRitchie和BrianWKernighan于1972年在B語言的基礎上提出的,他們用C語言重寫了在PDP–11小型機上的Unix,并取得了成功。C語言的特點:C語言功能完善、效率高。C語言可以對硬件操作,是一種中級語言。C語言是結構化的程序設計語言。C語言具有豐富的數(shù)據(jù)類型和運算類型。C語言具有良好的移植性。C語言書寫靈活,表達簡潔。1.2C語言的基本程序結構
實例:輸入兩個數(shù)及其算術運算關系,輸出運算結果。/*ThisismyfirstCprogramfilename:first.c*/#include<stdio.h>voidmain(void){
charch;int
iA,iB,c;scanf(“%d%c%d”,&iA,&ch,&iB);c=fun(iA,ch,iB);printf(“%d%c%d=%d”,iA,ch,iB,c);}intfun(intx,charop,inty){intz;switch(op){case‘+’:z=x+y;break;case‘-‘:z=x-y;break;case‘*’:z=x*y;break;case‘/’:z=x/y;}returnz;/*返回運算結果*/}子函數(shù)主函數(shù)chp1ex1程序結構說明
⒈程序是由函數(shù)組成的,函數(shù)是由語句組成的。其中主函數(shù)有且唯一,主函數(shù)名固定為main。子函數(shù)可有可無也可以有多個。
⒉C語言的系統(tǒng)構詞必須用小寫,用戶構詞可以大小寫混用,各詞之間用一個或幾個space分隔。
⒊C語言的語句用;作為結束,因此,一句可以用一行或幾行書寫,但不能割裂構詞。
⒋程序中可通過/*…(注釋內容)…*/
包含對程序的注釋。注釋在編譯時忽略注釋,不產(chǎn)生代碼。⒌程序中可以包含編譯預處理命令。1.3C語言的詞法⒈C語言的字符集⑴字母:A、a、B、b…、Z、z52個⑵數(shù)字符號:0、1…、910個⑶特殊符號:+-*/…⒉系統(tǒng)保留字系統(tǒng)占用詞(共32個)auto、break、case、char、const、continue、default、do、double、else、enum、extern、float、for、goto、if、int、long、register、return、short、signed、sizeof、static、struct、switch、typedef、union、unsigned、void、volatile、while建議不要使用:define、undef、include、ifdef、ifndef、endif、line、error、elif、pragma⒊標識符(用戶構詞規(guī)則)
作用:用戶為各種自定義數(shù)據(jù)命名。組成規(guī)則:⑴字母和數(shù)字以及下劃線_組成。⑵以字母和下劃線_開頭。⑶長度不超過31個字符。⑷不能使用保留字。aa1b_iArea_fLoadiStatusfaS2Abinta/1注意:系統(tǒng)區(qū)分大小寫字母。
aBcAbc1.4
計算機算法的概念⒈算法(Algorithm)的定義:
廣義地講:算法是解決問題的邏輯步驟,是對特定問題求解步驟的一種描述。計算機算法:是用程序解決問題的邏輯步驟,是指令的有限序列。
只有通過算法能夠描述出來的問題,才能夠通過計算機求解。能夠用算法描述的問題稱為可以形式化的問題。正確的算法有三個條件:
⑴每個邏輯步驟有可以實現(xiàn)的語句來完成;⑵每個步驟間的關系是唯一的;⑶算法要能終止(防止死循環(huán))。算法的兩個關鍵要素:動作(Action);順序(Order)。算法舉例⒈求數(shù)列n=1+2+…+m的值n,當n>10000時結束。
⒉歐幾里德求m,n(m>n)的最大公約數(shù)算法S1:mModn
kS2:k不為0:
nm,kn
(原除數(shù)變成新的被除數(shù),余數(shù)變成新的除數(shù))。重復S1
否則:到S3。S3:輸出n的值為最大公約數(shù)。步驟:S1:初始化0n,0tS2:t+1tn+tnS3:n>10000?
滿足到S4,否則到S2。S4:OUTPUTn⒉算法與計算方法計算方法(ComputationalMethod):
求數(shù)學近似解的方法,如SinX=X-X3/3!+X5/5!-X7/7!+…算法(Algorithm):邏輯步驟,解決問題的過程。⒊算法的特征有窮性:在有限的時間和有限的資源下完成算法;確定性:各步驟之間的關系要確定;有輸入:有0到多個原始數(shù)據(jù)輸入;有輸出:有結果輸出;可行性:可以編程實現(xiàn);高效性:執(zhí)行速度快、占用資源少;健壯性:對數(shù)據(jù)響應正確。算法確定性示例商店a圖書館l三岔路口b如果走近路如果路過醫(yī)院如果路過教室醫(yī)院h教室s死過程abif(dmin)blelseif(to
h)bh,hlelseif(tos)bs,slendabif(toh)bh,hlelseif(tos)bs,slelseif(dmin)blend⒋算法的表示自然語言偽代碼圖形工具——流程圖1.5程序流程圖
概念:以特定的圖形符號加上說明,表示算法的圖,稱為流程圖或框圖。規(guī)則:從上到下,從左到右。符號及其意義:流程線連接點處理框判斷框I/O框過程框端點框
⒈用框圖描述函數(shù)
1x0y=
-1
x<0輸入xAx0?y=1y=-1yesnoA輸出y流程圖描述算法舉例startend⒉用框圖描述求s=1+2+…+100的算法。start1
t0ss+tst+1tt>100?noyesOutputsA0A0end1.6C語言上機的過程編輯startf.c編譯語法錯?有無f.obj連接、運行邏輯錯?有無f.exeendSourceObjectExecutable⒈用程序流程圖描述算法
1x>0y=0x=0-1x<0思考題:
⒉用框圖描述,歐幾里德求最大公約數(shù)算法。⒊從生活或學習中找出可以用算法描述的一件事,并通過符號化的偽語言以及框圖加以抽象的描述。TheTipofChap.2數(shù)據(jù)表示及其類型運算及表達式輸入/輸出程序的基本處理方式第二章C語言基礎程序處理的基本過程開始輸入數(shù)據(jù)x=2,y=3外設z=x+y數(shù)據(jù)處理輸出數(shù)據(jù)5外設結束數(shù)據(jù)表示主要內容⒈數(shù)據(jù)及其表示方法;
⒉數(shù)據(jù)的基本運算;
⒊基本輸入輸出。
程序是對數(shù)據(jù)按照算法處理,并輸出結果的過程,因此,以上三個問題是程序設計的基本問題。2.1基本數(shù)據(jù)類型1/2?
數(shù)據(jù)是對客觀事物特征抽象的符號化表示,客觀事物不同,表示的方法也不同(人數(shù)以整數(shù)表示,圓面積用小數(shù)表示,燈的狀態(tài)用開關表示,信件要用文字表示),計算機的處理方法也不同,因此根據(jù)程序處理的數(shù)據(jù)對象,應規(guī)定數(shù)據(jù)的類型。
計算機由于工程的限制,只能在有限精度和有限范圍內在工程上近似地描述操作的對象——數(shù)據(jù)。
數(shù)據(jù)類型決定了數(shù)據(jù)的如下特征:⑴數(shù)據(jù)的外部表示方式和內部存儲方式不同;⑵表示的范圍和精度不同;⑶對數(shù)據(jù)的處理方式不同。C語言的數(shù)據(jù)類型C語言的數(shù)據(jù)類型基本類型字符型char浮點型floatdouble構造類型數(shù)組、結構、聯(lián)合、枚舉型enum指針類型空類型void整型int2.2常量(Constant)及其類型⒈常量的概念
在程序中不能改變的量稱為常量。常量的類型由數(shù)據(jù)的外部表現(xiàn)形式確定。⒉常量的外部形式及其確定的類型⑴整型常量的表示
整型常量根據(jù)表示的范圍可以有一般整型和長整型,還可以表示為十進制、八進制、十六進制形式。一般整型常量的表示進制表示舉例范圍字節(jié)數(shù)十進制2304-32768~+327672八進制
044000~0177777
2十六進制0xaa000x0000~0xffff2長整型常量的表示進制表示舉例范圍字節(jié)數(shù)十進制-21234l
-231~+231-1
4八進制
04400l
0~037777777777
4十六進制0XAA00L
0x0000----0xffffffff4⑵浮點型常量的表示(只有十進制表示)
浮點型常量有兩種表示方式:小數(shù)表示方法,指數(shù)表示方法。不區(qū)分單、雙精度。小數(shù)表示方式規(guī)則:一個小數(shù)點、符號和至少一位數(shù)字。-2.01.0.11113-15.指數(shù)表示方式規(guī)則:規(guī)則:ne±m(xù)表示n×10
mn小數(shù)部分,整型常量或小數(shù)形式表示的實型常量。指數(shù)部分,兩位整數(shù)。n決定精度,一般精度為7位;m決定范圍,范圍10-38到10+38,當超過范圍時稱為“溢出”,小于10-38稱為下溢,當0處理,大于10+38,稱為上溢,系統(tǒng)出錯!123.456
表示為0.123456E+3-10000000
表示為-1e70.0000123
表示為0.123e-4⑶字符常量的表示
表示ASCII字符集中的一個字符。字符有一個整型值,即該字符的ASCII碼值。表示方法:’a’、’!’
。撇號定界的一個字符。值為:97⑷字符串常量的表示
雙引號“定界的字符序列。系統(tǒng)會在最后一個字符后加NULL(ASCII碼值為0),標志字符串的結束。如:”HEFEI”
”Hello!”
’a’和”a”的區(qū)別?內部’a’:97”a”:97NULL72101108108111330Hello!\0”Hello!”在內存中的存儲結構:⑸轉義字符
轉義字符是C語言表示字符的特殊方法,用來表示ASCII字符集中的控制字符,以及系統(tǒng)占用字符如:”。表示方法:①\字符;②
\八進制(十六進制整數(shù),小于256) \a表示BELL \b 表示BACKSPACE字母\n 表示換行
\r 表示回車
\t表示TAB
\\ 表示\
\? 表示?符號 \’ 表示’
\” 表示”
\0 表示NULL八進制十六進制數(shù)\x41\101代表’A’printf(“\007”);printf(“語文\n數(shù)學\n”);表示八進制或十六進制數(shù)作為ASCII碼值所對應的字符。2.3變量(Variable)⒈變量的概念
變量是在程序中可以改變的量,變量具有三個特征:
⑴變量有名,用標識符命名;
⑵變量有類型;
⑶在程序中可以改變。
變量對應于內存中某一地址下的幾個單元,變量名作為程序引用變量的標志。變量的類型確定了變量在內存中所占單元的數(shù)量及其表示的方式。變量的地址可以通過&運算獲得。內存inta;a變量的引用標志&a對應a的地址。
整型變量占兩個內存單元。變量必須先說明后使用!說明的目的是確定變量的名字和類型。⒉變量的說明形式:
type變量名表;/*以,分隔的標識符表*/inta,b,c;type是類型說明詞,對于整型和字符型可加修飾說明?;绢愋驼f明符:int、char、float、double修飾說明和基本說明的對應關系修飾說明詞可用于修飾的基本類型singed/unsignedint、charshort/longintlonginta,b,c;⑴整型變量說明說明詞及性質如下:說明詞含義范圍Byteint有符號一般整型-32768~327672short[int]有符號短整型-32768~327672long[int]有符號長整型-231~+231-14unsigned無符號一般整型0~655352unsignedshort無符號短整型0~655352unsignedlong無符號長整型0~232-14shorta,b,c;inte,f,g;long_qs,num;unsignedd,e,f;⑵字符型變量的說明說明符所占字節(jié)數(shù) 范圍char 1 -128~+127unsignedchar 1 0~255⑶浮點型變量的說明說明符所占字節(jié)數(shù) 范圍精度float 4 10-38~10+38 7位double 8 10-308~10+308 16位浮點型變量包含精度和范圍兩個概念。⑴超過精度位數(shù)后的位數(shù)值不確定。floata;a=1.1111111111;⑵超過范圍溢出(Overflow)。超出精度部分,不準確。floata,b,c;a=1.234e+20;b=2.345e+21;c=a*b;超出1038,溢出。
當運算結果大于10+38稱為上溢,系統(tǒng)出錯。當運算結果小于10-38稱為下溢,當0處理。2.4基本運算與表達式
程序的核心是對數(shù)據(jù)按照算法進行處理(運算)。C語言提供了強大的數(shù)據(jù)運算功能。數(shù)據(jù)通過運算符連接的式子稱為表達式,表達式根據(jù)運算關系對數(shù)據(jù)運算,并得到一個值。⒈變量賦值(Assignment)運算格式:
V=expression;/*將expression的值賦給變量V*/inta=2;/*說明賦值,編譯時賦值。*/intb;b=3+2;/*說明后賦值,執(zhí)行時賦值。*/說明:⑴=是賦值號(動詞);⑵賦值運算的左值只能是變量。a=a+2;iCount=iCount+10;a+2=12;/*Error!*/⑶賦值號兩邊類型應該一致,如不一致,以變量類型轉換。inta=2.5;/*2a*/⒉算術運算(Arithmeticoperators)功能:完成各種類型數(shù)據(jù)的加、減、乘、除及求余數(shù)運算。⑴雙目算術運算(兩個運算對象參加的運算)運算運算規(guī)則示例+加2+3-減a-b*乘2*(-a)/除12/3.0%求余數(shù)15%4
只能對整型或字符型數(shù)據(jù)運算。余數(shù)符號與被除數(shù)相同。注意:乘號不能省略!-12%5-2-12%(-5)1%2⑵自加、自減運算(單目運算)運算符前置后置運算關系++++aa++a=a+1
----aa--a=a-1說明:①運算對象只能是一個變量。②前置是先運算,后引用,而后置則是先引用,后運算。2++;/*Error!*/inti,x;i=5;x=i++;/*x=i;i=i+1;*/i=5;x=++i;/*i=i+1;x=i;*/#include<stdio.h>voidmain(void){inta=2,b=3,c;c=a+++b;printf(“%d”,c);}CHAP2EX1C語言盡可能多的從左向右結合符號形成運算符。⑶算術運算賦值運算符表達式示例運算關系+=a+=3a=a+3-=b-=cb=b-c*=a*=2a=a*2/=s/=ts=s/t%=a%=5a=a%5說明:①運算對象的左值只能是一個變量。(a+2)+=5;/*Error!*/②%=運算的對象,必須是整型或字符型。⑷算術運算的說明①運算中的類型問題運算對象的類型相同,運算結果取運算對象相同的類型。inta;floatb;b=2/3;/*0b0.0*/a=5.0/2.0;/*2.5a2*/
運算對象的類型不同,先將低等類型轉換為高等類型后再進行運算,運算結果取高等類型。等級原則如下:charintlongdoublefloat2*16.0+15.0doubledoubledouble運算時可以實行類型的強制轉換,格式如下:(type)expression只對當前表達式起作用。(float)a/(int)’c’+(float)(a+10)2+(int)fSum類型轉換舉例inta;floatb;intc;c=a*1.0+b*5+(float)’A’;idfic
d
d
ff
d
dcint注意:賦值運算右值表達式的類型轉換以左值變量的類型為準。②運算的優(yōu)先級
表達式的運算是分步驟進行的。因此當一個表達式中出現(xiàn)多種運算時,存在優(yōu)先級的問題。算術運算的優(yōu)先級如下:++、--、(type)單目運算*、/、%+、-=、op=相同優(yōu)先級,結合順序從左到右!3*4+6/a-6%3;相同優(yōu)先級,結合順序從右到左!inta,b=2,c=2;a=b*=c+=2;可以用()調整優(yōu)先級。c=c+2;b=b*c;a=b;⒊條件運算運算格式:
e1?e2:e3e1、e2、e3為表達式,當e1非0時,運算結果取e2的值;當e1為0時,取e3的值。inta=2,b=3,c=-1,d;d=a?b:c;/*d為3*/a=0;d=a?b:c;/*d為-1*/⒋逗號表達式格式:
e1,e2,e3,…,en
用,分隔的表達式,計算順序從左到右,表達式取值為en;⒌sizeof運算形式:sizeof數(shù)據(jù)對象;
sizeof(類型說明符);inta,b,c;b=sizeofa;/*b的值為2(TC)*/c=sizeof(float);/*c的值為4*/x=(a=5,a+6)*10;C語言常用數(shù)學函數(shù)
為方便用戶使用,C語言系統(tǒng)定義了大量函數(shù)。數(shù)學函數(shù)主要目的是求解常用數(shù)學函數(shù),如sinX等。數(shù)學函數(shù)的原型定義在系統(tǒng)的math.h頭文件中。在使用此類函數(shù)時,應在程序的開始處加如下語句:
#include<math.h>函數(shù)數(shù)學含義sin(x)sinXcos(x)cosXtan(x)tgXfabs(x)|x|pow(x,y)xysqrt(x)log(x)lnxlog10(x)log10x使用方法:作為一個運算項參加表達式運算。
函數(shù)的參數(shù)(自變量)、函數(shù)的值都是double類型。z=sqrt(sin(x)*sin(x)+cos(y)*cos(y))2.5數(shù)據(jù)的輸入輸出Input&Output
C語言沒有輸入輸出語句,輸入輸出是通過系統(tǒng)定義的標準函數(shù)來實現(xiàn)的。I/O函數(shù)的原型定義在stdio.h頭文件中,在引用I/O函數(shù)時,應應在程序開始處加預處理語句包含頭文件。#include<stdio.h>⒈輸入輸出的概念輸入輸出指的是內存變量或程序和外部設備間的數(shù)據(jù)交換。內存外設輸入輸出輸入輸出函數(shù)要描述:⑴輸入輸出的量;⑵輸入輸出的格式;⑶輸入輸出的設備。⒉格式輸入輸出函數(shù)⑴輸出函數(shù)printf()格式:
printf(“輸出格式字符串”,輸出項列表);格式描述。用,分隔的常量、變量、表達式表。輸出格式字符串可包含以下內容:①普通字符,如:a=②轉義字符,如:\n
對于普通字符和轉義字符在相應位置原樣輸出,其中%用%%。
printf(“\nabcd%%”);
輸出結果:
abcd%③格式說明符組,說明輸出項列表中的各項的輸出格式。格式說名符組用%為開始標志。內容包含對一項輸出對象的格式說明。%-7.5f格式說明類型表格式說明符說明量的類型d、i、o、x、u整型c字符型s字符串f、e、g浮點型
格式說明符應和輸出的列表項對應,產(chǎn)生相應的輸出。其中輸出的表項應與格式說明符類型一致。printf(“a=%5d\nb=%f”,
2+3,
5.34);格式說明串的一般形式和意義%-
m.n
l
格式類型字符(一個字母)格式說明標志對齊方式:缺省為右對齊,-為左對齊。
寬度.精度(位數(shù)),寬度:輸出總列數(shù),精度:小數(shù)位數(shù)(或字符位數(shù))。類型長度,缺省短整型,l表示long或double。#include<stdio.h>voidmain(void){floata;a=1.232326;printf(“a=%10.4f”,a);}CHAP2EX2各種類型數(shù)據(jù)輸出舉例⑴字符型輸出charch=’b’;printf(“%5c,
%-5c,
%c”,ch,ch-32,’s’+1);輸出結果:
b,B
,t⑵字符串輸出#include<stdio.h>voidmain(void){charchString[]="China";printf("%s,%6s,%-6s\n",chString,chString,chString);printf(“%4s%6.2s%-6.2s","Hefei","Hefei","Hefei");}China,
China,
China
Hefei
HeHe
寬度不夠,原樣輸出。m.n,m為總輸出列數(shù),n截取輸出字符數(shù)。⑶整型輸出(TC環(huán)境描述)#include<stdio.h>voidmain(void){unsignedinta=65535;intb=-2;printf("a=%d,%o,%x,%u",a,a,a,a);printf("\nb=%6d%8o%5X%6u",b,b,b,b);}a=-1,177777,ffff,65535b=
-2
177776FFFE
65534⑷浮點數(shù)輸出include<stdio.h>voidmain(void){floatf=123.456;printf("%f,%10f,%10.2f,%-10.2f\n",f,-f,f,-f);}123.456001,-123.45600,
123.46,-123.46
小數(shù)保留兩位,四舍五入截斷。符號占一位!⑵輸入函數(shù)scanf()格式:
scanf(“格式說明字符串”,輸入變量地址列表);說明:①m域寬可自動截取,空格作為各數(shù)據(jù)項的分隔符。voidmain(void){inti,j;scanf("%3d%3d",&i,&j);printf("%d\n%d",i,j);}123456②實型變量輸入時不能規(guī)定精度;scanf(“%7.2f”,&a);ERROR!
③數(shù)據(jù)輸入用SPACE分隔,當格式字符用其他字符隔離,輸入時也應在對應位置上輸入相同的字符;voidmain(void){inti,j;scanf("i=%d,j=%d",&i,&j);printf("\n%d\n%d",i,j);}④輸入項只能是變量,且必須用地址形式。⒉字符輸入輸出函數(shù)輸入:getchar();輸出:putchar();#include<stdio.h>voidmain(void){charch1,ch2='\n';
ch1=getchar();putchar(ch1);putchar(ch2);
putchar('a');}rra輸入程序設計舉例⒈已知:有一圓柱體,底半徑為r,圓柱高為h。
求:底面積、表面積,底周長、體積。⑴定義變量fAread、fAreas,fLen,fV──輸出;
r、h──輸入。rh建立模型fLen=2
rfAread=r2,fAreas=2r2+2rh=2fAread+fLenhfV=fAreadh程序如下:#include<stdio.h>voidmain(void){floatfAread,fAreas,fLen,fV,r,h;/*說明變量*/scanf(“%f,%f”,&r,&h);/*輸入原始數(shù)據(jù)*/fLen=2.*3.1415926*r;fAread=3.1415926*r*r;fAreas=2.0*fAread+fLen*h;fV=fAread*h;/*運算,并賦給變量*/printf(“%f\n%f\n%f\n%f\n”,fLen,fAread,fAreas,fV);
/*輸出結果*/}CHAP2EX3⒉求一元二次方程ax2+bx+c=0的根#include<math.h>#include<stdio.h>voidmain(void){floata,b,c,x1,x2;scanf(“%f,%f,%f”,&a,&b,&c);x1=(-b+sqrt(b*b-4.*a*c))/(2.0*a);x2=(-b-sqrt(b*b-4.*a*c))/(2.0*a);printf(“x1=%7.2f\nx2=%7.2f”,x1,x2);}CHAP2EX4b*b-4.*a*c<0思考題總結各類型常量、變量的特征和操作方法。自己找一些代數(shù)式寫出對應的C語言表達式。編程求圓錐體的體積。(個人作業(yè))編程求扇形面積。(個人作業(yè))結合數(shù)學問題用C編程求解。(個人作業(yè),不少于2題)第三章C語言的基本控制結構Chapter3ControlFlow問題#include<stdio.h>#include<math.h>voidmain(void){floata,b,c,x1,x2;scanf(“%f,%f,%f”,&a,&b,&c);x1=(-b+sqrt(b*b-4.*a*c))/(2.0*a);x2=(-b-sqrt(b*b-4.*a*c))/(2.0*a);printf(“x1=%7.2f\nx2=%7.2f”,x1,x2);}b*b-4ac<0?一元二次方程根求解算法描述b2-4ac=0?yes求等根nob2-4ac>0?yes求實根no求復根問題:如何構造條件?如何根據(jù)條件實現(xiàn)不同算法?3.1程序的三種控制結構
結構化程序設計是軟件設計的第三次革命。結構化程序設計的基礎是采用三種程序的控制結構。1966年B?HM&Jacopini
證明:只要三種控制結構就能表達用一個入口和一個出口框圖所能表達的任何程序邏輯。三種控制結構如下:⒈順序結構Sequence算法描述:
f;g;框圖:f;g;⒉選擇結構Selection(分支結構)算法描述:
if(e)f;elseg;框圖:e?yesf;nog;⒊循環(huán)結構Repetition⑴當型循環(huán)whilecistruedofc?fYESNO⑵直到循環(huán)dofuntilcisfalsefc?YESNO三種控制結構有如下共同的特點:一個入口和一個出口;無死語句;無死循環(huán)。如何構造條件?⒋復合語句Compound Statement
概念:C語言可以用{}包括一系列的語句。一對{}所包含的內容稱為一個復合語句。其中可以含有0到多條C語言語句。#include<stdio.h>voidmain(void)
{inta,b;scanf(“%d,%d”,&a,&b);
{inttemp;temp=a;a=b;b=temp;
}printf(“%d,%d”,a,b);}復合語句復合語句復合語句可以嵌套凡是可以出現(xiàn)單一語句的地方都可以使用復合語句。復合語句的作用:⒈作為分支和循環(huán)的塊。⒉作為標識符的作用域。交換算法演示3.2關系運算和邏輯運算⒈關系運算(RelationalOperator)
關系運算是比較兩個表達式的數(shù)值相互關系的運算。運算符比較的關系實例>大于a>b>=大于等于a>=b<小于2<1<=小于等于c<=d==等于1==c!=不等于1!=3
關系運算規(guī)則:參加運算的表達式的從左到右按關系運算符提供的關系進行比較,滿足關系得到整型值1
,不滿足關系得到整型值0。inta=1,b=3,c,d;c=a>b;d=a+2<=b+3;⒉邏輯運算(LogicalOperator)
邏輯運算運算時判斷對象真、假的運算。C語言沒有提供邏輯類型。任何類型的值都可以表示邏輯狀態(tài),如下表:表達式的值所對應的邏輯值表達式的值表示的邏輯關系非0真true0假false
運算對象非0代表邏輯真,是0代表邏輯假。也就是說任何類型的量都有邏輯值。邏輯運算的結果用整型值表示。運算結果為真時,得到整型值1;運算結果為假時,得到整型值0。inta=2,b=0;aba+bC語言的邏輯運算運算符邏輯關系舉例&&邏輯與a>2&&a<3||邏輯或s<2||s>6!邏輯非!a其中,!運算是單目運算。邏輯運算演示⒊復雜邏輯關系的表示
在實際應用中,經(jīng)常會遇到描述復雜的關系。如:判斷x是否大于等于5或小于3。此類關系的描述在程序設計中會大量使用。035x<3||x>=50-23-2<x<3?x=4-2<x&&x<3表示數(shù)值關系的原則:開放區(qū)間用或;閉合區(qū)間用與。思考題⒈判斷是否在一、三象限的表達式。⒉判斷是否在如圖圓環(huán)內的表達式。sqrt(x),代表對x開平方。⒊ch為字符變量,判斷ch是否為字母的表達式。(ch>=’a’&&ch<=‘z’)||(ch>=’A’&&ch<=‘Z’)不是字母的表達式?⒋運算的優(yōu)先級C語言允許所有基本類型的量參加同一表達式的運算,也允許所有類型的運算符出現(xiàn)在一個表達式中。因此,表達式值的類型如何確定,運算的先后順序如何確定,必須通過一套規(guī)則解決。
為了便于調整優(yōu)先級,設置()為最高優(yōu)先級。相同優(yōu)先級存在一個順序稱為結合順序,結合順序有從右向左或從左向右。⑴運算優(yōu)先級第一原則:單目運算的優(yōu)先級高于雙目運算。第二原則:算術運算關系運算邏輯運算賦值運算表達式優(yōu)先級舉例說明:++a-b>c+d&&a>=b*34①②③④⑤⑥⑦注意:在無法確定優(yōu)先級時,加()區(qū)分。簡化表達式。c=b*=a+2c=(b*=(a+2))級別運算符結合順序1()[]->.從左向右2!-++--(type)sizeof*&~從右向左3*/%從左向右4+-從左向右5<<>>(移位運算)從左向右6<<=>>=從左向右7==!=從左向右8&(位與運算)從左向右9^(位異或運算)從左向右10|(位或運算)從左向右11&&從左向右12||從左向右13?:從右向左14=op=從右向左15,從左向右優(yōu)先級總表優(yōu)先級特例
⒈自加、自減運算優(yōu)先級遵循原則:前置:先運算后引用;
后置:先引用后運算。#include<stdio.h>voidmain(void){inta=3,b;b=a+++a++;printf(“b=%d”,b);b=++a+(++a);printf(“b=%d”,b);}CHAP3EX0⒉在邏輯運算中,如果邏輯值能夠確定,則不再進行運算。inta=0,b=0++a||++b;printf(“a=%d\nb=%d”,a,b);a=0;a&&++b;/*b的值?*/++CHAP3EX13.3分支結構(選擇結構Selection)
⒈if及if-else的三種結構。
由標準的分支結構可以演化成單分支、多分支結構。C語言的分支語句有if
、if–else、switch三種。
⑴if語句格式:
if(expression)statement;語句表達式,非0為yes,0為no。語句,可以是復合語句。流程圖:e?statement;yesno舉例:#include<stdio.h>voidmain(void){charch;ch=getchar();if(ch>=‘a(chǎn)’&&ch<=‘z’)ch-=32;putchar(ch);}CHAP3EX2⑵if–else結構格式:
if(expression)
stat1;
else stat2;語句或復合語句。流程圖:e?falsestat2;stat1;true入口出口舉例:輸出|x|。#include<stdio.h>voidmain(void){intx;scanf(“%d”,&x);
if(x>=0)printf(“%d”,x);
else
printf(“%d”,-x);}⑶if–elseif結構(Muliline
)格式:
if(e1)
stat1;
elseif(e2)
stat2;
elseif(e3)
stat3;…
elseif(en-1)
statn-1;
elsestatn;
框圖:e1?tstat1;fe2?tstat2;出口fen-1?tstatn-1;fstatn;n-1個條件,滿足某個條件,執(zhí)行對應的語句,然后到出口。ifelseif結構舉例:征稅問題:1000以下稅率為3%1000~2000稅率為4%2000~3000稅率為5% 3000以上稅率6%輸入收入,求應繳稅款。#include<stdio.h>voidmain(void){floatx,rate;scanf(“%f”,&x);
if(x<1000)rate=.03;elseif(x<2000)rate=.04;elseif(x<3000)rate=.05;elserate=.06;printf(“%f”,x*rate);}3/100?⑷if語句的嵌套對于如下的結構:
if(e1)stat1;
elsestat2;在stat1或stat2中又含有if結構:if(e2)stat3;elsestat4;稱為if結構的嵌套。各種if結構都可以嵌套。
如求符號函數(shù):
-1(x<0)y=0(x=0)1(x>0)#include<stdio.h>voidmain(void){intx,y;scanf(“%d”,&x);if(x<0)y=-1;else
if(x==0)y=0;
else
y=1;printf(“x=%d,y=%d\n”,x,y);}外層內層
在外層else語句中,含有一個if結構。說明:①書寫采取縮進形式,便于區(qū)分。內層縮進。②else與最近的if相匹配,從內到外。y=-1;if(x!=0)if(x>0)y=1;elsey=0;x==0結果?舉例:求一元二次方程ax2+bx+c=0的根。#include<stdio.h>#include<math.h>voidmain(void){floata,b,c,d,x1,x2;scanf(“%f,%f,%f”,&a,&b,&c);d=b*b-4.0*a*c;if(fabs(d)<1.0e-6){printf(“\nx1=x2=,%f”,-b/(2.0*a));}else{
if(d>0)
{
printf(“\nx1=%f”,(-b+(float)sqrt(d))/(2.0*a));printf(“\nx2=%f”,(-b-(float)sqrt(d))/(2.0*a));
}
else
{
printf(“\nx1=%f+i%f”,-b/(2.0*a),(float)sqrt(-d)/(2.0*a));printf(“\nx2=%f-i%f”,-b/(2.0*a),(float)sqrt(-d)/(2.0*a));
}}}外層內層求相等實根。求不等實根。求共扼復根。CHAP3EX4
判斷實型量相等或不等用誤差的方法。flaota=1.0/*a=1.000001或0.999999*/a==1.0?⒉switch語句(多分支結構)格式:switch
(expression)
{case常量表達式1:statement1;case常量表達式2:statement2;…case常量表達式n-1:statementn-1;default:statementn;
}只能是整型或字符型表達式。
整型字符型常量表達式。表達式的值要互不能相等!
流程:①先求expression的值。②依次比較expression和各常量表達式的值。
③如果與第i個常量表達式相等,則執(zhí)行第i條以后的語句。④如果都不相等,則執(zhí)行default以后的語句。語句標號的概念:#include<stdio.h>voidmain(void){chargrade;grade=getchar();
switch(grade)
{
case‘A’:printf(“90—100\n”);
case‘B’:printf(“80—89\n’);
case‘C’:printf(“70—79\n”);
case‘D’:printf(“60—69\n”);
case‘E’:printf(“<60\n”);
default:printf(“error\n”);}}CHAP3EX5語句標號。break語句:格式:break;作用:中斷switch流程。break;break;break;break;break;CHAP3EX6例:輸出五分制對應的百分制范圍。#include<stdio.h>voidmain(void){charchGrad;chGrad=getchar();
switch(chGrad){
case‘a(chǎn)’:case‘A’:
printf(“90—100\n”);break;case‘b’:case‘B’:printf(“80—89\n”);break;case‘c’:case‘C’:printf(“70—79\n”);break;case‘d’:case‘D’:printf(“60—69\n”);break;case‘e’:case‘E’:printf(“<60\n”);break;
default:printf(“DataError!\n”);
}}多個標號可以共用相同的語句。default語句可以省略。3.4
循環(huán)結構(Repetition)程序經(jīng)常會重復執(zhí)行某些相同的操作,如:求:s=1+2+3+4+…+100算法描述:①s=0;i=1;②s+=i;i++;③判斷i是否小于等于100
如果i小于等于100,重復②;
否則,結束。此類根據(jù)“條件”重復執(zhí)行相同算法的結構,稱為循環(huán)。初始化部分。循環(huán)體。含有使條件趨假的語句。
循環(huán)的條件。注意:循環(huán)應在有限次完成。
C語言提供了三類實現(xiàn)循環(huán)的語句:
while,dowhile,for
⒈while循環(huán)(當型循環(huán))格式:
while(expression)
statement;表達式:值非0,表示滿足條件;值為0代表不滿足條件。語句(復合語句),重復執(zhí)行部分(循環(huán)體)。流程:e?truestatement;false含有使條件趨假的語句。舉例:求s=1+2+3+4+…+100#include<stdio.h>voidmain(void){ints=0,i=1;
while(i<=100)
{s=s+i;/*s+=i;*/i++;}
printf(“s=%d\n”,s);}初始化部分循環(huán)體條件測試使條件趨假語句CHAP3EX7⒉do–while循環(huán)(直到型循環(huán))格式:
do{
statement;}
while
(expression);流程:statement;e?truefalse含有使條件趨假的語句。while循環(huán)與do-while循環(huán)的區(qū)別:while循環(huán)先判條件,后執(zhí)行循環(huán)體;do–while循環(huán)先執(zhí)行循環(huán)體,后判條件。舉例:求:30!#include<stdio.h>voidmain(void){floats=1.0;inti=1;
do{s*=i;i++;}while(i<=30);
printf(“30!=%f”,s);}初始化。循環(huán)體。測試條件。使條件趨假。CHAP3EX8思考題:用do-while實現(xiàn)s=1+2+…+100。用while實現(xiàn)30!。⒊for循環(huán)格式:
for
(e1;
e2;e3)
statement;流程:e1e2?truestatement;e3false舉例:求:s=1+2+3+…+100#include<stdio.h>voidmain(void){ints=0,i;
for(i=1;i<=100;i++
)
{s=s+i;
}
printf(“s=%d”,s);}使e2趨假。在for循環(huán)中,e1、e2、e3都可以省略!e1省略
i=1;e3省略
i++;初值表達式。測試表達式。增值表達式。for循環(huán)實例
求100以內的偶數(shù)和。ints=0,i;for(i=2;i<100;i+=2){s+=i;}求500以內最大的5個能被50整除數(shù)的和。inti,j,s=0;for(j=500,i=0;i<5;i++,j-=50){s+=j;}從大到小輸出100以內能被5整除的數(shù)。inti;for(i=100;i>=0;i-=5)printf(“%d\n”,i);inti,j,s=0;for(i=0,j=0;i+j<100;i++,++j){s+=i+j;}⒋循環(huán)應用的幾個問題⑴循環(huán)的嵌套
概念:在一個循環(huán)的循環(huán)體內又包含一個完整的循環(huán)稱為循環(huán)的嵌套。i123456789 11
11
2……1
9
j 22
12
2……2
9 99
19
2……9
9如打印一9
9的乘法表:i=1時,j從1變化到9,完i*j。多重循環(huán)打印9
9乘法表。#include<stdio.h>voidmain(void){inti,j;for(i=1;i<=9;i++){
printf(“\n“);}}外層循環(huán)內層循環(huán)說明:⒈內外層循環(huán)采用縮進形式。⒉while和do-while和for可以相互嵌套。
⒊執(zhí)行次數(shù)為內層循環(huán)次數(shù)和外層循環(huán)次數(shù)的乘積。CHAP3EX9如何打印乘法表的一半?for(j=1;j<=9;j++){printf(“%4d“,i*j);}⑵循環(huán)的中斷(break)和繼續(xù)(continue)①循環(huán)的中斷:break語句
概念:循環(huán)體中可以加分支,判斷是否繼續(xù)執(zhí)行循環(huán),break語句可以提前結束循環(huán)。舉例:求:r=1—10的圓的面積,如圓面積大于100則中斷。for(r=1;r<=10;r++){area=3.14159*r*r;
if(area>100)
break;
printf(“\n%f“,area);}滿足條件,則退出循環(huán)。②繼續(xù)循環(huán):continue語句continue語句的作用是跳過本次循環(huán)剩余的循環(huán)體內容,執(zhí)行下次循環(huán)。舉例:求1—100內的偶數(shù)和。
s=0;for(n=1;n<=100;n++){
if(n%2!=0)
continue;
s+=n;}
滿足條件,跳過本次循環(huán)體剩余內容,繼續(xù)下次循環(huán)。ints=0,i;for(i=2;i<100;i=i+2)s+=i;⑶無限循環(huán)和空循環(huán)①條件為恒真的循環(huán)——無限循環(huán)while(1){…}do{…}while(1);for(;;){…}通過條件控制的break語句退出循環(huán)。例:程序等待直到輸入字母A。for(;;){ch=getchar();if(ch==’A’)break;}②循環(huán)體為空語句的循環(huán)——空循環(huán)for(i=1;i<=MAX;i++)
;作用:程序延時。空語句{;}⑷goto語句格式:
gotoLabel/*Label:同一函數(shù)內語句前的標號。*/作用:轉移到標號對應的語句上繼續(xù)執(zhí)行。loop:
if(i<=100){
sum=sum+i;i++;
gotoloop;
}循環(huán)和分支相互嵌套輸入10個自然數(shù)統(tǒng)計其中偶數(shù)的個數(shù)及偶數(shù)值和。算法框圖:start定義變量初始化循環(huán)?true輸入偶數(shù)?true統(tǒng)計累加falsefalse輸出結果end#include<stdio.h>voidmain(void){inti,ix,iCount=0,iSum=0;
for(i=1;i<=10;i++){
scanf(“%d\n”,&ix);
if(ix%2==0){iSum+=ix;iCount++;}
}printf(“Num=%d\nSum=%d”,iCount,iSum);}循環(huán)結構分支結構輸入負數(shù)?do{
if(ix<=0)printf(“dateerror”);}while(ix<=0);
算法的健壯性注意:結構應完整的包含和被包含。程序設計的基本方法
根據(jù)計算機的特點,結合循環(huán)與分支結構在程序設計時常使兩種常用的基本方法。枚舉法(窮舉法)迭代法
本專題將結合分支和循環(huán)介紹兩種方法的基本思想和具體實現(xiàn)!枚舉法Enumeration存在有限狀態(tài);其中某些狀態(tài)滿足特定條件。通過循環(huán)產(chǎn)生所有狀態(tài)(枚舉)。對每一狀態(tài),按條件進行狀態(tài)測試,滿足條件的狀態(tài),為所求的解。求100到200內的所有素數(shù)。通過循環(huán)使i從101變化到199(枚舉所有狀態(tài))對每次循環(huán)的i進行是否是素數(shù)的測試,如果是素數(shù),輸出i。枚舉法舉例:⒈求100到200之間的所有素數(shù)(只能被1和自身整除的數(shù))。對于自然數(shù)n,判斷其是否為素數(shù)有以下三種方法:①判斷n是否能被從2到n-1范圍內的數(shù)整除;②判斷n是否能被從2到(int)(n/2)范圍的數(shù)整除;③判斷n是否能被從2到(int)sqrt(n)范圍的數(shù)整除;程序如下:#include<stdio.h>#include<math.h>voidmain(void){intn,j,s;
for(n=101;n<200;n+=2)
{
s=(int)sqrt((double)n);
for(j=2;j<=s;j++){if(n%j==0)break;}
if(j>s)
printf(“\n%d”,n);
}}枚舉所有數(shù)構造,測試條件
如果n能被2到s的任意數(shù)整除,退出循環(huán)。如果n是素數(shù),輸出n。CHAP3EXA
⒉求水仙花數(shù)(條件:三位數(shù)的個、十、百位的方和等于該數(shù)。153==13+53+33
)。n為枚舉變量,枚舉初值100,枚舉終值999。構造條件:取出n的個、十、百位數(shù)。測試是否滿足條件,滿足條件輸出n。#include<stdio.h>voidmain(void){intn,a,b,c;
for(n=100;n<=999;n++){
a=n/100;b=n%100/10;c=n%10;
if(a*a*a+b*b*b+c*c*c==n) printf(“\n%d”,n);
}}枚舉所有三位數(shù)構造條件測試條件取n的百位a、十位b、個位c。CHAP3EXB⒊愛因斯坦階梯問題(不定范圍的枚舉)。
設有一階梯,每步跨2階,最后剩1階;每步跨3階,最后剩2階;每步跨5階,最后剩4階;每步跨6階,最后剩5階;每步跨7階,正好到階梯頂。問共有多少階梯。根據(jù)條件可以得出:臺階數(shù)一定是奇數(shù)且為7的倍數(shù)。枚舉初值:k=7;
枚舉公式:k=k+14
結束條件:滿足(k%3==2)&&(k%5==4)&&(k%6==5)結束。#include<stdio.h>void
溫馨提示
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 租地押金合同協(xié)議書范本
- 個人廢品收購合同協(xié)議書
- 養(yǎng)雞雇傭合同協(xié)議書范本
- 安裝合同協(xié)議書范文大全
- 酒廠定制酒合同協(xié)議書
- 裝修電工施工合同協(xié)議書
- 技術合同雙方自愿協(xié)議書
- 賦能項目合同協(xié)議書
- 2024年醫(yī)院黨風廉政教育計劃
- 賣買魚塘合同協(xié)議書樣本
- 2025年“美好生活民法典相伴”主題宣傳月活動總結(2篇)
- 移動通信網(wǎng)絡流量分析與優(yōu)化策略制定
- 16949標準培訓課件
- T-CMES 04001-2020 機床裝備制造成熟度評價規(guī)范
- 國開電大《企業(yè)信息管理》形考任務參考答案
- 風力發(fā)電運維值班員(高級工)理論考試題庫(濃縮400題)
- 常見柜面業(yè)務操作考核評分表
- 2023年中國石油招聘考試真題
- DB43 738-2012 建設工程消防設施檢測評定規(guī)則
- 公司事故隱患內部報告獎勵機制
- β內酰胺類抗菌藥物皮膚試驗指導原則2024課件
評論
0/150
提交評論