C語言程序設(shè)計(慕課版)PPT全套完整教學(xué)課件_第1頁
C語言程序設(shè)計(慕課版)PPT全套完整教學(xué)課件_第2頁
C語言程序設(shè)計(慕課版)PPT全套完整教學(xué)課件_第3頁
C語言程序設(shè)計(慕課版)PPT全套完整教學(xué)課件_第4頁
C語言程序設(shè)計(慕課版)PPT全套完整教學(xué)課件_第5頁
已閱讀5頁,還剩370頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

C語言程序設(shè)計為什么要學(xué)C語言劉琨C語言程序設(shè)計(慕課版)PPT全套完整教學(xué)課件學(xué)習(xí)任務(wù)初步理解學(xué)習(xí)C語言的意義。了解常用計算機語言的特點及主要應(yīng)用領(lǐng)域。這門語言值得一學(xué)嗎?C語言教給我們的事C語言程序“編輯”體驗在D盤根目錄下建立名為“chap1”的子文件夾。在D:\chap1文件夾中,建立一個名為“hello.c”的文件。開發(fā)工具安裝Dev-C++VisualC++C語言程序的開發(fā)流程ThanksC語言程序設(shè)計最簡單的C語言程序劉琨學(xué)習(xí)任務(wù)重點解釋第1章的HelloWorld源代碼C程序的構(gòu)成C程序的注釋(1)以//開始的單行注釋(2)以/*開始,以*/結(jié)束的塊式注釋。(3)注釋可以放在任何地方。(4)注釋和代碼一定要同步更新。(5)注意注釋的起始和結(jié)束對,在“/*”,“*/”兩個字符之間是沒有空格的。(6)注釋內(nèi)容不能再出現(xiàn)注釋對(7)適量而恰當(dāng)?shù)淖⑨屖橇己玫木幊田L(fēng)格的重要體現(xiàn)C程序必須有main函數(shù)主函數(shù)(每一個C程序必須有且僅有一個main函數(shù))main函數(shù)就是C程序的入口點。1voidmain()2{3 printf("HelloWorld!"); 4 getchar();5} C程序必須有main函數(shù)(1)編寫一個空的main函數(shù)。(2)修改main函數(shù)的名稱。(3)編寫兩個main函數(shù)。調(diào)用函數(shù)在屏幕上顯示文字printf函數(shù)的功能是把小括號里的文字原樣打印在屏幕上

voidmain()

{

printf("HelloWorld!");

}函數(shù)的名稱分號結(jié)束函數(shù)的參數(shù)函數(shù)聲明及其作用

函數(shù)在被調(diào)用之前,一定要讓編譯器知道函數(shù)原型,這樣編譯器才知道有哪些函數(shù)名,該函數(shù)需要些什么樣類型的參數(shù),返回什么樣類型的值。告訴編譯器函數(shù)原型的動作稱為函數(shù)聲明,如下所示。返回類型函數(shù)名(參數(shù)表);warningC4013:'printf_format'undefined;如果不知道,就該報錯了#include預(yù)處理器指示符試驗1:將第一行代碼刪除掉。就是去掉“#include<stdio.h>”,編譯看出現(xiàn)什么現(xiàn)象試驗2:去掉#include語句自行添加函數(shù)聲明。#include的作用#include的作用是告訴編譯器,在編譯前要做些預(yù)先處理:將后面<>中的文件內(nèi)容包含到當(dāng)前文件內(nèi)。所謂包含,是指將<>中列出的文件的內(nèi)容復(fù)制到當(dāng)前文件里。良好的代碼規(guī)范良好的注釋,解釋清楚此程序的功能和變量含義;整齊的縮進(jìn),讓代碼的邏輯關(guān)系分外明朗適當(dāng)?shù)目招?,使程序的結(jié)構(gòu)凸現(xiàn);恰當(dāng)?shù)目崭?,讓可讀性更上一層樓;每行最多只有一條語句。

“難讀”的程序#include<stdio.h>main(t,_,a)char*a;{return!0<t?t<3?main(-79,-13,a+main(-87,1-_,main(-86,0,a+1)+a)):1,t<_?main(t+1,_,a):3,main(-94,-27+t,a)&&t==2?_<13?main(2,_+1,"%s%d%dn"):9:16:t<0?t<-72?main(_,t,"@n'+,#'/*{}w+/w#cdnr/+,{}r/*de}+,/*{*+,/w{%+,/w#q#n+,/#{l+,/n{n+,/+#n+,/#;#q#n+,/+k#;*+,/'r:'d*'3,}{w+Kw'K:'+}e#';dq#'lq#'+d'K#!/+k#;q#'r}eKK#}w'r}eKK{nl]'/#;#q#n'){)#}w'){){nl]'/+#n';d}rw'i;#){nl]!/n{n#';r{#w'rnc{nl]'/#{l,+'K{rw'iK{;[{nl]'/w#q#n'wknw'iwk{KK{nl]!/w{%'l##w#'i;:{nl]'/*{q#'ld;r'}{nlwb!/*de}'c;;{nl'-{}rw]'/+,}##'*}#nc,',#nw]'/+kd'+e}+;#'rdq#w!nr'/')}+}{rl#'{n'')#}'+}##(!!/"):t<-50?_==*a?putchar(31[a]):main(-65,_,a+1):main((*a=='/')+t,_,a+1):0<t?main(2,2,"%s"):*a=='/'||main(0,main(-61,*a, "!ek;dci@bK'(q)-[w]*%n+r3#l,{}:nuwloca-O;m.vpbks,fxntdCeghiry"),a+1);}優(yōu)秀程序員的基本素質(zhì)扎實的基礎(chǔ)。數(shù)據(jù)結(jié)構(gòu)、離散數(shù)學(xué)、編譯原理、計算機原理、操作系統(tǒng)、數(shù)據(jù)庫原理一個都不能少!不鉆牛角尖。當(dāng)你遇到障礙的時候,不妨?xí)簳r遠(yuǎn)離電腦,看看窗外的風(fēng)景,聽聽輕音樂,和朋友聊聊天。換一個角度考慮問題。韌性和毅力。這也許是"高手"和一般程序員最大的區(qū)別。高手們并不是天才,他們是在無數(shù)個日日夜夜中磨練出來的。ThanksC語言程序設(shè)計什么是程序劉琨什么是程序輸入—處理—輸出:這就是程序!printf

函數(shù)的一般格式printf(格式控制,輸出表列)“格式控制”里除了轉(zhuǎn)換說明外,其它字符原樣輸出;“輸出表列”:輸出的一些數(shù)據(jù);返回值大于0表示輸出的字符個數(shù),小于0表示輸出錯誤。scanf

函數(shù)的一般形式scanf(格式控制,地址表列);“格式控制”里除了轉(zhuǎn)換說明外,其它字符原樣輸入;“地址表列”必須是變量的地址;成功返回輸入到內(nèi)存的數(shù)據(jù)個數(shù),失敗返回0。/*源文件:demo4_8.c*/#include<stdio.h>#include<stdlib.h>intmain(void){intx,y;floatz;printf("請輸入x,y,z的值(以逗號隔開):");scanf("%d,%d,%f",&x,&y,&z);printf("你輸入的數(shù)是:x=%d,y=%d,z=%f\n",x,y,z);

