C語(yǔ)言課程學(xué)習(xí)筆記_第1頁(yè)
C語(yǔ)言課程學(xué)習(xí)筆記_第2頁(yè)
C語(yǔ)言課程學(xué)習(xí)筆記_第3頁(yè)
C語(yǔ)言課程學(xué)習(xí)筆記_第4頁(yè)
已閱讀5頁(yè),還剩102頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

C語(yǔ)言基礎(chǔ)1、語(yǔ)言排行榜C java objective-C2、進(jìn)制:進(jìn)制:進(jìn)位機(jī)制。用普通的話講,應(yīng)該為人為的定義ー種度量來(lái)標(biāo)識(shí)ー樣?xùn)|西計(jì)算機(jī)常用的進(jìn)制有:十進(jìn)制、二進(jìn)制、ハ進(jìn)制和十六進(jìn)制。十進(jìn)制:0-9(十個(gè)指頭)(進(jìn)制表示基數(shù):10)二進(jìn)制:0,1(基數(shù)為2)ハ進(jìn)制:0-7(基數(shù)為8)十六進(jìn)制:0-9,A-F(基數(shù)為16)可以有很多進(jìn)制,比如分鐘為60進(jìn)制等等。3、位權(quán)為了進(jìn)制之間轉(zhuǎn)換而出的一個(gè)概念。位:一個(gè)通用的描述方式。最低位為第0位。之后依次+1。例如:9AF(F為第〇位,A為第1位,9為第2位)權(quán):進(jìn)制是凡,權(quán)就是幾。位權(quán):某位上的數(shù)?權(quán)ハ該位例如:231,權(quán)為:10,位是:2,位權(quán)1為10A〇,位權(quán)3為10へ1,位權(quán)2為!0A24、進(jìn)制轉(zhuǎn)換十進(jìn)制轉(zhuǎn)X進(jìn)制:連除倒取余數(shù)(取余數(shù)是從下往上?。┯猛ㄋ椎脑捴v:十進(jìn)制的某個(gè)數(shù)轉(zhuǎn)化為其他進(jìn)制時(shí),將該數(shù)除以進(jìn)制,依次將余數(shù)寫在除法每一步的旁邊,一直除完為止。則所對(duì)應(yīng)的轉(zhuǎn)化后的值,從下往上按順序記錄余數(shù),該余數(shù)即為轉(zhuǎn)化后的結(jié)果。X進(jìn)制轉(zhuǎn)十進(jìn)制:按權(quán)求和用通俗的話講:用位權(quán)的計(jì)算方法,將某進(jìn)制的數(shù),從第0位開(kāi)始,把第0位上得數(shù)*進(jìn)制(權(quán))的0次方,加上第1位上得數(shù)?進(jìn)制(權(quán))的1次方....以此類推,直至該進(jìn)制的數(shù)的最高位,所得到的和,即為轉(zhuǎn)化所得的十進(jìn)制的結(jié)果。進(jìn)制修飾(區(qū)別什么數(shù)是什么進(jìn)制):十進(jìn)制:什么都不加修飾如:111ハ進(jìn)制:在前加〇如:0111十六進(jìn)制:在前加0X如:0X111二進(jìn)制:在前加0b如:Oblll當(dāng)程序員不想自己用筆來(lái)計(jì)算較大的進(jìn)制轉(zhuǎn)換時(shí),點(diǎn)擊右上角搜索按鈕spotlight搜索“計(jì)算器”。command+1(簡(jiǎn)單型計(jì)算器)2為科學(xué)型,3為編程型5、基本數(shù)據(jù)類型記憶基本數(shù)據(jù)類型的時(shí)候,這樣記ーー三大類:字符:(關(guān)鍵字)char:字符型占字節(jié):1=8位寫得出來(lái)的都是字符T2宜。對(duì)應(yīng)十進(jìn)制〇?255之間任意任意ー個(gè)數(shù)都可以表示,但是>256的不能存儲(chǔ)。整型:(關(guān)鍵字)short短整型:字節(jié):2=16位0-65535(關(guān)鍵字)int整型: 字節(jié):4=32位〇?2A33-1(關(guān)鍵字)long長(zhǎng)整形:字節(jié):8或4(C語(yǔ)言沒(méi)有給一個(gè)明確的數(shù)字,而是這樣定義的,long型的數(shù)不小于int型的數(shù)。Int型的數(shù)不小于short型的數(shù))浮點(diǎn):(關(guān)鍵字)float單精度浮點(diǎn)型:字節(jié):4(關(guān)鍵字)double雙精度浮點(diǎn)型:字節(jié):8字節(jié):1字節(jié)=8位看ー個(gè)數(shù)是正數(shù)還是負(fù)數(shù),看最高位是啥:〇為正,1為負(fù)6、常量不可改變的量如:719,'A',‘a(chǎn)'等等。7、變量變量:變量相當(dāng)于ー個(gè)容器或位置.//定義ー個(gè)變量//整型intnuml=10;//短整型shortsl=lll;//長(zhǎng)整型long11=123456789;//浮點(diǎn)型(單精度)floatf1=1.2;//浮點(diǎn)型(雙精度)doubledl=2.22;//字符型charcl=*11;變量命名規(guī)則數(shù)字0?9,下劃線ー,字母a?z,A-Z組成,不能以數(shù)字開(kāi)頭不可以用系統(tǒng)保留字不能使用重復(fù)變量名>見(jiàn)名之意。(規(guī)范)定義一個(gè)變量,要明顯知道變量名的意思。賦值運(yùn)算符:=可以給一個(gè)變量賦值。//賦值運(yùn)算符:=,可以給ー個(gè)變量賦值。//交換兩個(gè)變量中的值。intnumberl=10;intnumber2=20;//準(zhǔn)備另ー個(gè)變量,用于臨時(shí)存放inttemp=O;printf("前number1:%d\n",numberl);printf("前number2:%d\n",number2);temp=number1;numberl=number2;number2=temp;printf(“后numberl:%d\n",numberl);printf("ノロnumber2:%d\n”,number2);課后思考題,交換兩個(gè)變量的值,不使用第三個(gè)變量。提示:有兩種方式。8、算術(shù)運(yùn)算符算數(shù)運(yùn)算符,主要是看什么,主要是看這幾個(gè)運(yùn)算符的用法,+,-,?就不說(shuō)了,/(除法)主要是要看除數(shù)不能為〇,雖然計(jì)算機(jī)不報(bào)錯(cuò)(因?yàn)檎Z(yǔ)句都符合C語(yǔ)言的標(biāo)準(zhǔn),程序會(huì)執(zhí)行。),但是在運(yùn)行后,給出的結(jié)果不正確。++和一運(yùn)算比較特殊,應(yīng)該這樣記:++在前則先++,++在后則后++。--和++ー樣。要明白一點(diǎn)就是,運(yùn)算過(guò)程中,會(huì)出現(xiàn)自動(dòng)數(shù)據(jù)類型轉(zhuǎn)換。//十號(hào)// //nl=30// intnl= 10+20;// //n2=40;// intn2= nl+10;// //n3=70// intn3=nl+n2;// //n4=140;// intn4=nl+n2+n3;//一號(hào)// //nl=10;// intnl=30-20;// //n2=0;// intn2=nl-10;// //n3=-10;// intn3=n2-nl;// //n4=-20;// intn4=n3-n2-nl;//?號(hào)//除法:/// //使用除號(hào)/,注意〇不能坐除數(shù)!xcode不報(bào)錯(cuò),只提出警告,并能運(yùn)行。//// intnl=10/0;// //除號(hào)兩邊都是整數(shù),結(jié)果也是整數(shù),不論除盡的小數(shù)點(diǎn)后面是什么值,都舍去。// intn2=3/2;// //除號(hào)兩邊都是浮點(diǎn)型,結(jié)果也是浮點(diǎn)型。n3=1.5// floatn3=3.0/2.0;// //參與運(yùn)算的數(shù),如果運(yùn)算符兩邊,只要有一個(gè)是浮點(diǎn)型,結(jié)果都為浮點(diǎn)型。n4=1.5// floatn4=3/2.0;//取余%TOC\o"1-5"\h\z// //nl= 1// intnl = 3 % 2;// //n2= 0// intn2 = 4 % 2;//// //取余運(yùn)算符兩邊的數(shù),必須都為整型;//// intn3=5.0%2.0;//// //取余之后的結(jié)果<除數(shù),一定小于除數(shù)。//++在后// //nl=0TOC\o"1-5"\h\z// intnl = 0;// //nl=0// //如果++在后面,只要這條語(yǔ)句沒(méi)有執(zhí)行完,nl++都表示原來(lái)的值。// //n3=0 ;// intn3 = nl++;// //n2=1// intn2 = nl;//++在前// intnl = 0;// //++在前,先加1,再賦值。n2=l// int n2 = ++nl;//符合運(yùn)算符// int nl = 10;// int n2 = 30;// n2=n2+nl;//// n2+=nl;與n2=n2+nl;等效;9、 表達(dá)式表達(dá)式:常量、變量與運(yùn)算符的組合。例如:3,3+1,nl+1,3+(也是表達(dá)式,但是是錯(cuò)誤的表達(dá)式)表達(dá)式都會(huì)有返回值。語(yǔ)句是程序執(zhí)行的最小單位,以分號(hào)結(jié)尾。例如:1;1+7;不以分號(hào)結(jié)尾的,不管前面寫的再好,再標(biāo)準(zhǔn),都不是語(yǔ)句。10、基本輸入輸出基本輸入輸出函數(shù),在C語(yǔ)言的第一個(gè)helloworld程序里,有printfC,helloworld'')i這個(gè)語(yǔ)句,printf是標(biāo)準(zhǔn)輸出函數(shù),雖說(shuō)打印語(yǔ)句都是程序里最簡(jiǎn)單的ー個(gè)方法,但是在C語(yǔ)言中,printf函數(shù)輸出,不僅僅是ー個(gè)函數(shù)而已,它是由先人用匯編語(yǔ)言把計(jì)算機(jī)內(nèi)存和顯存的各種機(jī)理封裝在了printf函數(shù)中,這個(gè)函數(shù)是在stdio.h這個(gè)庫(kù)文件中的。庫(kù)文件:即為前人寫好的代碼,放在了一起,我們可以直接用。輸出:printf();形式是這樣的:printf("%d”,100)這個(gè)是輸出整型;printf("%f”,100.0)這個(gè)是輸出浮點(diǎn)型;printf(“%c”,'100,)這個(gè)是輸出字符型的數(shù)據(jù)。這個(gè)時(shí)候,輸出整形還可以分;printf("%sd",100)這個(gè)輸出短整型;printf(“%ld",100)這個(gè)輸出長(zhǎng)整型。輸出函數(shù)printf還有一個(gè)要注意的地方;%和d中間的數(shù)字,代表預(yù)留幾個(gè)位置:從右往左算。如果預(yù)留位置小于實(shí)際位置,按照實(shí)際位置來(lái)。如果預(yù)留位置大于實(shí)際位置,在輸出的左邊補(bǔ)上空格。如果數(shù)字前加0,則把空格變?yōu)檠a(bǔ)〇;例子:printf("%05d",12);輸出結(jié)果:00012.X表示保留小數(shù)點(diǎn)后X位,之4.2f表示保留小數(shù)點(diǎn)后2兩位。.前為代表預(yù)留幾個(gè)位置。例如:printf("%4.2f",1.2345);//1.23小數(shù)點(diǎn)也站位。例如:printf("%4.If",1.2345);//_1.2(下劃線代表空格)正數(shù)表示右對(duì)齊(如果給出預(yù)留位大于實(shí)際位,左邊空格代替),負(fù)數(shù)表示左對(duì)齊(如果給出預(yù)留位大于實(shí)際位,右邊空格).例如:printf("%-4dabc",123);//123_abc(下劃線代表空格)另外C語(yǔ)言推出ー些解決輸出轉(zhuǎn)義字符的辦法printf("123\n456");//換行。printf("\\");//打印、printf("%%");//打印%輸入:scanf()在用戶輸入ー個(gè)數(shù)據(jù)時(shí),需要在程序里定義ー個(gè)變量來(lái)接收這個(gè)輸入進(jìn)來(lái)的值。// intnl=0;// printf(”請(qǐng)輸入ー個(gè)數(shù)字,按回車結(jié)束:つ;// scanf ;// printf(nnl=%dH,nl);值得注意的是,scanf("%d",&nl);中變量需要用&nl表示。&表示取地址。后面厶介紹關(guān)于輸入數(shù)據(jù)類型,也需要注意,如果輸入的數(shù)據(jù)類型和程序里定義的變量數(shù)據(jù)類型不匹配,則定義的變量拒絕接收輸入進(jìn)來(lái)的數(shù)據(jù)。在輸入函數(shù)中,與輸出函數(shù)還有一個(gè)區(qū)別就是:輸出函數(shù)的double類型占位符,用%f,但是輸入函數(shù)的double類型占位符是%If。// doubledl=0;// scanf&dl);輸入函數(shù)接收多個(gè)參數(shù)時(shí),可以這樣寫:但是不推薦。//接收多個(gè)輸入值。// intnuml=0;// intnum2=0;// printf("請(qǐng)輸入兩個(gè)數(shù)字,按回車結(jié)束:");//////不推薦這么寫scanf("會(huì)d告d”,&numlz&num2);printf(nnuml=%d,num2=%dn,numlrnum2);推薦的時(shí)分開(kāi)接收://////////推薦分開(kāi)寫intnuml=0;intnum2=0;scanfd&numl);scanf(n%dn,&num2);scanf中,不推薦寫除了占位符以外的東西,因?yàn)檩斎氲臅r(shí)候需要ーー對(duì)應(yīng)輸入,否則不接收輸入數(shù)據(jù)。例如:scanf("sum=%d”,&nl);則需要在控制臺(tái)輸入:sum=100,才能匹配,nl才能接收到數(shù)據(jù),否則拒絕接收數(shù)據(jù)。Scanf中的占位符,不能加、n,否則在輸入數(shù)據(jù)時(shí)匹配回車將會(huì)和'n(換行)進(jìn)行匹配后,無(wú)法得出結(jié)果。11、分支結(jié)構(gòu)在學(xué)分支結(jié)構(gòu)之前,要知道一點(diǎn)就是C89標(biāo)準(zhǔn)中沒(méi)有B001這個(gè)類型,因此需要將標(biāo)準(zhǔn)升級(jí)為C99標(biāo)準(zhǔn)。C99標(biāo)準(zhǔn)在Xcode中,在新建一個(gè)工程的時(shí)候,選擇type時(shí),選擇foundation〇創(chuàng)建工程之后,會(huì)發(fā)現(xiàn),與之前的main.c的后綴已經(jīng)變?yōu)閙ain.m〇這是objective-C環(huán)境下的后綴。與之前.c的頁(yè)面中,還有不同的是:將#include<stdi。.h>換成#import<Foundation/Foundation.h>//import是〇c語(yǔ)法,作用和include是ー樣的。都是引入ー個(gè)文件。//Foundation/Foundation.h是系統(tǒng)提供的ー些功能,可以直接用,比stdio,h所包含的東西多得多。12、bool數(shù)據(jù)類型bool數(shù)據(jù)類型,只有yes和no兩個(gè)值,非真即假。在C語(yǔ)言中,認(rèn)為,非〇即為真。用處:用于if語(yǔ)句的時(shí)候和循環(huán)判斷的時(shí)候。在編譯過(guò)程中,C語(yǔ)言將boo!的yes值編譯成1存在內(nèi)存中,將no值編譯成0,保存在內(nèi)存中。#defineyes1#defineno013、關(guān)系運(yùn)算符關(guān)系運(yùn)算符主要就是兩者之間的比較,〉(大于),>=(大于等于)ド(小于),<=(小于等于),==(等于),!=(不等于)。比較得出的結(jié)果是bool類型的值,用bool類型變量來(lái)存儲(chǔ)。其他沒(méi)什么了。14、邏輯運(yùn)算符邏輯運(yùn)算符就三個(gè):與(&&),或(||),非(!)參與運(yùn)算的數(shù),在符號(hào)兩邊都是bool值。得出的結(jié)果不是真就是假。&&邏輯與:只要有一個(gè)為假,全都為假。||邏輯或:只要有一個(gè)為真,結(jié)果都為真。!邏輯非:取反。短路現(xiàn)象:邏輯與運(yùn)算的時(shí)候,如果系統(tǒng)檢測(cè)到&&前的值是no(那么將不再去判斷&&號(hào)后面的值,此時(shí),如果&&后的值有賦值運(yùn)算,賦值運(yùn)算也不執(zhí)行。邏輯或運(yùn)算的時(shí)候,如果系統(tǒng)檢測(cè)到||號(hào)前的值是yes,那么將不再去判斷||號(hào)后面的值,此時(shí),如果||后的值有賦值運(yùn)算,賦值運(yùn)算也不執(zhí)行。//短路現(xiàn)象//邏輯與,如果前面判斷是假,后面的判斷不再執(zhí)行。//intnuml=-1;//intnum2=-1;//BOOLb3=(numl=0)&&(num2=2);//假//printf(n%dnzb3);//O//printf(nnuml=%d\nnrnuml);//0//printf(nnum2=%d]\nf,,num2);//-1//短路現(xiàn)象//邏輯或,如果前面判斷是真,后面的判斷不再執(zhí)行。//intnuml=-1;//intnum2=-1;//BOOLb3=(numl=2)||(num2=〇);//真////printf(n%dn,b3);//I//printf("numl=%d\nM,numl);//2//printf(nnum2=%d)\n",num2);//-115、if語(yǔ)句程序的三種結(jié)構(gòu):順序結(jié)構(gòu):按順序執(zhí)行程序,直到完事為止。分支結(jié)構(gòu):if語(yǔ)句和switch循環(huán)結(jié)構(gòu):循環(huán)的執(zhí)行ー段語(yǔ)句。直到循環(huán)條件結(jié)束為止。分支結(jié)構(gòu)有兩個(gè):if語(yǔ)句和switch語(yǔ)句if語(yǔ)句有三種方式:if(條件表達(dá)式乂)//分支結(jié)構(gòu)//if的(第一種形式)//BOOLbl=NO;//if(/?條件表達(dá)式:要明確的表明條件是真是假?/bl){//}//練習(xí)/*從控制臺(tái)輸入ー個(gè)整數(shù)。判斷這個(gè)整數(shù)是否>100。如果大于100,輸出:'、這個(gè)數(shù)大于100”*///intnum=0;//printf("請(qǐng)輸入ー個(gè)整數(shù),按回車結(jié)束:'n");//scanf(n%dH,&num);//if(num>100){// printf("你輸入的數(shù)為:%d\n",num);// printf("這個(gè)整數(shù)大于100\n");//}//charcl=0;//printf("輸入一個(gè)字符,按回車結(jié)束:'n");//scanf("%c",&cl);//BOOLbl='m'==cl;//if(bl){// printf("輸入的是男性");//}if(條件表達(dá)式){}else{)/charc2=0;//printf("請(qǐng)輸入字符:つ;//scanf(n%cHz&c2);//if(,m?==c2){//// printf("正太”);//}else(// printf("蘿莉”);//}//intyear=0;//printf(”請(qǐng)輸入年份,按回車結(jié)束:つ;// scanf(,,%dnz&year);//// //判斷閏年的條件//BOOLbl=(year%400==0);//BOOLb2=(year%100!=0)&&(year%4==0);//if(blIIb2){//// printf("吿d\セ是閏年、n",year);////}else(// printf("吿d\t是平年!”,year);//)(3)if(條件表達(dá)式){}elseif(條件表達(dá)式){}else{)//charc3=0;// printf("輸入一個(gè)字符:");//scanf&c3);//// if(==c3){// printf("男性");//}elseif('f'==c3){// printf("女性");//}else(// printf("春哥");//)/*輸入一個(gè)字符,判斷s:春天m:夏天a:秋天w:冬天其他:輸入有誤。*///charcl0;//charcl0;//printf("輸入一個(gè)字符,按回車結(jié)束:");////scanf("%c",&cl);////if('s'==cl){// printf("我是春天!");//}else ==cl){// printf("我是夏天!");////}elseif(1a*==cl){// printf("我是秋天!");////}elseif(1w*==cl){// printf("我是冬天!");//}else(// printf("輸入有誤!い);//}16、條件表達(dá)式//條件表達(dá)式// intnuml=10;// intnum2=20;////intnum3=numl>num2?numl:num2;////printf(Mnum3=%d”,num3);//課后練習(xí)題/*使用條件運(yùn)算符,選擇出三個(gè)數(shù)中,哪個(gè)最大。*/洞房花燭夜我兩小無(wú)猜字符型就是整型。Switch分支語(yǔ)句Switch分支語(yǔ)句就是為了優(yōu)化if(){}elseif(){}過(guò)多條件。//switch分支語(yǔ)句// switch(apple){// case apple:// printf("我是蘋果也い);// //break:終止往后繼續(xù)執(zhí)行// break;// case banana:// printf("我是香蕉也!”);// break;// case orange:// printf("我是橘子也い);// break;// case watermelon:// printf("我是西瓜也い);// break;// default:// printf("我不是水果也い);//)與elseifー樣的效果。注意的是:switch()括號(hào)中的條件必須為整型條件表達(dá)式。在每ー個(gè)case下的語(yǔ)句代碼,最后都要加上break,用來(lái)跳出switch語(yǔ)句。//練習(xí)//intseason=0;// printf("請(qǐng)輸入ー個(gè)數(shù)字,按回車結(jié)束:");//scanf(n%dHz&season);////switch(season){TOC\o"1-5"\h\z// case 1:// printf ("春天啊我是!spring");// break;// case 2:// printf ("夏天啊我是!summer");// break;// case 3:// printf("秋天啊我是!autumn");// break;// case 4:// printf("冬天啊我是!winter");// break;//// default:// printf("啥也不是啊我!nothing");// break;//}17>枚舉enum#import<Foundation/Foundation.h>//枚舉,建議寫在這個(gè)地方。enumseason{//第一^元素,默認(rèn)為0.后面元素依次+1,spring自動(dòng)被賦值為0,summer為1.//每個(gè)值都可以改變默認(rèn)值,后面的數(shù)還是依次+1.初始化過(guò)的默認(rèn)值,后面的數(shù)還是依次+1spring=100,//100summer=20〇,//200autumn,//201winter//202};/Z練習(xí),定義ー個(gè)枚舉//定義五個(gè)水果:蘋果(10),香蕉,橘子,西瓜enumfruits{apple=10,banana,orange,watermelon);intmain(){118、循環(huán)特點(diǎn):在滿足特定條件的情況下,反復(fù)執(zhí)行某程序段。While循環(huán)While循環(huán)的格式是這樣的:while(條件表達(dá)式){語(yǔ)句代碼},意思是滿足括號(hào)內(nèi)的條件時(shí),執(zhí)行花括號(hào)內(nèi)的語(yǔ)句代碼。或者更專業(yè)一點(diǎn)來(lái)說(shuō),當(dāng)括號(hào)內(nèi)的條件表達(dá)式返回值為真時(shí),執(zhí)行花括號(hào)內(nèi)的代碼,一直到條件表達(dá)式的返回值為假時(shí),跳出循環(huán)。While循環(huán)很容易出現(xiàn)死循環(huán)這種狀況,就是因?yàn)橥泴懥恕霸隽俊边@個(gè)東西。//死循環(huán)intcount=0;//while(count<100){// printf("今天我真帥...\n");//)上面的代碼就是少了count++,這個(gè)增量,所以,條件表達(dá)式一直滿足,就一直執(zhí)行,就造成了死循環(huán)。此時(shí),應(yīng)該這樣改進(jìn)://循環(huán)變量:控制循環(huán)次數(shù)//intcount=0;//while(/*++在前,打印兩次*/count/*++在后,打印三次?/<3){//// printf("今天我真帥...\n");1111count=count+1;//// //此處,++在前在后都不影響打印次數(shù)。//// //循環(huán)增量// count++;1111 ++count;ー些例子://練習(xí)//打印1~100//intnum=0;//while(num<100){// printf("%d\n",(num+1));//// num++;//}//用while打印能被フ整除的l~100之間的數(shù)。//intnum=1;//while(num<=100){//// if(num %7==0){// printf(n%d\tMrnum);// }// num++;//}//用while循環(huán)打印出].?:LOO之間各位為フ的數(shù)。//intnum=0;////while(num<100){//// if(num % 10==7){// printf(H%d\tMz(num));// }// num++ ;//}//用while循環(huán)打印出1?100之間十位為7的數(shù)。num/10==7//intnum=0;//while(num<100){// if(num /10==7){// printf(M%d\t”,num);// )// num++;//}Do-while循環(huán)與while不同的只有一個(gè)地方,就是先執(zhí)行一遍代碼,再進(jìn)行判斷。也就是說(shuō),不管你while的條件表達(dá)式成不成立,返回值為不為假,我都執(zhí)行一遍循環(huán)體的代碼。//dowhile//do{// printf("至少執(zhí)行一次,不管后面的判斷條件是真還是假”);// }while(1);//;分號(hào)不能丟隨機(jī)數(shù)arc4random()產(chǎn)生隨機(jī)數(shù)的方法,arc4random()可以產(chǎn)生int范圍內(nèi)的任意一個(gè)隨機(jī)數(shù),包括有正數(shù)和負(fù)數(shù),為什么會(huì)出現(xiàn)負(fù)數(shù)呢?因?yàn)?在存儲(chǔ)的時(shí)候,生成的數(shù)的最高位的數(shù)字為1,此時(shí),會(huì)認(rèn)為這個(gè)1是符號(hào)位的負(fù),因此會(huì)出現(xiàn)負(fù)數(shù)。這時(shí),我們應(yīng)該把這些情況避免掉,在輸出之前,用unsigned來(lái)定義ー個(gè)變量來(lái)接收產(chǎn)出的隨機(jī)數(shù);在輸出的過(guò)程中,占位符不再用%d,而是用%u來(lái)代替。另ー個(gè)值得注意的是,隨機(jī)數(shù)產(chǎn)生的時(shí)候,數(shù)字會(huì)很大,而我們?cè)诖a過(guò)程中,不需要這么大的數(shù),此時(shí),想要把這個(gè)數(shù)減小,可以用取余的辦法來(lái)限制。//隨機(jī)數(shù)arc4random(),//用%U來(lái)打印,表示無(wú)符號(hào)。//由于隨機(jī)函數(shù)給的值很大,我們采用取余的方法,使值變小。取余的隨機(jī)數(shù)的范圍就是,〇?被除數(shù)一1//printf("%u\t",arc4random()%10);//打印只有OTO的數(shù)在產(chǎn)生一個(gè)隨機(jī)數(shù)的時(shí)候,可以讓它在固定的區(qū)間內(nèi)產(chǎn)生,那么就會(huì)用到這個(gè)公式://取某區(qū)間[a,b]的數(shù),用公式:arc4random()%(b-a+1)+a若是規(guī)定在負(fù)空間生成隨機(jī)數(shù),那么就將公式改成:/arc4random()%(b-a+1)-aー些例子://用戶輸入ー個(gè)N,用while打印N個(gè)隨機(jī)數(shù)(10?30)//intnum=0;//intcount=0;//printf("輸入一^數(shù):“);//scanf(n%dn,&num);//printf("產(chǎn)生%d隨機(jī)數(shù)為:\n\tM,num);//while(count<num){//// //unsigned聲明一個(gè)無(wú)符號(hào)int類型〇// unsignedunum=(arc4random()%((30-10+1)+10));// printf(M第%d個(gè)數(shù)為:%d\t",(count+1),unum);// count++;//}//輸入一個(gè)數(shù),用while打印n個(gè)隨機(jī)數(shù)(30?70),找出隨機(jī)數(shù)中最大值。//intnum=0;//printf("輸入ー^個(gè)數(shù):\nn);//scanf("吿d”,&num);//intcount=0;//intmax=0;//while(count<num){// unsignedunum=(arc4random()%((70-30+1)+30));// printf(M第%d個(gè)數(shù)為:%d\n",(count+1),unum);//// if(max<unum){// max=unum;// }// count++;//)//printf(n\nM);//printf("最大的數(shù)為:%d\n”,max);Break和continue這兩個(gè)關(guān)鍵字在開(kāi)發(fā)過(guò)程中經(jīng)常遇見(jiàn),他們的區(qū)別如下:break:在某個(gè)循環(huán)的時(shí)候,用上break,意思就是停止這個(gè)循環(huán),不再執(zhí)行這個(gè)循環(huán),我要跳出這個(gè)循環(huán)。continue:在某個(gè)循環(huán)的時(shí)候,在過(guò)程中用上continue,意思就是,我在的這個(gè)循環(huán)還在運(yùn)行,但是我不運(yùn)行這一次的循環(huán),我要跳到下一次的循環(huán)去,但是還是在這個(gè)循環(huán)里,沒(méi)有跳出去,只是不執(zhí)行這次罷了。//循環(huán)變量//intcount=0;//while(count<10){//// count++;//// if(count==3){

