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

下載本文檔

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

文檔簡介

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

////結束本次循環(huán)////continue;/*輸出結果://第1天//第2天第4天第5天第6天第フ天第8天第9天第10天?/}if(count==5){//結束循環(huán)break;/*輸出結果:第1天第2天第4天?///printf("第%d天\n",count);//////}for循環(huán)for循環(huán)和while差不多,但是是將條件和增量,循環(huán)變量都一起放在了小括號里。值得注意的是:while與for的比較時,for的ー個好處相比于while循環(huán):while中存在浪費內存的情況,因為循環(huán)變量在while循環(huán)外邊,直到它所在的花括號結束,オ釋放內存。而for循環(huán)的循環(huán)變量在for循環(huán)結束后,即釋放。for循環(huán)的執(zhí)行過程是這樣的:for(①inti=0;②i<100;@i++){③循環(huán)體)在運行到本處時,先進行①賦初值,然后判定條件,滿足則跳進循環(huán)體執(zhí)行代碼③,執(zhí)行循環(huán)體代碼結束后,對i進行自增④i++,然后進行②判斷,執(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)哦。。。");//)//練習//打印0-100//for(inti=0;i<=100;i++){// printf("%d\t",i);//)//打印1700//相比于while循環(huán):while中存在浪費內存的情況,因為循環(huán)變量在while循環(huán)外邊,直到它所在的花括號結束,才釋放內存。//而for循環(huán)的循環(huán)變量在for循環(huán)結束后,即釋放。//for(intj=0;j<100;j++){// printf("%d\t"z(j+1));//}//打印***//for(inti=0;i<3;i++){// printf(n*n);//}循環(huán)嵌套當我們發(fā)現(xiàn),一個循環(huán)自身又要循環(huán)多次時,用循環(huán)嵌套:循環(huán)里有循環(huán)//打印/*★*★★★★★★★//兩層for循環(huán)//外層for:負責控制行//for(intj=0;j<3;j++){// //內層for負責每行打印多少個// for(inti=0;i<3;i++){// printf(n*n);// }// printf(”\n");//}//打印a112123*//Z里邊的個數(shù)跟行數(shù)一樣,(第一行有一個,第二行有2個。。。)那么只要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ù)組合://三個for循環(huán)//百位1?9for(inti=1;i<=9;i++){//十位〇?9for(intj=0;j<=9;j++){〃個位〇?9for(intk=0;k<=9;k++){printf(“為d\n”,i*100+j*10+k);})}19、數(shù)組數(shù)組:相同的數(shù)據類型成員組成的數(shù)據。如:整型數(shù)組,浮點型數(shù)組。數(shù)組的形式為:類型修飾符數(shù)組名[常量表達式]={1,2,3........};說明:數(shù)組在定義的時候,U里必須用常量表達式,不能用變量表達式來代替但是數(shù)組在使用的時候,口中可以用變量來代替。數(shù)組和循環(huán)是ー對好基友。數(shù)組的幾個注意的點:1、只有定義時,口內為常量表達式。不能放變量// intn=3;// intarrl[n]={10,20,30};//報錯2、ロ可以放算術式。//intarr2[1+2]={10,20,30);3、初始化時可以放多余空間的元素(但是這是不對的)//intarr3[3]={10,20,30,40);4、定義時,可以不給出常量表達式。(數(shù)組可以通過元素個數(shù)推算空間)。給出多少個元素,會自動給你分配多少空間//intarr4[]={10,20,30};5、前三個空間值分別為10,20,30,后面的7個空間全部清0,為0。intarr5[10]={10,20,30};6、數(shù)組初始化//intarr6[3]={0};////錯誤的//intarr7[]={0};ー些例子://練習//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ù)組可以用下標取值//下標可以使用變量//數(shù)組可以使用循環(huán)取出所有值//for(inti=0;i<3;i++){// printf(M%d\nn,arr8[i]);越界1、存儲的時候越界://第一種,存儲的時候越界//intarr9[3]={10,20,30,40};//此時,40已經被寫入內存,但是取值的時候,40所在的內存空間已經被修改,所以取值的時候,很難取到40////for(inti=0;i<4;i++){//循環(huán)4次,打印10,20,30,0(不同的計算機打印出來的值不同)//// printf("%d\n",arr9[i]);//)//2、使用的時候越界//第二種,使用的時候越界//intarrlO[3]={10,20,30};////arrlO[0]=50;//自己定義的數(shù)組,可以隨便改。//// printf("告d",arrlO【〇]>;//打印50//////arrlO[3]=50;//可以訪問之后的任意空間,本數(shù)組的第4個內存空間位置I被改動。////printf("%d",arrl0[3]);//JTB[J50C語言可以通過我們定義的數(shù)組,操作本數(shù)組之后的所有內存空間,那些空間不屬于這個數(shù)組,誰都可以去用。因此可以在上面進行讀寫。這樣就會使得程序不安全。數(shù)組越界是一件很危險的事情,我們無法把控,因此我們在操作程序是,盡可能的避免越界產生。數(shù)組是ー個整體,不能直接參與運算,只能對各個元素進行處理。ー些代碼://練習//I,定義一個具有20個元素的整型數(shù)組,30?70間的隨機數(shù),求和。// //定義數(shù)組,并清零,初始化。//intarray[20]={0};///Z求和變量//intsum=0;// printf("20個隨機數(shù)為:\n");// //產生20個隨機數(shù)//for(inti=0;i<20;i++){// unsignednum=arc4random()%(70-30+1)+30;// printf(M%d\tH,num);// array[i]=num;// //不要在這個地方求和,ー個forー個功能。增加代碼的重用性。1111 sum=sum+array[i];//)// //求和//for(inti=0;i<20;i++){// sum+=array[i];〃}////〃printf("ヽn\n20個數(shù)的和sum=%dnrsum);//2、復制數(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]);//)排序冒泡排序從第一個數(shù)開始,用第一個數(shù)分別與后面的數(shù)進行比較,若是大于后面的數(shù),則將該數(shù)放在后面。然后再用第二個數(shù)跟后面的數(shù)比較,若大于后面的數(shù),則將該數(shù)放在后面,依次類推,一直到最后ー個數(shù)比較完畢為止。此時,排序已經完成。//數(shù)組排序// //冒泡排序(只適合小范圍的數(shù)據排序)(20遍)//intsort_arr[5]={5,4,3,2,1};// //外層循環(huán),控制排序趟數(shù),趟數(shù)為:數(shù)組元素個數(shù)一1//for(inti=0;i<(5-1)/*5-l,表示數(shù)組有n個數(shù)比較,只比較n-1趟?/;i++){// //內層for循環(huán),控制比較次數(shù)// for(intj=0;j<5-(i+1)/?本來應該是5-i,但是i是從。開始的,我們要得是從1開始,因此要5-(i+1)。此處的意思是每ー趟,比較多少次。*/;j++){// //判斷,并且交換。// if(sort_arr[j]>sort_arr[j+1]){// //交換,不使用第三個變量交換,用亦或人的方法最好。// 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]);//}//練習// //隨機產生10個[20,40]間的數(shù),排序////intarray[10]={0};//printf("排序前的10個數(shù)為:\n");// //取隨機數(shù)//for(inti=0;i<10;i++){// unsignednum=arc4random()%21+20;// array[i]=num;// printf("%d\t",array[i]);//}//// //排序開始// //外層for循環(huán),控制比較多少趟。//for(inti=0;i<10-1;i++){// //內層for循環(huán),控制比較多少次// for(intj=0;j<10-(i+1);j++){// //冒泡排序// if(array[j]>array[j+1]){// //亦或,用來交換兩個變量的值。// 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個數(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ù)組時,將會用%s來作為占位符,當%s在輸出數(shù)組時,遇到了,、〇,這個特定意義的“結束標識符”時,就會終止打印,停止輸出。此時,數(shù)組的實際長度為:字符數(shù)組元素個數(shù)+1,要留出'、0'的位置。// //吿s占位符1111for(inti=0;i<5;i++){1111 printf("%c",array[i]);////}//printf("%s",array);//打印:helloー些情況:// //自動推算出有6個位置//chararray2[]="hello";////// //前面補滿,后面補。//chararray3[10]="heエ10";//存儲打印中文// chararray3[20]="藍歐";//printf("%s",array3);//打印:藍歐口字符串操作函數(shù)長度://I、長度//charsi[]=nLanou";////unsignedlongnuml=strlen(si);〃不包括、〇////printf numl);//輸出:5//charsi[]=”藍歐”;//數(shù)組占フ個字節(jié),字符占6個字節(jié)。//unsignedlongnuml=strlen(si);//不包括、〇////printf("%lu"rnuml);//輸出:6,漢字占3個字節(jié)拷貝//2、拷貝//chars2[]="Lanou";〃6個字節(jié)// //接收的字符數(shù)組,一定不能比原數(shù)組小。//chars3[6]={0};////第一個:拷貝到哪////第二個:從哪拷貝//strcpy(s3,s2);//printf("%s"zs3);字符串拼接//3、字符串拼接//被拼接的字符串,空間一定要夠大。//chars4[10]=,,LanouH;////chars5[]=nV5n;//// //第一個是被拼接的是誰,S4(被拼接的字符數(shù)組一定要夠大)// //第二個是拼接什么,s5////strcat(s4rs5);// printf("%s”,s4);//輸出:LanouV5比較〃4、比較//找到第一組不相等的兩個字符,比較ASCII碼值//結果為正:第一個字符數(shù)組大//結果為負:第二個字符數(shù)組大//結果為0:兩個字符數(shù)組相等// chars6[]="bba";// chars7[]="baa";//inti=strcmp(s6zs7);////printf(n%dn,i);20、ニ維數(shù)組。維數(shù)組:有兩個下標的數(shù)組。定義:類型數(shù)組名[常量表達式1][常量表達式2]={值1,值2...};用普通的話來說,就是,二維數(shù)組的第一個口表示行,第二個口表示列。A數(shù)組的第一種定義方式:// //定義二維數(shù)組的第一種方式(不直觀,不能直接看出第一行是在哪里開始結束)//intarray[2][3]={1,2,3,4,5,6};數(shù)組第二種定義方式://定義二維數(shù)組的第二種方式(直觀)//花括號{},可以區(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ù)不。,會。動補〇。)/Z第三種:可以省略行,但是一定不能省略列// intarray[][]={1,2,3,4,5,6};//報錯// intarray[][]={{1,2,3},{4,5,6}};//錯誤的//intarray[2][]={1,2,3,4,5,6};〃只給行,報錯//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");//)// //打印結果:124// // 560自動補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ー些練習:定義ー個三行兩列的維維數(shù)組//練習//定義ー個三行兩列的維維數(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);//)////打印結果////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);將一個數(shù)組的行和列交換,放在另外一個新的數(shù)組中去://將[]個〇維數(shù)組的。和列交換,存儲到另外。個數(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ī)律。這里的規(guī)律就是原來的數(shù)組的行和列調換位置,就可以得到新的數(shù)組。for循環(huán),可以用后面數(shù)組來循環(huán),也可以用前面的數(shù)組來循環(huán)。定義ー個3行4列的數(shù)組,找出數(shù)組的最大的元素,打印出來,并打印所在的行和列。//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);與普通的找最大值ー個樣子21、字符串數(shù)組字符串數(shù)組本質上是一個二維數(shù)組1、訪問某個字符串:數(shù)組名[行號]2、訪問某個字符:數(shù)組名[行號][列號]定義方式://字符串數(shù)組//chararrl[3][10]={niPhone*1r^Android11,"Windowsn};//////printf(**%c**,arrl[0][〇]);//輸岀:i////////printf(“告s”,arrl[2]);//只給行號就行。////for(inti=0;i<3;i++){printf("%s\n",arrl[i]);)// //打印結果:iPhone// Android// Windows打印字符串數(shù)組時,直接在for里給出行數(shù),就可以了。不用兩個for。ー些練習:創(chuàng)建一個字符串數(shù)組(內容是你周圍ー圈人的姓名),輸出最長的字符串長度。/Z練習//創(chuàng)建一個字符串數(shù)組(內容是你周圍ー圈人的姓名),輸出最長的字符串長度。//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]);字符串數(shù)組從小到大排序//字符串數(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ā)效率。函數(shù)包括庫函數(shù)和自定義函數(shù)(開發(fā)者自己寫的函數(shù))。函數(shù)的定義,有以下四種:1、無返回值無參型//函數(shù)定義有四種形式//函數(shù)是為了完成某項任務。//任務材料:參數(shù)//交任務:返回值//第一種:無參數(shù),無返回值。voidsayHi(){printf("HI,約嗎?Iり;}2、有返回值無參型//第二種:無參數(shù),有返回值。intnumberOne(){//將結果返回//函數(shù)執(zhí)行到return就結束。//return10.10;////如果返回類型不匹配,不報錯,但是結果不準了。(注意)return1;//return后面的代碼不會被執(zhí)行printf("我還沒出場呢。。");3、無返回值有參型//第三種:有參數(shù),無返回值。/Z參數(shù)可以任意多個,/Z但是調用函數(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>//練習//I、//intsumValue(intn){//intsum=0;//for(inti=0;i<=n;i++){// sum=sum+i;//}// returnsum;//)intmain(intargc,constchar*argv[]){//printf("%d”,sumValue(9));return0;|輸入年月日,輸出是在一年內的第幾天: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ù)調用:我們在定義ー個函數(shù)后,需要在其他函數(shù)里調用我們定義好的這個函數(shù)。才能實現(xiàn)這個函數(shù)的功能。如上面的ー些代碼,我們在定義了函數(shù)后,在main〇函數(shù)里調用了我們定義好的函數(shù)。這樣就能把我們定義的功能體現(xiàn)出來。函數(shù)聲明:函數(shù)聲明的出現(xiàn),是因為我們有時候在main〇函數(shù)后面定義我們的函數(shù),但是在main〇函數(shù)里調用我們定義的函數(shù),這樣的話,在編譯的時候,系統(tǒng)會報錯,說是這個函數(shù)沒有定義。此時,我們應該在main〇函數(shù)前對我們定義的函數(shù)進行聲明。聲明形式為:我們自定義的函數(shù)的返回類型函數(shù)名參數(shù):voidsumfintnum);這個就是我們自定義的函數(shù)的函數(shù)聲明。加上聲明之后,main〇函數(shù)調用自定義函數(shù)オ不會報錯。//函數(shù)聲明。//若不聲明,則下面會報錯。//voidsayHi();intmain(intargc,constchar*argv[]){〃2015年04月02日14:31:27北京//函數(shù)的調用//sayHi();//return0;}//函數(shù)的定義//voidsayHi(){// printf("今天天氣不錯,約嗎?つ;//)//intsum(intnuml,intnum2){//returnnuml+num2;//)函數(shù)的聲明,在Xcode里,這樣隔開會比較好:新建一個Objective-Cclass的文件,命名好后,會生成一個.h和一個.m文件,我們將所有的函數(shù)聲明放在.h的文件里,將函數(shù)的定義,放在.m文件里。在main函數(shù)調用之前,需要將.h文件引用進main.m文件中,方式為://引入.h文件#import"Hi.h"http://自己定義的文件,用""來引入。意思就是把Hi.h里的東西全部原封不動的復制到這個地方。//.h文件不參與翻譯。//若干個.m文件在翻譯時,是連成一塊的。#importnoperator?h”系統(tǒng)的東西用V>來引入#import<Foundation/Foundation.h>ー些例子:定義4個函數(shù),實現(xiàn)+—*/四個運算。operator.h文件//函數(shù)聲明intsum(intnuml,intnum2);intsub(intnuml,intnum2);inttotal(intnuml,intnum2);intmod(intnuml,intnum2);operator.m文件//函數(shù)定義//函數(shù)名不能重復。//函數(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)的東西用<>來弓I入//引入.h文件//自己定義的文件,用""來引入。意思就是把Hi.h里的東西全部原封不動的復制到這個地方。//.h文件不參與翻譯。//若干個.m文件在翻譯時,是連成一塊的。#importnoperator?h”//函數(shù)聲明。//若不聲明,則下面會報錯。//voidsayHi();//函數(shù)聲明時,參數(shù)名可以去掉,只留參數(shù)類型。//intsum(int,intnum2);//intmain(intargc,constchar*argv[]){//2015年04月02日14:31:27北京//函數(shù)的調用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;}編譯過程:在編譯時,不對.h文件翻譯,只對.m文件驚醒翻譯。翻譯時,將所有的.m文件連接成一塊,然后進行翻譯。數(shù)組作為函數(shù)參數(shù):數(shù)組作為函數(shù)參數(shù)的時候,注意幾點:1、數(shù)組作為參數(shù),不用給定一個數(shù)組長度(元素個數(shù))。因為就算給定一個長度,在我們傳進來的數(shù)組時,長度會根據我們傳進來的數(shù)組的長度來確定實際長度。所以不用給定長度。2、再在后面定義一個變量,用來裝我們傳過來的數(shù)組的長度。形式如下:voidprintArray(intarr[],intn){}ー些例子:定義ー個數(shù)組,用函數(shù)打印出來。用數(shù)組作為參數(shù)傳遞。?import<Foundation/Foundation.h>//打印數(shù)組//數(shù)組作為參數(shù)的時候,不用給元素個數(shù)。//再定義ー個變量n,用來給出要便利多少次。//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;}定義一個隨機數(shù)組,用函數(shù)進行冒泡排序:#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ù)里調用函數(shù)。函數(shù)允許函數(shù)嵌套調用,但是不允許函數(shù)嵌套定義ー些例子:簡單嵌套調用:#import<Foundation/Foundation.h>//聲明:voidsayHi();voidsayWhat(){sayHi();}voidsayHi(){printf("Hello,Kitty");}//函數(shù)不允許嵌套定義,但是可以嵌套調用。//函數(shù)嵌套調用:函數(shù)里邊調用函數(shù)intmain(intargc,constchar*argv[]){sayWhat();return0;}比較幾個數(shù)的大小:#import<Foundation/Foundation.h>//函數(shù)不允許嵌套定義,但是可以嵌套調用。//函數(shù)嵌套調用:函數(shù)里邊調用函數(shù)//求兩個數(shù)最大值inttwoNumberMax(intnuml,intnum2){returnnuml>num2?numl:num2;}//求三個數(shù)的最大值intthreeNUmberMax(intnuml,intnum2,intnum3){inttemp=twoNumberMax(numlrnum2);returntemp>num3?temp:num3;}//比較4個數(shù)intfourNumberMax(intnuml,intnum2,intnum3,intnum4){inttemp=threeNUmberMax(numlznum2,num3);returntemp>num4?temp:num4;}遞歸:遞歸就是函數(shù)自己調用自己。遞歸慎用,因為如果自己不清楚聲明情況下才能讓遞歸停止的話,或者需求給定的樣本太大,則不用。小樣本,并且能控制條件讓遞歸停止,則可以用,否則會沾滿內存,使程序崩潰。在能用非遞歸來解決,盡量用非遞歸的方式來解決。?import<Foundation/Foundation.h>//遞歸:自己調自己..(慎用)樣本小得時候可以用,大得話,再說把。//voidsayHi(){//printf(nHello,六娃、n");//sayHi〇;//)intmul(intn){//非遞歸//intnum=0;//for(inti=1;i<=5;i++){// num*=i;//}//returnnum;//遞歸//使用遞歸必須能夠結束。if(n==1){return1;}else{returnn*mul(n-1);}}intmain(intargc,constchar*argv[])(//sayHi();intnum=mul(3);printf("吿d",num);return0;}作用域:作用域,就是說ー個變量的生命周期。注意一下幾點:1、局部變量:就是變量在ー對花括號內,出了這對花括號,則內存釋放這個變量,這個變量的聲明結束。括號內的變量在和括號外的變量同名時,按照強龍不壓地頭蛇

溫馨提示

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

最新文檔

評論

0/150

提交評論