system("PAUSE");return0;}結(jié)構(gòu)化程序設(shè)計結(jié)構(gòu)化程序設(shè)計的思想是:把一個需要解決的復(fù)雜問題分解成若干模塊來處理,每個模塊解決一個小問題,這種分而治之的方法大大降低了程序設(shè)計的難度。結(jié)構(gòu)化程序設(shè)計的核心問題是算法和控制結(jié)構(gòu)。所謂算法,指的是解決問題時的一系列方法和步驟。結(jié)構(gòu)化程序設(shè)計提供了3種控制結(jié)構(gòu),分別是順序結(jié)構(gòu)、分支結(jié)構(gòu)和循環(huán)結(jié)構(gòu)。順序結(jié)構(gòu)與流程圖設(shè)計一個程序:先得到圓的半徑,然后計算并顯示圓的面積和周長。算法的流程圖表示符號名稱含義開始/結(jié)束框程序的開始與結(jié)束,每一流程圖只有一個起止點流程處理框要執(zhí)行的處理判斷框決策或判斷流向線表示執(zhí)行的方向與順序輸入/輸出框表示數(shù)據(jù)的輸入/輸出選擇結(jié)構(gòu)當(dāng)用戶輸入的半徑是負(fù)數(shù)或零的時候,程序的輸出則是錯誤的。這一錯誤歸根結(jié)底在于算法的設(shè)計有瑕疵,因為算法沒有處理輸入有誤的情況。為此,對算法進(jìn)行改進(jìn),如圖所示。循環(huán)結(jié)構(gòu)能否只讓該程序執(zhí)行一次,但要求它提供計算多個圓的面積和周長的功能,也即希望程序有“循環(huán)”計算的能力。習(xí)題1.已知一個矩形的寬和長,編寫一個程序求其面積。要求從鍵盤輸入矩形的寬和長,將計算得出的面積輸出至屏幕。2.從鍵盤輸入兩個數(shù),交換兩個數(shù)的值,再輸出至屏幕。3.從鍵盤輸入一個小寫字母,要求將其轉(zhuǎn)換為大寫字母后輸出。4.現(xiàn)有函數(shù)y=5x+3,從鍵盤輸入一個數(shù),輸出對應(yīng)的y值。5.循環(huán)從鍵盤輸入3個數(shù),編寫一個程序計算其總和及平均值。ThanksC語言程序設(shè)計C語言基礎(chǔ)—數(shù)據(jù)類型、常量、及變量劉琨二進(jìn)制八進(jìn)制十六進(jìn)制十進(jìn)制二進(jìn)制:0110八進(jìn)制:0123456710十進(jìn)制:012345768910十六進(jìn)制:0123456789abcdef10進(jìn)制基數(shù)進(jìn)制的轉(zhuǎn)換二進(jìn)制轉(zhuǎn)八進(jìn)制列表二進(jìn)制轉(zhuǎn)十六進(jìn)制列表二進(jìn)制轉(zhuǎn)十六進(jìn)制規(guī)則八進(jìn)制轉(zhuǎn)十六進(jìn)制規(guī)則課堂練習(xí)表示數(shù)據(jù)的字節(jié)和位1字節(jié)

=8位1K字節(jié)

=1024字節(jié)=210字節(jié),也就是1K=10241M字節(jié)

=1024K字節(jié)=1024×1024字節(jié)=220字節(jié),也就是1M=1024K1G字節(jié)

=1024M=1024×1024×1024字節(jié)=230字節(jié),也就是1G=1024M數(shù)據(jù)類型分類關(guān)鍵字?jǐn)?shù)據(jù)類型基本類型整型短整型shortint整型int長整型longint浮點型單精度浮點float雙精度浮點double字符型char構(gòu)造類型數(shù)組-結(jié)構(gòu)體struct共用體union枚舉類型enum指針類型-空類型void類型字節(jié)數(shù)取值范圍char1-127~127unsignedchar10~255int(基本整型)4-2147483648~214483647,即-231~(231-1)unsignedint(無符號基本整型)40~4294967295,即0~(232-1)short(短整型)2-32768~32767,即(-215~215-1)unsignedshort(無符號短整型)20~65535,即0~(216-1)long(長整型)4-2147483648~2147483647,即-231~(231-1)unsignedlong(無符號長整型)40~4294967295,即0~(232-1)float4+(3.4×10-38~3.4×1038)double8+(1.7×10-308~1.7×10308)整型變量賦值與輸出表給整型變量x賦值內(nèi)存地址(4個字節(jié))從低到高由左向右排列x的輸出值10x0019ff3c~0x0019ff3f010000001-10x0019ff3c~0x0019ff3fFFFFFFFF-142949672950x0019ff3c~0x0019ff3fFFFFFFFF-142949672960x0019ff3c~0x0019ff3f00000000042949672970x0019ff3c~0x0019ff3f010000001字符型數(shù)據(jù)在內(nèi)存中的存儲小寫字母a在內(nèi)存中存儲情況字符‘1’在內(nèi)存中存儲情況整數(shù)1在內(nèi)存中存儲情況整數(shù)運算1+1等于整數(shù)2,而字符‘1’+‘1’并不等于整數(shù)2或字符‘2’,而是ASCII為98的字符‘b’。實數(shù)型的有效數(shù)字類型字節(jié)數(shù)有效數(shù)字float47double816/*源文件:demo4_1.c*/#include<stdio.h>

intmain(void){floata; doubleb;

a=123456.789e4; b=123456.789e4;

printf("%f\n%f\n",a,b);

return0;}數(shù)據(jù)類型自動轉(zhuǎn)換數(shù)據(jù)類型強制轉(zhuǎn)換/*源文件:demo4_3.c*/1:#include<stdio.h>2:main()3:{4:intm=5;5:printf("m/2=%d\n",m/2);6:printf("(float)(m/2)=%f\n",(float)(m/2));7:printf("(float)m/2=%f\n",(float)m/2);8:printf("m=%d\n",m);9:}常量整型常量1000、12345、0、-12實型常量十進(jìn)制小數(shù)形式:如123.456、0.234、-34.23等指數(shù)形式:如12.34e3(代表12.34×103)字符常量普通字符,用單引號括起來的一個字符,如:’a’、’Z’、’3’、’?’。轉(zhuǎn)義字符字符串常量如”boy”,”123”符號常量用#define指令,指定用一個符號名稱代表一個常量。變量的概念inta=3;變量地址0x0012FF1C變量聲明(Variabledeclaration)聲明(定義)的基本語法:

數(shù)據(jù)類型

變量名1,變量名2…,變量名n;int

age;intnum1,num2,num3;數(shù)據(jù)類型有且只能有一個。一次可以定義一個或多個變量,多個變量間用逗號隔開。變量定義必須放在變量使用之前,必須放在函數(shù)開頭部分。變量的初始化(initialization)未初始化的變量的值是”0xcccccccc”在定義變量時對其進(jìn)行初始化時例:intnum=10;/*好的風(fēng)格*/intnum1=1,num2,num3;/*壞的風(fēng)格*/intnum1=num2=2;/*錯誤的初始化*/在定義后賦值例:intnum;num=10;如果對幾個變量賦予同一個值,則可以寫成如下所示。例:intx,y,z;x=y=z=10;可利用函數(shù)scanf從鍵盤上輸入值。例:doubled1,d2

