語言教程講義2001年2月17日_第1頁
語言教程講義2001年2月17日_第2頁
語言教程講義2001年2月17日_第3頁
語言教程講義2001年2月17日_第4頁
語言教程講義2001年2月17日_第5頁
免費預覽已結束,剩余214頁可下載查看

下載本文檔

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

文檔簡介

C語言概 C語言的發展過 當代最優秀的程序設計語 C語言版 C語言的特 面向對象的程序設計語 C和 簡單的C程序介 輸入和輸出函 C源程序的結構特 書寫程序時應遵循的規 C語言的字符 C語言詞 TurboC2.0集成開發環境的使 TurboC2.0簡介和啟 TurboC2.0集成開發環 File菜 Project菜 Options菜 Debug菜 Break/watch菜 TurboC2.0的配置文 CC語言C語言的發展過C語言是在70年代初問世的。一九七八年由電報公司(AT&T)貝爾正式了C語言。同時由B.W.Kernighan和D.M.Ritchit合著了著名的“THECNationalStandardsInstitute)在此基礎上制定了一個C語言標準,于一九八三年。通常稱之為ANSIC。當代最優秀的程序設計語CUNIX系統。由于C語言的強大功能和各方面的優點逐漸為C語言版·C或稱MS·BorlandTurboCTurbo·AT&TC語言的特1·C語言簡潔、緊湊,使用方便、靈活。ANSIC32個關鍵字 hugeinterruptnear 2·34種。CC的運6·C語言允許直接物理地址,能進行位(bit)操作,能實現匯編語言的大部分功能,但是,CC寫程序會感到限制少、靈活性大,功能強,但較其他高級語言在學習上要一些。面向對象的程序設計語在C的基礎上,一九八三年又由貝爾的BjarneStrou-strup推出了C++。C++進BorlandC++,SymantecC++和VisualC++。C和再進一步學習C++就能以一種熟悉的語法來學習面向對象的語言,從而達到事半功倍的目簡單的C程序介一個C源程序的基本部分和書寫格式。{printf("世界,您}【例1.2】{doubleprintf("sineof%lfis}main程序的功能是從鍵盤輸入一個數x,求x的正弦值,然后輸出結果。在main()之前的兩行稱為預處理命令(詳見后面)include稱為文件包含命令,含該函數原型所在的頭文件。在本例中,使用了三個庫函數:輸入函數scanf,正弦函數sin,輸出函數printf。sin函數是數學函數,其頭文件為math.h文件,因此在程序的主函數前用include命令包含了math.h。scanf和printf是標準輸入輸出函數,其頭文件為stdio.h,在主函數前也用include命令包含了stdio.h文件。需要說明的是,Cscanfprintf這兩個函數可以省去對其頭文件的包含命1BAIC語言是不同的。說明部分是C源程序結構中很重要的組成部分。本例中使用了兩個變量xs,用來表示輸入的自變量和sin函數值。由于sin函數double語句,printf函數在顯示器上輸出提示字符串,請操作人員輸入自變量xcanfxsinsfsx輸入和輸出函scanfprintf這兩個函數分別稱為格式輸入函數和格式輸出函數。其意義是按指定的printf("sineof%lfisintmax(inta,int {int intmax(inta,intb); printf("inputtwonumbers:\n"); /*輸入x,y值*/ }intmax(inta,int {if(a>b)returna;elsereturn }max函數。函數之間是并列關系。可從主函數中調用其它函數。max函數的功能是比較兩個數,然后把較大的數返回給主函數。max函數是一個用戶自定函數的參a,bmax函數中比a,b的大小,把大者返回給主函數的z,最后在屏幕上輸出z的值。C源程序的結構特書寫程序時應遵循的規用括起來的部分,通常表示了程序的某一層次結構。{}一般與該結構語句的第一C語言的字符a~z26個0~910C語言詞外,其余都由用戶自定義。C規定,標識符只能是字母(A~Z,a~z)、數字(0~9)、下劃線a,x, 以下標識符是的: 出現字符- 以減號開bowy- 標準CC語言編譯系統限制,同時也受到BOOKbook類型說明語句定義預處理命令inta;inta;CintaC語言中使用的常量可分為數字常量、字符常量、字符串常量、符號常量、轉義字符C語言的注釋符是以“/*”開頭并以“*/”結尾的串。在“/*”和“*/”之間的即為注TurboC2.0集成開發環境的TurboC2.0簡介和統支持下的軟件,在windows98環境下,可以在DOS窗口下運行。D盤根下建立一個TCTurboC2.0TC下還建立了兩個了LIBINCLUDELIB子中存放庫文件,INCLUDE子中存放所DOS環境下或在windows98DOS窗口下運行運行TurboC2.0時,只要在TC子目錄下鍵入TC并回車TurboC2.0集成開發環境。windows98環境下,也可以選運行菜單,然后鍵入d:\tc\tc即可,也可以在tc文件夾tc.exe文件,然后用鼠標雙擊該文件名也可進入TurboC2.0集成開發環境。TurboC是Borland公司的產品,Borland公司是一家專門從事軟件開發、研制的大Turbo系列軟件如TurboBASIC,TurboPascal,TurboProlog,這些軟件很受用戶歡迎。該公司在1987TurboC1.0產品,其中使用了全然一新的集成開發環境,即使用了一系列下拉式菜單,將文本編輯、程序編譯、連接以及程序運行一體化,大大方便了程序的開發。1988年BorlandTurboC1.5版本,增加了圖形庫和文本窗口函數庫等,而TurboC2.0則是該公司1989年的。TurboC2.0在原來集成開發環境的基礎上增加了查錯功能,并可以在Tiny模式下直接生成.COM數據、代碼、堆棧64K內存中)(8087/80287/80387等)進行仿真。BorlandTurboC++,TurboC2.0的集成開發環境,并包含了面向對象的基本思想和設計方法。1991年為了適用公Windows3.0版本,BorlandTurboC++作了更新,TurboC的新一代產品BorlandcC++也已經問世了。TurboC2.0集成開發環TurboC2.0集成開發環境中后,屏幕上顯示其中頂上一行為TurboC2.0主菜單,中間窗口為編輯區,接下來是信息窗口,最TurboC2.0的主屏幕,TurboC2.0主屏幕頂上一行,顯示下列內容FileEditRunCompileProjectOptionsDebugEdit外,其它各項均有子菜單,Alt加上某項中第一個字母,就可進入該項的File菜Alt+FFile菜單,如圖Load:裝入一個文件,DOS的通配符(如*.C)進入該項,而不需要先進入File菜單再選此項。Pick8個文件列成一個表讓用戶選擇,選擇后將該程序裝入編輯區,并將光標置在上次修改過的地方。其熱健為Alt-F3。,Save:將編輯區中的文件存盤,NONAME.C時,將詢問是否更改文件名,其F2。Writeto:可由用戶給出文件名將編輯區中的文件存盤,若該文件已存在,則詢問要不要覆蓋。 中的文件,并可由用戶選擇Changedir:顯示當前默 ,用戶可以改變默 Oss TurboC2.0DOS提示符下,DOS命令,若想回TurboC2.0中,DOSEXIT即可。,以上各項可用光標鍵移動色棒進行選擇回車則執行。也可用每一項的第一個大寫字母Esc鍵TurboC2.0所有菜單均采用這種方法進行操作,以下不再說明。Edit菜按Alt+E可進入編輯菜單,若再回車,則光標出現在編輯窗口,編輯。編輯方法基本與wordstar相同,可用F1鍵獲得有關編輯方法的幫助信息。與編輯有關的功能鍵如下 刪除光標所在的一行 TurboC2.0庫函數, TurboC2.0雙界符的后匹配 TurboC2.0的雙界符包括以下幾種符號 花括 尖括 圓括(和 方括[和 注釋 雙引" 單引'TurboC2.0在編輯文件時還有一種功能,就是能夠自動縮進,即光標定位和上一個非空字符對齊。在編輯窗口中,Ctrl+OL為自動縮進開關的控制鍵。Run菜Alt+RRun菜單,RunProject/Projectname項指定的文件名或當前編輯區的文件。如果對上次編譯后的源代碼未做過修改,則直接運行到下一個斷點(沒有斷點則運行到結束)。否則先進行編譯、連接后才運行,其熱鍵為Ctrl+F9。Programreset:中止當前的調試,釋放分給程序的空間,Ctrl+F2Gotocursor::調試程序時使用選擇該項可使程序運行到光標所在行。光標所在行必須為一條可執行語句,否則提示錯誤。其熱鍵為F4。Traceinto:在執行一條調用其它用戶定義的子函數時Traceinto項則執行長條將到該子函數內部去執行,其熱鍵為F7。Stepover:執行當前函數的下一條語句,即使用戶函數調用,執行長條也不會進,Compile,CompiletoOBJ:將一個C源文件編譯生成.OBJ目標文件,同時顯示生成的文件名。其Alt+F9。MakeEXEfile:此命令生成一個.EXE的文件并顯示生成的.EXE文件名。其中.EXE文Project/Projectname說明的項目文件名若沒有項目文件名,PrimaryCfile若以上兩項都沒有文件名 則為當前窗口的文件名LinkEXEfile:把當前.OBJ文件及庫文件連接在一起生成.EXEBuildall:重新編譯項目里的所有文件,并進行裝配生成.EXE文件。該命令不作過時檢(上面的幾條命令要作過時檢查,即如果目前項目里源文件的日期和時間與目標文件相同或更早,則對源文件進行編譯)。PrimaryCfile:當在該項中指定了主文件后,在以后的編譯中,C文件,C

如果編譯中有錯誤,則將此文件調入編輯窗口 Project,Projectname:項目名具有.PRJ的擴展名,其中包括將要編譯、連接的文件名。例一file1.c,file2.c,file3.c組成,3file.exe的執行文件,可以先建立一個file.prj的項目文件,其內容如下:file.prjProjectname項中,以后進行編譯時將自動對項目文件中規定的三個file.exe文件。如果其中有些文件已經編譯成.OBJ,,,當項目文件中的每個文件無擴展名時,均按源文件對待,另外,其中的文件也可以是庫文件,但必須寫上擴展名.LIB。Make編譯,否則不進行檢查。OptionsAlt+OOptions菜單,該菜單對初學者來說要謹慎使用,該菜單有以下幾個內 Define:打開一個宏定義框,同戶可輸入宏定義。多重定義可同分號,賦值可用等Codegeneration:它又有許多任選項,這些任選項告訴編譯器產生什么樣的目標代CallingconventionCPascalInstruction Floating Defaultchar Mergeduplicatestrings作優化用,將重復的字符串合并在一起StandardstackframeTeststackoverflowLine OBJdebuginformation在.OBJOptimization:它又有許多任選項UseregistervariableJumpoptimization通過去除多余的跳轉和調整循環與開關語句的辦法,壓縮代Source:它又有許多任選Indentifierlength說明標識符有效字符的個數,32 Errorstopafter多少個錯誤時停止編譯,25Warningstopafter多少個警告錯誤時停止編譯,100DisplayPortabilitywarningANSIViolations了ANSI關鍵字的警告錯誤LesscommonerrorLinker:本菜單設置有關連接的選擇項,Map 選擇是否產生.MAPDevaultlibraries是否在連接其它編譯程序產生的目標文件時去尋找其缺省Warnduplicatesymbols當有重復符號時產生警告信MessageCurrentfile在編輯窗口中的文件錯誤Allfiles所有文件錯誤Off不Configautosave:選on時,在Run,S或退出集成開發環境之前,如果TurboC的配置被改過,offEditautosave:是否在Run或S之前,自動編輯的源文件Backupfile:是否在源文件存盤時產生后備文件(.BAK文件),,Directories:規定編譯、連接所需文件的路徑,Includedirectories:包含文件的路徑,多個 用";"分開Librarydirectories:庫文件路徑,多個 用";"分開Outputdirectoried:輸出文件(.OBJ,.EXE,.MAP文件) TurboCdirectoried:TurboC所在 Pickfilenamepick文件名,currentpickfileArguments:允許用戶使用命令行參數Saveoptions:保存所有選擇的編譯、連接、調試和項目到配置文件中缺省的配置文件TCCONFIG.TC。DebugAlt+DDebug菜單,該菜單主要用于查錯,Expression要計算結果的表達式Result顯示表達式的計算結果CallstackTurboCdebugerBreak/watch菜Alt+BBreak/watch菜單,Removeall:watchesViewnextbreakpointTurboC2.0的配置TurboC2.0有關信息的文件其中存有編譯、連接的選擇和路徑等信息。可以用下述方法建立TurboC2.0的配置:OptionsOptions/Saveoptions命令,將TC時只要在DOS下鍵入:若設置Options/Environment/Configautosave為on,則退出集成開發環境時,當前的設置TurboC2.0TCCONFIG.TC中。TurboC在啟動時會自動尋找這TCINSTTurboC的有關配置TC.EXE中。TurboC在啟動時,若沒有找到配置文件,則取TC.EXE中的缺省值。程序的—算 算法的概 簡單算法舉 算法的特 怎樣表示一個算 用自然語言表示算 用流程圖表示算 三種基本結構和改進的流程 用N-S流程圖表示算 用偽代碼表示算 用計算機語言表示算 結構化程序設計方 程序的—算對數據的描述。在程序中要指定數據的類型和數據的組織形式,即數據結構(datastructure(algorithmNikiklausWirth公式

C程序,進行編寫程序的初步訓練,因此,算法的概簡單算法舉步驟3:將6再乘以4,得24。S1:使t=1S2:使S3:使t×itt×i→tS4:使i的值+1,即i+1→iS5:如果i≤5,S3S4S5如果計算100!只需將S5:若i≤5改成i≤100即可。 如果該求1×3×5×7×9×11,算法也只需做很少的改動:S1:1→tS2:3→iS3:t×i→tS4:S5寫成:S5:i<11,S3;S1:S2:如果gi≥80,則打印ni和giS3:2.320002500年中的每一年是否閏年,將結果輸出。4整除,但不能被100整除的年份設y為被檢測的年份,則算法可表示如下:S1:然后轉到S6S7:y≤2500時,S21111...1 100S1:sigh=1S2:sum=1S3:S4:sigh=(-S5:term=sigh×(1/deno)S6:term=sum+termS7:deno=denoS8:若deno≤100,返回S4;否則,結束S1:輸入nS2:S5:i+1→inS6:如果 ,返回S3;否則打印n“是素數”;然后算法結束n算法的特怎樣表示一個算用自然語言表示算用流程圖表示算

1111...1 100三種基本結構和改進的流程N-S流程圖表示算1973年學者提出了一種新型流程圖:N-S流程圖。用偽代碼表示算用計算機語言表示算}}{int{sigh=-sigh;}}結構化程序設計方數據類型、運算符與表達 C語言的數據類 常量與變 常量和符號常 變 整型數 整型常量的表示方 整型變 實型數 實型常量的表示方 實型變 實型常數的類 字符型數 字符常 轉義字 字符變 字符數據在內存中的形式及使用方 字符串常 符號常 錯誤!未定義書簽變量賦初 各類數值型數據之間的混合運 算術運算符和算術表達 C運算符簡 算術運算符和算術表達 賦值運算符和賦值表達 逗號運算符和逗號表達 小 C的數據類 基本類型的分類及特 常量后 常量類 數據類型轉 運算符優先級和結合 表達 數據類型、運算符與表達C語言的數據類·類實型(浮點型共空類一定的數據類型的,應在函數定義及函數說明中給以說明,例如在例題中給出的max函數定義中,函數頭為:intmax(inta,intb);其中“int”類型說明符即表示該函數的返sin,由于系統規定其函數返回值為雙精s=sinx);中,ssin函數的常量與變舉變量。在程序中,常量是可以不經說明而直接的,而變量則必須先定義后使用。整常量和符號常#define#definePRICE30{intnum,total;}變 33單元整型數整型常量的表示方值為0~7。八進制數通常是無符號數。015(十進制為13)、0101(十進制為65)、 256(無前綴0)、03A2(包含了非八進制數碼)、-0127(出現了負號)十六進制整常數:十六進制整常數的前0X0x。其數碼取0~9,A~Fa~f(整型常數的后綴:在16位字長的機器上,基本整型的長度也為16位,因此表示的數的范圍也是有限定的。十進制無符號整常數的范圍為0~65535,有符號數為-32768~。八進制無符號數的表示范圍為0~。十六進制無符號數的表示范圍為0X0~0XFFFF0x0~0xFFFF。如果使用的數超過了上述范圍,就必012L(十進制為10)、077L(十進制為63)、 0XA5Lu表示十六進制無符號長整數A5,其十進制為165。整型變i:inti; 0000000000001010000000000000000000101011111111111101011111111111110110整型變量的分基本型:類型說明符為int,在內存中占2個字節短整量:類型說明符為shortint或short。所占字節和取值范圍均與基本型相長整型:類型說明符為longintlong,在內存4個字節無符號型:類型說明符為unsignedunsignedint或unsigned01111111111111111111111111111111-即-215~(215-2unsigned0~(216-2short-即-215~(215-2unsignedshort0~(216-2long 即-231~(231-4unsigned0~(232-413int00unsignedshortintunsignedlongint整型變量的定類型說明符變量名標識符,變量名標識符,...;inta,b,c;(a,b,c為整型變量)longx,y;x,y為長整型變量unsignedp,q;(p,q為無符號整型變量){inta,b,c,d;unsignedu;}整型數據的溢{inta,b;}0111111111111111-1000000000000000longx,y;}運算結果為長整型。但c,d被定義為基本整型,因此最后結果為基本整型。本例說明,不實型數實型常量的表示方aEn(a為十進制數,n為十進制整數)其值為a*10n。-2.8E-2(等于-2.8*10-345無小數點-5(無階碼標志53.-E3負號位置不對 printf("%f\nprintf("%f\n",356);}實型變+1數 指實型變量的分實型變量分為:單精度(float型、雙精度(double型)和長雙精度(longdouble型)1.7E+30816比特數(字節數longfloatx,y;(x,y為單精度實型量){floata,b;}{floata;}bTurboC規定小數后最多保留六位,其余部實型常數的類字符型數字符常'a'、'b'、'='、'+'、字符常量只能用單引號括起來,不能引號或其它括號字符常量只能是單個字符,不能是字符字符可以是字符集中任意字符。但數字被定義為字符型之后就不能參與數值運如'5'5是不同的。'5'轉義字常用的轉義字符及其ASCII代98反斜線符7廣義地講,C語言字符集中的任何一個字符均可用轉義字符來表示。表中的\ddd和\xhh{inta=5;b=6; }字符變charchar字符數據在內存中的形式及使用方0111100111100001111001{}{}本例中,a,b被說明為字符變量并賦予字符值,C語言允許字符變量參與數值運算,字符串常字符串常量是由一對雙引號括起的字符序列。例如:"CHINA",“Cprogram”"$12.5"字符常量由單引號括起來,字符串常量由雙引號括起字符常量只能是單個字符,字符串常量則可以含一個或多個字符BASIC語言不同的。但是可以用1。增加的一個字節中存放字符"\0"(ASCII0)。這是字符串結束的標志。"Cprogram"Cprogram字符常量'a'和字符串常量"a"雖然都只有一個字符,但在內存中的情況是不同aa"a"在內存中占二個字節,可表示aa變量賦初在程序中常常需要對變量賦初值,以便使用變量。語言程序中可有多種方法為變量提1=12=2,……;inta=3;intcharch1='K',ch2='P';{}各類數值型數據之間的混合運若參與運算量的類型不同,則先轉換成同一類型,然后進行運int型和long型運算時,先把int量轉成long型后再進行運算。要先轉換成double型,再作運算。charshort型參與運算時,必須先轉換成int ints,r=5;}doubles為整型,故賦值結果仍為整型,舍去了小數部分。(類型說明符 (表達式(float) a轉換為實 類型說明符和表達式都必須加括號(單個變量可以不加括號),如把(int)(x+y)floatf=5.75;}改變。因此,(int)f的值為5(刪去了小數)f的值仍為5.75。算術運算符和算術表達C運算符邏輯運算符:用于邏輯運算。包括與(&&)、或(||)、非(!)三種求字節數運算符:用于計算數據類型所占的字節數(sizeof)算術運算符和算術表達算,如-x,-5等具有左結合性。}本例中,20/7,-20/720.0/7和-20.0/7由于有實數}算術表達式:用算術運算符和括號將運算對象(也稱操作數)C語(x+r)*8-合性(自右至左)。例如算術運算符的結合性是自左至右,即先左后右。表達式x-y+z則y應先與“-”號結合,執行x-y運算,然后再執行+z的運算。這種自左至右的結合算符是賦值運算符。如x=y=z,由于“=”的右結合性,應先執行y=z再執行x=(y=z)運算。(類型說明符)表達式(float) a轉換為實 x+y的結果轉換為整1運算符記為“--1。 i自減1后再參與其它運算。 i參與運算后,i的值再自減1main(){inti=8;printf("%d\n",--printf("%d\n",i--printf("%d\n",-printf("%d\n",-i--}i的初值為82i1后輸出故931后輸出故為84行輸i為8之后再加1(9)5行輸i9之后再減1(8)6行輸出-8之后再加1(9),第7行輸出-9之后再減1(為8)。inti=5,j=5,p,q;}這個程序中P=(i++)+(i++)+(i++)應理解為三個i相加,故P15。然后i再自13i8q的值則不然,q=(++j)+(++j)+(++j)q先自1,再參與運算q1三次8,三8相加的和為24,j的最后值仍8。賦值運算符和賦值表達賦值運算=

C中,把“=類型轉實型賦予整型,舍去小數部分。前面的例子已經說明了這種情0)。inta,b=322;charc1='k',c2;}bc2后取其低八位成為字符型(b的低八位為66ASCII碼對應于字符B)。在賦值符“”之前加上其它二目運算符可構成復合賦值符。如+=,-=,*=,%=,<<=,>>=,&=,^=,|=變量雙目運算符=表達式 等價于a=a+5 等價于r=r%p逗號運算符和逗號表達起來組成一個表達式,稱為逗號表達式。}12也可以又是逗號表達式。表達式1,表達式2,…表達式n小C的數據類基本類型的分類及特1C2-short2-long4 2unsigned448常量后L或l U或u F或f 常量類數據類型轉運算符優先級和結合表達最簡單的C程序設計—順序程序設 C語句概 賦值語 數據輸入輸出的概念及在C語言中的實 字符數據的輸入輸 putchar函數(字符輸出函數 格式輸入與輸 scanf函數(格式輸入函數 順序結構程序設計舉 最簡單C程序設計—順序程序設認識,為后面各章的學習打下基礎。C語句概源源程序文件源程序文件源程序文件C程x=y+z;賦值語句; 1,i1被調函數體中的語句,求取函數值(在后面函數中再詳細介紹)。printf("CProgram");的語句定義符組成。C語言有九種控制語句。可分成以下三類:{x=y+z;}復合語句內的各條語句都必須以分號“;”結尾,在括號“}”外不能加分號;賦值語變量=變量=…=表達式intintintif((x=y+5)>0)下述語句是的:if((x=y+5;)>0)數據輸入輸出的概念及在C所謂輸入輸出是以計算機為主體而言#include<stdio.h或#include#include<stdio.h或#include字符數據的輸入輸putchar函數(字符輸出函數 (輸出大寫字母A) putchar(‘\101’);(也是輸出字符A) 或#includechara='B',b='o',c='k';} 函數(鍵盤輸入函數charc;main(){charprintf("inputacharacter\n");}使用本函數前必須包含文件“stdio.h”完畢再返回TC屏幕。格式輸入與輸 函數(格式輸出函數printf函數稱為格式輸出函數,其關鍵字最末一個字母f即為“格式”(format)之意。其要求在使用printf函數之前必須包含stdio.h文件。printf(“格式控制字符串”,輸出表列{inta=88,b=89;printf("%d}本例中四次輸出了a,b值,但由于格式控制串不同,輸出的結果也不相同。第四行的輸出語句格式控制串中,兩格式串%da,b間有一個空格。第五行的printf語句格式控制串中加入的是非格式字符逗號,因此輸出的在TurboC doufcs -+#則按實際位數輸出,若實際位數少于定義的寬度則補以空格或0。{intfloatb=123. doublec= chard='p';}a“%5d”5,a值為15只有兩位故補三個空格。第八行中以四種格式輸出實型量b的值。其中“%f”和“%lf”格式的輸出相同,說明“l”符對“f”類型無影響。“%5.4lf”5,精度輸出雙精度實數,“%8.4lf”由于指定精度為4位故截去了超過4位的部分。第十行輸出字符d,其中“%8c”8p74.5】inti=8;}4.6】inti=8;}printfprintf7。最后才求輸出表列中的第一項“++i”i18。 函數(格式輸入函數scanf同,C語言也允許在使用scanf函數之前不必包含stdio.h文件。scanf(“格式控制字符串”,地址表列&a,ab變量的地址是C編譯系統分配的,用戶不必關心具體的地址是多少。inta,b,c;}在本例中,由于scanf函數本身不能顯示提示串,故先用printf語句在屏幕上輸出提示,請用戶輸入a、b、c的值。執行scanf語句,則退出TC屏幕進入用戶屏幕等待用戶輸78或789格式字符doxufcsscanf("%d%*d當輸入為 3時,把1賦予a,2被跳過,3賦予b句輸入小數為2位的實數。scanfscanf("%d",a);是的,應改為scnaf("%d",&a);才是合法的。用空格,TAB或回車作間隔。C編譯在碰到空格,TAB,回車或數據(如對“%d”輸入“12A”時,A即為數據)時即認為該數據結束。 則把'd'賦予a,b,'ec。時,才能把'd'賦于a,'eb,'f'c。scanf("%c%ccharprintf("inputcharactera,b\n");}可輸出MN兩字符。charprintf("inputcharactera,b\n");scanf("%c%c",&a,&b);} intprintf("inputanumber\n");}longprintf("inputalonginteger\n");}inputalongcharprintf("inputcharactera,b,c\n");scanf("%c%c%c",&a,&b,&c);}main(){inta;longb;floatf;doubled;charc;}順序結構程序設計舉s(ss(sa)(sb)(s{floata,b,c,s,area;}

b b2b b2 2b2qb2 2a {float}分支結構程 關系運算符和表達 關系運算符及其優先次 關系表達 邏輯運算符和表達 邏輯運算符極其優先次 邏輯運算的 邏輯表達 條件運算符和條件表達 switch語 程序舉 分支結構程關系運算符和表達關系運算符及其優先次 <=小于或等于 >=大于或等于5)==等于6)!=符,高于賦值運算符。在六個關系運算符中,<,<=,>,>=的優先級相同,高于==和!=,==關系表達5>0的值為“真”,即1charinti=1,j=2,k=3;}在本例中求出了各種關系運算符的值。字符變量是以它對應的ASCII碼參與運算的。對于含多個關系運算符的表達式,如k==j==i+5,根據運算符的左結合性,先計算k==j,該式不成立,其值為0,再計算0==i+5,也不成立,故表達式值為0。邏輯運算符和表達邏輯運算符極其優先次&&與運算||或運算 ((&&“&&”和“||”低于關系運算符,“!”高于算術運算a>b&&邏輯運算的5>0&&或運算||雖然C編譯在給出邏輯運算值時,以“1”代表“真”,“0”代表“假”5||0的值為“真”,即1邏輯表達表達式邏輯運算符表達式邏輯表達式的值是式中各種邏輯運算的最后值,以“1”和“0”分別代表“真”和“假”charinti=1,j=2,k=3;}本例中!xy分別0,!x*!y0,故其輸出0x0,故!!!x的邏x||i&&j-3邏輯值為1i<j&&x<yi<j的值1x<y0故表達式的值為1,0相與,最后為0i==5&&c&&(j=8)式,由i==5為假,即值0,該表達式由兩個與運算組成,所以整個表達式的值為0。對于式x+y||i+j+k由于x+y的值為非0,故整個或表達式的值為1。ifC語言的if語句有三種基本形式。if語句的三種形if(intprintf("\ninputtwonumbers: if(max<b)max=b;}maxb,bmaxmaxmaxinta,printf("inputtwonumbers: }ifelseif(語句elseif(語句…elseif(表達式語句后續程序。if-else-if語句的執行過程如圖3—3所示。【例5.5】charprintf("inputacharacter: printf("Thisisacontrolcharacter\n");elseif(c>='0'&&c<='9')printf("Thisisadigit\n");elseif(c>='A'&&c<='Z')printf("Thisisacapitalletter\n");elseif(c>='a'&&c<='z')printf("Thisisasmallletter\n");printf("Thisisanother}本例要求判別鍵盤輸入字符的類可以根據輸入字符的ASCII碼來判別類ASCII碼表可知ASCII值小32的為控制字符。在“0”和“9”之間的為數字,在“A”和“Z”之間為大寫字母,在“a”和“z”之間為小寫字母,其余則為其它字符。這是一個多分支選擇的問題,用if-else-if語句編程,判斷輸入字符ASCII碼所在的范圍,分別給出不在三種形式的if語句中,在if關鍵字之后均為表達式。該表達式通常是邏輯表達式或關系表達式,但也可以是其它表達式,如賦值表達式等,甚至也可以是一個變量。if(a=5)if(b)在if語句的三種形式中,所有的語句應為單個語句,如果要想在滿足條件時執行一組if語句的if語句;況,這時要特別注意ifelse的配對問題。intprintf("pleaseinputA,B: if(a>b)printf("A>B\n"); }三種選擇即A>B、A<BA=B。這種問if-else-if語句也可以完成。而且程序更加清晰。intprintf("pleaseinputA,B: if(a==b)printf("A=B\n");elseif(a>b)printf("A>B\n");elseprintf("A<B\n");}條件運算符和條件表達 表達式1?表達式2:表達式 12if(a>b)max=a;elsemax=b;intprintf("\ninputtwonumbers: }語句語句}:語句語句case后的語句。如表達式的值與所有case后的常量表達式均不相同時,則執行defaultintprintf("inputintegernumber: switchcase1:printf("Monday\n");case2:printf("Tuesday\n");case4:printf("Thursday\n");case5:printf("Friday\n");case6:printf("Saturday\n");case7:printf("Sunday\n");}}本程序是要求輸入一個數字,輸出一個英文單詞。但是當輸入3之后,卻執行了case3以及以后的所有語句,輸出了Wednesday及以后的所有單詞。這當然是不希望的。為什么會達式”只相當于一個語句標號,表達式的值和某標號相等則轉向該標號執行,但不能在執switchcase還提供了一種break語句,于跳出switch語句,break語句只有關鍵字break,沒有參數。在后面還將詳細介紹。修改例題的程序,在每一case語句之后增break語句,使每一次執行之后均可跳出switch語句,從而避免輸出不應有的結果。intprintf("inputintegernumber: switchcase1:printf("Monday\n");break;case2:printf("Tuesday\n");break;case4:printf("Thursday\n");break;case5:printf("Friday\n");break;case6:printf("Saturday\n");break;case7:printf("Sunday\n");break;}}程序舉intprintf("inputthreenumbers: }本程序中,首先比較輸入的a,b的大小,并把大數max,小數裝min中,然后再與c比較,若maxc,則cmaxcmin,則把cminmax內總是最大數,而minmax和min的值即可。【例4.12】計算器程序。用戶輸入運算數和四則運算符,輸出計算結果。charc;printf("inputexpression:a+(-,*,/)b\n");case'+':case'-':printf("%f\n",a-case'*':case'/':printf("%f\n",a/b);break;default:printf("inputerror\n");}}循環控 概 do-while語 循環的嵌 幾種循環的比 continue語 程序舉 循環控概gotogoto語句構成循goto語句標號;其中標號是一個有效的標識符,這個標識符加上一個“:”一起出現在函數內某處,執行個函數中,但可以不在一個循環層中。通常goto語句與if條件語句連用,當滿足某一條件時,程序跳到標號處運行。goton { gotoloop;}}while語n {{}}#include<stdio.h>intprintf("inputastring:\n");while(getchar()!='\n')n++;}intprintf("\ninputn: while(n--printf("%d}do-whilewhilen {{}}{intsum=0,i;}}{intsum=0,i;}}forfor(表達式1;表達式2;表達式3)語句3)步;若其值為假(0),則結束循環,轉到第5)步。for關系表達式,它決定什么時候退出循環;循環變量增量,定義循環控制變量每循環一次后按什么方式變化。這三個部分之間用;分開。for(i=1;i<=100;}1;1;}for循環中的“表達式1(循環變量賦初值)”、“表達式2(循環條件)”和“表達式3(循環的嵌{inti,j,k;printf("ijk\n");for(i=0;i<2;for(j=0;j<2;j++)for(k=0;k<2;k++)printf(“%d%d%d\n",i,j,}幾種循環的比goto型循whiledo-whilewhiledo-while語句之前完成,而for語句可以在表達式1中實現循環變量的初始化。break語break語句通常用在循環語句和開關語句中。當break用于開關語句switch中時,可使程序跳switch而執switch以后的語句;如果沒有break語句,則將成為一個死循環而無法退出。break在switch中的用法已面介紹開關語句時的例子中碰到,這里不再舉例。breakif{charc; { {} printf("TheNo.is%d\n",}printf("The}breakcontinue{}{} {char {printf("%c\n",c);}}程序舉1111 公式求π

{intfloatn,t,pi;}}N-S流程圖:{intm,i,k;printf(“%disaprimenumber\n”,m);printf(“%disnotaprime}{intm,i,k,n=0;{}}數 一維數組的定義和...........................................................................................一維數組的定義方 一維數組元素的.......................................................................................一維數組的初始 一維數組程序舉 二維數組的定義和...........................................................................................二維數組的定 二維數組元素的.......................................................................................二維數組的初始 二維數組程序舉 字符數 字符數組的定 字符數組的初始 字符數組的.............................................................................................字符串和字符串結束標 字符數組的輸入輸 字符串處理函 程序舉 本章小 數一維數組的定義和一維數組的定義方int float charch[20]; ch,20{inta;}05a[0],a[1],a[2],a[3],a[4]。#defineFD5{int}{intn=5;int}int一維數組元素的能逐個地使用下標變量,而不能一次整個數組。for(i=0;i<10;i++){inti,a[10];printf("%d}{inti,a[10];}{inti,a[10];printf("%dprintf("\n%d}量。當然第二個for語句也可以這樣作,C語言允許用表達式表示下標。程序中最后一個printfa[5]的值,可以看出當下標不為整數時將自動取整。一維數組的初始inta[10]={0,1,2,3,4,5,6,7,8,9intintintintint一維數組程序舉{inti,max,a[10];printf("input10numbers:\n");}本例程序中第一個for語句逐個輸10個數到數組aa[0]max中。在第二個for語句中,從a[1]到a[9]逐個max中的內容比較,若比max的值大,則把該maxmaxmax的值。{intprintf("\ninput10numbers:\n");if(q<a[j]){p=j;q=a[j];}a[p]=s;}}}forfor句。第一個for語句用于輸入10個元素的初值。第二個for語句用于排序。本程序的排序采用逐個比較的方法進行。在i次循環時,把第一個元素的下標i賦于p,而把該下標變量值a[i]賦于q。然后進入小循環,從a[i+1]起到最后一個元素止逐個與a[i]作比較,有比a[i]大者則將其下標送p,元素值送q。一次循環結束后,p即為最大元素的下標,q則為該元素值。若此時i≠p,說明p,q值均已不是進入小循環之前所賦之值,則交換a[i]和a[p]之值。a[i]i+1二維數組的定義和二維數組的定或造。下,組int量共有3×4個,即:二維數組元素的【例7.6】一個學組有5個人,每個人有三門課的考試成績。求全組分科的平均成績和張王李趙周C得各分科平均成績,設變量average為全組各科總平均成績。編程如下:{printf("inputscore\n");{}averageprintf("total:%d\n",average);}5v[i]之中,這就是該門課v[0],v[1],v[2]3二維數組的初始inta[5][3]={{80,75,92},{61,65,71},{59,63,70},{85,87,90},{76,77,85}inta[5][3]={{inti,j,s=0,int}printf("total:%d\n",average);}int102030a0100030intint如二維數組a[3][4],可分解為三個一維數組,其數組名分別為:一維數組a[0]的元素為a[0][0],a[0][1],a[0][2],a[0][3]。二維數組程序舉字符數字符數組的定charchar字符數組的初始charc[10]={‘c’, ’,‘p’,‘r’,‘o’,‘g’,‘r’,數組 c[1]的值為charc[]={`c`,`C9字符數組的{intchar{}}字符串和字符串結束標charc[]={'c','charc[]={"Ccharc[]="C上面的數組c在內存中的實際存放情況為:Cprogram般無須指定數組的長度,而由系統自行處理。字符數組的輸入輸{}{charst[15];}inputthisisa{charst1[6],st2[6],st3[6],st4[6];printf("inputstring:\n");printf("%s%s%s%s\n",st1,st2,st3,st4);}設數c首地址為2000,也就是說c[0]單元地址為2000。則數組c代表這個首地址。因此在c前面不能再加地址運算符&。如寫作scanf("%s",&c);則是錯誤的。在執行函數printf("%s",c)時,按數組名c找到首地址,然后逐個輸出數組中各個字符直到遇到字符字符串處理函比較、轉換、、搜索幾類。使用這些函數可大大減輕編程的負擔。用于輸入輸出的字符串函數,在使用前應包含頭文件"stdio.h",使用其它字符串函數則應包含頭文件字符串輸出函數格式:puts【例7.12】{}printfprintf格式: 【例7.13】{char}scanf格式:strcat11后的串標志“\0”。本函數返回值是字符數組1的首地【例7.14】{staticcharst1[30]="Mynameis";intst2[10];printf("inputyourname:\n");}格式:strcpy1字符數名【例7.15】{charst1[15],st2[]="CLanguage";}格式:strcmp(1,字符串1=字符串2,返回值=0;【例7.16】{intstaticcharst1[15],st2[]="CLanguage";printf("inputastring:\n");if(k>0)printf("st1>st2\n");if(k<0)printf("st1<st2\n");}本程序中把輸入的字符串和數組st2的串比較,比較結果返回到k根k值再輸dbaseASCII“dBASE”大于“CLanguage”k〉0,格式:strlen(【例7.17】{intstaticcharst[]="Clanguage";printf("Thelenthofthestringis}程序舉【例個比插入數小的元素i時,該元前即為插入位置。然后從數組最后一個元素開始到該元素{int{p=i;q=a[i];{}printf("%d}}本程序首先對數組a10個數從大到小排序并輸出排序結果。然后輸入要插入的整數n。再for語句n和數組元素逐個比較,如果發n>a[i]時,則由一個內循環把i以下各元素值順次后移一個單元。后移應從后向前進行(從a[9]開始到a[i]為止)。后移結束跳出外循環。插入點為i,把n賦予a[i]即可。如所有的元素均大于入數,則并未進行過后移工作。此時i=10,結果是把n賦于a[10]。最后一個循環輸出插入數后的數組各元素a=(3102512b=(87108{intintb[3],i,j,l;{printf("\narraya:\n");{for(j=0;j<=3;j++)}baforab。【例{inti,j,p;printf("inputcountry'sname:\n");{}}cs[5][20]為二維字符數組,可分為五cs[i]sti賦本章小稱為下標變量。數組的類型是指下標變量取值的類型。函 概 函數定義的一般形 函數的參數和函數的 形式參數和實際參 函數的返回 函數的調 函數調用的一般形 函數調用的方 被調用函數的和函數原 函數的嵌套調 函數的遞歸調 數組作為函數參 局部變量和全局變 局部變 全局變 變量的類 動態方式與靜態動態方 用static局部變 register變 概main(),但實用程序往往由多個函數組成。函數是C源程序的基本模塊,通過對函提供了極為豐富的庫函數TurboC,MSC都提供了三百多個庫函數),還允許用戶建立自己printf、scanf、getchar、putchar、gets、puts、strcat等函數均屬此類。“void”。 執行總是從main函數開始,完成對其它函數的調用后再返回到main函數,最后由main函數結束整個程序。一個C源程序必須有,也只能有一個主函數main。函數定義的一般形 }void{printf("o,world}被其它函數調用時,輸出oworld字符串。形式參數表列 形式參數表列 }intmax(inta,int{if(a>b)returna;elsereturnb;}值作為函數的值返回給主調函數。有返回值函數中至少應有一個return在C程序中,一個函數的定義可以放在任意位置,既可放在主函數main之前,也可放mainintmax(inta,int{elsereturnb;}{intmax(inta,intb);intx,y,z;printf("inputtwonumbers:\n");}程序15max函數定義。進入主函數后,因為準備max函數,故先對max函數進行說明(程序第8行)。函數定義和函數說明并不是一回事,在后面還要專門討max函數,并把x,y中的值傳送給maxa,b。max函數執行的結果(ab)將返回給變量z。最后由主函數輸出z的值。函數的參數和函數的形式參數和實際參{int}ints(int{int}為實參,在調用時傳送給s函數的形參量n(注意,本例的形參變量和實參變量的標識符都的初值也為100,在執行函數過程中,形參n的值變為5050。返回主函數之后,輸出實參n的值仍為100。可見實參的值不隨形參的變化而變化。函數的返回如調用正弦函數取得正弦值,調用例8.1的max函數取得的最大數等。對函數的值(或稱函函數的值只能通過returnreturnreturn表達式 return(表達式); 該語句的功能是計算表達式的值并返回給主調函數在函數中允許有多個return不返回函數值的函數,可以明確定義為“空類型”,類型說明符為“void”。如voids(int{}例如,在定義s為空類型后,在主函數中寫下述語句函數的調函數調用的一般形 函數調用的方算。這種方式要求函數是有返回值的。例如:z=max(x,y)是一個賦值表達式,把max的返回值賦予變量z。函數語句:函數調用的一般形式加上分號即構成函數語句。例如:printf("%d",a);scanf("%d",&b);都是以函數語句的方式調用函數。為實參進行傳送,因此要求該函數必須是有返回值的。例如: 介紹printf函數時已提到過,這里從函數調用的角度再強調一下。{int}877898898,7,7,8。上述問題如還不理解,上機一試就明白了。被調用函數的和函數原在主調函數中調用某函數之前應對該被調函數進行說明(,這與使用變量之前要 類型說明符被調函數名(類型形參,類型形參…); 類型說明符被調函數名(類型,類型…); intmax(inta,int mainmaxintmax(inta,intb)。charstr(inta);floatf(floatb);{}charstr(int{}floatf(float{}strf函數的嵌套調圖表示了兩層嵌套的情形。其執行過程是:執行main函數中調用a函數的語句時,即轉去執行a函數,在a函數中調用b函數時,又轉去執行b函數,b函數執行完畢返回a函數的斷點繼續執行,a函數執行完畢返回main函數的斷點繼續執行。 f1,另一個是用來計算階乘值的然后返回f1,再返回主函數,在循環程序中計算累加和。longf1(int{intk;longreturnr;}longf2(int{inti;return}{inti;}f2i值作為實參調用函數f1i值。在f1中又發生對函數f2i的值作為實參去調f2,在f2中完成求i的計算。22 22 函數的遞歸調intf(int{inty;}用遞歸法計算n!可用下述公式表示:n!=1(n=0,1)n×(n-1)!longff(int{longif(n<0)printf("n<0,inputerror");elseif(n==0||n==1)f=1;}{intn;longprintf("\ninputainteagernumber:\n");}程序中給出的函數ff是一個遞歸函數。主函數調用ff后即進入函數ff執行,如果n<0,n==0n=1ff函數自身。由于每次遞歸調用語句即為y=ff(5)ff函數n=5,不等于01f=ff(n-1)*n,即f=ff(5-1)*5。該語句對ff作遞歸調用即ff(4)。回主調函數。ff(1)的函數返回值為1,ff(2)的返回值為1*2=2,ff(3)的返回值為2*3=6,ff(4)的返回值為6*4=24,最后返回值ff(5)為24*5=120

溫馨提示

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

評論

0/150

提交評論