////結(jié)束本次循環(huán)////continue;/*輸出結(jié)果://第1天//第2天第4天第5天第6天第フ天第8天第9天第10天?/}if(count==5){//結(jié)束循環(huán)break;/*輸出結(jié)果:第1天第2天第4天?///printf("第%d天\n",count);//////}for循環(huán)for循環(huán)和while差不多,但是是將條件和增量,循環(huán)變量都一起放在了小括號(hào)里。值得注意的是:while與for的比較時(shí),for的ー個(gè)好處相比于while循環(huán):while中存在浪費(fèi)內(nèi)存的情況,因?yàn)檠h(huán)變量在while循環(huán)外邊,直到它所在的花括號(hào)結(jié)束,オ釋放內(nèi)存。而for循環(huán)的循環(huán)變量在for循環(huán)結(jié)束后,即釋放。for循環(huán)的執(zhí)行過(guò)程是這樣的:for(①inti=0;②i<100;@i++){③循環(huán)體)在運(yùn)行到本處時(shí),先進(jìn)行①賦初值,然后判定條件,滿足則跳進(jìn)循環(huán)體執(zhí)行代碼③,執(zhí)行循環(huán)體代碼結(jié)束后,對(duì)i進(jìn)行自增④i++,然后進(jìn)行②判斷,執(zhí)行③,自增四。。。如此循環(huán)下去。//for循環(huán)//intcount=0;//while(count<5){// printf("\n我是while循環(huán)。〇〇n);// count++;//}//f。門循環(huán)變量;條件;增量){循環(huán)體}//for(inti=0;i<5;i++){// printf("\n我是for循環(huán)哦。。。");//)//練習(xí)//打印0-100//for(inti=0;i<=100;i++){// printf("%d\t",i);//)//打印1700//相比于while循環(huán):while中存在浪費(fèi)內(nèi)存的情況,因?yàn)檠h(huán)變量在while循環(huán)外邊,直到它所在的花括號(hào)結(jié)束,才釋放內(nèi)存。//而for循環(huán)的循環(huán)變量在for循環(huán)結(jié)束后,即釋放。//for(intj=0;j<100;j++){// printf("%d\t"z(j+1));//}//打印***//for(inti=0;i<3;i++){// printf(n*n);//}循環(huán)嵌套當(dāng)我們發(fā)現(xiàn),一個(gè)循環(huán)自身又要循環(huán)多次時(shí),用循環(huán)嵌套:循環(huán)里有循環(huán)//打印/*★*★★★★★★★//兩層for循環(huán)//外層for:負(fù)責(zé)控制行//for(intj=0;j<3;j++){// //內(nèi)層for負(fù)責(zé)每行打印多少個(gè)// for(inti=0;i<3;i++){// printf(n*n);// }// printf(”\n");//}//打印a112123*//Z里邊的個(gè)數(shù)跟行數(shù)一樣,(第一行有一個(gè),第二行有2個(gè)。。。)那么只要i<=j就可以了。//for(intj=1;j<=3;j++){// for(inti=1;i<=j;i++){// printf(H%d”,i);// }// printf("\n");//)//打印乘法口訣表//for(inti=0;i<9;i++){// //列// for(intj=0;j<=i;j++){// printf(H%d*%d=%d\t",j+1,i+1,(j+1)*(i+1));// }// printf(M\nn);//}//三維數(shù)組合://三個(gè)for循環(huán)//百位1?9for(inti=1;i<=9;i++){//十位〇?9for(intj=0;j<=9;j++){〃個(gè)位〇?9for(intk=0;k<=9;k++){printf(“為d\n”,i*100+j*10+k);})}19、數(shù)組數(shù)組:相同的數(shù)據(jù)類型成員組成的數(shù)據(jù)。如:整型數(shù)組,浮點(diǎn)型數(shù)組。數(shù)組的形式為:類型修飾符數(shù)組名[常量表達(dá)式]={1,2,3........};說(shuō)明:數(shù)組在定義的時(shí)候,U里必須用常量表達(dá)式,不能用變量表達(dá)式來(lái)代替但是數(shù)組在使用的時(shí)候,口中可以用變量來(lái)代替。數(shù)組和循環(huán)是ー對(duì)好基友。數(shù)組的幾個(gè)注意的點(diǎn):1、只有定義時(shí),口內(nèi)為常量表達(dá)式。不能放變量// intn=3;// intarrl[n]={10,20,30};//報(bào)錯(cuò)2、ロ可以放算術(shù)式。//intarr2[1+2]={10,20,30);3、初始化時(shí)可以放多余空間的元素(但是這是不對(duì)的)//intarr3[3]={10,20,30,40);4、定義時(shí),可以不給出常量表達(dá)式。(數(shù)組可以通過(guò)元素個(gè)數(shù)推算空間)。給出多少個(gè)元素,會(huì)自動(dòng)給你分配多少空間//intarr4[]={10,20,30};5、前三個(gè)空間值分別為10,20,30,后面的7個(gè)空間全部清0,為0。intarr5[10]={10,20,30};6、數(shù)組初始化//intarr6[3]={0};////錯(cuò)誤的//intarr7[]={0};ー些例子://練習(xí)//floatarr_f[3]={3?1,5?2,7.9};//使用數(shù)組//intarr8[3]={10,20,30};//printf(n%dn,arr8[0]);//printf(M%dn,arr8[1]);//printf(M%dn,arr8[2]);數(shù)組取值://使用數(shù)組可以用下標(biāo)取值//下標(biāo)可以使用變量//數(shù)組可以使用循環(huán)取出所有值//for(inti=0;i<3;i++){// printf(M%d\nn,arr8[i]);越界1、存儲(chǔ)的時(shí)候越界://第一種,存儲(chǔ)的時(shí)候越界//intarr9[3]={10,20,30,40};//此時(shí),40已經(jīng)被寫入內(nèi)存,但是取值的時(shí)候,40所在的內(nèi)存空間已經(jīng)被修改,所以取值的時(shí)候,很難取到40////for(inti=0;i<4;i++){//循環(huán)4次,打印10,20,30,0(不同的計(jì)算機(jī)打印出來(lái)的值不同)//// printf("%d\n",arr9[i]);//)//2、使用的時(shí)候越界//第二種,使用的時(shí)候越界//intarrlO[3]={10,20,30};////arrlO[0]=50;//自己定義的數(shù)組,可以隨便改。//// printf("告d",arrlO【〇]>;//打印50//////arrlO[3]=50;//可以訪問(wèn)之后的任意空間,本數(shù)組的第4個(gè)內(nèi)存空間位置I被改動(dòng)。////printf("%d",arrl0[3]);//JTB[J50C語(yǔ)言可以通過(guò)我們定義的數(shù)組,操作本數(shù)組之后的所有內(nèi)存空間,那些空間不屬于這個(gè)數(shù)組,誰(shuí)都可以去用。因此可以在上面進(jìn)行讀寫。這樣就會(huì)使得程序不安全。數(shù)組越界是一件很危險(xiǎn)的事情,我們無(wú)法把控,因此我們?cè)诓僮鞒绦蚴?盡可能的避免越界產(chǎn)生。數(shù)組是ー個(gè)整體,不能直接參與運(yùn)算,只能對(duì)各個(gè)元素進(jìn)行處理。ー些代碼://練習(xí)//I,定義一個(gè)具有20個(gè)元素的整型數(shù)組,30?70間的隨機(jī)數(shù),求和。// //定義數(shù)組,并清零,初始化。//intarray[20]={0};///Z求和變量//intsum=0;// printf("20個(gè)隨機(jī)數(shù)為:\n");// //產(chǎn)生20個(gè)隨機(jī)數(shù)//for(inti=0;i<20;i++){// unsignednum=arc4random()%(70-30+1)+30;// printf(M%d\tH,num);// array[i]=num;// //不要在這個(gè)地方求和,ー個(gè)forー個(gè)功能。增加代碼的重用性。1111 sum=sum+array[i];//)// //求和//for(inti=0;i<20;i++){// sum+=array[i];〃}////〃printf("ヽn\n20個(gè)數(shù)的和sum=%dnrsum);//2、復(fù)制數(shù)組。//intarrayl[5]={10,20,30,40,50};//intarray2[5]={0};//for(inti=0;i<5;i++){// array2[i]=arrayl[i];// printfげ%d\t”,array2[i]);//)排序冒泡排序從第一個(gè)數(shù)開(kāi)始,用第一個(gè)數(shù)分別與后面的數(shù)進(jìn)行比較,若是大于后面的數(shù),則將該數(shù)放在后面。然后再用第二個(gè)數(shù)跟后面的數(shù)比較,若大于后面的數(shù),則將該數(shù)放在后面,依次類推,一直到最后ー個(gè)數(shù)比較完畢為止。此時(shí),排序已經(jīng)完成。//數(shù)組排序// //冒泡排序(只適合小范圍的數(shù)據(jù)排序)(20遍)//intsort_arr[5]={5,4,3,2,1};// //外層循環(huán),控制排序趟數(shù),趟數(shù)為:數(shù)組元素個(gè)數(shù)一1//for(inti=0;i<(5-1)/*5-l,表示數(shù)組有n個(gè)數(shù)比較,只比較n-1趟?/;i++){// //內(nèi)層for循環(huán),控制比較次數(shù)// for(intj=0;j<5-(i+1)/?本來(lái)應(yīng)該是5-i,但是i是從。開(kāi)始的,我們要得是從1開(kāi)始,因此要5-(i+1)。此處的意思是每ー趟,比較多少次。*/;j++){// //判斷,并且交換。// if(sort_arr[j]>sort_arr[j+1]){// //交換,不使用第三個(gè)變量交換,用亦或人的方法最好。// sort_arr[j]= sort__arr[j]人 sort_arr[j+l];// sort__arr[j+1] =sort_arr[j] へsort__arr[j+1];// sort_arr[j]= sort_arr[j]A sort_arr[j+1];//}//}//}// //打印//printf("冒泡排序后:,,);//for(inti=0;i<5;i++){// printf("%d\t",sort_arr[i]);//}//練習(xí)// //隨機(jī)產(chǎn)生10個(gè)[20,40]間的數(shù),排序////intarray[10]={0};//printf("排序前的10個(gè)數(shù)為:\n");// //取隨機(jī)數(shù)//for(inti=0;i<10;i++){// unsignednum=arc4random()%21+20;// array[i]=num;// printf("%d\t",array[i]);//}//// //排序開(kāi)始// //外層for循環(huán),控制比較多少趟。//for(inti=0;i<10-1;i++){// //內(nèi)層for循環(huán),控制比較多少次// for(intj=0;j<10-(i+1);j++){// //冒泡排序// if(array[j]>array[j+1]){// //亦或,用來(lái)交換兩個(gè)變量的值。// array[j]= array[j]A array[j+1];// array[j+1] =array[j] 人array[j+1];// array[j]= array[j]へ array[j+1];//}//}//)// printf("\n排序后的10個(gè)數(shù)為:\n");//for(inti=0;i<10;i++){// printf("吿d\t",array[i]);//}字符數(shù)組第一種定義:chararray[5]={'h',*e*,,l*,*1,,I〇,};第二種定義:chararrayl[6]="hello";第二種定義在定義的時(shí)候,自動(dòng)添加一個(gè)‘、〇’。這個(gè)、。有著特定的意義,在接下來(lái)輸出這個(gè)數(shù)組時(shí),將會(huì)用%s來(lái)作為占位符,當(dāng)%s在輸出數(shù)組時(shí),遇到了,、〇,這個(gè)特定意義的“結(jié)束標(biāo)識(shí)符”時(shí),就會(huì)終止打印,停止輸出。此時(shí),數(shù)組的實(shí)際長(zhǎng)度為:字符數(shù)組元素個(gè)數(shù)+1,要留出'、0'的位置。// //吿s占位符1111for(inti=0;i<5;i++){1111 printf("%c",array[i]);////}//printf("%s",array);//打印:helloー些情況:// //自動(dòng)推算出有6個(gè)位置//chararray2[]="hello";////// //前面補(bǔ)滿,后面補(bǔ)。//chararray3[10]="heエ10";//存儲(chǔ)打印中文// chararray3[20]="藍(lán)歐";//printf("%s",array3);//打印:藍(lán)歐口字符串操作函數(shù)長(zhǎng)度://I、長(zhǎng)度//charsi[]=nLanou";////unsignedlongnuml=strlen(si);〃不包括、〇////printf numl);//輸出:5//charsi[]=”藍(lán)歐”;//數(shù)組占フ個(gè)字節(jié),字符占6個(gè)字節(jié)。//unsignedlongnuml=strlen(si);//不包括、〇////printf("%lu"rnuml);//輸出:6,漢字占3個(gè)字節(jié)拷貝//2、拷貝//chars2[]="Lanou";〃6個(gè)字節(jié)// //接收的字符數(shù)組,一定不能比原數(shù)組小。//chars3[6]={0};////第一個(gè):拷貝到哪////第二個(gè):從哪拷貝//strcpy(s3,s2);//printf("%s"zs3);字符串拼接//3、字符串拼接//被拼接的字符串,空間一定要夠大。//chars4[10]=,,LanouH;////chars5[]=nV5n;//// //第一個(gè)是被拼接的是誰(shuí),S4(被拼接的字符數(shù)組一定要夠大)// //第二個(gè)是拼接什么,s5////strcat(s4rs5);// printf("%s”,s4);//輸出:LanouV5比較〃4、比較//找到第一組不相等的兩個(gè)字符,比較ASCII碼值//結(jié)果為正:第一個(gè)字符數(shù)組大//結(jié)果為負(fù):第二個(gè)字符數(shù)組大//結(jié)果為0:兩個(gè)字符數(shù)組相等// chars6[]="bba";// chars7[]="baa";//inti=strcmp(s6zs7);////printf(n%dn,i);20、ニ維數(shù)組。維數(shù)組:有兩個(gè)下標(biāo)的數(shù)組。定義:類型數(shù)組名[常量表達(dá)式1][常量表達(dá)式2]={值1,值2...};用普通的話來(lái)說(shuō),就是,二維數(shù)組的第一個(gè)口表示行,第二個(gè)口表示列。A數(shù)組的第一種定義方式:// //定義二維數(shù)組的第一種方式(不直觀,不能直接看出第一行是在哪里開(kāi)始結(jié)束)//intarray[2][3]={1,2,3,4,5,6};數(shù)組第二種定義方式://定義二維數(shù)組的第二種方式(直觀)//花括號(hào){},可以區(qū)分行{1,2,3}為一行,{4,5,6}為一行//intarray[2][3]={{1,2,3},{4,5,6}};////for(inti=0;i<2;i++){// for(intj=0;j<3;j++){// printf(H%dn,array[i][j]);// }// printf(n\nn);//} 數(shù)組第三種定義方式:(注意:定義二維數(shù)組時(shí),可以省略行數(shù),但是一定不能省略列數(shù)。元素個(gè)數(shù)不。,會(huì)。動(dòng)補(bǔ)〇。)/Z第三種:可以省略行,但是一定不能省略列// intarray[][]={1,2,3,4,5,6};//報(bào)錯(cuò)// intarray[][]={{1,2,3},{4,5,6}};//錯(cuò)誤的//intarray[2][]={1,2,3,4,5,6};〃只給行,報(bào)錯(cuò)//intarray[][3]={1,2,4,5,6};//只給列,正確// //打印//for(inti=0;i<2;i++){// for(intj=0;j<3;j++){// printf("%d",array[i][j]);//}// printf("\n");//)// //打印結(jié)果:124// // 560自動(dòng)補(bǔ)0//intarrayl[][3]={{1,2},{3,4},{5,6}};////for(inti=0;i<3;i++)<// for(intj=0;j<3;j++){// printf("%d",arrayl[i][j]);TOC\o"1-5"\h\z// }// printf("\n");//}// //打印// //120// //340// //560ー些練習(xí):定義ー個(gè)三行兩列的維維數(shù)組//練習(xí)//定義ー個(gè)三行兩列的維維數(shù)組//intarray[3][2]={{フ5,60},{62,90},{60,50}};////for(inti=0;i<3;i++){// for(intj=0;j<2;j++){// printf(n%d\tn,array[i][j]);// }// printf(n\nn);//)////打印結(jié)果////500 450////6290////6650////求和//inttotal=0;//for(inti=0;i<3;i++){//for(intj=0;j<2;j++){//total+=array[i][j];//}//}//printf("我們組的總體重為:%d克”,total);將一個(gè)數(shù)組的行和列交換,放在另外一個(gè)新的數(shù)組中去://將[]個(gè)〇維數(shù)組的。和列交換,存儲(chǔ)到另外。個(gè)數(shù)組中去。//intarrl[2][3]={{1,2,3},{4,5,6});//intarr2[3][2]={0};////for(inti=0;i<3;i++){// for(intj=0;j<2; j++){// arr2[i][j]=arrl[j][i];//// printf(H%d\tn,arr2[i][j]);// }// printf(”\n");關(guān)鍵點(diǎn):主要是搞清楚規(guī)律。這里的規(guī)律就是原來(lái)的數(shù)組的行和列調(diào)換位置,就可以得到新的數(shù)組。for循環(huán),可以用后面數(shù)組來(lái)循環(huán),也可以用前面的數(shù)組來(lái)循環(huán)。定義ー個(gè)3行4列的數(shù)組,找出數(shù)組的最大的元素,打印出來(lái),并打印所在的行和列。//3行4列的數(shù)組,找出最大值,輸出所在行列。//intarr[3][4]={{1,2,3,4322},{5,6,777,8},{99,10,11,12222)};/Z 〃記錄最大值和行列