scanf("%f%f",&d1,&d2);挑毛病#include"stdio.h"main(){ charstudent; floatscore; num=11015;//非法變量

stadent='a'; score=80; /*錯誤代碼*/ printf("thenum%ldthestudent%c\'sscore%f",num,stadent,score);}挑毛病#include"stdio.h"voidmain(){ intnum; printf("%d\n",num);/*沒有賦初值*/ return;}動手練習(xí)計算1+2+3+4+5。交換兩個變量的值Thanks第5章選擇結(jié)構(gòu)程序設(shè)計C語言程序設(shè)計if-else語句if(條件表達(dá)式)

語句1;if語句的語法格式:if-else語句的語法格式:if(條件表達(dá)式)

語句1;else

語句2;if語句課堂練習(xí)例:輸出兩個變量的最大值。if-elseif-else語句if(score>=85)grade='優(yōu)';elseif(score>=60)grade='及格';elsegrade='不及格';if(score>=85)

grade='優(yōu)';elseif(score>=70)grade='良';elseif(score>=60)grade='及格';elsegrade='不及格';“if-elseif-else”是多重條件結(jié)構(gòu)嵌套的優(yōu)雅化身,為了更直觀地了解什么是優(yōu)雅的結(jié)構(gòu),請先看下面的例子。if-elseif-else語句if(條件表達(dá)式1)

語句1;elseif(條件表達(dá)式2)

語句2;elseif(條件表達(dá)式3)

語句3;……else

語句n;語法格式如下:使用“if-elseif-else”語句,有以下2點需要注意:elseif語句可以有0個或多個。可以沒有else語句。在這種情況下,如果所有if語句后的條件都為false,則不執(zhí)行任何一個語句塊中的代碼。if語句中容易躲藏的Bugif(a=1){

printf(a);}if(1==a){

printf(a);}if(1==a);{

printf(a);}if(1==a){

printf(a);}switch語句switch(表達(dá)式){ case表達(dá)式1:

語句1; [break;] case表達(dá)式2:

語句2; [break;] ...... case表達(dá)式n:

語句n; [break;] default:

語句n+1; [break;]}switch語句課堂練習(xí)例:要求按照考試成績的等級輸出百分制分?jǐn)?shù)段,A等為85分以上,B等為70-84分,C等為60-69分,D等為60分以下。恰當(dāng)選用if語句和switch語句

if語句switch語句結(jié)構(gòu)結(jié)構(gòu)復(fù)雜。通過結(jié)構(gòu)嵌套實現(xiàn)多重分支結(jié)構(gòu)簡潔。專為多重嵌套量身定做條件可以有多個條件表達(dá)式僅有一個條件表達(dá)式邏輯關(guān)系可以處理復(fù)雜的邏輯關(guān)系僅能夠處理多個枚舉的邏輯關(guān)系數(shù)據(jù)類型適用任何數(shù)據(jù)類型僅能夠應(yīng)用整數(shù)、枚舉、字符串等類型恰當(dāng)選用if語句和switch語句if(score>=85) grade='優(yōu)秀';elseif(score>=75) grade='良好';elseif(score>=60) grade='合格';else grade='不及格';switch(sex){ case"女": alert("女"); break; case"男": alert("男"); break; default: alert("請選擇性別");}表達(dá)式的值是連續(xù)的線性判斷。表達(dá)式的值是有限枚舉的數(shù)據(jù)分支結(jié)構(gòu)中邏輯順序的優(yōu)化switch(levle){ case1: alert("普通會員"); break; case2: alert("版主"); break; case3: alert("管理員"); break; default: alert("請登錄");}把最有可能的條件放到前面。分支結(jié)構(gòu)中邏輯順序的優(yōu)化switch(day){ case1: alert("周一任務(wù)安排"); break; case2: alert("周二任務(wù)安排"); break; case3: alert("周三任務(wù)安排"); break; case4: alert("周四任務(wù)安排"); break; case5: alert("周五任務(wù)安排"); break; default: alert("休息");}順序?qū)π阅苡绊懖淮蟮那闆r下,遵循條件檢測的自然順序會更容易閱讀。關(guān)系運算符和關(guān)系表達(dá)式運算符含義<

小于>

大于<=小于等于>=大于等于==等于!=不等于if(a=1){

printf(a);}if(1==a){

printf(a);}條件運算符和條件表達(dá)式if(a>b) max=a;else max=b;max=(a>b)?a:b;表達(dá)式1?表達(dá)式2:表達(dá)式3條件運算符例:輸入一個字符,判別它是否為大寫字母,如果是,將它轉(zhuǎn)換成小寫字母;如果不是,不轉(zhuǎn)換。然后輸出最后得到的字符。邏輯運算符和邏輯表達(dá)式運算符含義舉例說明&&邏輯與a&&b如果a和b都為真,則結(jié)果為真,否則為假|(zhì)|邏輯或a||b如果a和b有一個以上為真,則結(jié)果為真,二者都為假時,結(jié)果為假!邏輯非!a如果a為假,則!a為真,如果a為真,則!a為假邏輯運算的真值表ab!a!ba&&ba||b真真假假真真真假假真假真假真真假假真假假真真假假邏輯運算示例謝謝ThankYou第六章循環(huán)結(jié)構(gòu)C語言程序設(shè)計本章內(nèi)容while語句do-while語句for語句while語句while語句是基本的重復(fù)操作語句。while語句的基本語法如下:while(循環(huán)判斷表達(dá)式){

循環(huán)體語句;}do-while語句do-while語句實際上是while循環(huán)結(jié)構(gòu)的另一種形式,只不過它把循環(huán)條件放在結(jié)構(gòu)的底部,而不是while語句頂部。其語法格式如下:do{

循環(huán)體語句;}while(循環(huán)判斷表達(dá)式);while和do-while比較

whiledo-while邏輯結(jié)構(gòu)先檢測條件,再執(zhí)行循環(huán)操作先執(zhí)行循環(huán)操作,再檢測條件。關(guān)鍵字僅包含while關(guān)鍵字,并以此開頭包含do和while關(guān)鍵字,語法特征在while關(guān)鍵字后的循環(huán)表達(dá)式之后不用分號do-while結(jié)構(gòu)的末尾必須使用分號來表示結(jié)束。do-while示例例:編寫一個二位整數(shù)相加的測試程序。要求程序隨機生成兩個二位整數(shù),提示用戶回答他們的相加結(jié)果,根據(jù)用戶回答給出對或錯的提示,并且允許用戶決定是否繼續(xù)答題,如果繼續(xù)就在出題,否則就結(jié)束。for語句for語句是對循環(huán)操作的一種優(yōu)化結(jié)構(gòu)。語句格式是:for(初值表達(dá)式;循環(huán)判斷表達(dá)式;更新表達(dá)式)

