版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
C語言視頻教程?為什么學(xué)習(xí)C語言:I機器語言1 第一代語言匯編語言I 第二代語言Fortran語言主要用于科學(xué)計算,在第三代語言中,以1980年為分水嶺,分為結(jié)構(gòu)化和面向?qū)ο笳Z言。Basic語言是vb的前生,pascal語言一般是用于教學(xué)。C語言是最重要的,其他的語言一般很少用了。結(jié)構(gòu)化的代表語言是c語言。結(jié)構(gòu)化語言的數(shù)據(jù)和操作是分離的,導(dǎo)致在寫大項目的時候,會出現(xiàn)各種各樣莫名其妙的問題。在面向?qū)ο蟮恼Z言中C++是最復(fù)雜的語言。由于C++語言太復(fù)雜,sun公司對C++進行了改裝,產(chǎn)生了java語言。而c#是由微軟開發(fā)的,和java相似,幾乎一模一樣?!龈呒壵Z言:a+b■匯編語言 ADDAX,BX■機器語言 00000001110110000在高級語言的執(zhí)行速度上,C是最快的,C++其次,而java和c#是最后的。Java和c#流行,主要的一個原因C語言的發(fā)展和過程:■產(chǎn)生時間:1972-1973■產(chǎn)生地點:美國貝爾實驗室(Bell)■創(chuàng)始人:Dennis.M.RitchiefOKen.Thompson■目的: 改寫UNIX操作系統(tǒng)■C語言發(fā)展過程1983年ANSIC1987年ANSIC871994年C99C語言的特點:?優(yōu)點:代碼量小,速度快,功能強大。?缺點:危險性高,開發(fā)周期長,可移植性弱。危險性高:寫同一個程序,在java中會報錯,而在c中不會報錯,為什么呢,因為c認為程序你想怎么寫就怎么寫,c語言認為你寫的程序不是很離譜,他都認為你寫的這個程序有特殊的含義??梢灾苯油ㄟ^,而java則不可以。開發(fā)周期長:c語言是面向過程的語言,面向過程的語言的特點就是在開發(fā)大項目的時候,很容易崩潰,現(xiàn)在市場上的語言分三塊C/C++:單純的學(xué)習(xí)c是什么都做不了的。JavaC#可移植性不強:這是針對java來說的,因為java的可移植性太強了,所以就感覺說c的可移植性不強。金山公司最主要是靠wps辦公軟件來發(fā)展的。Wps是c語言開發(fā)的,三大系統(tǒng):windows,unix,1inuxWindows內(nèi)核是c語言寫的,而外殼是C++寫的。Java永遠不可能寫操作系統(tǒng)。因為java運行速度太慢了。而1inux和unix都是純c寫的。操作系統(tǒng)控制了硬件,如果說操作系統(tǒng)的運行速度慢,那么當(dāng)我們在運行軟件的時候,運行速度會更慢。為什么使用c語言寫操作系統(tǒng)呢,首先是因為c的運行速度快,然后是因為c可以直接控制硬件,而其他語言不可以。沒有指針的語言是不能直接訪問硬件的。C語言的應(yīng)用領(lǐng)域:■系統(tǒng)軟件開發(fā)操作系統(tǒng):Windows.Linux、Unix驅(qū)動程序:主板驅(qū)動、顯卡驅(qū)動、攝像頭驅(qū)動數(shù)據(jù)庫: DB2、Oracle.SqlServer■應(yīng)用軟件開發(fā)辦公軟件:Wps圖形圖像多媒體:ACDSeePhotoshopMediaPlayer嵌入式軟件開發(fā):智能手機、掌上電腦游戲開發(fā):2D、3D游戲驅(qū)動一般是用c和匯編來寫的。數(shù)據(jù)庫一般是用c和C++來寫的C語言的重要性:有史以來最重要語言所有大學(xué)工科和理科學(xué)生必修課程最重要系統(tǒng)軟件:windows、linux、unix均使用c開發(fā)一名合格黑客必須掌握的語言任何一個想終身從事程序設(shè)計和開發(fā)人員必須熟練掌握的語言大企業(yè)、外企招聘程序員必考的語言為學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)、C++、Java、C#奠定基礎(chǔ)病毒最基本的是要感染系統(tǒng),數(shù)據(jù)結(jié)構(gòu),C,C++這三門語言是必須要學(xué)習(xí)的。牛人牛語:入門最基本的方法就是從C語言入手.當(dāng)你成為c語言的高手,那么就你很容易進入到操作系統(tǒng)的平臺里面去;當(dāng)你進入到操作系統(tǒng)的平臺里去實際做程序時,就會懂得進行調(diào)試;當(dāng)你懂得調(diào)試的時候,你就會發(fā)現(xiàn)能輕而易舉地了解整個平臺的架構(gòu)。這時候,計算機基本上一切都在你的掌握之中了,沒有什么東西能逃得出你的手掌心一一《編程筑言》梁肇新怎樣學(xué)習(xí)C語言參考資料“譚浩強《C語言程序設(shè)計》清華《TheCprogramminglanguage》機械J_業(yè)(CPrimerPlus》60元人名郵電《C和指針》65元人名郵電《C專家編程》絕版《C陷阱與缺陷》人名郵電30《C科學(xué)與藝術(shù)》機械工業(yè)王爽寫的C++也很不錯學(xué)習(xí)的目標(biāo):C語言的關(guān)鍵字:32個關(guān)鍵字:(由系統(tǒng)定義,不能重作其它定義)autobreakcasecharconstcontinuedefaultdodoubleelseenumexternfloatforgotoifintlongregisterreturnshortsignedsizeofstaticstructswitchtypedefunsignedunionvoidvolatilewhileC語言程序的格式:#include<stdio.h>intmain(void)IIreturn0:)第二講:(14)c語言編譯知識.Cpu,內(nèi)存條,硬盤,顯卡,主板,顯示器之間的關(guān)系。Cpu不能直接處理硬盤上的數(shù)據(jù),必須要先調(diào)入內(nèi)存中。.Hello,word程序是如何運行起來的。.什么是數(shù)據(jù)類型數(shù)據(jù)類型就是數(shù)據(jù)的分類,可以分為a:基本數(shù)據(jù)類型:整形TOC\o"1-5"\h\z整形int ―4短整形shortint -2長整形longint -8浮點型單精度浮點數(shù)float:存儲范圍小-4雙精度浮點數(shù)double:存儲范圍大-8字符char:c語言中是沒有字符串的。-1B:符合類型:就是把基本類型拼湊在一起。結(jié)構(gòu)體枚舉共用體什么是變量變量的本質(zhì)是內(nèi)存中一段存儲空間,.Cpu,內(nèi)存條,vc++6.0,操作系統(tǒng)之間的關(guān)系。.變量為什么必須初始(即賦值)所謂的初始化就是賦值的意思,軟件運行與內(nèi)存關(guān)系(垃圾數(shù)據(jù)).軟件在運行前需要向操作系統(tǒng)申請存儲空間,在內(nèi)存空間足夠空閑時,操作系統(tǒng)將分配一段內(nèi)存空間并將該外存中軟件拷貝一份存入該內(nèi)存空間中,并啟動該軟件運行。.在軟件運行期間,該軟件所占內(nèi)存空間不再分配給其他軟件。.當(dāng)該軟件運行完畢后,操作系統(tǒng)將回收該內(nèi)存空間(注意:操作系統(tǒng)并不清空該內(nèi)存空間遺留下來的數(shù)據(jù)),以便再次分配給其他軟件使用。綜上所訴,一個軟件所分配到的空間中極可能存在著以前其他軟件使用過后的殘留數(shù)據(jù),這些數(shù)據(jù)被稱之為垃圾數(shù)據(jù),所以通常情況下我們?yōu)橐粋€變量,為一個數(shù)組,分配好存儲空間之前都要對該內(nèi)存空間初始化。.如何定義變量數(shù)據(jù)類型,變量名稱=賦予的值等價于數(shù)據(jù)類型變量名變量名=要賦予的值舉例子:Int1=3;等價于inti;1=3;Inti,j;等價于inti;intj;Inti,j=3等價于inti;intj;j=3IntI=3,j=5;等價于inti;intj;1=3;j=5;.什么是進制我們規(guī)定八進制前面加0(零),十六進制前面加Ox。在匯編中:在數(shù)字后加字母B表示二張制數(shù),加字母。表示人選制數(shù),加字母D表示十比制數(shù),加字母H表示十六址制教。I. I例:1011B為二進制數(shù)1011,也記為(1011)213570為人進制數(shù)1357,也記為(1357)J2049D為十進制數(shù)2049,也記為(2049)103FB9H為十六進制數(shù)3FB9,也記為(3FB9■什么叫n進制■八進制8個基數(shù)逢8進一基數(shù): 012345678->10 9->11 10->12■十六進制:16個基數(shù)逢16進一基數(shù): 0123456789ABCEF或0123456789abedef18->1219->1316->10 17=1118->1219->13常用計數(shù)制對照表:
常十進制(D)二進制(B)八進制(0)十六進制(H)00001111用2310112323計410044510155611066數(shù)7811110007107891001119制10101012a11101113b對12110014c13110115d14111016昭/、、、15111117f表iili■Printf的基本用法:printfCi=%d\n”,i);/*printf的用法%d表示以王進制輸告%*或%乂表示以十六慝制輸出%o表示以八進制輸出8.常量在c中是如何表示的**”,■.........,整數(shù)十進制: 傳統(tǒng)的寫法十六進制: 前面加Ox或0X八進制: 前面0注意是數(shù)字零不是字母。浮點數(shù)傳統(tǒng)的寫法floatx=3.2;〃傳統(tǒng)科學(xué)計數(shù)法floatx=3.203;〃x的值是3200floatx=123.45e-2;〃x的值是1.2345I字符當(dāng)個字符使用單引號括起來,多個字符串使用雙引號括起來。intmain(void)(floatx=123.45e-2F|;「printfx);return0;)在c中,默認是double類型的。在后面加F表示當(dāng)做float來處理。9.常量是以什么樣的二進制代碼存儲在我們的計算機中。編碼:整數(shù)是以補碼的形式轉(zhuǎn)換為二進制代碼存儲在計算機中的,浮點數(shù)是以ieee754標(biāo)準(zhǔn)轉(zhuǎn)換為二進制代碼存儲在計算機中的。字符的本質(zhì)實際也是與整數(shù)的存儲方式相同。第三次課:代碼規(guī)范化可以參考林銳《高質(zhì)量C/C++編程》代碼的規(guī)范化非常的重要,是學(xué)習(xí)一門編程語言的基礎(chǔ)。代碼規(guī)范化的好處1:整齊,別人和自己都容易看懂。2:代碼規(guī)范了,代碼不容易出錯。3:一般的程序可以分為三塊:a:定義變量b:對變量進行操作c:輸出值什么是字節(jié)?存儲數(shù)據(jù)的單位,并且是硬件所能訪問的最小單位。內(nèi)存中存儲的最小單位是字節(jié),但是硬件控制的時候不能精確到位,只能精確到字節(jié),是通過地址總線來控制的,而精確到位是通過軟件來控制的,叫做位運算符來精確到位的。不同類型數(shù)據(jù)之間相互賦值的問題不同數(shù)據(jù)類型之間最好不要相互轉(zhuǎn)換。inti=45;longj=102345,i=j;printf(*%ld%d\n”,i,j);floatx=6.6.doubley=8.8;printf(*%f%lf\n,x,y*);inti-;如果需要明白這個知識點,那么需要明白補碼。什么是ASCH碼以char定義變量的時候,只能使用單引號括起一個字符才是正確的。體include<stdio.h>intmain(void)Icharch='A',〃4行OK等價charch.Ji='A'//charch= //error因為"AB"是字符串,我們不能把字符串賦給單個字符//charch="A";//error//charch='AB',〃'AB'是錯誤的//charch=*B,.//error,因為ch變量已經(jīng)在4行定義了,這樣會導(dǎo)致變量名被:ch='C;printf(*%c\n\ch);在上圖中注釋的最后一樣是重復(fù)定義了ch的值,是錯誤的,而下面的ch=n,是指把c賦值給ch,是正確的。Uinc1ude<stdio.h>intmainXxpid)clmr]chy='b,;prhrtTC%d\n*,ch),return0;上圖中輸出的值是98Ascii碼規(guī)定了ch是以那個值去保存,ascii碼不是一個值,而是一種規(guī)定,規(guī)定了不同的字符是以那個整數(shù)值去表示。14.什么是ASCIIASCII不是一個值,而是一種規(guī)定,ASCII規(guī)定r了不同的字符是使用哪個整數(shù)值去表示它規(guī)定了1,A'-65,B'——66,a,—97'b'—98'O'——48字符本質(zhì)上與整數(shù)的存儲方式相同【字符的存儲】基本的輸入和輸出函數(shù)的用法:第三次課Printf()將變量的內(nèi)容輸出到顯示器上。四種用法printf("字符串');printf("輸出控制符:輸出參數(shù));printf("輸出控制符1輸出控制符2。。。二輸出參數(shù)1,輸出控制符和輸出參數(shù)的個數(shù)必須一一對應(yīng)printfC輸出控制將非輸出控制符、輸出參數(shù))|,輸什么是輸出控制符,什么是非輸出控制符輸出控制符包含如下:
%d—int%ld一一longint%c——char%f—float%lf—double%x(或者%X后者%*X)——int或longint或shortint%o—同上%sI——字符串1Printf為什么需要輸出控制符:?01組成的代碼可以表示數(shù)據(jù)也可以表示指令。必須要有輸出控制符告訴他怎么去解讀。?如果01組成的代碼表示的是數(shù)據(jù)的話,那么同樣的01代碼組合以不同的格式輸出就會有不同的輸出結(jié)果,所以必須要有輸出控制符。ttinclude<stdio.h>intmain(void){intx=47;//100是十進制printf(*%x\n*,x);〃輸出結(jié)果是;Ff122FXX200printf(*%X\n*,x);Ff122FXX200printfC%#x\n*,x);//輸出結(jié)臬是:return0;)在上圖中,intx=47,如果前面加0(零)表示的是八進制,如果前面加Ox(零x)則表示的是十六進制,而在輸出的時候,則是。(字母。)表示八進制,ox(字母0,X)表示十六進制。非輸出控制符:非輸出控制符在輸出的時候會原樣輸出。printf(*i=%d,j=%d\n*,j,k);Scanf()通過鍵盤將數(shù)據(jù)輸入到變量中有兩種用法:用法一:scanf("輸入控制符",輸入?yún)?shù));功能: 將從鍵盤輸入的字即轉(zhuǎn)化為輸入控制符所規(guī)定格式的數(shù)據(jù),然后存入以輸入?yún)?shù)的值為地址的變量中|示例:#include<stdio.h>intmain(void)(inti;scanf(-d”,&i);//&i表示i的地址&是一個取地址符printf(^i=%d\n”,i);return0;|)非輸入控制符:在輸入的時候也會原樣輸入。用法二:scanf("非愴入控制符檢入控制符工愉入?yún)?shù));功能: 將從鍵段愴入的字符轉(zhuǎn)化為愴入控制符所規(guī)定格式的數(shù)據(jù),然后存入以輸入?yún)?shù)的值為地址的變量中非輸入控制符必須原樣輸入Uinclude<stdio.h>intmain(void)(inti;scanf &i);printf(*i=%d\n*,%return0,}但是一般我們在使用scanf的時候,我們一般都不使用非輸入控制符。給多個變量賦值:intmain(void)(inti,j;scanf(*%d%d*,&i,&j); Tprintf(*i=j|=%d\ri*?i,j);1return0;)需要記住,非控制符需要原樣輸入。如何使用scanf編寫出高質(zhì)量代碼如何使用scanf編寫出高質(zhì)量代碼.使用scanf之前最好先使用printf提示用戶以什么樣的方式來輸入.scanf中盡量不要使用非輸入控制符,尤其是不要用\n|Sinclude<stdio.h>intmain(void){inti;[scanf("%d\n",&i);〃非常不好的格式,不要加\nprintf(*i=%d\n”,i);return0;)3.應(yīng)該編寫代碼對用戶的非法輸入做適當(dāng)?shù)奶幚怼痉侵攸c】while((ch=getchar())!='\n')continue;intmain(void)(inti;charch;scanf("%d",&i);printf(*i=%d\n”,i);I// while((ch=getchar())!='\n')//continue;intj;scanf&j);printf("j=%d\n*,j);return0;}運算符:算術(shù)運算符:加(+),減(一)乘(*)除(/)取余(%)關(guān)系運算符:>,>=,<,<=,!=,邏輯運算符:!(非),&&(且),II(或)真真真假假假真真真假!(非)(并且)||(或)1真 假!假真也也真真也也假假&也真假&&假真II假假II真真II真假II假C語言對真假的處理非零是真零是假I真是1表示假是。表示&&左邊的表達式為假右邊的表達式肯定不會執(zhí)行II左邊的表達式為真|右邊的表達式肯定不會執(zhí)行賦值運算符:=,+=,*=,/=例如:a+=3是等價于a=a+3,a/=3等價于a=a/3其優(yōu)先級別是算術(shù)〉關(guān)系〉邏輯〉賦值?!龀ㄅc取模運算符■除法/的運算結(jié)果和運算對象的數(shù)據(jù)類型有關(guān),兩個數(shù)都是int,則商就是int,若商有小數(shù),則截取小數(shù)部分;被除數(shù)和除數(shù)中只要有一個或兩個都是浮點型數(shù)據(jù),則商也是浮點型,不截取小數(shù)部分。如:16/5==3 16/5.0==3.20000 -13/4==-4-13/-3==4 3/5==0 5/3==1最典型的例題就是求s=1+1/2+1/3+1/4+1/5。...+1/100的值(具體程序我們以后再講).■取余%的運算對象必須是整數(shù),結(jié)果是整除后的余數(shù),其余數(shù)的符號與被除數(shù)相同如:13%3=11 13%-3==1-13%3==-1-13%23==-13 3%5==3?測試取模運算符的例子 .#include<stdio.h>intmain(void){printf('%d%d%d%d%d%dln**.3%3,-13%3,-13%^,-13%23,3%5);return0;}r輸出結(jié)果是:I*****************************************7a01-1-1-133Pressanykeytocontinue***?*********?***********?*****,**?****?******總結(jié):取余%的運算對象而是整數(shù),結(jié)果是瞬后的余數(shù),其余數(shù)的符號與被除數(shù)相同*/取余的結(jié)果的正負只和被除數(shù)有關(guān)。第四節(jié)流程控制:
.什么是流程控制程序代碼執(zhí)行的順序。.流程控制的分類順序執(zhí)行選擇執(zhí)行定義:某些代碼可能執(zhí)行,可能不執(zhí)行,有選擇的執(zhí)行某些代碼。分類:ifd最簡單的用法if的范圍問題if..else...的用法if..elseif...else...的用法C語言對真假的處理if舉例一求分數(shù)的等級if的常見問題解析If最簡單的用法:if最簡單的用法格式:if(表達式)語句功能:如果表達式為真,執(zhí)行語句如果表達式為假,語句不執(zhí)行intmain(void)(if(3)printf(*AAAA\n*);〃會輸出if(0)printf("BBBB'n");//不會輸出if(0==0)printf(*CCCC\n*);//會輸出return0;if的范圍問題if(表達式)語句A;語句B;解釋:if默認只能控制語句A的執(zhí)行或不執(zhí)行if無法控制語句B的執(zhí)行或不執(zhí)行或者講:語句B一定會執(zhí)行“"if就認的只能控制一個語句的執(zhí)行或不執(zhí)行Iif(表達式){語句A;語句B;)此時if可以控制語句A和語句BI由此可見:if默認只能控制一個語句的執(zhí)行或不執(zhí)行如果想控制多個語句的執(zhí)行或不執(zhí)行就必須把這些語句用{}括起來|如果想控制多個語句的執(zhí)行或者不執(zhí)行,那么需要使用。括起來。#include<stdio.h>intmain(void)|inti[j;scanf(*%d%dT,&i,&j);if(i>j)printf("i大于j'n");elseprintf("i小于j'n");return0;)ftinclude<stdio.h>intmain(void)(if(1|>2)printf(*AAAA\n*);elseprintf;printf(*CCCC\n*);return0;}if...else...if...else的用法:if(1)A■elseif(2)既elseif(3)C;elseD;intmain(void){doubledelta=3;if(delta>0)printf("看兩個解八n");elseif(delta==0)printf("有一個唯一解!、n");elseprintf("無解!、nf);return0;C錯誤的if…else…if…61s6語句:Uinclude<stdio.h>intmain(void)(doubledelta=-1;if(delta>0)printf("看兩個解!\n");Lrintf("哈哈!、n");elseif(delta==0)printf("有一個唯一解!、n");elseprintf("無解!\n");return0;}在上圖中,當(dāng)執(zhí)行到哈哈那句時,下面的else將會被算作另外一個語句來執(zhí)行,而在我們的c語言中,沒有以else開頭的語句。所以會出錯。If實例:intmain(void)(floatscore;〃score分數(shù)printf("請輸入您的考試成績:”);scanf('%f”,fescore);if(score>100)printf("這是做夢八n");elseif(score>=90&fcscore<=100)//不能寫成90<=score<=100printf("優(yōu)秀!\n");elseif(score>=80&fcscore<90)printf(〃良好!\n*);elseif(score>=60&&score<80)ppntf("及格!;elseif(score>=0&&score<60)printf("不及格!繼續(xù)努力!\nf);If常見的問題:變量的替換:intt: //定義臨時變量,/6和7彳『代碼無法完成i和j的互換// i=j: 〃6行 i=5; j = 5;// j=i: //7fj* i=5: j = 5:I〃正確的換i和j的方法It=i:i=j:j=t;printfCi=%d,j=%d\n”,i,j);return0:求三個數(shù)字的大小:inta,b9c;〃等價于:inta;intb;intc;intt;prints請輸入三個整數(shù)(中間以空格分隔):??);scanFC,%d%d%d,,f&a,&b,&c);〃編寫代碼完成a是最大值b是中間值c是最小值if(a<b)<t=a;a?b;if(a<c)<t=a;a=c;if(b<c)<t=b;b=c;c=t;>printf(-%d%d%d\n”,a,b,c);return0;c語言常見誤區(qū):素數(shù):只能被1和自己整除的數(shù),如1,5,9等?;匚臄?shù):正著寫和倒著寫一樣的數(shù)。如1221,121,等編程實現(xiàn)求一個十進制數(shù)字的二進制形式:求一個數(shù)字的每位是奇數(shù)的數(shù)字取出來組合形成的新數(shù)字。求一個數(shù)字到過來的數(shù)字。1:如果不懂,那么就看答案??炊鸢冈谇?。沒錯誤了,在嘗試改。如何看懂一個程序:.流程:.每個語句的功能:.試數(shù):對一些小算法的程序:.嘗試自己編程結(jié)局。.解決不了,看答案。.關(guān)鍵是把答案看懂。.看懂之后嘗試自己修改程序,且知道修改之后程序的不同輸出結(jié)果的含義。.照著答案去敲.調(diào)試錯誤.不看答案,自己獨立把程序編出.如果程序?qū)嵲谑菑氐谉o法了解,就把他背會??照Z句的問題:if的常見問題解析.空語句的問題if(3>2);等價于工if(3>2);//這是一個空語句intmain(void)if(1>2)printf("巫奧1nprintfCBBBB\n");return0;1在上圖中,最終的結(jié)果會是AAAA,BBBB,程序也不會報錯,為什么呢,因為在程序執(zhí)行的時候,會在;哪里認為是一個空語句。也就是說,如果if成立,那么執(zhí)行空語句。If常見錯誤解析(重點)ftinclude<stdio.h〉intmain(void)(if(3>2)〃4行如果這里加分號,則會導(dǎo)致程序編譯到6行時就會出錯printfJ:"哈哈!\n");flse//6行printf("嘿嘿!\n");return0;)上面這個程序是錯誤的,為什么呢,在該程序中,總的有4個語句,而在以else開頭的那個語句中是有錯誤的,因為在c語言中是沒有以else開頭的這種語法。if(表達式1)A;elseB:是正確的if(表達式1);|IA;elseB;是錯誤的#include<stdio.h>intmain(void)(if(3>2)printf("AAAA'n");elseif(3>1)printf(*BBBB\n*);else Iprintf("CCCC'n");return0;在上面這個程序中,最終的值是AAAA,雖說后面的3>1也滿足條件,但是當(dāng)3>2滿足條件后,該if語句就會終止,后面的語句是不會在執(zhí)行的。if(表達式1)A;elseif(表達式2)B;elseif(表達式3)C;這樣寫語法不會出錯,但邏輯上有漏洞if(表達式1)A;elseif(表達式2)B;elseif(表達式3)C;else1(表達式4)〃7行D;這樣寫是不對的,正確的寫法是:要么去掉7行的(表達式4)要么在else后面加if|既然7行要寫表達式,就要寫if。if(表達式1)A;elseif(表達式2)B:elseif(表達式3)C;else(表達式4)1D;這樣寫語法不會出錯,但邏輯上是錯誤的else(表達式4);D;等價于else(表達式4);循環(huán)的定義,分類。定義:某些代碼會被重復(fù)執(zhí)行。分類:forintmain(void)(inti;intsum=0. —i3for(i=l,i<=4++i)sum=sg+i;4printf(*sum=%d\n*,sum),return0,在上圖中,先執(zhí)行1,在執(zhí)行2,2如果成立,標(biāo)志著循環(huán)成立,那么在執(zhí)行4,最后在執(zhí)行3,3執(zhí)行完后代表一次循環(huán)完成,然后在執(zhí)行2.以此類推。1永遠只執(zhí)行一次。++i=i+l求1-10的所有奇數(shù)的和:#include<stdio.h>intmain(void){inti;intsum=0;for(i=l;i<10;i+=2)//i+=2;等價于i=i+2;(sum=sum+i|;)return0;)求1-12之間的所有能被3整除的數(shù)字之和:intsum=0;for(i=3;i<=12;++i)(if(i%3==0)//媽果i能被3整除sum=sum+i;)printf(*sum=%d\n*,sun1);return0;)For所控制的語句:hinclude<stdio.h>intmain(void){Iinti;for(i=l;i<4;++i){printf(*AAAA\n*);printf("BBBB'n");)return0;在上圖中,for默認只能控制一個語句,但是如果要控制多個語句時候,那么需要使用。把語句括起來。求1+1/2+1/3....1/100的和intmain(void)(inti;floatsum=0;for(i=l;i<=100;++i){sum=sum+1/(float)(i)r;)printfCsum=%f\n*,sum);//float必須用%f輸出return0;在上圖中,重點是強制數(shù)據(jù)類型轉(zhuǎn)換也就是(float)(i)那句:強制類型轉(zhuǎn)化格式:,(數(shù)據(jù)類型)(表達式)功能:把表達式的值強制轉(zhuǎn)化為前面所執(zhí)行的數(shù)據(jù)類型例子:(int)(4.5+2.2)最終值是6(float)(5)最終值是5.000000如果把print那句換為下面這句會怎么樣呢://sum=sum+1(float)(1/i);也是錯的,為什么呢,因為i是整形,1也是整形,
所以不管你怎么轉(zhuǎn)換也是整形啊,如果想要這樣寫的話,那么我們需要把1改成L0也可以的。也就是:〃更簡單的寫法是:sum=sum+1.0/j;試數(shù)詳細步驟舉例:l->i=l1<=100成立sum=O+l/l.00=1++ii=22->i=22<=100成立sum=l+l/2.0 ++ii=33->i=33<=100sum=l+l/2.0+1/3.0++ii=41浮點數(shù)存取:濟點數(shù)的存錯所帶來的問題float和double都不能保證可以精確的存儲一個小數(shù)舉例:|有」個浮點型變量x,如何判斷x的值是否是零if(|x-0.0000011<0.000001)是零else不是零為什么循環(huán)中更新的變量不能定義成浮點型求1-100之間所有奇數(shù)的和:#include<stdio.h>intmain(void)(inti;intsum=0;for(i=l;i<101;++i){ Iif(i%2==1)sum+=i;//sum=sum+i;)printf(*sum=%d\n”,sum);return0;求IT00之間的奇數(shù)的個數(shù):intmain(void){inti;intent=0; //個數(shù)一般用ent表示for(i=l;i<101,++i)(if(i%2==1)++cnt;)printf(*cnt=%d\n”,ent);求1T00之間奇數(shù)的平均值:inti;intsum=0;intent=0;floatavg,//average的縮寫for(i=l;i<101;++i)(if(i%2==1)(sum+=i;++cnt;))?avg=1.0*sum /ent; 〃1. 0默認是double類型printf(*sum= %d\n*, sum);printf(*cnt= %d\n*, ent);printf("avg= %f\n*, avg);求1-100之間的奇數(shù)之和,在求1T00之間的偶數(shù)之和:tn*Txtn■tn*Txtn■Txtn*TxSu〃奇數(shù)和
〃偶數(shù)和for(i=l;i<101;++i){ Iif(i%2==1){suml+=i;)elsesum2+=i,|}}printf("意數(shù)和=%d\n〃,suml);printf("腐數(shù)和=%d\n〃,sum2);多個fou循環(huán)的嵌套使用:多個for猛環(huán)而蕨4使用for(1;2;3) //Ifor(4;5;6)//2A;//3B;〃4整體是兩個語句,123是第一個語句4是第二個語句整體是兩個語句。上圖中,先執(zhí)行1,在執(zhí)行2,如果2成立,執(zhí)行4,在執(zhí)行5,如果5成立執(zhí)行A,在執(zhí)行6,在執(zhí)行5,如果5不成立,意味著里面的循環(huán)結(jié)束,然后執(zhí)行3,在執(zhí)行2,如果2成立又執(zhí)行4,在執(zhí)行5,如果5成立在執(zhí)行6,在執(zhí)行5,如果5不成立,在執(zhí)行3,在執(zhí)行2,如果2不成立,意味著本次循環(huán)結(jié)束,在執(zhí)行B,在上圖中,需要注意的是,如果2成立的話,那么每次4都需要執(zhí)行。for(1;2;3)for(4;5;6)|A,B;)整體是L個語句3.for(7;8;9)for(1;2:3)(1A;!B;for(4,5;6)C;)整體是一個語句|進制之間的轉(zhuǎn)換:如234為5進制,那么轉(zhuǎn)換成10進制是多少:2x5x5+3x5+4的值就是轉(zhuǎn)換成的10進制。2346是16進制,轉(zhuǎn)換成2進制是多少:2x16x16x16+3x16x16+4x16+12的值就是轉(zhuǎn)換成10進制的值。注意上面的規(guī)律。那么把十進制轉(zhuǎn)換成r進制呢,其實很簡單,就是把
10進制數(shù)除以r,知道商是。的時候。然后取余數(shù),余數(shù)倒序排列:(39航)1。=(?)1616 3981 余數(shù)16 24H 13Hh16 15 80 15(F)(3981)10=(F8D)16瑣碎的運算符:自增:自增[或需自成],分類:前自增一++i后自增-i++前自增和后自增的異同:相同:最終都使i的值加1不同前自增蝮體表達在的值是i加1之后的值
后自增整體表達K的值是i加1之前I的值#include<stdio.h>intmain(void)(inti;intj;intk;intm;i=j=3;〃"價于i=3,j=3.k=-i++;m=++j;printf(*i=%d,j=%d,k=%d,m=%d\n”,i,j,k,m);return0;)/*在Vc++6.0中的榆出結(jié)果是:i=4,j=4,k=3,m=4總結(jié):前自增題體表達式的值是i加1之后的值后自重整體表達式的值是i加1之時的值學(xué)習(xí)自增要明白的幾個問題我們編程時應(yīng)該盡量屏蔽掉前自增和后自培的差別自培表達式最好不要作為一個更大的表達式的一部分來使或者說i++和++i單獨成一個語句,不要把它作為一個完整復(fù)合語句的一部分來使用自減:和自增一樣。三目運算符:A?B:t等價于if(A)B;elseIIc;|include<stdio.h>intmain(void)(inti;i=(0|>2?5:1);printf(*%d\n*,i),return0,)最終的輸出結(jié)果是1.逗號表達式:格式(A,B,C,D)功能:從左到右執(zhí)行I最終表達式的值是最后一項的值|include<stdio.h>intmain(void)(inti,i=(3,2,5,6);rtprintf i\,Ireturn0,)最終結(jié)果是6.Uinclude<stdio.h>intmain(void)(inti;intj=2; Ii=(j++,++j,j+2.j-3);printf(*%d\n*,i)Jreturn0,)上圖中,逗號是個順序點,即所有的副作用必須在下個語句前生效,其最后結(jié)果為1,j+2只是產(chǎn)生臨時值,并沒有把j+2的值賦個j。如果寫成j+=2,那最后的值則變?yōu)?.For的嵌套使用舉例:include<stdio.h>intmain(void)(inti,j;for(i=0;i<3;++i)for(j=2;j<5;++j)printf("哈哈!\n*);printf("嘻嘻!\n"),|return0;)上例中輸出的結(jié)果是9個哈哈,1個嘻嘻。intmain(void){inti,j:J+!\)zXJn°tn+i!\J+!\)zXJn°tn+i!\5:哈!\+嘿j<fr嘻3喟;t<“2n?1y(x=-1f-Jr?1po(pfprintf(forreturn0;)在上圖中,整個程序分成3個語句,輸出的結(jié)果是3個嘿嘿,3個哈哈,1個嘻嘻。include<stdio.h>intmain(void){inti,j;for(i=0;i<3;++i)(printf(Til!\n");for(j=2;j<5;++j){ Iprintf("222!\n");
printf("333!\n*);)printf("444|[\n");}return0;其結(jié)果是:111?222!333?222?333!444?111?222?333?222?333?222?333?444?111?222?333?222?333!222!333?444?While1:執(zhí)行的順序:格式:while(表達式)
語句;2:與for的相互比較:用for來求1-100之和:intmain(void)(intsum=0;inti;for(i=l;i<101;++i){sum=sum+i;}printf(*sum=%d\n*,sum);return0;}用while實現(xiàn)「100之和。只需要把for語句替換為:i=1;while(i<101){^um=sum+i;++i;)For和while是可以相互轉(zhuǎn)換的,可以用下面的表達式來表示:for(It2;3)A;等價于1;while(2){A;3;11While和for在邏輯上完全等價,但是for在邏輯上更強。更容易理解,更不容易出錯。推薦多使用for。3:while舉例:’4J健盤愉入一個數(shù)字,如果該數(shù)字是回文數(shù),則返回yes,否則返回no回文數(shù):正著寫和倒著寫都一樣比如:12112321|ttinclude<stdio.h>intmain(uoid)intual;〃存放待判斷的數(shù)字intm;intsum=0;printf,請輸入您需要判斷的數(shù)字:“);scanfCtd",&ual);m=ual;while(m)<sun=sun*10+m%10;m/=10;>if(sum==ual)printFC'Ves!\nB,);elseprintFC'Nonn");return0;}1>2>3>4>5>1>2>3>4>5>m1234成立sum-0*10+1,34%10=4a=?/10=123;m=123成立sun=4*10+123?10=4311-123/10=12m=12成立suii=43*l0+12%10=432m—12/10=1suii=432*10+l%10=4321■=1/10^0m0不成立最終sum=4321通過上面的試數(shù),應(yīng)該能很快的理解回文數(shù)的算法。/*菲波拉契序列12358132134?/ninclude<stdio.h>intmain(uoid)€intn;intF1,F2,F3;inti;F1-1;F2=2;printf(“請輸入您需要求的想的序列:“);scanfC'%d'*,&n);if(1==n){F3=1;>elseif(2==n)<F3=2;>else<For(i=3;i<=n;??1)<F3=F1?F2;f1=f2;F2=F3;)>printF("%d\n'>>F3);return0;1>i=33<=6成立F3=1+2=3f2=2F2=F3=3+*ii=42>i=44<=6成立F3=2+3=5F1=3F2=5i=53>i=55<=6成立F3=3+5=8F1=5F2=8i=64>i=66<=6成立F3=5+8=13F1=8F2=13i=75>i=77<=6不成立4:什么時候使用while,什么時候使用for:沒法說,用多了就自然而然知道了Do...while格式do}while(表達式);(Jo...while.并用等價于for,當(dāng)然也不等價于while主要用于人機交互一元二次方程:Vinclude<stdio.h>Minclude<math.h>intnain(uoid)<doublea,b,c;doubledelta;doublex1fx2;charch;doprinter請輸入一元二次方程的三個系數(shù)printf('*a=**);scanFCUF'1,&a);printffb=");scanFC^lf,&b);printFC'c-**);scanf「%l「,&c);delta=b*b-4*a?c;if(delta>0)<x1=(-b?sqrt(delta))/(2?a);x2=(-b-sqrt(delta))/(2?a);printf(,,有兩個解,x1=-x2=VF\n"fx1?x2);>elseif(0?=delta)<x1-x2=(-b)/(2?a);printf("有儺一解,x1=x2=UF\n",x1?x2);>else<printf(“無實數(shù)解八n”);printf(?您想繼續(xù)么");scanF("*c",Rch);〃就前面必須得加一個空格原因略}while(?y,==ch11,V==ch);return0;Switch的用法:電梯程序:Minclude<stdio.h>intmain(uoid)<intual;printfL請輸入您要進入的樓層:”);scanF(,,%d,,?&ual);switch(ual)<printf(“1層開,\n”);break;printf(“2層開八n”);//break;printf「3層開?\n”);break;default:printf(“沒有蓋到這一層,\n");break;>return0;}Case是程序的入口,當(dāng)進入程序后,程序會從上往下執(zhí)行,如果有break,那么會中斷程序,如果沒有,那么會一直執(zhí)行。switch(表達式){case常量表達式1:語句1;case常量表達式2:語句2;■■■case常量表達式n:語句n;default:語句n+1;Break的用法:break4flcontinuebreakbreak如果用于循環(huán)是用來終止循環(huán)break如果用于switch,是用于終lbswitchbnmk不筋直接用于if,除非if屬于循環(huán)內(nèi)部的一個千句include<stdio.h>intmain(void)riinti;/*switch(2){case2:printf("哈哈!\n");break;//OK,break可以用于switch)for(i=0;i<3;++i)(if(3>2)break;//break雖然是if內(nèi)部的語句,//但break終止的福是外部的for循環(huán)printf("嘿嘿!、n”’;}return0;#include<stdio.h>intmain(void)(inti,j;for(i=0,i<3;++i)(for(j=l;j<4,++j)break;,〃break只熊終止距離它般近|妁淆壞printf("同志們好!\n"),}在多層循環(huán)中,Break只能終止他最近的循環(huán)。在多層switch中,break也是只能終止距離他最近的switcho"include<stdio.h>intx=l,y=0,a=0,b=0;switch(x)//第一個switch{case1:switch(v) //第二個switch{case0:a++;break;//終止的是第二個switchb++;break;)b=100;break; //終止的是第一個switcha++:b++;break;}?,,_printf(*%d%d\n",a,b);//26彳丁return0;)Break只能用于循環(huán),不能用于if。如果用于if,必須要當(dāng)循環(huán)中嵌套if的時候。Continue的用法:continue用于跳過本次循環(huán)余下的語句,轉(zhuǎn)去判斷是否需要執(zhí)行下次循環(huán)1.for(1;2;勖|A;B;continue;〃如果執(zhí)行該語句,則執(zhí)行完該語句C;D;)O上圖中,如果執(zhí)行continue,那么C,D將不會被執(zhí)行,會執(zhí)行3.whilel(表達式)(A;B;continue;C;D;)在上圖中,如果執(zhí)行了continue,那么后面的C,D將不再執(zhí)行,而會去執(zhí)行表達式。Hinclude<stdio.h>intmain(void)finti;charch;scanf&i);printf(,zi=%d\n*,i);while((ch=getchar())!='\n')continue;intj;scanf&j);printf("j=%d\n*,j);return0;)數(shù)組:數(shù)組的使用:ttinclude<stdio.h>intmain(void)(inta[5]={1,2,3,4,5}:〃@是數(shù)組的名字,5表示數(shù)組元素的個數(shù),〃并且這5過熱元素分別用a[0]a[l]inti;for(i=0;i<5;++i)printf(*%d\n*,a[i]);|return0;}為什么需要數(shù)組1:為了解決大量同類型數(shù)據(jù)的存儲和使用問題。2:用數(shù)組可以模擬現(xiàn)實世界。Inta[25]:一維數(shù)組,可以當(dāng)做一個線性結(jié)構(gòu)。Inta[8][6]:可以當(dāng)做一個平面,意思是8行6列。有48個元素。Inta[3][4][5]:可以當(dāng)做一個立體。Inta⑶⑷⑸⑹:可以當(dāng)做一個四維空間。數(shù)組的分類一維數(shù)組怎樣定義一維數(shù)組:為n個變量分配存儲空間:數(shù)組分配的內(nèi)存空間是連續(xù)的。所有的變量類型必須相同:數(shù)組不可能第一個元素是整形,第二個元素是浮點型。所有變量所占用的字節(jié)必須相等。例子:int[5]有關(guān)一維數(shù)組的操作初始化:初始化完全初始勺intJ[5]={1,2,3,4,5};不完全初始化,未被初始化的元素自動為零inta[5]={1,2,3};不初始化,所有元素是垃圾值inta[5];清零inta[5]={0};錯誤寫法:inta[5];a[5]={|112,3,4,5};〃錯誤只有在定義數(shù)組的同時才可以整體賦值,其他情況下整體賦值都是錯誤的inta[5]={1,2,3,4,5};a[5]=100;//error因為沒有a[5]這個元素,上圖中a[5]前面如果沒有加上數(shù)據(jù)類型,那么這里的a[5]不是指一個數(shù)組,其中的5只的是下標(biāo)。inta[5]={1,2,3,4,5}:intb[5];如果要把a數(shù)組中的值全部復(fù)制給b數(shù)組錯誤的寫法:b=a;//error正確的寫法for(i=0;i<5;++i)>[1]=a[i];上圖中,數(shù)組的5個元素不是用a來代表的,是用a0,al...a4來代表的,所以說數(shù)組名a代表的不是數(shù)組的5個元素,數(shù)組的名字代表的是數(shù)組的第一個元素的地址。?賦值intmain(void)(inta[5];inti;scanf &a[0]);printf(*a[0]=%d\n",a[0]);scanf &a[3]);printf(*a[3]=%d\n*,a[3]);for(i=0;i<5;++i)printf(*%d",a[i]);return0;}把一個數(shù)組元素給全部倒過來:口include<stdio.h>intmain(void){inta[81={1,2,3,4,5,6,7,8};inti,j;intt;i=0;j=7;while(i<j)(t=a[i];a[i]=a[j];a[jl=t;i++;-J;}for(i=0;i<8;++i)printf(w%d\n*,a[i]);return0;?排序?求最大/小值?倒置,查找?插入?刪除二維數(shù)組:二維數(shù)組inta[3][4];總共是12個元素,可以當(dāng)做3行4列看待,這12個元素的名字依次是[0][0][1][0][2][0][i][j]a[0][1]a[0][2]a[0][3][1][1]a[l][2]a[l][3][2][3]表示第i+1行第j+1列的元素intatm][nJ;該二維數(shù)組右下角位置的元素只能是[n-1]二維數(shù)組的初始化:初始化,,‘4]4]u{5{9{1,2,3,4,5,6,7,8,9,10,11,12);2,3,4),6,7,8),10,11,12}};1輸出二維數(shù)組內(nèi)容:intmain(void)(inta[3][4]={(1,2,3,4),{5,6,7,8),{9,10,11,12));inti,j;〃馀出數(shù)組內(nèi)容for(i=0;i<3;++i)(for(j=0;j<4;++j)printf(*%d",a[i][j]);printf(*\n*):|return0;多維數(shù)組:是否存在多維數(shù)組:不存在,因為內(nèi)存是線性一維的,在內(nèi)存中是不分行,也不分列的。N維數(shù)組可以當(dāng)做每個元素是n-1維數(shù)組的一維數(shù)組。???????????多維數(shù)組是否存在多維數(shù)組不存在因為內(nèi)存是線性一維的n維數(shù)組可以當(dāng)做每個元素是n-1維數(shù)組的一維數(shù)組比如: Iinta[3][4];該數(shù)組是含有3個元素的一維數(shù)組只不過每個元素都可以再分成4個小元素inta[3][4][5];該數(shù)組是含有3個元素的一維數(shù)組只不過每個元素都是4打5列的二維數(shù)組函數(shù):
//max是函蓼的名字,i刊j是形式參數(shù),簡稱形參void表示函數(shù)沒有返回值voidmax(inti,intj)fIif(i>j)printf(飛d\n”,i);elseprintf(飛d\n”,j);intmain(void)rIinta,b,c,d,e,f;a=1,b=2;c=3,d=9,e=-5,f=100;max(a,b);max(c,d);max(e,f);/?if(a>b)printf(*%d\nz,a);printf(*%d\n,z,b);if(c>d)printf(飛d\n”,c);elseprintf(飛d\n”,d);if(e>f)printf(飛d\n”,e);elseprintf(飛d\n”,f);*/為什么需要函數(shù):避免了重復(fù)性操作。有利于程序的模塊化。什么叫做函數(shù)intf(void)〃括號中的void表示該函數(shù)不能接受數(shù)據(jù)int表示函數(shù)返回值是int類型的數(shù)據(jù){return10;//向主調(diào)函數(shù)返回10)voidg(void)〃8行函數(shù)名前面的void表示該函數(shù)沒有返回值{.—return10;//error與8行行首的void相矛盾}intmain(void)intj=88;J=f0;printf(*%d\n*,j);//j=g();//error因為g函數(shù)沒有返回值return0;}邏輯上:能夠完成特定功能的獨立的代碼塊。物理上:能夠接收數(shù)據(jù)【也可以不接收數(shù)據(jù)】,能夠?qū)邮盏臄?shù)據(jù)進行處理【也可以不對數(shù)據(jù)進行處理】,能夠?qū)?shù)據(jù)處理的結(jié)果返【也可以沒有返回值1總結(jié):函數(shù)是個工具,他是為了解決大量類似問題而設(shè)計的,函數(shù)可以當(dāng)做一個黑匣子。如何定義函數(shù)函數(shù)的返回值,函數(shù)的名字(函數(shù)的形參列表)(函數(shù)的執(zhí)行體}函數(shù)定義的本質(zhì):詳細描述函數(shù)之所以能夠?qū)崿F(xiàn)某個特定功能的具體方法。return表達式的含義:Return是終止被調(diào)函數(shù),向主調(diào)函數(shù)返回表達式的值,如果表達式為空,則只終止函數(shù),不向被主函數(shù)返回任何值。例子:voidf()(retur^;//return只用來終止函數(shù),不向主調(diào)函數(shù)返回任何值}intf(){return10;〃第一:終止函數(shù),第二,向主調(diào)函數(shù)返回10}Break是用來終止循環(huán)和switch的。而return是用來終止函數(shù)的。pinclude<stdio.h>voidf(void)(inti;for(i=0;i<5;++i)printf("大家辛苦了!、n");return;)printf("同志們好!\n");)intmain(void)'f();return0;}?函數(shù)返回值的類型,也稱為函數(shù)的類型,因為如果函數(shù)名前的返回值類型和函數(shù)執(zhí)行體中的return表達式中表達式的類型不同的話,則最終函數(shù)返回值的類型以函數(shù)名前的返回值類型為準(zhǔn)。
例:#include<stdio.h>intf()(return10.5;//因為函數(shù)的返回值類型是int//所以最終f返回的是10而不是10.5tn?1tn?1{inti=99;doublex=6.6;X=f();printf(*%lf\n/,,x);return0:在上圖中,函數(shù)的返回值以函數(shù)前的數(shù)值類型為準(zhǔn)。函數(shù)的分類有參函數(shù)和無參函數(shù)。有返回值和無返回值。庫函數(shù)和用戶自定義函數(shù)。普通函數(shù)和主函數(shù)(main函數(shù))1:一個程序有且只有一個主函數(shù),主函數(shù)可以調(diào)用普2:通函數(shù),普通函數(shù)不能調(diào)用主函數(shù)。3:普通函數(shù)可以相互調(diào)用。4:主函數(shù)是程序的入口,也是函數(shù)的出口。5:值傳遞函數(shù)和地址傳遞函數(shù)。/max是函藜的名字,.i和J是形式參數(shù),簡稱形參void表示函數(shù)沒有返回值voidmaxi(inti,intj)if(i>j)printf i);elseprintf(飛d\n”,j);}intmax2(inti,intj)rif(i>J)returni;elsereturnj;)intmain(void)f(inta,b,c,d,e,f;a=1,b=2;c=3,d=9,e=-5,f=100;printf("%d\n”,max2(a,b));printf("%d\n",max2(c,d));printf("%d\n",max2(e,f));/*maxi(a,b);maxi(c,d);maxi(e,f);?/return0;}|_判斷一個數(shù)是否是素數(shù):intmain(void)(intval;inti;scanf&val);for(i=2;i<val;++i)(if(val%i==0)break;}if(i==val)printf(*Yes!\n*);elseprintf("No!\n");return0;)使用函數(shù)判斷一個數(shù)是否是素數(shù):2009年11月4日11:18:51判斷一個數(shù)字是否是素數(shù)用單獨的函數(shù)來實現(xiàn),代碼的可重用性提高itinclude<stdio.h>boolIsPrime(intval)(inti;for(i=2;i<val;++i)fIif(0==val%i)
break;}if(i==val)returntrue;elsereturnfalse;)intmain(void)(intval;inti;scanf("%d”,&val);if(IsPrime(val))printf("Yes!\n");elseprintf("N。!\n");return0;)函數(shù)和程序的調(diào)用應(yīng)該注意的地方:intf(inti)(return10;}intmain(void)(inti=99;printf(*%d\n*,i);i=f(5);printf(*%d\n*,i),|return0;}函數(shù)的聲明:#include<stdio.h>voidf(void){printf("哈哈!\n");)intmainCvoid){1f();Ireturn0;}當(dāng)函數(shù)沒有返回值時,那么規(guī)范的寫法是要在函數(shù)中寫明void的。在上圖中,第一個void表示沒有返回值,而第二個void表示不接收形參,也就是函數(shù)不接收數(shù)據(jù)。如果想把函數(shù)卸載程序的后面,那么需要寫函數(shù)聲明:j^oidf(void);//函數(shù)聲明,分號不能丟掉intmain(void)(f();return0;}voidf(void){printf("哈哈!\n");}函數(shù)聲明的含義是告訴編譯器f是個函數(shù)名。如果不加函數(shù)聲明,那么編譯器在編譯到f的時候,不知道f是個什么,如果加了函數(shù)聲明,那么編譯器編譯到f的時候,就知道f是個函數(shù)。?需要注意的是,調(diào)用語句需要放在定義語句的后面,也就是說,定義函數(shù)的語句要放在調(diào)用語句的前面。2009年11月4日11:01:35一定要明白該程序為什么是錯誤的一定要明白該程序第9行生效之后程序為什么就正確了*/#include<stdio.h>//voidf(void);〃9行voidg(void)rf();//因為函數(shù)f的定義放在了調(diào)用f語句的后面,所有語法出錯}voidf(void)fprintf("哈哈!\n");)intmain(void)f*g();return0;}如果函數(shù)調(diào)用卸載了函數(shù)定義的前面,則必須加函數(shù)前置聲明,函數(shù)前置聲明的作用是:1:告訴編譯器即將可能出現(xiàn)的若干個字母代表的是一個函數(shù)。2:告訴編譯器即將可能出現(xiàn)的若干個字母所代表的函數(shù)的形參和返回值的具體情況。3:函數(shù)聲明必須是一個語句,也就是在函數(shù)聲明后需加分號。4:對庫函數(shù)的聲明也就是系統(tǒng)函數(shù)。是通過#include<庫函數(shù)所在的文件的名字.h>來實現(xiàn)的。形參和實參:1:形參和實參個數(shù)是一一對應(yīng)的。2:形參和實參的位置也是一一對應(yīng)的。3:形參和實參的數(shù)據(jù)類型需要相互兼容。?如何在軟件開發(fā)中合理的設(shè)計函數(shù)來解決實際問題。求1到某個數(shù)字之間的數(shù)是否是素數(shù),并將他輸出:合理設(shè)計函數(shù)1|/*2009年11月4日11:18:51判斷一個數(shù)字是否是素數(shù)只用一個函數(shù)實現(xiàn),不好,代碼的利用率不高#include<stdio.h>intmain(void){intval;inti;scanf&val);for(i=2;i<val:++i)fif(0==val%i)break;)if(i==val)printf("Yes!\n");elseprintf(*No!\n");return0;)/*2009年11月4日11:18:51判斷一個數(shù)字是否是素數(shù)用單獨的函數(shù)來實現(xiàn),代碼的可重用性提高*/#include<stdio.h>boolIsPrime(intval)4inti;for(i=2;i<val;++i)(if(0==val%i)break;)if(i==val)returntrue;elsereturnfalse;}intmain(void){intval;inti;scanf("%d”,&val);if(IsPrime(val))printf("Yes!\n");elseprintf(*No!\n*);return0;2009年11月4日11:18:51求1到某個數(shù):字.之間(包括該數(shù)字)所有的素數(shù),并將其輸出只用main函數(shù)實現(xiàn),有局限性:.代碼的重用性不高.代碼不容易理解*/#include<stdio.h>intmain(void)(intval;inti;intj;scanf(%d”,&val);for(i=2;i<=val;++i)(〃判斷i是否是素數(shù),是輸出,不是不輸出for(j=2;j<i;++j)(if(0==i%j)
break;}if(j==i)printf("%d\n",i);}return0;合理的設(shè)計函數(shù)4:2009年11月4日11:18:51求1到某個數(shù)字之間(包括該數(shù)字)所有的素數(shù),并將其輸出用1個函數(shù)來判斷一個數(shù)字是否是素數(shù)優(yōu)點,代碼比如何設(shè)計函數(shù)3.cpp更容易理解代碼的可重用性比如何設(shè)計函數(shù)_3.cpp高缺點:比如有io焉不數(shù)字.求它'們每個數(shù)字從1到它本身的素數(shù)則for(i=2;i<=val;++i)(if(IsPrime(i))printf(*%d\n*,i);要寫1000次#include<stdio.h>boolIsPrime(intm)inti;for(i=2;i<m;++i)if(0==m%i)break;}if(i=m)returntrue;elsereturnfalse;intmain(void){intval;inti;scanf&val);for(i=2;i<=val;++i)if(IsPrime(i))printf(飛d\n”,}return0;2009年11月4日11:56:29用兩個函數(shù)來實現(xiàn)求1到某個數(shù)字之間所有的素數(shù),并將其輸出本程序和如何合理設(shè)計函數(shù)_4.cpp相比較代碼量更少,可重用性更高一*/#include<stdio.h>//本函數(shù)的功能是:判斷m是否是素數(shù),是返回true,不是返回falseboolIsPrime(intm)finti;for(i=2;i<m;++i)(if(0==m%i)break;}if(i==m)returntrue;elsereturnfalse;〃車函數(shù)的功能墾把1到n之間所有的素數(shù)在顯示器上輸出voidTraverseVal(intn)(inti;for(i=2;i<=n;++i)(if(IsPrime(i))printf(飛d\n”,i);))intmain(void)(intval;scanf(飛d”,Aval);TraverseVal(val);return0;)常用的系統(tǒng)函數(shù)和如何通過書籍來學(xué)習(xí)函數(shù):Turboc2.0實用大全一機械工業(yè)出版社常用的系統(tǒng)函數(shù)IdoubleJqrt(doublex);求的x的平方根intabs(intx)求x的絕對值doublefabs(doublex)求x的絕對值遞歸:棧:相當(dāng)于一個杯子,變量的作用域和存儲方式:變量的作用域和存儲方式:按作用域分:I逐局變量局部變量按變量的存儲方式靜態(tài)變量自動變量寄存器變量全局變量和局部變量:局部變量:局部變量在一個函數(shù)內(nèi)部定義的變量或者函數(shù)的形參都統(tǒng)稱為局部變量voidf(inti)(intj=20;}Ii和j都屬于局部變量局部變量的使用范圍只能在本函數(shù)內(nèi)部使用。全部變量:全局變量在所有函數(shù)外部定義的變量叫全局變量全局變量使用范圍力從定義位置開始到整個程序結(jié)束*2009年11月6日9:33:02一定要明白該程序為什么是錯的,也要明白把9到12行代碼放在14行后面,為什么程序就0K了#include<stdio.h>voidg()//9(printf("k=%d\n”,k);}//12intk=1000;〃14行voidf(void)(g();printf("k=%d\n”,k);}tntn?1ft全局變量和局部變量命名沖突的問題:在同一個范圍之內(nèi)不能定義兩個一樣的局部變量:
#include<stdio.h>voidf(inti){I..inti;printf(*i=%d\n。i);}intmain(void)(f(8);在一個函數(shù)內(nèi)部,如果定義的局部函數(shù)的名字和全局變量名一樣時,局部變量會屏蔽掉全局變量:include<stdio.h>inti=99;voidf(inti) _{ Iprintf(*i=%d\n",i);}intmain(void)(f(8);return0;)上例中最終的輸出結(jié)果是8,因為局部變量把全局變量給屏蔽掉了。指針:內(nèi)存的存儲是以一個字節(jié)為一個編號,也就是8位合在一起給一個編號,不是0,1就給編號。內(nèi)存分為很多個單元,每個單元就會分配一個編號。地址:內(nèi)存單元的一個編號。而指針和地址一個概念的。
也就是說指針就是地址。include<stdio.h>intmain(void)(int*p;//p是變量的名字,int*表示p變量存放的是int類型變量的地址inti=
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 制作兒童課件教學(xué)課件
- 目送課件底板教學(xué)課件
- 蘑菇屋課件教學(xué)課件
- 卡通游戲課件教學(xué)課件
- 2024年度云計算平臺廣告業(yè)務(wù)合同
- 2024年度八寶山殯儀館鮮花制品物流配送服務(wù)合同
- 2024年度委托加工協(xié)議(定制產(chǎn)品)
- 2024年塑料模具生產(chǎn)與交付合同
- 2024年度健康醫(yī)療服務(wù)合同服務(wù)細節(jié)
- 2024供水供電合同
- 公安派出所建筑外觀形象設(shè)計規(guī)范1
- (施工方案)雙梁橋式起重機安裝施工方案
- 幼兒園教學(xué)課件問個不停的小鱷魚tigerlee
- 四川瀘州遺贈案
- 調(diào)機品管理規(guī)定
- 檢測公司檢驗檢測工作控制程序
- 社工機構(gòu)項目管理制度
- 充電樁整體解決方案PPT幻燈片(PPT 27頁)
- 物業(yè)服務(wù)集團全員品質(zhì)督導(dǎo)策劃方案
- 建筑設(shè)計基礎(chǔ)(ppt)課件
- 半導(dǎo)體芯片項目商業(yè)計劃書范文參考
評論
0/150
提交評論