//intx=0;//行//inty=0;//列//intmax=0;//最大值//for(inti=0;i<3;i++){//for(intj=0;j<4;j++){//if(arr[i][j]>max){//max=arr[i][j];//x=i;//y=j;//}//}//}//printf("最大值為:%d**tmax);//printf("\n最大的數(shù)在第吿d行,第%d列”,x,y);與普通的找最大值ー個(gè)樣子21、字符串?dāng)?shù)組字符串?dāng)?shù)組本質(zhì)上是一個(gè)二維數(shù)組1、訪問(wèn)某個(gè)字符串:數(shù)組名[行號(hào)]2、訪問(wèn)某個(gè)字符:數(shù)組名[行號(hào)][列號(hào)]定義方式://字符串?dāng)?shù)組//chararrl[3][10]={niPhone*1r^Android11,"Windowsn};//////printf(**%c**,arrl[0][〇]);//輸岀:i////////printf(“告s”,arrl[2]);//只給行號(hào)就行。////for(inti=0;i<3;i++){printf("%s\n",arrl[i]);)// //打印結(jié)果:iPhone// Android// Windows打印字符串?dāng)?shù)組時(shí),直接在for里給出行數(shù),就可以了。不用兩個(gè)for。ー些練習(xí):創(chuàng)建一個(gè)字符串?dāng)?shù)組(內(nèi)容是你周圍ー圈人的姓名),輸出最長(zhǎng)的字符串長(zhǎng)度。/Z練習(xí)//創(chuàng)建一個(gè)字符串?dāng)?shù)組(內(nèi)容是你周圍ー圈人的姓名),輸出最長(zhǎng)的字符串長(zhǎng)度。//unsignedlonglength[20]={0};//unsignedlongmax=0;// intx=0;//charnames[6][20]={"nongdahain,"qinxiaoqiang","sunqing","qinwei","Ivlifeng11,Hliuxiaoqing**};//for(inti=0;i<6;i++){// length[i]=strlen(names[i]);//)//for(inti=0;i<20;i++){// if(max<length[i]){// max=length[i];// x=i;// }//)//printf(n%d\nM,x);//printf("吿!u\n",max);//printf(n%s\nn,names[x]);字符串?dāng)?shù)組從小到大排序//字符串?dāng)?shù)組從小到大排序//charnames[6][20]={"nongdahai","qinxiaoqiang",“sunqing","qinwei","Ivlifeng1,,nliuxiaoqing"};////for(inti=0;i<6-1;i++){// for(intj=0;j<6-(i+1);j++){// if(strcmp(names[j]rnames[j+1])>0){// chartemp[20]={0};//strcpy(temp,names[j]);//strcpy(names[j]znames[j+1]);//strcpy(names[j+1]rtemp);////}//}////)//for(inti=0;i<6;i++){//printf(n%s\nn,names[i]);//}////liuxiaoqing////Ivlifeng////nongdahai////qinwei////qinxiaoqiang////sunqing22、三維數(shù)組//三維數(shù)組〃2層,3行,4列intarr[2][3][4]={0};//右左法則23、函數(shù)函數(shù):具有特定功能的代碼段。函數(shù)的使用,可以省去很多重復(fù)代碼的編寫,大大簡(jiǎn)化程序,提高開(kāi)發(fā)效率。函數(shù)包括庫(kù)函數(shù)和自定義函數(shù)(開(kāi)發(fā)者自己寫的函數(shù))。函數(shù)的定義,有以下四種:1、無(wú)返回值無(wú)參型//函數(shù)定義有四種形式//函數(shù)是為了完成某項(xiàng)任務(wù)。//任務(wù)材料:參數(shù)//交任務(wù):返回值//第一種:無(wú)參數(shù),無(wú)返回值。voidsayHi(){printf("HI,約嗎?Iり;}2、有返回值無(wú)參型//第二種:無(wú)參數(shù),有返回值。intnumberOne(){//將結(jié)果返回//函數(shù)執(zhí)行到return就結(jié)束。//return10.10;////如果返回類型不匹配,不報(bào)錯(cuò),但是結(jié)果不準(zhǔn)了。(注意)return1;//return后面的代碼不會(huì)被執(zhí)行printf("我還沒(méi)出場(chǎng)呢。。");3、無(wú)返回值有參型//第三種:有參數(shù),無(wú)返回值。/Z參數(shù)可以任意多個(gè),/Z但是調(diào)用函數(shù)的時(shí)候,必須ーー賦值。voidprintSum(intnumlrintnum2){printf(n%d+%d=%dnrnumlfnum2,numl+num2);}4、有返回值有參型//第四種:有參數(shù),有返回值。//numlrnum2(int)返回sum//不知道numl,num2叫做形參intsum(intnuml,intnum2){returnnuml+num2;求1?n的加和:#import<Foundation/Foundation.h>//練習(xí)//I、//intsumValue(intn){//intsum=0;//for(inti=0;i<=n;i++){// sum=sum+i;//}// returnsum;//)intmain(intargc,constchar*argv[]){//printf("%d”,sumValue(9));return0;|輸入年月日,輸出是在一年內(nèi)的第幾天:switch方式://switch方式/*intdayOfYear(intyear,intmonth,intday){