循環(huán)體語句;1234循環(huán)嵌套輸出5行123456789。設(shè)計程序輸出如下的圖案數(shù)字。打印如下圖的九九乘法表。跳轉(zhuǎn)語句break語句當(dāng)程序執(zhí)行到循環(huán)體中的break語句時就結(jié)束整個循環(huán)語句。continue語句跳過循環(huán)體中未執(zhí)行的語句,結(jié)束本次循環(huán)。然后跳至求循環(huán)判斷表達(dá)式,決定是否繼續(xù)循環(huán)。算術(shù)運算符運算符說明+-*/加減乘除運算。%取模運算,即計算兩個整數(shù)相除的余數(shù)。++自增運算,將操作數(shù)加1。若有intx=100;那么y=++x;//相當(dāng)于語句序列“x=x+1;y=x;”,則y的值為101,x的值為101。y=x++;//相當(dāng)于語句序列“y=x;x=x+1;”,則y的值為100,x的值為101。--自減運算,將操作數(shù)減1。若有intx=100;那么y=--x;//相當(dāng)于語句序列“x=x-1;y=x;”,則y的值為99,x的值為99。y=x--;//相當(dāng)于語句序列“y=x;x=x-1;”,則y的值為100,x的值為99。賦值運算符運算符說明=將右操作數(shù)的值賦值給左邊的變量+=將左邊變量遞增右操作數(shù)的值。如,a+=b,相當(dāng)于a=a+b-=將左邊變量遞減右操作數(shù)的值。如,a-=b,相當(dāng)于a=a-b*=將左邊變量乘以右操作數(shù)的值。如,a*=b,相當(dāng)于a=a*b/=將左邊變量除以右操作數(shù)的值。如,a+=b,相當(dāng)于a=a+b%=將左邊變量用右操作數(shù)的值取模。如,a/=b,相當(dāng)于a=a/b&=將左邊變量與右操作數(shù)的值按位與。如,a&=b,相當(dāng)于a=a&b|=將左邊變量與右操作數(shù)的值按位或。如,a|=b,相當(dāng)于a=a|b^=將左邊變量與右操作數(shù)的值按位異或。如,a^=b,相當(dāng)于a=a^b<<=將左邊變量左移,具體位數(shù)由右操作數(shù)的值給出。例如,a<<=b,相當(dāng)于a=a<<b>>=將左邊變量右移,具體位數(shù)由右操作數(shù)的值給出。例如,a>>=b,相當(dāng)于a=a>>b逗號運算符逗號運算符本質(zhì)上是多個運算組合在一起,從左至右逐個運算,最后將逗號右邊的值賦值給等號左邊的變量。x=1;y=(x=x+2,x=x*3,x-5);首先執(zhí)行逗號最左邊的表達(dá)式“x=x+2”,x的值變?yōu)?,其次執(zhí)行“x=x*3”,x值為9,最后執(zhí)行“x-5”操作,y的值為4。表達(dá)式副作用、括號運算符與求值順序盡量不要出現(xiàn)晦澀難懂,也不知道系統(tǒng)將怎樣執(zhí)行的代碼。intx=3;/*聲明x的同時,將其初值設(shè)為3*/inta;/*聲明整型變量a*/a=++x+++x+++x;/*等號右側(cè)表達(dá)式有3個副作用發(fā)生*/printf("a=%d",a);/*輸出a的值*/括號運算符也能增強代碼的可讀性,是提供給程序員指定表達(dá)式運算順序的一種“武器”。設(shè)有intx=3,y;請分析語句y=((x+4)-(x*5))+2;執(zhí)行后y的值。謝謝ThankYou第7章數(shù)組C語言程序設(shè)計C語言中的數(shù)組什么是數(shù)組?數(shù)組是可以在內(nèi)存中連續(xù)存儲多個元素的結(jié)構(gòu)數(shù)組中的所有元素必須屬于相同的數(shù)據(jù)類型92Rate1.53.20.0945.39873210下標(biāo)標(biāo)明了元素在數(shù)組中的位置

數(shù)組元素下標(biāo)聲明一維數(shù)組數(shù)組在使用之前必須首先進(jìn)行聲明datatypearrayName[size];類型說明符int、char、float…數(shù)組名常量表達(dá)式:數(shù)組大小intnum[50];charlist_of_initials[20];doublepressure_level[6];#defineLIMIT20...intemp_codes[LIMIT];初始化一維數(shù)組數(shù)組定義后未初始化各元素初值是“0xCC”,一般需要我們隊數(shù)組元素賦初值。一維數(shù)組的初始化是指在定義數(shù)組時就給數(shù)組賦予初始值。intemp_code[5]={1299,1499,1699,1899,2099};

內(nèi)存emp_code[0]emp_code[1]emp_code[2]emp_code[3]emp_code[4]12991499169918992099emp_code其他的初始化情況只給部分元素賦初值,其余元素初值為0intarr[10]={9,8,7,5};賦初值的意思是在定義的時候賦值,不是在定義后賦值。比如:intarr[10];arr[0]=1;這樣在定義后賦值的,數(shù)組中其他元素的值還是“CCCCCC”對全部元素賦初值時,可以不指定長度intarr[]={9,8,7};

//正確:元素個數(shù)為3錯誤intarr[10]={10,9,8,7,6,5,4,3,2,1,0};//賦值越界inti=100;inta[i];//數(shù)組的大小只能是常量,不能是變量intarr[]={};

//錯誤,到底是幾個元素?一維數(shù)組的引用一維數(shù)組聲明后,要使用數(shù)組中的元素則需引用,其引用形式如下:數(shù)組名[下標(biāo)];下標(biāo)即要引用的元素在數(shù)組中的位置。一個大小為n的數(shù)組下標(biāo)可以為的0~n-1,其中0為數(shù)組的上界,n-1為數(shù)組的下界。例如:x[1]和x[5]分別為引用x數(shù)組的第2個元素和第6個元素。數(shù)組訪問越界#include<stdio.h>#include<stdlib.h>intmain(){inta=1,c=2;intb[5],i;

for(i=0;i<8;i++){ b[i]=i; printf("%d",b[i]);}printf("\nc=%da=%d\n",c,a);

