




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
學(xué)習(xí)C語(yǔ)言(新手入門(mén))年輕的小榮子阿爾法和李世石的圍棋對(duì)弈讓我們感受到了計(jì)算機(jī)的強(qiáng)大,事實(shí)上計(jì)算不僅要靠硬件設(shè)備的支持,還需要在里面運(yùn)行代碼(很多種,包括c),這些代碼就是它的靈魂(譬如我們的思想)。介紹幾部通過(guò)在計(jì)算機(jī)里頭運(yùn)行代碼從而創(chuàng)造無(wú)限可能的電影,個(gè)人覺(jué)得不錯(cuò)的:黑客帝國(guó),超驗(yàn)駭客,創(chuàng)戰(zhàn)紀(jì),人工智能等。正題,能編輯C語(yǔ)言的軟件非常多,比如visualc++6.0/7.0,turboc等。理論總是離不開(kāi)實(shí)踐,在要學(xué)習(xí)C語(yǔ)言理論之前先要找到屬于自己的能實(shí)現(xiàn)代碼結(jié)果的軟件。這樣說(shuō),計(jì)算機(jī)語(yǔ)言和人的語(yǔ)言的區(qū)別在于,人通過(guò)各種發(fā)音實(shí)現(xiàn)交流,但是計(jì)算機(jī)主要是通過(guò)電流來(lái)傳達(dá)信息,所以只能用0/1來(lái)表示電流擁有的兩種狀態(tài),這樣最底層的計(jì)算運(yùn)作就是通過(guò)一段長(zhǎng)長(zhǎng)的0/1代碼,通過(guò)0和1的不同組合來(lái)表示文字或者信息。C語(yǔ)言當(dāng)然不是最底層的0/1代碼,他是一個(gè)溝通的中介,比如等于號(hào)在c語(yǔ)言里就是兩個(gè)等號(hào)“二二〃,這樣使得我們更容易和計(jì)算機(jī)交流了,只要學(xué)會(huì)了C語(yǔ)言,它就能把我們的語(yǔ)言翻譯成計(jì)算機(jī)的語(yǔ)言。以下內(nèi)容從簡(jiǎn)單到困難,先來(lái)學(xué)會(huì)如何運(yùn)行c語(yǔ)言代碼(用vc6.0中文版):1.按以下步驟打開(kāi)界面(以后都可以這樣打開(kāi)):2.一些常用的功能鍵:S廿吾吉-Mi<rosaftVtsualC+4-[廿言Mvp口K]底交件CE編賴(lài)日查看3音兀0)工理(E紜津曲'與CD?D(W)脊的LH)口■怎,|暇屆富鈉|〉二1山■in匚ludHstdiouli〉?止即c甫言dSSSe3intj,u,u;|a&=2;c=a*b;printf(iB^dB,.c);1見(jiàn)(1是compile編譯的意思,就是把這些我們能看懂的符號(hào)轉(zhuǎn)換成計(jì)算機(jī)代碼,同時(shí)按這個(gè)鍵可以檢查錯(cuò)誤和驗(yàn)證是否能運(yùn)行。2是build,建立一個(gè)可以運(yùn)行的EXE類(lèi)文件,就是把這些代碼弄成一個(gè)能運(yùn)行的東西。3就是run運(yùn)行,只有經(jīng)過(guò)查錯(cuò)和建立才可以按運(yùn)行。是不是很簡(jiǎn)單,自己動(dòng)手一遍就會(huì))3.輸入代碼并運(yùn)行(里面的代碼如下:—#include<stdio.h>main(){inta,b,c;a=1,b=2;c=a+b;printf("%d",c);}Include的英文意思是包含、包括,顧名思義,#include<stdio.h>就是把stdio.h這個(gè)東西包含進(jìn)去,其實(shí)#include<>是c語(yǔ)言里的一種格式,就是把什么包含進(jìn)來(lái)的意思(這里是口語(yǔ)表達(dá))。stdio.h叫做頭文件,什么是頭文件呢?打個(gè)比方,在C語(yǔ)言里我們要用到很多的比如開(kāi)根號(hào)、乘方、階乘n!等等數(shù)學(xué)公式函數(shù),那么就可以把這些常用的同類(lèi)型的函數(shù)放到一起形成一個(gè)函數(shù)庫(kù),然后給它取個(gè)名字比如叫math.h,這樣當(dāng)要用到這些函數(shù)的時(shí)候就不用自己的寫(xiě)了,直接用#include<math.h>把整個(gè)庫(kù)包含進(jìn)來(lái),里面的函數(shù)就可以直接調(diào)用。同樣的,stdio.h也是這樣一個(gè)庫(kù),里面有輸入輸出函數(shù)(就是支持鍵盤(pán)輸入和屏幕輸出)可以調(diào)用。類(lèi)似的還有g(shù)raphic.h圖形函數(shù)庫(kù),string.h字符串函數(shù)庫(kù)等等,調(diào)用格式一樣的。Main()(代碼;}是C語(yǔ)言里必須有的一個(gè)格式,main翻譯是〃主要“,main函數(shù)就是主函數(shù),相當(dāng)于程序從這里入口并開(kāi)始運(yùn)行。運(yùn)行的內(nèi)容就是花括號(hào){}里頭的代碼。了解#include<stdio.h>main(){}的功能之后,就真正的開(kāi)始代碼實(shí)現(xiàn)的部分了。上面有一條簡(jiǎn)單的代碼:inta,b,c;a=1,b=2;c=a+b;printf("%d",c);我們每句話(huà)結(jié)束用句號(hào)“?!眮?lái)結(jié)束,C語(yǔ)言里用的是分號(hào)“;”來(lái)結(jié)束一個(gè)語(yǔ)句,上面每個(gè)語(yǔ)句后面都有一個(gè)分號(hào)。a=1表示賦值,把等號(hào)右邊的數(shù)值賦予給左邊,賦值之后a等于1,b等于2。同理可知c=a+b就是把a(bǔ)+b的結(jié)果數(shù)值賦予給c,這樣c的值就是3.print的翻譯是打印,printf()函數(shù)實(shí)現(xiàn)的功能是輸出(打印在屏幕上)。而printf()函數(shù)是屬于stdio.h的,這就是為什么上面要寫(xiě)#include<stdio.h>原因。inta,b,c;定義a,b,c三個(gè)變量,int是數(shù)據(jù)類(lèi)型里的一種,int是整型,就是說(shuō)a,b,c都是整數(shù)而不能是其他類(lèi)型。另外float浮點(diǎn)型,如果用floata,b,c,那么a,b,c就能賦予小數(shù)值。還有char字符型,比如chara,b,,那么a,b只能賦予字符的值。這是因?yàn)樵诙xa,b,c變量的同時(shí),要在計(jì)算機(jī)內(nèi)存中分配給它們空間,整數(shù)占用2個(gè)字節(jié)而小數(shù)占4個(gè)字節(jié),所以inta后a分配到的空間就是能裝下2個(gè)字節(jié)的東西,然后如果用a=1.23,由于1.23是小數(shù)占用4個(gè)字節(jié)裝不下,那么這個(gè)賦值就出錯(cuò)。因此,int,float,char等數(shù)據(jù)類(lèi)型定義的意義就在于給變量分配一個(gè)多大的內(nèi)存空間,存儲(chǔ)對(duì)應(yīng)類(lèi)型大小的數(shù)據(jù)(任何沒(méi)有定義數(shù)據(jù)類(lèi)型的變量是不會(huì)分配內(nèi)存空間所以是不能使用的?。?。
來(lái)看下運(yùn)行結(jié)果(print出結(jié)果來(lái)看下運(yùn)行結(jié)果(print出結(jié)果c的值):所以這樣就實(shí)現(xiàn)了計(jì)算a+b賦值給c并輸出c的值。短整型shoir整短整型shoir整〈整型int型[長(zhǎng)整型1。四r單精度型浮點(diǎn)型4雙精度型doubleC語(yǔ)言包含的數(shù)據(jù)類(lèi)型如下圖所示「“數(shù)值類(lèi)型《r]I基本類(lèi)型I字符類(lèi)型cMrr數(shù)組CI結(jié)構(gòu)體sfnict構(gòu)造類(lèi)型|共用體tiuioD關(guān)〔枚舉類(lèi)型eiiuin型指針類(lèi)型<寶類(lèi)型voidC語(yǔ)言和數(shù)學(xué)語(yǔ)言也還是有所區(qū)別的,比如數(shù)學(xué)里判斷a等于b用“a=b?”,但是C語(yǔ)言里“a=b?”就變成了賦值,它的等號(hào)是兩個(gè)數(shù)學(xué)等號(hào)組成“二二〃,所以C里正確的表達(dá)是“a==b?”(不要糾結(jié)為什么要用兩個(gè)等號(hào),這是大神們?cè)O(shè)定的),為了能讓計(jì)算機(jī)理解自己的代碼,下面來(lái)認(rèn)識(shí)C語(yǔ)言有哪些運(yùn)算符:
+加-減*乘/除;不存在:號(hào),表達(dá)式里“/”就是除號(hào)。%取余數(shù);17%5等于2,余數(shù)是2。>大于<小于>=大于等于<=小于等于!=不等于==等于=賦值,右邊值賦予左邊變量(a=a+1+2)。&&與;(1==1)&&(1!=2),判斷兩邊都真結(jié)果為真。||或;判斷有一邊為真結(jié)果為真。!非;!(1==1),判斷條件的相反。:條件運(yùn)算;(2>1)?3:4,判斷為真,結(jié)果取3,否則取4.++自增;a++,相當(dāng)于a=a+1。--自減;a--,相當(dāng)于a=a-1。其他經(jīng)歷一遍勝過(guò)深思千回,在軟件上嘗試幾遍便能熟記于心。#include<stdio.h>intmain(){inta,b,c,d;a=1;b=a+1;c=b*2;c++;d=c%3;printf("%d”,d);//ps:輸出結(jié)果d。return0;}寫(xiě)一個(gè)能計(jì)算圓的周長(zhǎng)和面積的C代碼:口/口7同同唐I犧~作圈島!#include<5tdio.h>intnain(){float5,1,^;//備注;面積勺周長(zhǎng)L半徑、scanFCV",^);1=2*3.1U1595=3-1415。*r*r;printF("周長(zhǎng)為;浙,面積為;整F5'.,1戶(hù));returnB;定義三個(gè)浮點(diǎn)型float(含有小數(shù))變量s、1、r。scanf()是輸入函數(shù),scan是掃描的意思,從鍵盤(pán)掃描你的輸入,這個(gè)函數(shù)也是stdio.h頭文件里的一個(gè)函數(shù)。Scanf()括號(hào)里的是參數(shù),跟printf()一樣,格式有所不同。printf(“%d〃,c)表示輸出結(jié)果c,c的數(shù)據(jù)類(lèi)型是整型(int),用“%d〃格式。如果輸出結(jié)果是浮點(diǎn)型(float)則用“%f〃格式,比如printf(“%f〃,1.23)。如果是字符型(char),用printf("%c〃,’s’)等?!埃”類(lèi)型Printf("%_〃,s)對(duì)應(yīng)數(shù)據(jù)類(lèi)型格式dint,short以十進(jìn)制形式輸出帶符號(hào)整數(shù)(正數(shù)不輸出符號(hào))o以八進(jìn)制形式輸出無(wú)符號(hào)整數(shù)(不輸出前綴0)x,X以十六進(jìn)制形式輸出無(wú)符號(hào)整數(shù)(不輸出前綴Ox)u以十進(jìn)制形式輸出無(wú)符號(hào)整數(shù)ffloat,double以小數(shù)形式輸出單、雙精度實(shí)數(shù)e,E以指數(shù)形式輸出單、雙精度實(shí)數(shù)g,G以%f或%e中較短的輸出寬度輸出單、雙精度實(shí)數(shù)cchar輸出單個(gè)字符s字符串輸出字符串Scanf("%d",&r)比printf("%d",。多了個(gè)地址運(yùn)算符&,因?yàn)閟canf是輸入,把數(shù)據(jù)存入到r變量的地址空間,所以scanf()函數(shù)統(tǒng)一要加個(gè)地址運(yùn)算符。(在代碼中添加備注用//備注,本行此符號(hào)之后的都為備注,也可以用/*備注*/,兩個(gè)符號(hào)之內(nèi)的是備注,可囊括多行。)上面代碼中:
#include<stdio.h>intmain(){return0;}是標(biāo)準(zhǔn)主函數(shù)格式,intmain()表示返回int型,return表示返回,返回值為0。不必深究。—floats,l,r;//備注:面積s,周長(zhǎng)l,半徑r。scanf("%f”,&r);l=2*3.14159*r;s=3.14159*r*r;printf("周長(zhǎng)為:%f,面積為:%f\n”,l,s);—相當(dāng)于一個(gè)能計(jì)算圓的周長(zhǎng)和面積的計(jì)算器,只要scanf()輸入r的值,就能printf()輸出l(周長(zhǎng))和s(面積)的值,結(jié)果圖示:■'C:\UserE\Adrriinktrstcr\D■'C:\UserE\Adrriinktrstcr\Deelrtop\Deblj織清'言exe1回長(zhǎng)為:fc.283180,面積為:3.141590PressHnyLeytocontinue^scanF(1=2s=3_printFreturn可以通過(guò)輸入不同的半徑來(lái)得到其周長(zhǎng)和面積。同理可以利用c語(yǔ)言來(lái)求得其他數(shù)學(xué)公式的結(jié)果:求y=xA2+2x-3當(dāng)x取某個(gè)數(shù)時(shí)的值。代碼:intx,y;scanf("%d”,&x);〃這里輸入x的值。y=x*x+2*x-3;printf(-輸出結(jié)果y:%d",y);對(duì)于這樣的函數(shù)式:-x*x+2*x-3(0<x<10)Y=--x+2(x>=10)要用到條件語(yǔ)句。(1)if語(yǔ)句if(表達(dá)式)語(yǔ)句1;else語(yǔ)句2;(2)if語(yǔ)句的嵌套If(表達(dá)式1)語(yǔ)句1;〃語(yǔ)句1也可以嵌套if語(yǔ)句。elseif(表達(dá)式2)語(yǔ)句2-1;else語(yǔ)句2-2;〃這樣的嵌套可以多重.if()里的表達(dá)式如果正確則為真,執(zhí)行緊接著的語(yǔ)句1,否則執(zhí)行else下面的語(yǔ)句2。因此上面數(shù)學(xué)函數(shù)式的代碼:—#include<stdio.h>intmain(){intx,y;scanf("%d”,&x);//scanf輸入x的值。if(x>0&&x<10)//x>0和x<10是與的關(guān)系,若同時(shí)為真則結(jié)果為真。y=x*x+2*x-3;elseif(x>=10)y=x+2;printf("輸出結(jié)果y:%d",y);//雙引號(hào)里的文字原樣輸出,%d輸出為y的值。return0;}—ps:if()里的表達(dá)式常用到邏輯表達(dá)式“與或非”。(3)switch語(yǔ)句switch(表達(dá)式)(case常量1:語(yǔ)句1case常量2:語(yǔ)句2case常量3:語(yǔ)句3case'常量...:[吾句...case常量n:語(yǔ)句ndefault:語(yǔ)句n+1}switch是匹配的意思,就是用表達(dá)式的值從常量1開(kāi)始比較是否相等,如果相等,從相等的那條語(yǔ)句開(kāi)始執(zhí)行,到default的語(yǔ)句結(jié)束。如果想執(zhí)行完這一句就結(jié)束,可以在其后加上break;語(yǔ)句來(lái)打斷跳出switch。下面是輸入小明同學(xué)的分?jǐn)?shù)判斷他的成績(jī)級(jí)別的代碼:|廖圜!ML曲清巨E聞能:|2Q-回國(guó)昏鈿:〉ilinclud(?<stdio_ti>intnainCJintipa;scanFC-^d-,&a);〃輸大分?jǐn)?shù)%:1=^10;〃分?jǐn)?shù)-除以佃后去掉個(gè)位數(shù)剩下十位數(shù)翌switchCi)〃用十位數(shù)從10?"開(kāi)始匹配ch腿chch腿ch腿CT腿CT腿CT腿CT腿叫printFCft-J;breal<;〃仙呢歸盼是計(jì)等_break結(jié)束不再向下執(zhí)行8:printFCB");breal^;7:printFCC,i);breal^;6:printFCD,J);breal^;4:3=l2:;釁珈1言printFC-E-);//十位數(shù)是&到,的都不及格,輸出E等級(jí),return0JJJ.exe-~Qerror(s),~~0uiarning(s)假如小明的成績(jī)是a=76,那么十位數(shù)i=7,利用switch函數(shù)匹配,case7符合,執(zhí)行之后的printf("C\n”)語(yǔ)句,又因?yàn)閎reak;語(yǔ)句打斷,所以不再執(zhí)行之后的case,直接跳出switch(){}。如果是59到0,都只有一條語(yǔ)句可執(zhí)行。(4)while循環(huán)語(yǔ)句寫(xiě)一個(gè)代碼,讓你輸入一個(gè)數(shù)字,如果你輸入的數(shù)字不大于100則重新輸入,否則結(jié)束。這里就用到了循環(huán),循環(huán)必須要有判斷條件語(yǔ)句,循環(huán)不能是沒(méi)有結(jié)束條件的。格式:while(表達(dá)式)(語(yǔ)句1}如果表達(dá)式為真(判斷正確),則執(zhí)行語(yǔ)句1,直到表達(dá)式為假。代碼:#include<stdio.h>intmain()(inta;scanf("%d”,&a);//輸入數(shù)字a。while(a<=100)〃判斷是否小于等于100,是則循環(huán),否則結(jié)束。{scanf("%d”,&a);〃重新輸入a}return0;}紅色部分是循環(huán)體,花括號(hào){}里可以寫(xiě)多條語(yǔ)句,作為一個(gè)整體一并運(yùn)行。執(zhí)行的順序是,判斷while(表達(dá)式)真假,為真則執(zhí)行循環(huán)體,執(zhí)行完畢跳回到while(表達(dá)式)開(kāi)始下一次的判斷,直到判斷為假結(jié)束循環(huán)。所以上面會(huì)不斷循環(huán)要輸入a,直到輸入的值大于100,表達(dá)式為假結(jié)束。另一種是do-while語(yǔ)句,區(qū)別只是先執(zhí)行循環(huán)體,再判斷,直到判斷為假,while(表達(dá)式)后跟著一個(gè)分號(hào)!代碼如下:#include<stdio.h>intmain()(inta;do{scanf("%d”,&a);〃輸入a}while(a<=100);〃判斷是否小于等于100,是則循環(huán),否則結(jié)束。return0;
(5)for循環(huán)語(yǔ)句for(表達(dá)式1;表達(dá)式2;表達(dá)式3);循環(huán)體語(yǔ)句實(shí)例:ttincluda<stdio_ti>intnain()(chara,b=4,c;For(a=1;a>b;c=c+1>a=a+1;富注:F”(表達(dá)式七表達(dá)式"表達(dá)式3”循環(huán)體語(yǔ)句*/returnQ;以上加入了一個(gè)for循環(huán)(/*多行備注表達(dá)式1“a=1”是for循環(huán)的入口而且只運(yùn)行一次。表達(dá)式1之后就到表達(dá)式2,表達(dá)式2*/),以上加入了一個(gè)for循環(huán)(/*多行備注表達(dá)式1“a=1”是for循環(huán)的入口而且只運(yùn)行一次。表達(dá)式1之后就到表達(dá)式2,表達(dá)式2*/),是進(jìn)入for循環(huán)第一個(gè)運(yùn)行的語(yǔ)句,如果表達(dá)式2為真,接下來(lái)執(zhí)行循環(huán)體語(yǔ)句,再接下來(lái)是表達(dá)式3,然后開(kāi)始下一次的循環(huán):表達(dá)式2(先判斷是否為真)一>循環(huán)體語(yǔ)句一>表達(dá)式3,表達(dá)式1會(huì)且只會(huì)運(yùn)行一次,之后的循環(huán)都不再執(zhí)行,而且以上的表達(dá)式和循環(huán)體都可以是多個(gè)語(yǔ)句的組合,比如表達(dá)式1可以是“a=2,b++,……”。(3,4,5為一個(gè)循環(huán))
讓我們來(lái)輸出一個(gè)星號(hào)*構(gòu)成的正方形:|.圈島苣|診口房|北昭電|口十口=|ttinclude<stdio.h>□ntmA"inf)int1,j;For(1=1,j=4;K=j;1=1+1)printFC"***■**"};printFCAn-):〃輸出損行符In.return0;B'D:\000\Deb_ig\123.e-xe"TOC\o"1-5"\h\z陛*皿************g*w**Pressan_yl-ce^Ftocon*t±nuc表達(dá)1賦值使得i=1,j=4,判斷i<=j為真,執(zhí)行循環(huán)體{}后輸出五個(gè)星號(hào)和換行,然后i=i+1(即i變成了2,j不變),繼續(xù)下一次的循環(huán):判斷2<4為真,繼續(xù)執(zhí)行循環(huán)體語(yǔ)句,再輸出一行星號(hào)并換行,如此重復(fù)到i=5大于j判斷為假,結(jié)束for循環(huán),這時(shí)共執(zhí)行了4次循環(huán)體,打印出了4行星號(hào),如上圖。事實(shí)上for循環(huán)里還可以套用for循環(huán),也可以套用while循環(huán),前者最為常見(jiàn)和好用。假如要輸出3次上面的矩形星號(hào),那么把上面的for循環(huán)嵌入到另一個(gè)for循環(huán)中即可:參邕!?甫洛港麝#include<stdiD.#include<stdiD.ti>intmain():'D:\000\Debug\123.exe"inti,j;inta;For(a=1;a<=3;for(i=1,j=4;i<=j;i=i+1)printF("*****");printFC\n");>〃這里插入上面那個(gè)F□r循王利printFCVn-);〃換行return0;Pressreturn0;Pressanykeytocontinue這樣就把里面的for當(dāng)成了外面for循環(huán)的循環(huán)體語(yǔ)句,按步驟執(zhí)行即可!興趣是最好的老師,實(shí)踐是最好的證明,如果有哪些記不住的地方,上機(jī)寫(xiě)代碼運(yùn)行處結(jié)果,讓事實(shí)來(lái)讓自己信服,這樣不單更容易記住,而且還能提高動(dòng)手能力。如果遇到有疑問(wèn)的地方,上網(wǎng)尋找答案,或者上機(jī)調(diào)試(就是對(duì)代碼的執(zhí)行結(jié)果有疑問(wèn),認(rèn)為可能出現(xiàn)多種結(jié)果),看結(jié)果是否如自己所想,也是驗(yàn)證和解疑的一種好辦法。問(wèn)題:輸入兩個(gè)正整數(shù)m和n,求其最大公約數(shù)解題算法:輾轉(zhuǎn)相除法,又名歐幾里德算法(Euclideanalgorithm)乃求兩個(gè)正整數(shù)之最大公約數(shù)的算法。算法思路:假如求m和n的最大公約數(shù)(m>n),設(shè)y為m:n的余數(shù),繼續(xù)用除數(shù)n除以余數(shù)y,直到余數(shù)為0。比如求99和21的最大公約數(shù),有:99^21余1521-15余6(這里的被除數(shù)和除數(shù)分別是上面的除數(shù)和余數(shù),相當(dāng)于后移一位)15:6余36-3余0(整除)那么最后一個(gè)除數(shù)3就是一開(kāi)始兩個(gè)數(shù)99和21的最大公約數(shù),此算法可以應(yīng)用到任何兩個(gè)正整數(shù)上,這就是輾轉(zhuǎn)相處求公約數(shù)的算法。算法應(yīng)用:1、直接用scanf("%d%d”,&m,&n)輸入需要求公約數(shù)的兩個(gè)正整數(shù);2、m%n的余數(shù)為c3、把n的值賦給m,把余數(shù)c的值賦給n(除數(shù)變成被除數(shù),余數(shù)變成除數(shù))4、判斷c是否為0,是則最后一個(gè)除數(shù)n(已經(jīng)賦值給m)就是最大公約數(shù),并輸出最大公約數(shù)m即可(printf("m和n的最大公約數(shù)是:%d\n”,m);)。5、如果c不為0,繼續(xù)執(zhí)行步驟2,直到符合步驟4結(jié)束。代碼:#include<stdio.h>intmain()/*輾轉(zhuǎn)相除法求最大公約數(shù)*/{intm,n,c;printf("輸入兩個(gè)正整數(shù):\n");scanf("%d%d”,&m,&n);c=n;while(c!=0)/*余數(shù)不為0,繼續(xù)相除,直到余數(shù)為0*/
c=m%n;m=n;n=c;}printf("m和n的最大公約數(shù)是:%d\n",m);return0;}自定義函數(shù)下面代碼顯示1個(gè)錯(cuò)誤,0個(gè)警告,雙擊錯(cuò)誤提示,會(huì)在錯(cuò)誤的當(dāng)行出現(xiàn)一個(gè)箭頭標(biāo)識(shí):原來(lái)是math.h前把〈寫(xiě)成(,在printf()后漏了分號(hào);。舊刻中田編輯圈查春仲穌山工程?鮑建回1MLD雷口業(yè)i幫幼凹]]滲固轟!國(guó)司]悄|才口#|需龜喧|昭畫(huà)官|(zhì)鍋|>ttincludc<stdiD.h>?|ttincludc(nath.h>Iinkmain()floatx;x=4,U;printf(,,^F,,isqrt(x])return9;hli2J」理0\123-cpp(2_).」理0\123-cpp(2_).:ilincludfEXpEft.edaFil即ane,"und”D:\B^0\123.cpp(1B):errorC2S55:'sqrt';undeclaredidentifierD0X123.cpp(12):errorC2143:syntaxerror:missing'before'return'執(zhí)行cl.exe日+出錯(cuò).123Tnbj-1error(s),6warning(s)在math.h中有一個(gè)求平方根的函數(shù)sqrt(x)用于求實(shí)數(shù)x的平方根,比如sqrt(1.21)的值等于1.1。intmain()(return0;}是代碼中僅有的一個(gè)主函數(shù),其實(shí)sqrt(),printf()都是函數(shù),只是其他的非主函數(shù)一般都是在主函數(shù)中“調(diào)用”。也就是說(shuō)可以在主函數(shù)main()(}的外面自己定義一個(gè)函數(shù)如love(){},在花括號(hào)中寫(xiě)這個(gè)函數(shù)實(shí)現(xiàn)的功能,然后在main()函數(shù)中調(diào)用自己定義的love()函數(shù),它就能實(shí)現(xiàn)其功能。好比sqrt()就是定義在math.h庫(kù)中的一個(gè)函數(shù),然后在主函數(shù)main()中直接調(diào)用就可以求平方根,這里只需要調(diào)用名稱(chēng),不用管怎么實(shí)現(xiàn)的,功能實(shí)現(xiàn)只寫(xiě)在定義函數(shù)的花括號(hào){}內(nèi)。自定義函數(shù)主要有三個(gè)點(diǎn),函數(shù)的入口,內(nèi)部代碼實(shí)現(xiàn),出口(返回值的輸出)。intAnd(inta,intb)(intc;c=a+b;returnc;}上面是一個(gè)計(jì)算a+b的自定義函數(shù)And(),其中()里的inta,intb是入口,表示到時(shí)將會(huì)有兩個(gè)int型的數(shù)進(jìn)來(lái),然后里面的代碼是實(shí)現(xiàn)a+b,最后的return用來(lái)返回這個(gè)函數(shù)的結(jié)果值c,并且在And前面的int是規(guī)定這個(gè)返回值c的數(shù)據(jù)類(lèi)型的。因此,在主函數(shù)main()中可以這樣用:—main(){intd;d=And(3,5);printf("%d”,d);(ps:運(yùn)行時(shí)不接受任何中文輸入法符號(hào))}那么輸出的d的值是多少呢?由于3和5都是int型符合And()函數(shù)的“入口”,事實(shí)上3和5叫做實(shí)參(實(shí)際的參數(shù)),a和b叫做形參(形式上的參數(shù)),在調(diào)用這個(gè)函數(shù)之后,會(huì)把實(shí)參的值傳遞給形參,所以a=3,b=5。計(jì)算之后得出c的值為8,這就是And()內(nèi)部代碼的實(shí)現(xiàn),然后通過(guò)return提供int型的返回值c,所以最終整個(gè)And(3,5)的值就是8。這樣,就可以把實(shí)現(xiàn)某個(gè)功能的代碼自定義為一個(gè)獨(dú)立的函數(shù),然后在主函數(shù)中調(diào)用,好處是可以多次調(diào)用,而且調(diào)用只需要寫(xiě)一次調(diào)用的函數(shù)名和寫(xiě)入實(shí)參,簡(jiǎn)便許多。另外自定義函數(shù)的函數(shù)名可以自己隨便起,但是不能使用中文等,只能是標(biāo)識(shí)符,大小寫(xiě)有別,不能跟int,for這些關(guān)鍵字相同,標(biāo)識(shí)符由字母,數(shù)字,下劃線(xiàn)組合而成,不能以數(shù)字開(kāi)頭。一般使用英語(yǔ)單詞或簡(jiǎn)稱(chēng)比較好記。下面用自定義函數(shù)實(shí)現(xiàn)a+b:截圖
Ereturn0;intLc;c=a+b;returnc:d=And(3,^);Ereturn0;intLc;c=a+b;returnc:d=And(3,^);printf("^d\n",d):Q@電窿口醫(yī)1僉And(inta,intb)自定義函數(shù)一般寫(xiě)在main函數(shù)后面或者放到其他地方,然后把定義函數(shù)的名稱(chēng)那一行照搬到main()函數(shù)的前面加個(gè)分號(hào)進(jìn)行“聲明”,聲明之后的自定義函And(inta,intb)所以,自定義函數(shù)就這樣,根據(jù)需要,自己設(shè)定返回值的類(lèi)型,自己設(shè)定函數(shù)名,自己設(shè)定有多少個(gè)形參和各個(gè)形參的類(lèi)型,函數(shù)里就像main()里一樣實(shí)現(xiàn)各種功能,然后return后寫(xiě)上想返回的值,返回值可以是一個(gè)數(shù)字如10,可以是一個(gè)存在的變量如c,也可以是一個(gè)表達(dá)式如(2*c+a),以此返回值作為整個(gè)定義函數(shù)的結(jié)果。把上一節(jié)求最大公約數(shù)的解法寫(xiě)成一個(gè)自定義函數(shù),返回值類(lèi)型是int,取函數(shù)名為gcd,入口有兩個(gè)形參設(shè)為(intm,intn),所以聲明部分為:intgcd(intm,intn);〃這里加分號(hào)(定義過(guò)形參m,n后在函數(shù)內(nèi)部就不用重復(fù)定義了,直接用,其他沒(méi)有定義的如果需要必須定義。)定義函數(shù)為:intgcd(intm,intn)〃這里不能加分號(hào){intc;printf("輸入兩個(gè)正整數(shù):\n");scanf("%d%d",&m,&n);//這一句去掉,通過(guò)入口傳遞進(jìn)形參m和n的值c=n;while(c!=0)/*余數(shù)不為0,繼續(xù)相除,直到余數(shù)為0*/{c=m%n;n=c;}returnm;}主函數(shù)為:intmain()//主函數(shù){inta,b,d;scanf("%d%d",&a,&b);d=gcd(a,b);〃調(diào)用定義的函數(shù)gcd()printf("%d\n",d);return0;}ttinclude<stdio.h>intgcdfintm,intn);〃自定義函數(shù)聲明!intmain(J〃主函數(shù)inta,b,d;scanff'^d",d=gcdfa,b);〃調(diào)用定義的函數(shù)卯頁(yè))printF(-最大公約數(shù)是:初returnQ;intgcdCintn,intn)〃自定義函數(shù),求最大公約數(shù)intc;c=n;whiiefcr=0)小余數(shù)不為山繼續(xù)相除,直到余數(shù)為。對(duì)c=n^n;m=n;n=c;/■"D\000\Debug\123.eMe"returnm;9921辰大公約數(shù)是;3Pi'essanykeytocontinue+n,有興趣可以寫(xiě)幾個(gè)自定義函數(shù):分別求最大公約數(shù),a+b,求1+2+3+然后在同一個(gè)主函數(shù)中調(diào)用它們。+n,自定義函數(shù)與遞歸:遞歸,顧名思義就是傳遞過(guò)去,然后歸來(lái)。比如階乘5!,傳遞過(guò)去成為5X4!,再傳遞過(guò)去成為5X4X3!直到變成5X4X3X2X1!之后,再倒過(guò)來(lái)歸回來(lái),因?yàn)?是直接已知的,然后歸來(lái)乘以2,再歸來(lái)乘以3……遞歸的前提條件是下一步的形式跟原來(lái)的是一致的,比如n!變成nX(n-l)!,(n-1)!變成(n-1)X(n-2)!。另外遞歸必須有個(gè)出口,不能無(wú)限的遞下去卻沒(méi)有歸回來(lái),要有個(gè)終止點(diǎn)(具體的),比如階乘最后的2X1。用知乎作者M(jìn)emoria的話(huà)來(lái)說(shuō)就是:假設(shè)你在一個(gè)電影院,你想知道自己坐在哪一排,但是前面人很多,你懶得去數(shù)了,于是你問(wèn)前一排的人「你坐在哪一排?」,這樣前面的人(代號(hào)A)回答你以后,你就知道自己在哪一排了,因?yàn)橹灰袮的答案加一,就是自己所在的排了。不料A比你還懶,他也不想數(shù),于是他也問(wèn)他前面的人B「你坐在哪一排?」,這樣A可以用和你一模一樣的步驟知道自己所在的排。然后B也如法炮制。直到他們這一串人問(wèn)到了最前面的一排,第一排的人告訴問(wèn)問(wèn)題的人「我在第一排」。最后大家就都知道自己在哪一排了。就是這樣,以同樣的形式向前傳遞問(wèn)題,到第一排有具體的答案后向后一層層返回答案。這里的第一排就是遞歸的出口?!猧ntDigui(inti)〃求i的階乘,返回值為i!(intm=0;if(0==i)return(1);elsem=i*Digui(i-1);returnm;}(ps:也可以用單詞來(lái)做變量,比如intsum,number;)假如輸入實(shí)參i的值為4,不等于0,執(zhí)行else之后語(yǔ)句m=i*Digui(i-1),這樣就變成了求4*Digui(3),調(diào)用了自身Digui(3),然后Digui(3)又變成了3*Digui(2),直到參數(shù)等于0,執(zhí)行if之后的return1,不再調(diào)用自身函數(shù),最終計(jì)算出4*3*2*1。遞歸的好處顯而易見(jiàn):變化成一個(gè)跟自身形式相同但是更加簡(jiǎn)單的問(wèn)題,從而可以再利用自身求解,直到這個(gè)問(wèn)題最終變成一個(gè)具體的值,然后再逆推回來(lái)得到結(jié)果。遞歸的基本思想無(wú)非就是把規(guī)模大的問(wèn)題轉(zhuǎn)化為規(guī)模小的相似的子問(wèn)題來(lái)解決。另外遞歸跟循環(huán)有些相似,計(jì)算的方向剛好相反。
有興趣可以上各大高校acm、oj題庫(kù)做題(網(wǎng)搜oj):題庫(kù):1000十BProblem10011002NumberVersion1003LowestCornmonMultiplePlus1004再來(lái)T數(shù)學(xué)題--分拆素教和1005再來(lái)T數(shù)學(xué)題--有興趣可以上各大高校acm、oj題庫(kù)做題(網(wǎng)搜oj):題庫(kù):1000十BProblem10011002NumberVersion1003LowestCornmonMultiplePlus1004再來(lái)T數(shù)學(xué)題--分拆素教和1005再來(lái)T數(shù)學(xué)題--分拆素教和DigitalRoots選ID1000題進(jìn)去可以看到問(wèn)題的描述:A+BProblemTimeLimit:2&&B/ieQQms(Java/Others)ProbLejnDescription:Caculat^A+B.ProcesstoendoffileInputsEachlinecontaintwoirntegersAandBrOutput:Fore日匚hcase^outputA+Bincneline按summit鍵提交自己的代碼:SubmitYourCodeProblemID:1000Language:(gccinttiain<:pr-nr£壽pr-nr£壽d=c)scanf("%d%d&b.::c=a-b;pr-nr£壽d=c);return0;
然后看到系統(tǒng)的判斷(通過(guò)與否):Status|ProblemNickNarnGRasult|LanguageTW1CodeLeri.SubvutTimej110?TimeLimitExceeded!Java1001ms72SIB2016-&3-311100■■TimeLimitExceeded!Dava1002ms506B2016-&1-31IB:51::1254WrongAjnswer!3ni51661B2016-^3-3109:57::(分別給出所提交題的代碼類(lèi)型,運(yùn)行時(shí)間,代碼量和提交時(shí)間)水題:一、題目要求:求具有abcd=(ab+cd)%性質(zhì)的4位數(shù)。編寫(xiě)一個(gè)程序求出具有所有這樣性質(zhì)的4位數(shù)。示例:3025這個(gè)數(shù)字是(30+25)的平方輸入要求:無(wú)輸入輸出要求:輸出所有的具有所有這樣性質(zhì)的4位數(shù)。提示:設(shè)abcd四個(gè)數(shù),變成4位數(shù)是a*1000+b*100+c*10+d。幾層循環(huán),a從1?9,b、c、d從0到9。二、題目要求:階梯式打印出九九乘法表:提示:用嵌套的for循環(huán),外層for決定輸出幾個(gè)等式,內(nèi)層的for決定當(dāng)行的具體內(nèi)容。三、題目要求:輸入任意一個(gè)正整數(shù),將其各位數(shù)字反序輸出(例如輸入123,輸出321)【循環(huán)】1、intn;2、輸入正整數(shù)n.3、輸出n%10(n除以10的余數(shù),即n的個(gè)位數(shù))4、令n=n/10.(除以10去掉個(gè)位,使得十位變成個(gè)位)5、回到步驟3循環(huán)6、直到n最后為0.這樣最終輸出的就是n的反向。數(shù)組數(shù)組名[表達(dá)式]習(xí)慣上用a,b,c,d……來(lái)表示變量,但是如果要表示100個(gè)變量,就太過(guò)繁瑣了,數(shù)組的使用大大方便了多個(gè)變量的定義,最重要的是數(shù)組定義的多個(gè)變量之間是有順序關(guān)系的,非常的條理清晰整齊。chara[10];定義了10個(gè)字符變量,但是只有一個(gè)數(shù)組名標(biāo)識(shí)符a,用[]來(lái)區(qū)分各個(gè)變量。比如intb[3]定義了3個(gè)整型變量,分別是b[0],b[1],b[2],使用上跟a,b,c是一樣的??诶锏臄?shù)字是數(shù)組的下標(biāo),所有數(shù)組的第一個(gè)變量都是從0下標(biāo)開(kāi)始,不是從1開(kāi)始。inta[3];a[0]=1,a[1]=2;a[2]=a[0]+a[1];printf("%d”,a[2]);數(shù)組的數(shù)字標(biāo)識(shí)使得同名數(shù)組的各個(gè)變量之間有了順序關(guān)系,不再是一個(gè)個(gè)獨(dú)立的變量,這樣我可以用for循環(huán)來(lái)有次序的改變數(shù)組變量的值:—inti;inta[10];for(i=
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025-2030年中國(guó)盆景行業(yè)發(fā)展趨勢(shì)規(guī)劃分析報(bào)告
- 柳州城市職業(yè)學(xué)院《城鄉(xiāng)規(guī)劃原理C》2023-2024學(xué)年第二學(xué)期期末試卷
- 山東體育學(xué)院《有機(jī)化學(xué)I2》2023-2024學(xué)年第二學(xué)期期末試卷
- 廣州城市理工學(xué)院《交換原理與NGN》2023-2024學(xué)年第二學(xué)期期末試卷
- 2025年海南省安全員考試題庫(kù)附答案
- 遼寧工程技術(shù)大學(xué)《領(lǐng)導(dǎo)科學(xué)》2023-2024學(xué)年第二學(xué)期期末試卷
- 山東商業(yè)職業(yè)技術(shù)學(xué)院《生物化學(xué)與分子生物學(xué)(含遺傳學(xué))》2023-2024學(xué)年第二學(xué)期期末試卷
- 鄭州城市職業(yè)學(xué)院《英語(yǔ)高級(jí)視聽(tīng)說(shuō)》2023-2024學(xué)年第二學(xué)期期末試卷
- 德宏師范高等專(zhuān)科學(xué)?!?0世紀(jì)西方文學(xué)》2023-2024學(xué)年第二學(xué)期期末試卷
- 湛江科技學(xué)院《土木工程施工技術(shù)》2023-2024學(xué)年第二學(xué)期期末試卷
- 小升初、小學(xué)生滿(mǎn)分優(yōu)秀作文匯編100篇
- 次聲波在臨床醫(yī)學(xué)及麻醉中的作用 次聲波在臨床麻醉中的作用
- 加盟招商方案PPT模板
- 中石油HSE培訓(xùn)試題集(共33頁(yè))
- 2022年云南省中考數(shù)學(xué)試題及答案解析
- 噴(烤)漆房VOCs治理設(shè)施日常運(yùn)行臺(tái)賬
- TS16949五大工具:SPC
- 五年級(jí)下冊(cè)-綜合實(shí)踐教案
- 貴州出版社小學(xué)五年級(jí)下冊(cè)綜合實(shí)踐活動(dòng)教案全冊(cè)
- [方案]隱框玻璃幕墻施工方案
- 設(shè)備安裝檢驗(yàn)批表格
評(píng)論
0/150
提交評(píng)論