inttotal0;inttotal0;switch(month){total=day;break;total=31+day;break;total=31+28-1-day;break;case4:+31+day;total=break;31+28case5:total=31+28+31+30+day;break;case6:total=31+28+31+30+31+day;break;case7:total=31+28+31+30+31+30+day;break;case8:total=31+28+31+30+31+30+31+day;break;case9:total=31+28+31+30+31+30+31+31+day;break;case10:total=31+28+31+30+31+30+31+31+30+day;break;case11:total=31+28+31+30+31+30+31+31+30+31+day;break;case12:total=31+28+31+30+31+30+31+31+30+31+30+day;break;default:return0;break;}returntotal;}婪組方式:*i//數(shù)組方式/*intdayOfYear(intmonth,intday){intarray[12]={31,28,31,30,31,30,31,30,31,31,30,31};intsum=0;for(inti=0;i<month-1;i++){sum+=array[i];}sum+=day;returnsum;}*/intmain(intargc,constchar*argv[]){//printf(n%dn,dayOfYear(12,11));return0;)函數(shù)調(diào)用:我們?cè)诙xー個(gè)函數(shù)后,需要在其他函數(shù)里調(diào)用我們定義好的這個(gè)函數(shù)。才能實(shí)現(xiàn)這個(gè)函數(shù)的功能。如上面的ー些代碼,我們?cè)诙x了函數(shù)后,在main〇函數(shù)里調(diào)用了我們定義好的函數(shù)。這樣就能把我們定義的功能體現(xiàn)出來(lái)。函數(shù)聲明:函數(shù)聲明的出現(xiàn),是因?yàn)槲覀冇袝r(shí)候在main〇函數(shù)后面定義我們的函數(shù),但是在main〇函數(shù)里調(diào)用我們定義的函數(shù),這樣的話,在編譯的時(shí)候,系統(tǒng)會(huì)報(bào)錯(cuò),說(shuō)是這個(gè)函數(shù)沒(méi)有定義。此時(shí),我們應(yīng)該在main〇函數(shù)前對(duì)我們定義的函數(shù)進(jìn)行聲明。聲明形式為:我們自定義的函數(shù)的返回類型函數(shù)名參數(shù):voidsumfintnum);這個(gè)就是我們自定義的函數(shù)的函數(shù)聲明。加上聲明之后,main〇函數(shù)調(diào)用自定義函數(shù)オ不會(huì)報(bào)錯(cuò)。//函數(shù)聲明。//若不聲明,則下面會(huì)報(bào)錯(cuò)。//voidsayHi();intmain(intargc,constchar*argv[]){〃2015年04月02日14:31:27北京//函數(shù)的調(diào)用//sayHi();//return0;}//函數(shù)的定義//voidsayHi(){// printf("今天天氣不錯(cuò),約嗎?つ;//)//intsum(intnuml,intnum2){//returnnuml+num2;//)函數(shù)的聲明,在Xcode里,這樣隔開(kāi)會(huì)比較好:新建一個(gè)Objective-Cclass的文件,命名好后,會(huì)生成一個(gè).h和一個(gè).m文件,我們將所有的函數(shù)聲明放在.h的文件里,將函數(shù)的定義,放在.m文件里。在main函數(shù)調(diào)用之前,需要將.h文件引用進(jìn)main.m文件中,方式為://引入.h文件#import"Hi.h"http://自己定義的文件,用""來(lái)引入。意思就是把Hi.h里的東西全部原封不動(dòng)的復(fù)制到這個(gè)地方。//.h文件不參與翻譯。//若干個(gè).m文件在翻譯時(shí),是連成一塊的。#importnoperator?h”系統(tǒng)的東西用V>來(lái)引入#import<Foundation/Foundation.h>ー些例子:定義4個(gè)函數(shù),實(shí)現(xiàn)+—*/四個(gè)運(yùn)算。operator.h文件//函數(shù)聲明intsum(intnuml,intnum2);intsub(intnuml,intnum2);inttotal(intnuml,intnum2);intmod(intnuml,intnum2);operator.m文件//函數(shù)定義//函數(shù)名不能重復(fù)。//函數(shù)名的命名規(guī)則和變量是一樣的。//+intsum(intnuml,intnum2){returnnuml+num2;intsub(intnuml,intnum2){if(numl>num2){returnnuml-num2;}else{returnnum2-numl;}}//*inttotal(intnuml,intnum2){returnnuml*num2;}if(num2!=0){returnnuml/num2;}else{printf("除數(shù)不為〇");return-1;)}main.m文件?import<Foundation/Foundation.h>/Z系統(tǒng)的東西用<>來(lái)弓I入//引入.h文件//自己定義的文件,用""來(lái)引入。意思就是把Hi.h里的東西全部原封不動(dòng)的復(fù)制到這個(gè)地方。//.h文件不參與翻譯。//若干個(gè).m文件在翻譯時(shí),是連成一塊的。#importnoperator?h”//函數(shù)聲明。//若不聲明,則下面會(huì)報(bào)錯(cuò)。//voidsayHi();//函數(shù)聲明時(shí),參數(shù)名可以去掉,只留參數(shù)類型。//intsum(int,intnum2);//intmain(intargc,constchar*argv[]){//2015年04月02日14:31:27北京//函數(shù)的調(diào)用printf("加法:%d\n”,sum(10,20));printf("減法:%d\n”,sub(10,20));printf("乘法:%d\n”,total(10,20));printf("除法:%d\nn,mod(10,20));return0;}編譯過(guò)程:在編譯時(shí),不對(duì).h文件翻譯,只對(duì).m文件驚醒翻譯。翻譯時(shí),將所有的.m文件連接成一塊,然后進(jìn)行翻譯。數(shù)組作為函數(shù)參數(shù):數(shù)組作為函數(shù)參數(shù)的時(shí)候,注意幾點(diǎn):1、數(shù)組作為參數(shù),不用給定一個(gè)數(shù)組長(zhǎng)度(元素個(gè)數(shù))。因?yàn)榫退憬o定一個(gè)長(zhǎng)度,在我們傳進(jìn)來(lái)的數(shù)組時(shí),長(zhǎng)度會(huì)根據(jù)我們傳進(jìn)來(lái)的數(shù)組的長(zhǎng)度來(lái)確定實(shí)際長(zhǎng)度。所以不用給定長(zhǎng)度。2、再在后面定義一個(gè)變量,用來(lái)裝我們傳過(guò)來(lái)的數(shù)組的長(zhǎng)度。形式如下:voidprintArray(intarr[],intn){}ー些例子:定義ー個(gè)數(shù)組,用函數(shù)打印出來(lái)。用數(shù)組作為參數(shù)傳遞。?import<Foundation/Foundation.h>//打印數(shù)組//數(shù)組作為參數(shù)的時(shí)候,不用給元素個(gè)數(shù)。//再定義ー個(gè)變量n,用來(lái)給出要便利多少次。//voidprintArray(intarr[],intn){//for(inti=0;i<n;i++){// printf(n%d\tn,arr[i]);//)//)intmain(intargc,constchar*argv[])//2015年04月02日15:55:41北京/*//intarray[5]={5,4,3,2,1};////printArray(array,5);return0;}定義一個(gè)隨機(jī)數(shù)組,用函數(shù)進(jìn)行冒泡排序:#import<Foundation/Foundation.h>//函數(shù)冒泡排序voidsortArr(intarr[],intn){for(inti=0;i<n-l;i++){for(intj=0;j<n-(i+1);j++){if(arr[j]>arr[j+1]){arr[j]=arr[j]Aarr[j+1];arr[j+1]=arr[j]Aarr[j+1];arr[j]=arr[j]Aarr[j+1];})}for(inti=0;i<n;i++){printf(n%d\tn,arr[i]);}}intmain(intargc,constchar*argv[])//2015年04月02日15:55:41北京intarray[10]={0};for(inti=0;i<10;i++){array[i]=arc4random()%100;}sortArr(array,10);return0;函數(shù)的嵌套:函數(shù)的嵌套,就是函數(shù)里調(diào)用函數(shù)。函數(shù)允許函數(shù)嵌套調(diào)用,但是不允許函數(shù)嵌套定義ー些例子:簡(jiǎn)單嵌套調(diào)用:#import<Foundation/Foundation.h>//聲明:voidsayHi();voidsayWhat(){sayHi();}voidsayHi(){printf("Hello,Kitty");}//函數(shù)不允許嵌套定義,但是可以嵌套調(diào)用。//函數(shù)嵌套調(diào)用:函數(shù)里邊調(diào)用函數(shù)intmain(intargc,constchar*argv[]){sayWhat();return0;}比較幾個(gè)數(shù)的大小:#import<Foundation/Foundation.h>//函數(shù)不允許嵌套定義,但是可以嵌套調(diào)用。//函數(shù)嵌套調(diào)用:函數(shù)里邊調(diào)用函數(shù)//求兩個(gè)數(shù)最大值inttwoNumberMax(intnuml,intnum2){returnnuml>num2?numl:num2;}//求三個(gè)數(shù)的最大值intthreeNUmberMax(intnuml,intnum2,intnum3){inttemp=twoNumberMax(numlrnum2);returntemp>num3?temp:num3;}//比較4個(gè)數(shù)intfourNumberMax(intnuml,intnum2,intnum3,intnum4){inttemp=threeNUmberMax(numlznum2,num3);returntemp>num4?temp:num4;}遞歸:遞歸就是函數(shù)自己調(diào)用自己。遞歸慎用,因?yàn)槿绻约翰磺宄暶髑闆r下才能讓遞歸停止的話,或者需求給定的樣本太大,則不用。小樣本,并且能控制條件讓遞歸停止,則可以用,否則會(huì)沾滿內(nèi)存,使程序崩潰。在能用非遞歸來(lái)解決,盡量用非遞歸的方式來(lái)解決。?import<Foundation/Foundation.h>//遞歸:自己調(diào)自己..(慎用)樣本小得時(shí)候可以用,大得話,再說(shuō)把。//voidsayHi(){//printf(nHello,六娃、n");//sayHi〇;//)intmul(intn){//非遞歸//intnum=0;//for(inti=1;i<=5;i++){// num*=i;//}//returnnum;//遞歸//使用遞歸必須能夠結(jié)束。if(n==1){return1;}else{returnn*mul(n-1);}}intmain(intargc,constchar*argv[])(//sayHi();intnum=mul(3);printf("吿d",num);return0;}作用域:作用域,就是說(shuō)ー個(gè)變量的生命周期。注意一下幾點(diǎn):1、局部變量:就是變量在ー對(duì)花括號(hào)內(nèi),出了這對(duì)花括號(hào),則內(nèi)存釋放這個(gè)變量,這個(gè)變量的聲明結(jié)束。括號(hào)內(nèi)的變量在和括號(hào)外的變量同名時(shí),按照強(qiáng)龍不壓地頭蛇

溫馨提示

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

評(píng)論

0/150

提交評(píng)論