system("pause");return0;}編譯程序不檢查是否越界下標(biāo)越界,將訪問數(shù)組以外的空間那里的數(shù)據(jù)是未知的,不受我們掌控,可能帶來嚴(yán)重后果下標(biāo)越界是大忌!b[0]b[1]b[2]b[3]b[4]ca12340內(nèi)存分布127數(shù)組和循環(huán)一重循環(huán)實現(xiàn)一維數(shù)組輸入輸出初始化數(shù)組for(i=0;i<N;i++)a[i]=0;讀入數(shù)據(jù)到數(shù)組for(i=0;i<N;i++)scanf(“%d”,&a[i]);數(shù)組元素求和for(i=0;i<N;i++)sum+=a[i];inta[9];數(shù)組和循環(huán)初始化數(shù)組一重循環(huán)實現(xiàn)一維數(shù)組輸入輸出for(i=0;i<N;i++)a[i]=0;讀入數(shù)據(jù)到數(shù)組for(i=0;i<N;i++)scanf(“%d”,&a[i]);數(shù)組元素求和for(i=0;i<N;i++)sum+=a[i];例題將10個數(shù)1,3,5,6,7,34,67,22,56,76存于數(shù)組中,求出這10個數(shù)的平均數(shù),并將結(jié)果輸出至屏幕?,F(xiàn)有一數(shù)組,將數(shù)組按逆序輸出。用數(shù)組實現(xiàn)輸出Fibonacci數(shù)列的前20項。Fibonacci數(shù)列:1,1,2,3,5,8……。從鍵盤輸入10個數(shù),將這10個數(shù)從小到大排列輸出至屏幕。二維數(shù)組的定義定義類型名數(shù)組名[行長度][列長度]行長度和列長度:整型常量表達(dá)式列長度不能為空inta[2][3];//定義一個含有2行3列的整型數(shù)組a第一行a[0][0]a[0][1]a[0][2]第二行a[1][0]a[1][1]a[1][2]第一列第二列第三列二維數(shù)組的存儲二維數(shù)組按行存放,先行后列,在內(nèi)存中連續(xù)存儲單元內(nèi)存放。a[0]a[1]a[1][0]a[1][1]a[1][2]a[0][0]a[0][1]a[0][2]a[0][0]a[0][1]a[0][2]a[1][0]a[1][1]a[1][2]二維數(shù)組的初始化分行給二維數(shù)組賦初值inta[2][3]={{1,2,3},{4,5,6}};不分行的初始化inta[2][3]={1,2,3,4,5,6};為部分?jǐn)?shù)組元素初始化inta[2][3]={{1,2},{4}};二維數(shù)組的初始化第一維大小的確定分行初始化時,第一維的大小由花括號的個數(shù)來決定。inta[][3]={1,2},{4}};等價于inta[2][3]={{1,2},{4}};不分行初始化時,系統(tǒng)會根據(jù)提供的初值個數(shù)和第2維的長度確定第一維的長度。nta[][3]={1,2,3,4};等價于:inta[2][3]={1,2,3,4};建議不要省略行長度錯誤賦值方式inta[2][3]={{1,2},4,5,6};二維數(shù)組的初始化例7請觀察下面的聲明語句。inta1[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};inta2[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};inta3[3][3]={{1,2},{3}};inta4[3][3]={1,2,0,3};inta5[][3]={{1,2,3},{4,5}};inta6[][3]={1,2,3,4,5,0};chara7[3][5]={{‘a(chǎn)’,‘b’,‘c’,‘d’,‘\0’},{‘e’,‘f’,‘g’,‘h’,‘\0’},

{‘i’,‘j’,‘k’,‘l’,‘\0’}};chara8[3][5]={“abce”,“efgh”,“ijkl”};二維數(shù)組應(yīng)用舉例例:輸入5個學(xué)生的學(xué)號和3門課的成績,求每個學(xué)生的平均成績。輸出所有學(xué)生的學(xué)號、3門課的成績和平均成績。字符數(shù)組存放字符型數(shù)據(jù)的數(shù)組稱為字符數(shù)組,其中每個數(shù)組元素存放的值都是單個字符。chara[6];//定義具有6個數(shù)組元素的字符數(shù)組a,可以存放6個字符型數(shù)據(jù)。charb[2][5]//定義2行5列的二維字符數(shù)組b,每一行可存放5個字符型數(shù)據(jù)。字符數(shù)組的初始化如果花括號中提供的初值個數(shù)(即字符個數(shù))小于數(shù)組長度,則只將這些初值賦給數(shù)組中前面的相應(yīng)元素,其余的元素自動賦值為空字符('\0')。如果提供的初值個數(shù)與要定義的數(shù)組長度相同,在定義時可以省略數(shù)組長度,系統(tǒng)會自動根據(jù)初值個數(shù)確定數(shù)組長度charc[6]={'h','e','l','l','o','!'};chara[]={'a','b','c','d'};//數(shù)組的長度自動定義為4字符數(shù)組的引用引用字符數(shù)組中的一個元素,可以得到一個字符。凡是可以使用字符數(shù)據(jù)的地方均可以引用字符數(shù)組的元素。/*源文件:demo7_7.c*/#include<stdio.h>main(){ charc[6]={'h','e','l','l','0','!'}; inti; for(i=0;i<6;i++) { printf("%c",a[i]); } printf("\n");}字符數(shù)組與字符串字符串:雙引號引起來的若干個字符C語言允許用字符串的方式對字符數(shù)組做初始化賦值charc[]={'h','e','l','l','o','\0'};可寫為charc[]={"hello!"};或去掉{}寫為charc[]="hello!";字符串結(jié)束符用字符串方式賦值比用字符逐個賦值要多占一個字節(jié),用于存放字符串結(jié)束標(biāo)志'\0‘以字符常量的形式對字符數(shù)組初始化,給各個元素賦初值時,系統(tǒng)不會自動在最后一個元素后加'\0'。若要定義的字符數(shù)組時用來存放有k個字符的字符串,則定義時字符數(shù)組的長度至少為k+1,一定要留一個數(shù)組元素存放字符串結(jié)束符。否則字符串沒有結(jié)束標(biāo)志,處理字符串時可能會出現(xiàn)錯誤。字符數(shù)組的輸入輸出使用scanf函數(shù)和printf函數(shù)逐個字符輸入輸出使用scanf函數(shù)和printf函數(shù)整體輸入或輸出字符數(shù)組中的字符串用gets和puts函數(shù)輸入/輸出字符串gets(str):從鍵盤輸入字符串,直到輸入換行符為止,并把輸入的字符串存入已定義的數(shù)組str中,然后用'\0'代替換行符。puts(str):把已定義的字符數(shù)組str中存放的字符串輸出在屏幕上,并換行。字符串處理函數(shù)字符串復(fù)制函數(shù)strcpy字符串長度函數(shù)strlen字符串比較函數(shù)strcmp字符串連接函數(shù)strcat應(yīng)用實例輸入字符串,求字符串的長度。實現(xiàn)字符串連接函數(shù)的功能。謝謝ThankYou《程序設(shè)計基礎(chǔ):C語言》函數(shù)目標(biāo)理解函數(shù)的概念。理解在實際應(yīng)用中為什么需要使用函數(shù)及函數(shù)的作用。了解C語言編寫的軟件的結(jié)構(gòu)。了解函數(shù)與“面向過程的編程”的關(guān)系。版權(quán)所有,復(fù)制注明出處函數(shù)的概念版權(quán)所有,復(fù)制注明出處#include<stdio.h>#include<stdlib.h>intmain(void){inta;scanf_s("%d",&a);

//負(fù)數(shù)的絕對值是它的相反數(shù)if(a<0)

{

a=a*(-1);

}elseif(a>=0)

{//正數(shù)和零的絕對值是它本身

a=a;

}printf("|a|=%d\n",a);return0;}a=abs(a);函數(shù)是完成特定功能的代碼集合。函數(shù)的概念cont.版權(quán)所有,復(fù)制注明出處#include"hello.h"intmain(void){sayHello();return0;}/*源文件:hello.c*/voudsayHello(void){printf(“HelloWorld!\n”);}/*頭文件:hello.h*/voudsayHello(void);函數(shù)的分類—從用戶使用的角度看庫函數(shù)(libraryfunction)ANSI/ISOC定義的標(biāo)準(zhǔn)庫函數(shù)如:printf,scanf,sin,cos,...符合標(biāo)準(zhǔn)的C語言編譯器必須提供這些函數(shù)第三方庫函數(shù)由其它廠商自行開發(fā)的C語言函數(shù)庫。不在標(biāo)準(zhǔn)范圍內(nèi),能擴充C語言的功能(圖形、網(wǎng)絡(luò)、數(shù)據(jù)庫等)SDL/自定義函數(shù)(userdefinedfunction)自己編寫的函數(shù)包裝后,也可成為函數(shù)庫,供別人使用(成為第三方庫函數(shù))版權(quán)所有,復(fù)制注明出處為什么要使用函數(shù)?--假如所有代碼都放到主函數(shù)版權(quán)所有,復(fù)制注明出處不堪忍受必須考慮程序所有邏輯,增加解決難度出了錯誤,不能準(zhǔn)確定位如果代碼都在一個文件中,怎么團隊合作?函數(shù)的作用版權(quán)所有,復(fù)制注明出處分而治之函數(shù)把較大的任務(wù)分解成若干個較小的任務(wù),并提煉出公用任務(wù)復(fù)用程序員可以在其他函數(shù)的基礎(chǔ)上構(gòu)造程序,而不需要從頭做起信息隱藏設(shè)計得當(dāng)?shù)暮瘮?shù)可以把具體操作細(xì)節(jié)對程序中不需要知道它們的那些部分隱藏掉,從而使整個程序結(jié)構(gòu)清楚C程序結(jié)構(gòu)(1)一個簡單的C程序具有如下結(jié)構(gòu)版權(quán)所有,復(fù)制注明出處一個C程序一個源文件一個主函數(shù)#include<stdio.h>#include<stdlib.h>intmain(void){//todo

system(“pause”);

return0;}兩個頭文件C語言程序結(jié)構(gòu)(2)一個典型的C語言編寫的軟件具有如下結(jié)構(gòu)版權(quán)所有,復(fù)制注明出處一個C程序若干頭文件若干源文件頭文件1頭文件2……源文件1源文件2……聲明1聲明2……函數(shù)1函數(shù)2……圖8-1C程序基本結(jié)構(gòu)函數(shù)與面向過程編程版權(quán)所有,復(fù)制注明出處總結(jié)理解函數(shù)的概念。函數(shù)是完成特定功能的代碼集合。了解在實際應(yīng)用中為什么需要使用函數(shù)及函數(shù)的作用。分而治之復(fù)用信息隱藏了解C語言程序的結(jié)構(gòu)。若干個頭文件和源文件組成。了解函數(shù)與“面向過程的編程”的關(guān)系。本質(zhì)上就是設(shè)計并定義一個個的函數(shù),并設(shè)計它們之間的調(diào)用關(guān)系?!冻绦蛟O(shè)計基礎(chǔ):C語言》2.函數(shù)定義本節(jié)教學(xué)目標(biāo)了解函數(shù)定義的相關(guān)概念。掌握如何定義函數(shù)。版權(quán)所有,復(fù)制注明出處函數(shù)定義版權(quán)所有,復(fù)制注明出處doubleareaOfCircle(doubler){constdoublePI=3.1415926;//常量pidoublearea;area=PI*r*r;returnarea;}返回值類型函數(shù)名形式參數(shù)復(fù)合語句構(gòu)成函數(shù)體函數(shù)例子/*

函數(shù)功能:求兩個數(shù)中較大的數(shù)。

參數(shù):doublex,doubley

返回值:double*/doublemax(doublex,doubley){doublem;m=x>y?x:y;returnm;}版權(quán)所有,復(fù)制注明出處函數(shù)例子cont./*

函數(shù)功能:輸出。

參數(shù):無

返回值:無*/voidprint(void){

printf(“*\n”); printf(“***\n”); printf(“*****\n”);}版權(quán)所有,復(fù)制注明出處當(dāng)函數(shù)無返回值或無形參時,建議用void動手練習(xí)請指出下面函數(shù)定義中的各種成分例8-2請定義一個計算圓形面積areaOfCircle函數(shù),包含一個double型參數(shù)r,r表示半徑,將計算結(jié)果返回。版權(quán)所有,復(fù)制注明出處intadd(intx,inty){returnx+y;}函數(shù)定義小結(jié)所有函數(shù)都是平行的,即定義函數(shù)時是分別進(jìn)行的,是互相獨立的。一個函數(shù)并不從屬于另外一個函數(shù),即函數(shù)不能嵌套定義。當(dāng)函數(shù)無返回值或無形參列表時,建議用void指明。void

foo(void)函數(shù)名的命名規(guī)則:駝峰命名單詞首字母不大寫,從第二個單詞起首字母大寫。函數(shù)頭要有頭注釋。版權(quán)所有,復(fù)制注明出處《程序設(shè)計基礎(chǔ):C語言》函數(shù)的形參與實參本節(jié)教學(xué)目標(biāo)了解形參與實參的相關(guān)概念。了解形參與實參的結(jié)合順序。版權(quán)所有,復(fù)制注明出處形參與實參概念形參(parameter):定義函數(shù)時函數(shù)名后面括號中的變量列表實參(argument):調(diào)用函數(shù)時函數(shù)名后面括號中的表達(dá)式列表#include<stdio.h>#include<stdlib.h>doubleareaofCircle(doubler){constdoublePI=3.14159;returnPI*r*r;}intmain(void){

doubler,area;//todo

area=areaofCircle(r);

//todo

return0;}形參實參個數(shù)、類型、順序一致形參與實參概念cont.請閱讀下面的代碼改正代碼中的錯誤版權(quán)所有,復(fù)制注明出處int

Average(int

x,y){

double

result; result=(x+y)/2.0; returnresult;}在被定義的函數(shù)中,必須指定形參的類型。實參與形參的類型應(yīng)相同或賦值兼容。不同類型的數(shù)值按賦值規(guī)則進(jìn)行轉(zhuǎn)換;字符型與整型可以互相通用。形參與實參結(jié)合順序設(shè)有intx=4,y=3;doublesum;請分析語句sum=add(x,x=x+y);執(zhí)行后,sum的值。版權(quán)所有,復(fù)制注明出處double

add(double

x,doubley){ returnx+y;}先計算左側(cè)表達(dá)式x的值

,還是先計算右側(cè)表達(dá)式x=x+y?形參和實參小結(jié)形參和實參在函數(shù)定義時,必須指定形參的類型。實參可以是任意合法的常量、變量、表達(dá)式,但必須有確定的值。在調(diào)用時將實參的值賦給形參。實參與形參個數(shù)一致,類型一致(可能會發(fā)生類型轉(zhuǎn)換),順序一致。形參和實參的結(jié)合順序標(biāo)準(zhǔn)沒有規(guī)定,不同系統(tǒng)有不同實現(xiàn),所以最好避免在實參出調(diào)用同一變量的寫法?!冻绦蛟O(shè)計基礎(chǔ):C語言》4.函數(shù)的返回值本節(jié)教學(xué)目標(biāo)了解函數(shù)返回值的相關(guān)概念。函數(shù)返回值函數(shù)的返回值就是調(diào)用結(jié)束后返回給主調(diào)函數(shù)的值。如果定義了函數(shù)返回值類型,則必須用returnreturn表達(dá)式return(表達(dá)式)如果返回值和函數(shù)返回值類型不同,以函數(shù)返回值類型為準(zhǔn),自動進(jìn)行類型轉(zhuǎn)換。用void表示函數(shù)沒有返回值voidfoo(intx)版權(quán)所有,復(fù)制注明出處#include<stdio.h>#include<stdlib.h>doubleareaofCircle(doubler){constdoublePI=3.14159;returnPI*r*r;}intmain(void){doubler,area;//todoarea=areaofCircle(r);//todoreturn0;}返回值的類型函數(shù)的返回值挑毛病閱讀下面的代碼,指出其中錯誤版權(quán)所有,復(fù)制注明出處#include<stdio.h>#include<stdlib.h>doubleareaofCircle(doubler){constdoublePI=3.14159;returnPI*r*r;}intmain(void){

intr,area;//todoarea=areaofCircle(r);//todoreturn0;}函數(shù)返回值的類型同接受函數(shù)返回值變量的類型不同,會引起精度丟失!函數(shù)返回值小結(jié)注意:如果函數(shù)沒有返回值一定要注意寫void類型。不需return。接收函數(shù)返回的變量的類型需同返回值類型相同。一個函數(shù)可能有零個或者多個參數(shù),最多只能有一個返回值。版權(quán)所有,復(fù)制注明出處《程序設(shè)計基礎(chǔ):C語言》函數(shù)調(diào)用本節(jié)教學(xué)目標(biāo)了解函數(shù)調(diào)用的概念。了解函數(shù)調(diào)用機制。了解函數(shù)調(diào)用的三種方式。函數(shù)調(diào)用定義一個函數(shù)后,就可以在程序中調(diào)用這個函數(shù)。函數(shù)調(diào)用的形式:函數(shù)名(實參列表)

#include<stdio.h>intmain(void){doubler,area;

//todo

area=areaofCircle(r);

//todo

return0;}doubleareaofCircle(doubler){constdoublePI=3.14159;returnPI*r*r;}主調(diào)函數(shù)被調(diào)函數(shù)主調(diào)函數(shù)通過實參將數(shù)據(jù)傳給被調(diào)函數(shù);被調(diào)函數(shù)通過返回值將數(shù)據(jù)返回主調(diào)函數(shù)函數(shù)調(diào)用過程版權(quán)所有,復(fù)制注明出處#include<stdio.h>intmain(void){doubler,area;

//todo

area=areaofCircle(r);

//todo

return0;}doubleareaOfCircle(doubler){constdoublePI=3.14159;

returnPI*r*r;}②①③④⑤主調(diào)被調(diào)主調(diào)程序保護(hù)現(xiàn)場給形式參數(shù)(如果有)分配內(nèi)存,將實參變量的值傳給形參變量,將程序的控制權(quán)交給被調(diào)函數(shù)執(zhí)行被調(diào)函數(shù)的其他語句保存返回值(如果有)到某處,清空被調(diào)函數(shù)中變量的內(nèi)存。并將程序控制權(quán)交給主調(diào)函數(shù),主調(diào)函數(shù)取得返回值。149函數(shù)調(diào)用過程cont.函數(shù)調(diào)用方式函數(shù)表達(dá)式函數(shù)作為表達(dá)式中的一項出現(xiàn)在表達(dá)式中,以函數(shù)返回值參與表達(dá)式的運算。要求函數(shù)是有返回值的。c=10*areaofCircle(10);函數(shù)參數(shù)函數(shù)作為另一個函數(shù)調(diào)用的實際參數(shù)出現(xiàn)。要求該函數(shù)必須有返回值。printf(“%g”,areaofCircle(10));函數(shù)語句函數(shù)調(diào)用的一般形式加上分號即構(gòu)成函數(shù)語句。prinf(“$d”,a);//沒有返回值函數(shù)調(diào)用示例問題描述:

根據(jù)用戶的選擇,求不同形狀的面積??偨Y(jié)了解函數(shù)調(diào)用的相關(guān)概念主調(diào)函數(shù)通過實參將數(shù)據(jù)傳給被調(diào)函數(shù);被調(diào)函數(shù)通過返回值將數(shù)據(jù)返回主調(diào)函數(shù)了解函數(shù)調(diào)用機制。內(nèi)存調(diào)用順序圖了解函數(shù)調(diào)用的三種方式。函數(shù)表達(dá)式函數(shù)語句函數(shù)參數(shù)《程序設(shè)計基礎(chǔ):C語言》函數(shù)原型聲明目標(biāo)了解函數(shù)原型聲明的概念。了解函數(shù)原型聲明的形式。了解函數(shù)為什么要先聲明后調(diào)用。了解函數(shù)原型聲明的作用。掌握推薦函數(shù)原型聲明的方式。函數(shù)原型聲明函數(shù)原型特指包括說明參數(shù)類型的函數(shù)聲明。函數(shù)原型聲明的一般形式(prototypedeclaration)

返回值類型

函數(shù)名(參數(shù)類型,…,參數(shù)類型);返回值類型

函數(shù)名(參數(shù)類型

參數(shù)1,…,參數(shù)類型

參數(shù)n);floatadd(float,float);floatadd(floatx,floaty);函數(shù)原型聲明和函數(shù)原型定義在返回類型、函數(shù)名、參數(shù)個數(shù)和類型必須完全一致。為什么不可以這樣調(diào)用函數(shù)版權(quán)所有,復(fù)制注明出處“我”不認(rèn)識你!#include<stdio.h>#include<stdlib.h>intmain(void){doubler,area;//todo

area=areaofCircle(r);//todoreturn0;}doubleareaofCircle(doubler){constdoublePI=3.14159;returnPI*r*r;}如何正確進(jìn)行函數(shù)原型聲明?#include<stdio.h>#include<stdlib.h>doubleareaofCircle(double);intmain(void){doubler,area;//todo

area=areaofCircle(r);//todoreturn0;}doubleareaofCircle(doubler){constdoublePI=3.14159;returnPI*r*r;}#include<stdio.h>#include<stdlib.h>doubleareaofCircle(doubler){constdoublePI=3.14159;returnPI*r*r;}intmain(void){doubler,area;//todo

area=areaofCircle(r);//todoreturn0;}如何正確進(jìn)行函數(shù)原型聲明?cont.版權(quán)所有,復(fù)制注明出處#include"hello.h"intmain(void){sayHello();return0;}/*源文件:hello.c*/#include<stdio.h>#include"hello.h"voidsayHello(void){printf(“HelloWorld!\n”);}/*頭文件:hello.h*/voidsayHello(void);C語言程序結(jié)構(gòu)一個典型的C語言編寫的軟件具有如下結(jié)構(gòu)一個C程序若干頭文件若干源文件頭文件1頭文件2……源文件1源文件2……聲明1聲明2……函數(shù)1函數(shù)2……圖8-1C程序基本結(jié)構(gòu)優(yōu)點:函數(shù)列表更加一目了然,方便使用。便于多人合作共同開發(fā)??梢杂糜谏虡I(yè),保護(hù)知識產(chǎn)權(quán)??偨Y(jié)了解函數(shù)原型聲明的概念。函數(shù)原型特指包括說明參數(shù)類型的函數(shù)聲明。了解函數(shù)原型聲明的形式。返回值類型

函數(shù)名(參數(shù)類型,…,參數(shù)類型);返回值類型

函數(shù)名(參數(shù)類型

參數(shù)1,…,參數(shù)類型

參數(shù)n);了解函數(shù)為什么要先聲明后調(diào)用。不在調(diào)用前聲明函數(shù)的類型和參數(shù)的情況,編譯器就不能判斷該函數(shù)的調(diào)用是否正確,也就無法編譯。另外之所以先聲明后使用,聲明后就可以給函數(shù)分配內(nèi)存單元。了解函數(shù)原型聲明的作用。函數(shù)原型聲明標(biāo)示了函數(shù)的返回值類型、函數(shù)名、參數(shù)個數(shù)和類型,是函數(shù)的“名片”。掌握推薦函數(shù)原型聲明的方式。函數(shù)聲明與函數(shù)定義在文件上分離?!冻绦蛟O(shè)計基礎(chǔ):C語言》值傳遞與地址傳遞本節(jié)教學(xué)目標(biāo)了解值傳遞和地址傳遞的區(qū)別。掌握值傳遞和參數(shù)傳遞的使用方法。版權(quán)所有,復(fù)制注明出處參數(shù)傳遞值傳遞當(dāng)實參和形參之間傳遞的是數(shù)據(jù)時,被調(diào)函數(shù)體內(nèi)只能利用這一傳遞來的值,而無法通過這一“值”影響到函數(shù)體外的變量。“地址”傳遞當(dāng)實際參數(shù)與形式參數(shù)之間傳遞的是“地址”這種特殊的值時,被調(diào)函數(shù)體內(nèi)就能通過“地址”影響到函數(shù)體外變量的值。版權(quán)所有,復(fù)制注明出處值傳遞版權(quán)所有,復(fù)制注明出處intmain(void){

}{

}b4a3inta=3,b=4;printf("交換前:");printf("a=%db=%d\n",a,b);exchangeData(a,b);printf("交換后:");printf("a=%db=%d\n",a,b);return0;交換前:a=3b=4voidexchangeData(inta,intb)?a?b34?cintc;3c=a;a=b;b=c;43交換后:a=3b=4內(nèi)存變化地址傳遞版權(quán)所有,復(fù)制注明出處版權(quán)所有,復(fù)制注明出處intmain(void){

}{

}y4x3intx=3,y=4;printf("交換前:");printf("x=%dy=%d\n",x,y);exchangeData(&x,&y);printf("交換后:");printf("x=%dby=%d\n",x,y);return0;交換前:x=3y=4voidexchangeData(int*a,int*b)?a?b?cintc;c=*a;*a=*b;*b=c;交換后:x=4y=3內(nèi)存變化內(nèi)存地址0x0012ff600x0012ff540x0012fe7c0x0012fe800x0012fe6c30x0012ff600x0012ff5443練習(xí)voidswap1(inta,intb){ intc;

c=a; a=b;b=c;}voidswap2(int*a,int*b){ intc;

c=*a;*a=*b;*b=c;}#include<stdio.h>#include<stdlib.h>voidswap1(inta,intb);voidswap2(int*a,int*b);intmain(void){ inta=3,b=5; swap1(a,b); printf("a=%db=%d\n",a,b); swap2(&a,&b); printf("a=%db=%d\n",a,b);return0;}版權(quán)所有,復(fù)制注明出處請給出輸出結(jié)果。練習(xí)cont.voidswap3(int*x,int*y){ int*c;

c=x; x=y;

y=c;}#include<stdio.h>#include<stdlib.h>voidswap3(int*a,int*b);intmain(void){ inta=3,b=5; swap3(&a,&b); printf("a=%db=%d\n",a,b);return0;}版權(quán)所有,復(fù)制注明出處版權(quán)所有,復(fù)制注明出處版權(quán)所有,復(fù)制注明出處交換前:a=3b=5?x?y?c交換后:a=3b=5內(nèi)存變化內(nèi)存地址b5a30x0012ff600x0012ff540x0012fe7c0x0012fe800x0012fe6c0x0012ff600x0012ff540x0012ff600x0012ff540x0012ff60動手練習(xí)通過函數(shù)實現(xiàn),將變量的值變?yōu)榇俗兞恐档牧⒎?。版?quán)所有,復(fù)制注明出處總結(jié)值傳遞是將實際參數(shù)中存放的“值”傳遞給形式參數(shù),實際參數(shù)與形式參數(shù)完成“傳遞接力”后,兩者再無干系。在函數(shù)內(nèi)部無法改變實際參數(shù)中的值或通過實際參數(shù)的值改變函數(shù)中其他存儲單元的值。地址傳遞是將實際參數(shù)中存放的“地址”傳遞給了形式參數(shù),完成傳遞接力后,兩者也再無干系。盡管在函數(shù)內(nèi)部無法改變實際參數(shù)中的“地址”,但可以對該“地址”所代表的單元進(jìn)行賦值或取值的操作。版權(quán)所有,復(fù)制注明出處《程序設(shè)計基礎(chǔ):C語言》嵌套調(diào)用與遞歸調(diào)用本節(jié)教學(xué)目標(biāo)理解函數(shù)遞歸調(diào)用的概念理解函數(shù)遞歸調(diào)用的過程理解為什么要學(xué)習(xí)遞歸調(diào)用函數(shù),以及能解決的問題類型掌握如何設(shè)計遞歸函數(shù)及一般步驟。版權(quán)所有,復(fù)制注明出處函數(shù)的嵌套調(diào)用版權(quán)所有,復(fù)制注明出處fA(void){……

fB(…);}fB(void){…fC(…);…return;}fC(void){……return;}①③④⑤⑥⑦②思考:函數(shù)可以自己調(diào)用自己嗎?函數(shù)的遞歸調(diào)用函數(shù)直接或間接調(diào)用“自己”稱為遞歸調(diào)用。版權(quán)所有,復(fù)制注明出處

fA(void){……

fA(…);}C語言程序設(shè)計中,程序不可無限地遞歸下去,必須有遞歸結(jié)束條件,而且每次遞歸都應(yīng)該向結(jié)束條件邁進(jìn),直到滿足結(jié)束條件而停止遞歸調(diào)用。例如,求n!時,該結(jié)束條件是if(n==0)intfactorial(unsignedintn){if(n==0)return1;

elsereturnn*factorial(n-1);

}函數(shù)的遞歸調(diào)用實例編程求n的階乘。

版權(quán)所有,復(fù)制注明出處設(shè)factorial(n)=n!

1當(dāng)n=0則factorial(n)=

n×f(n-1)

當(dāng)n>0factorial()函數(shù)調(diào)用過程版權(quán)所有,復(fù)制注明出處factorial(n)=n*Factorial(n-1)

factorial(n-1)=(n-1)*Factorial(n-2)

factorial(2)=2*Fctorial(1)

factorial(1)=1*Factorial(0)

factorial(0)=1…..1*0!1!(n-2)!(n-1)!176intf(intn){if(n==0)return1;elsereturnn*f(n-1);}調(diào)用調(diào)用①②④③11返回2求factorial(2)遞歸調(diào)用過程177思考遞歸過程請思考:發(fā)出f(2)調(diào)用時,將2賦值給形參n。然后發(fā)出f(1)調(diào)用,將1賦值給形參n。接著發(fā)出f(0)調(diào)用,將0賦值給形參n。后來賦給形參n的值會不會覆蓋原來賦給n的值(如值1覆蓋原來的值2)?為什么?

-不會,每一次函數(shù)調(diào)用會分配新的存儲空間。178再談函數(shù)調(diào)用過程179f(0)返回值1f(1)返回值1f(2)返回值2調(diào)用f(2)調(diào)用f(1)調(diào)用f(0)5.printf(“%d”,f(i));8.intf(intn)

9.{10.if(n==0)11.return1;12.else13.returnn*f(n-1);14.}intf(int);main(){inti=2;printf(“%d”,f(i));system(“pause”);}intf(intn)//遞歸函數(shù)

溫馨提示

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

評論

0/150

提交評論