版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
郝斌C語言視頻教程
?為什么學(xué)習(xí)c語言:
機(jī)agI第一代語言
I匯編語*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++進(jìn)
行了改裝,產(chǎn)生了java語言。而c#是由微軟開發(fā)的,和java
相似,幾乎一模一樣。在高級語言的執(zhí)行速度上,c是最快
的,C++其次,而java和c#是最后的。Java和c#流行,主
要的一個原因是可以跨平臺。
■高級語言:a+b
■匯編語言ADDAX,BX
■機(jī)器語言00000001110110000
c語言的發(fā)展和過程:c語言的特點(diǎn):
■產(chǎn)生時間:1972-1973
■產(chǎn)生地點(diǎn):美國貝爾實驗室(Bell)
■創(chuàng)始人:Dennis.M.Ritchie和Ken.Thompson
■目的:改寫UNIX操作系統(tǒng)
■C語言發(fā)展過程
?1983年ANSIC
?1987年ANSIC87
?1994年C99
優(yōu)點(diǎn):代碼量小,速度快,功能強(qiáng)大。
缺點(diǎn):危險性高,開發(fā)周期長,可移植性弱。危險性高:
寫同一個程序,在java中會報錯,而在c中不會報錯,為什
么呢,因為c認(rèn)為程序你想怎么寫就怎么寫,c語言認(rèn)為你
寫的程序不是很離譜,他都認(rèn)為你寫的這個程序有特殊的含
義??梢灾苯油ㄟ^,而java則不可以。開發(fā)周期長:c語言
是面向過程的語言,面向過程的語言的特點(diǎn)就是在開發(fā)大項
目的時候,很容易崩潰,現(xiàn)在市場上的語言分三塊C/C++:
單純的學(xué)習(xí)c是什么都做不了的。JavaC#
可移植性不強(qiáng):這是針對java來說的,因為java的可移植
性太強(qiáng)了,所以就感覺說c的可移植性不強(qiáng)。金山公司最主
要是靠wps辦公軟件來發(fā)展的。Wps是c語言開發(fā)的,三大
系統(tǒng):windows,unix,linuxWindows內(nèi)核是c語言寫的,而
外殼是C++寫的。Java永遠(yuǎn)不可能寫操作系統(tǒng)。因為java運(yùn)
行速度太慢了。而linux和unix都是純c寫的。操作系統(tǒng)控
制了硬件,如果說操作系統(tǒng)的運(yùn)行速度慢,那么當(dāng)我們在運(yùn)
行軟件的時候,運(yùn)行速度會更慢。為什么使用c語言寫操作
系統(tǒng)呢,首先是因為c的運(yùn)行速度快,然后是因為c可以直
接控制硬件,而其他語言不可以。沒有指針的語言是不能直
接訪問硬件的。C語言的應(yīng)用領(lǐng)域:驅(qū)動一般是用c和匯編
來寫的。數(shù)據(jù)庫一般是用c和C++來寫的C語言的重要性:
■系統(tǒng)軟件開發(fā)
■操作系統(tǒng):Windows,Linux、Unix
■驅(qū)動程序:主板驅(qū)動、顯卡驅(qū)動、攝像頭驅(qū)動
?數(shù)據(jù)庫:DB2、Oracle,SqlServer
■應(yīng)用軟件開發(fā)
?辦公軟件:Wps
■圖形圖像多媒體:ACDSeePhotoshop
MediaPlayer
?嵌入式軟件開發(fā):智能手機(jī)、掌上電腦
■游戲開發(fā):2D、3D游戲
病毒最基本的是要感染系統(tǒng),數(shù)據(jù)結(jié)構(gòu),C,C++這三門語言
是必須要學(xué)習(xí)的。牛人牛語:
?有史以來最重要語言
?所有大學(xué)工科和理科學(xué)生必修課程
■最重要系統(tǒng)軟件:windows.Ilnuxxunlx均使用c開發(fā)
-一名合格黑客必須掌握的語言
?任何一個想終身從事程序設(shè)計和開發(fā)人員必須熟練掌握的語言
?大企業(yè)、外企招聘程序員必考的語言
?為學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)、C++、Java、C#奠定基礎(chǔ)
入門最基本的方法就是從C語言入手.
當(dāng)你成為c語言的高手,那么就你很容易進(jìn)入到操作系統(tǒng)的平臺里面去;
當(dāng)你進(jìn)入到操作系統(tǒng)的平臺里去實際做程序時,就會懂得進(jìn)行調(diào)試;當(dāng)你
懂得調(diào)試的時候,你就會發(fā)現(xiàn)能輕而易舉地了解整個平臺的架構(gòu)。這時候
,計算機(jī)基本上一切都在你的掌握之中了,沒有什么東西能逃得出你的手
掌心
一一《編程筮言》梁肇新
怎樣學(xué)習(xí)C語言參考資料"
■譚浩強(qiáng)《C語言程序設(shè)計》清華
■(TheCprogramminglanguage》機(jī)械工業(yè)
■《CPrimerPlus》60元人名郵電
■《C和指針》65元人名郵電
■《C專家編程》絕版
■《C陷阱與缺陷》人名郵電30
■《C科學(xué)與藝術(shù)》機(jī)械工業(yè)
王爽寫的C++也很不錯學(xué)習(xí)的目標(biāo):(:語言的關(guān)鍵字:
32個關(guān)鍵字:(由檄定義,不能重作其它定義)
autobreakcasecharconst
continuedefaultdodoubleelse
enumexternfloatforgoto
ifintlongregisterreturn
shortsignedsizeofstaticstruct
switchtypedefunsignedunionvoid
volatilewhile
#include<stdio.h>
intmain(void)
II
return0:
}
c語言程序的格式:
第二講:(14)c語言編譯知識
1.Cpu,內(nèi)存條,硬盤,顯卡,主板,顯示器之間的關(guān)系。Cpu
不能直接處理硬盤上的數(shù)據(jù),必須要先調(diào)入內(nèi)存中。
2.Hello,word程序是如何運(yùn)行起來的。
3.什么是數(shù)據(jù)類型數(shù)據(jù)類型就是數(shù)據(jù)的分類,可以分為
a:基本數(shù)據(jù)類型:整形
整形int-4
短整形shortint-2
長整形longint-8
浮點(diǎn)型
單精度浮點(diǎn)數(shù)float:存儲范圍小-4雙精度浮點(diǎn)數(shù)double:
存儲范圍大-8字符char:c語言中是沒有字符串的。-1
B:符合類型:就是把基本類型拼湊在一起。結(jié)構(gòu)體枚舉共
用體
什么是變量變量的本質(zhì)是內(nèi)存中一段存儲空間,
4.Cpu,內(nèi)存條,VC++6.0,操作系統(tǒng)之間的關(guān)系。
5.變量為什么必須初始(即賦值)所謂的初始化就是賦值的
意思,軟件運(yùn)行與內(nèi)存關(guān)系(垃圾數(shù)據(jù))
1.軟件在運(yùn)行前需要向操作系統(tǒng)申請存儲空間,在內(nèi)存空間
足夠空閑時,操作系統(tǒng)將分配一段內(nèi)存空間并將該外存中
軟件拷貝一份存入該內(nèi)存空間中,并啟動該軟件運(yùn)行。
2.在軟件運(yùn)行期間,該軟件所占內(nèi)存空間不再分配給
其他軟件。
3.當(dāng)該軟件運(yùn)行完畢后,操作系統(tǒng)將回收該內(nèi)存空間(注意:
操作系統(tǒng)并不清空該內(nèi)存空間遺留下來的數(shù)據(jù)),以便再
次分配給其他軟件使用。綜上所訴,一個軟件所分配到的
空間中極可能存在著以前其他軟件使用過后的殘留數(shù)據(jù),
這些數(shù)據(jù)被稱之為垃圾數(shù)據(jù),所以通常情況下我們?yōu)橐粋€
變量,為一個數(shù)組,分配好存儲空間之前都要對該內(nèi)存空
間初始化。
6.如何定義變量數(shù)據(jù)類型,變量名稱=賦予的值等價于
數(shù)據(jù)類型變量名
變量名=要賦予的值舉例子:Inti=3;等價于int
i;1=3;Inti,j;等價于inti;intj;Inti,j=3等價于int
i;intj;j=3IntI=3,j=5;等價于inti;intj;I=3;j
=5;
7.什么是進(jìn)制我們規(guī)定八進(jìn)制前面加0(零),十六進(jìn)制前
面加Ox。
在匯編中:左數(shù)字后加字母B表示二址制裁,加孚
母1。表示人或制數(shù),加字母D表示十液制裁,加字母.農(nóng)
示十六批制裁。
例:
1011B為二進(jìn)制數(shù)1011,也記為(1011)2
13570為八進(jìn)制數(shù)1357,也記為(1357)8
2049D為十進(jìn)制數(shù)2049,也記為(2049)
.
3FB9H為十六進(jìn)制數(shù)3FB9,也記為(3FB9)
B什么叫n進(jìn)制
■八進(jìn)制
?8個基數(shù)逢8進(jìn)一
■基數(shù):01234567
>8>>109->1110->12
■十六進(jìn)制:
>16個基數(shù)逢16進(jìn)一
■基數(shù):0123456789ABCEF或
■0123456789abedef
■16->1017=1118->1219->13
常用計數(shù)制對照表:
十進(jìn)制(D)二進(jìn)制(B)八進(jìn)制(0)十六進(jìn)制(H)
常0000
1111
21022
用31133
410044
計510155
611066
711177
數(shù)81000108
91001119
10101012a
制11101113b
12110014c
對13110115d
14111016e
八昭、、15111117f
表
printf(*i=%d\n”,i):
/*
printf的用法
蠹我募髀類胃制輸出
%。表示以八進(jìn)制輸出
*/
Printf的基本用法:
8.常量在c中是如何表示的
十進(jìn)制:傳統(tǒng)的寫法
十六進(jìn)制:前面加Ox或0X
八進(jìn)制:前面0注意是數(shù)字零不是字母。
浮點(diǎn)數(shù)
傳統(tǒng)的寫法
floatx=3.2;//傳統(tǒng)
科學(xué)計數(shù)法
floatx=3.2^3;〃x的值是3200
floatx=123.45e-2;〃x的值是1.2345
I
字符
當(dāng)個字符使用單引號括起來,多個字符串使用雙引號括起
intmain(void)
floatx=123.45e-2F|:1
x):
return0;
}
來。
在c中,默認(rèn)是double類型的。在后面加F表示當(dāng)做float
來處理。
9.常量是以什么樣的二進(jìn)制代碼存儲在我們的計算機(jī)
中。編碼:整數(shù)是以補(bǔ)碼的形式轉(zhuǎn)換為二進(jìn)制代碼存儲在
計算機(jī)中的,浮點(diǎn)數(shù)是以ieee754標(biāo)準(zhǔn)轉(zhuǎn)換為二進(jìn)制代碼存
儲在計算機(jī)中的。字符的本質(zhì)實際也是與整數(shù)的存儲方式相
同。第三次課:代碼規(guī)范化
?可以參考林銳《高質(zhì)量C/C++編程》
?代碼的規(guī)范化非常的重要,是學(xué)習(xí)一門編程語言的基礎(chǔ)。
?代碼規(guī)范化的好處1:整齊,別人和自己都容易看懂。
2:代碼規(guī)范了,代碼不容易出錯。
3:一般的程序可以分為三塊:
a:定義變量
b:對變量進(jìn)行操作
c:輸出值什么是字節(jié)
?存儲數(shù)據(jù)的單位,并且是硬件所能訪問的最小單位。內(nèi)存
中存儲的最小單位是字節(jié),但是硬件控制的時候不能精確到
位,只能精確到字節(jié),是通過地址總線來控制的,而精確到
位是通過軟件來控制的,叫做位運(yùn)算符來精確到位的。不同
類型數(shù)據(jù)之間相互賦值的問題不同數(shù)據(jù)類型之間最好不要
相互轉(zhuǎn)換。
inti=45,
longj=102345,
printf(*%ld%d\n*,i,j);
floatx=6.6;
doubley=8.8;
printf(*%f%lf\n,x,y");
inti
如果需要明白這個知識點(diǎn),那么需要明白補(bǔ)碼。什么是ASCII
碼以char定義變量的時候,只能使用單引號括起一個字符
才是正確的。
&include<stdio.h>
intmain(void)
{__
bharch='A',〃4行OK等價charch,小-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=e是指把C賦值給ch,是正確的。
Uinclude<stdio.h>
intmaijjXxpid)
'b'.
printf(*%d\n*,ch)
return0,
上圖中輸出的值是98Ascii碼規(guī)定了ch是以那個值去保存,
ascii碼不是一個值,而是一種規(guī)定,規(guī)定了不同的字符是以
那個整數(shù)值去表示。
字符本質(zhì)上與整數(shù)的存儲方式相同【字符的存儲】基本的輸
入和輸出函數(shù)的用法:第三次課Printf()
14.什么是ASCH
ASCII不是一個值,而是一種規(guī)定,
ASCII規(guī)亮了不同的字符是使用哪,
它規(guī)定了1234
'A,-65
,B'—66
~97
,b'~98
,0'—48
將變量的內(nèi)容輸出到顯示器上。四種用法
輸什么是輸出控制符,什么是非輸出控制符輸出控制符包含
如下:
1.printf("字符串");
2.printf("輸出控制符",箱出參數(shù)),
3.printf("輸出控制符1諭出控制符2...二輸出參數(shù)1,
輸出控制符和輸出參數(shù)的個數(shù)必須----對應(yīng)
4.printf("輸出控制將非輸出控制符",始出參數(shù))|,
%d-int
%ld一longint
%c—char
%f--float
%lf一double
%x(或者%X后者%HX)一一int或longint或shortint
%o—同上
%sJ一字符喇
Printf為什么需要輸出控制符:
01組成的代碼可以表示數(shù)據(jù)也可以表示指令。必須要有
輸出控制符告訴他怎么去解讀。
01組成的代碼表示的是數(shù)據(jù)的話,那么同樣的01代碼
組合以不同的格式輸出就會有不同的輸出結(jié)果,所以必須要
有輸出控制符。
Uinclude<stdio.h>
intmain(void)
(
intx=47,〃100是十進(jìn)制
printfx),〃輸出結(jié)果是:2f
printf(*%X\n*,x),〃輸出/克:是:2F
printfx)./,'瑜出結(jié)果是:0X2F|
printf(*%#x\n*,x).//輸出結(jié)臬是:0x2f
return0;
}
在上圖中,intx=47,如果前面加0(零)表示的是八進(jìn)制,
如果前面加Ox(零x)則表示的是十六進(jìn)制,而在輸出的
時候,則是0(字母O)表示八進(jìn)制,OX(字母O,
X)表示十六進(jìn)制。非輸出控制符:非輸出控制符在輸出的
時候會原樣輸出。Scant()通過鍵盤將數(shù)據(jù)輸入到變量中有
兩種用法:
printf(*i=%d,j=%d\n",j,k);
示例:
用法一:scanf("輸入控制符;輸入?yún)?shù)),
功能:將從鍵盤輸入的字隔化為輸入控制符所規(guī)定格式的數(shù)據(jù)
,然后存入以輸入?yún)?shù)的值為地址的變量中|
Uinclude<stdio.h>
intmain(void)
(
inti;
scanf&i),//&i表示i的地址&是一個取地址符
printf(i=%d\n”,i);
}return0;|
用法二:8canf("非檢入控制符愴入控制符,輸入?yún)?shù));
功能:將從鍵盤檢入的字符轉(zhuǎn)化為檢入控制符所規(guī)定格式的數(shù)據(jù)
,然后存入以輸入?yún)?shù)的值為地址的變量中
非輸入控制符必須原樣輸入
Uinclude<stdio.h>
intmain(void)
{
inti;
scanf&i).
printf(ri=%d\n",i)[
return0.
}
非輸入控制符:在輸入的時候也會原樣輸入。
但是一般我們在使用scanf的時候,我們一般都不使用非輸
入控制符。給多個變量賦值:需要記住,非控制符需要原樣
輸入。如何使用scanf編寫出高質(zhì)量代碼
#include<stdio.h>
intmain(void)
(
inti,j.
scanf(*%d&i,&j).
printf(*i=j:=%d\n*,i,j),
return0.
如何使用scanf編寫出高質(zhì)量代碼
1.使用scanf之前最好先使用printf提示用戶以什么樣的
方式來輸入
2.scanf中盡量不要使用非輸入控制符,尤其是不要用\n|
#include<stdio.h>
intmain(void)
(
inti;
[scanf(%d\n”,&i),〃非常不好的格式,不要加\n
printfCi=%d\n”,i),
return0,
}
3.應(yīng)該編寫代碼對用戶的非法輸入做適當(dāng)?shù)奶幚怼痉侵攸c(diǎn)】
while((ch=getchar())[=>\n)
continue;
#include<stdio.h>
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;
}
運(yùn)算符:算術(shù)運(yùn)算符:加(+),減(一)乘(*)除(/)
取余(%)
關(guān)系運(yùn)算符:
>,>=,<,<=,!=,
邏輯運(yùn)算符:!(非),&&(且),||
(或)
!(非)'&&(并且)||(或)
!真假
!假真
真&&真真
假
真&&假
假
假&&真假
假&&假
假
真
真
真
Ml倒
真
真
削
假
假
倒
C語言對真假的處理
非零是真
零是假I
真是1表示
假是0表示
&&左邊的表達(dá)式為假右邊的表達(dá)式肯定不會執(zhí)行
II左邊的表達(dá)式為真|右邊的表達(dá)式肯定不會執(zhí)行
賦值運(yùn)算符:=,+=,*=,/=例如:a+=3是等價于a=a+3,
a/=3等價于a=a/3其優(yōu)先級別是算術(shù)〉關(guān)系〉邏輯〉賦值。
"除法與取模運(yùn)算符
■除法/的運(yùn)算結(jié)果和運(yùn)算對象的數(shù)據(jù)類型有關(guān),兩個數(shù)都是int
,則商就是int,若商有小數(shù),則截取小數(shù)部分;被除數(shù)和除數(shù)
中只要有一個或兩個都是浮點(diǎn)型數(shù)據(jù),則商也是浮點(diǎn)型,不
截取小數(shù)部分。
如:16/5==316/5.0=3.20000-13/4==-4
-13/-3==43/5==05/3==1
最典型的例題就是求s=1+1/2+1/3X/4+1/5????+1/100的值(具體程序我
們以后再講).
■取余%的運(yùn)算對象必須是整數(shù),結(jié)果是整除后的余數(shù),其余數(shù)
的符號與被除數(shù)相同
如:13%3=r113%-3==1-13%3==-1
-13%23==-133%5==3
?測試取模運(yùn)算符的例子.
1#include<stdio.h>
2.intmaln(void)
工(
I.printf("%d%d%d%d%d%d\n”,巡,13%?3,-13%3,-13%^,-13%23,3%5);
5.return0;
6.}
7.r
區(qū)輸出結(jié)果是:
10.01-1-1-133
ii.Pressanykeytocontinue
總結(jié),取余%的運(yùn)算對象必須是整數(shù),結(jié)果是瞬后的余數(shù),其余數(shù)的符號與被除數(shù)相同
14.7
取余的結(jié)果的正負(fù)只和被除數(shù)有關(guān)。第四節(jié)流程控制:
1什么是流程控制程序代碼執(zhí)行的順序。
2流程控制的分類順序執(zhí)行選擇執(zhí)行
定義:某些代碼可能執(zhí)行,可能不執(zhí)行,
有選擇的執(zhí)行某些代碼。分類:if
If最簡單的用法:
1.4最簡單的用法
2.if的范圍問題
3.if..else...的用法
4.if..elseif..-else.,,的用法
5.C語言對真假的處理
6.if舉例一求分?jǐn)?shù)的等級
7.if的常見問題解析
1.if最簡單的用法
格式:
if(表達(dá)式)
語句
功能:
如果表達(dá)式為真,執(zhí)行語句
如果表達(dá)式為假,語句不執(zhí)行
#include<stdio.h>
intmain(void)
(
if(3)
printf(*AAAA\n*);〃會輸出
if(0)
printf("BBBB'n");〃不會輸出
if(0==0)
printf("CCCC\n*);〃會輸出
return0;
2.if的范圍問題
1.
if(表達(dá)式)
語句A;
語句B;
解釋:if默認(rèn)只能控制語句A的執(zhí)行或不執(zhí)行
if無法控制語句B的執(zhí)行或不執(zhí)行
或者講:語句B一定會執(zhí)行
~if林認(rèn)的只能控制一個語句的執(zhí)行或不執(zhí)行I
if(表達(dá)式)
(
語句A;
語句B,
)
此時if可以控制語句A和語句B
I
由此可見:if默認(rèn)只能控制一個語句的執(zhí)行或不執(zhí)行
如果想控制多個語句的執(zhí)行或不執(zhí)行
就必須把這些語句用{}括起來|
如果想控制多個語句的執(zhí)行或者不執(zhí)行,那么需要使用{}
括起來。
3.if...else...的用法:
#include<stdio.h>
intmain(void)
{
intitj;
scanf(*%d&j);
if(i>j)
printf("i大于j\n");
else
printf("i小于八n〃);
return0;
}
#include<stdio.h>
intmain(void)
{
if(1|>2)
printf(*AAAA\n*);
else
printf,
printf("CCCC'n");
return0;
}
if.??else...if…else的用法:
if(1)
A"
elseif(2)
法
elseif(3)
C:
else
D;
力include<stdio.h>
intmain(void)
(
doubledelta=3,
if(delta>0)I
printf("有兩個解八n");
elseif(delta==0)
printf("有一個唯一解!\n"),
else
printf("無解!\nT);
return0;
)
Uinclude<stdio.h>
intmain(void)
{
doubledelta=-1,
if(delta>0)
jrintf("首兩個解!\n");
Grintf(〃哈哈!\n〃);
elseif(delta==0)
printf("有一個唯一解!\n");
else
printf("無解!\n");
return0;
)
C錯誤的if...else...if...else語句:
在上圖中,當(dāng)執(zhí)行到哈哈那句時,下面的else將會被算作另
外一個語句來執(zhí)行,而在我們的c語言中,沒有以else開頭
的語句。所以會出錯。If實例:If常見的問題:變量的替換:
Uinc1ude<stdio.h>
intmain(void)
(
floatscore,〃score分?jǐn)?shù)
printf(”請輸入您的考試成績:”).
scanffescore).
if(score>100)
printf("這是做夢!\n*);
elseif(score>=90&&score<=100)〃不能寫成90<=score<=100
printf("優(yōu)秀!\n");
elseif(score>=80&&score<90)
printf("良好!\n");
elseif(score>=60&&score<80)
printf("及格Zn").
elseif(score>=0&&score<60)
printf("不及格!繼續(xù)努力八rf).
求三個數(shù)字的大?。?/p>
intt://定義臨時變小
,/6和7彳『代碼無法完成i和j的/L換
//i=j://6行i=5:j=5;
*7j=i://7行i=5:j=5:
I
〃正確的用換i和j的方法|
t=i:
i=j:
j=t:
printf("i=%d,j=%d\n”,i,j):
Teturn0:
inta,b,c;inta;intb;intc;
intt;
printf「請輸入三個整數(shù)(申間以空格分隔):');
scanfC^d*d%d“,&a,&b,6c);
〃編寫代科完成a是最大值b是中間值c是最小值
if(a<b)
<
t-a;
a-b;
b=t;
a<c)
t-a;
a?c;
(b<c)
t=b;
b=c;
c-t;
printFC%d%d%6\n-,a,b,c);
return0;
C語言常見誤區(qū):素數(shù):只能被1和自己整除的數(shù),如1,5,9
等?;匚臄?shù):正著寫和倒著寫一樣的數(shù)。如1221,121,等
編程實現(xiàn)求一個十進(jìn)制數(shù)字的二進(jìn)制形式:求一個數(shù)字的
每位是奇數(shù)的數(shù)字取出來組合形成的新數(shù)字。求一個數(shù)字到
過來的數(shù)字。
1:如果不懂,那么就看答案。看懂答案在敲。沒錯誤了,
在嘗試改。如何看懂一個程序:
1.流程:
2.每個語句的功能:
3.試數(shù):對一些
小算法的程序:
1.嘗試自己編程結(jié)局。
2.解決不了,看答案。
3.關(guān)鍵是把答案看懂。
4.看懂之后嘗試自己修改程序,且知道修改之后程序的不同
輸出結(jié)果的含義。
5.照著答案去敲
6.調(diào)試錯誤
7.不看答案,自己獨(dú)立把程序編出
8.如果程序?qū)嵲谑菑氐谉o法了解,就把他
背會。空語句的問題:在上圖中,最終的結(jié)
果會是AAAA,BBBB,程序也不會報錯,為什么呢,因為在程
7.if的常見問題解析
1.空語句的問題
if(3>2);
等價于I
if(3>2)
;〃這是一個空語句
序執(zhí)行的時候,會在;哪里認(rèn)為是一個空語句。也就是說,
如果if成立,那么執(zhí)行空語句。If常見錯誤解析(重點(diǎn))
intmain(void)上面這個程序是
if(1>2)錯誤的,為什么
printf("AA.^^n"
printf.呢,在該程序中,
return0;總的有4個語句,
而在以else開頭
的那個語句中是有錯誤的,因為在c語言中是沒有以else
開頭的這種語法。在上面這個程序中,最終的值是AAAA,
雖說后面的3>1也滿足條件,但是當(dāng)3>2滿足條件后,該if
#include<stdio.h>
intmain(void)
(
if(3>2)//4行如果這里加分號,則會導(dǎo)致程序編譯到6行時就會出錯
printf("哈哈!,
qlse〃6行
printf("嘿嘿!\n");
return0,
語句就會終止,后面的語句是不會在執(zhí)行的。
if(表達(dá)式1)
A:
else
B;
是正確的
if(表達(dá)式1):lI
A;
else
B;
是錯誤的
#include<stdio.h>
intmain(void)
{
if(3>2)
printf("AAAA'n");
elseif(3>1)
printf("BBBB'n");
elseI
printf("CCCC\n");
return0.
if(表達(dá)式D
A;
elseif(表達(dá)式2)
B;
elseif(表達(dá)式3)
C;
這樣寫語法不會出錯,但邏輯上有漏洞
if(表達(dá)式1)
A;
elseif(表達(dá)式2)
B;
elseif(表達(dá)式3)
C;
else1(表達(dá)式4)〃7行
D;
這樣寫是不對的,正確的寫法是:
要么去掉7行的(表達(dá)式4)
要么在else后面加if|
if(表達(dá)式1)
A?
elseif(表達(dá)式2)
B:
elseif(表達(dá)式3)
C:T
else(表達(dá)式4);1
D:
這樣寫語法不會出錯,但邏輯上是錯誤的
else(表達(dá)式4);
D;
等價于
else
(表達(dá)式4);
D;I
既然行要寫表達(dá)式,就要寫
7ifo
循環(huán)的定義,分類。定義:某些代碼會被重復(fù)執(zhí)行。分類:
for在上圖中,先執(zhí)行1,在執(zhí)行2,2如果成立,標(biāo)志著循
環(huán)成立,那么在執(zhí)行4,最后在執(zhí)行3,3執(zhí)行完后代表一
次循環(huán)完成,然后在執(zhí)行2.以此類推。1永遠(yuǎn)只執(zhí)行一次。
#include<stdio.h>
intmain(void)
(
inti;
intsumI=0-H3r
for(i=l,i<=4|,++i)
sum=s覿+i,4
printf(*sum=%d\n”,sum),
return0.
++i=i+l求1-10的所有奇數(shù)的
和:
求1-12之間的所有能被3整除的數(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;
)
intsum=0,
for(i=3;i<=12;++i)
if(i%3==0)〃媽果i能被3整除
sum-sum+i;
}
printfCsum=%d\n”,sun{),
return0,
}
hinclude<stdio.h>
intmain(void)
inti;
for(i=l;i<4,++i)
(
printf("AAAA'n").
printfCBBBB\n*),
)
return0;
)
For所控制的語句:
在上圖中,for默認(rèn)只能控制一個語句,但是如果要控制多個
語句時候,那么需要使用{}把語句括起來。求
1+1/2+1/3....1/100的和
#include<stdio.h>
intmain(void)
{
inti,
floatsum=0,
for(i=l;i<=100;++i)
(
sum=sum+1/(float)(i)r,
}
printf(*sum=%f\n*,sum),〃float必須用%f輸出
return0;
在上圖中,重點(diǎn)是強(qiáng)制數(shù)據(jù)類型轉(zhuǎn)換也就是(float)。)那句:
強(qiáng)制類型轉(zhuǎn)化
格式:
(數(shù)據(jù)類型)(表達(dá)式)
功能:
把表達(dá)式的值強(qiáng)制轉(zhuǎn)化為前面所執(zhí)行的數(shù)據(jù)類型
例子■
(int)(4.5+2.2)最終值是6
(float)(5)最終值是5.000000
//sum=sum+1(float)(1/i),
〃更簡單的寫法是:sum=sum+1.0/6:
如果把print那句換為下面這句會怎么樣呢:
也是錯的,為什么呢,因為i是整形,1也是整形,所以不
管你怎么轉(zhuǎn)換也是整形啊,如果想要這樣寫的話,那么我們
需要把1改成1.0也可以的。也就是:
試數(shù)詳細(xì)步驟舉例:浮點(diǎn)數(shù)存取:
l->i=l1<=100成立
sum=0+1/1.00=1++ii=2
2->i=22<=100成立
sum=l+l/2.0++ii=3
3->i=33<=100
sum=l+l/2.0+1/3.0++ii=4T1
浮點(diǎn)數(shù)的存錯所帶來的問題
£1。@1和<1。111)10都不能保證可以蔣確的存儲一個小數(shù)
舉例,I
有」個浮點(diǎn)型變量X,如軻判斷X的值是否是本
if(|x-0.0000011<0.000001)
是零
else
不是零
為什么循環(huán)中更新的變量不能定義成浮點(diǎn)型
#include<stdio.h>
intmain(void)
{
inti;
intsum=0;
for(i=l;i<101;++i)
{I
if(i%2==1)
sum+=i;//sum=sum+i;
)
printfCsum=%d\n”,sum);
return0;
}
求1-100之間所有奇數(shù)的和:
求1-100之間的奇數(shù)的個數(shù):
#include<stdio.h>
intmain(void)
{
inti;
intent=0;//個數(shù)一般用ent表示
for(i=l,i<101(++i)
(
if(i%2==1)
++cnt;
)
printfCent=%d\n",ent);
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默認(rèn)是double類型
printf(*sum=%d\n”,sum),
printfCent=%d\n*,ent);
printf(*avg=%f\n*,avg),
求1-100之間奇數(shù)的平均值:
求1-100之間的奇數(shù)之和,在求1-100之間的偶數(shù)之和:
#include<stdio.h>
intmain(void)
(
inti;
intsuml=0;〃奇數(shù)和
intsum2=0;//—數(shù)和
for(i=l;i<101;++i)
(I
if(i%2==1)
(
suml+=i;
}
else
(
sum2+二i;|
)
}
printf("電數(shù)和=%d\n",suml),
printfCK數(shù)和=%d\n”,sum2);
多個for循環(huán)的嵌套使用
for(1;2;3)//I
for(4.5;6)//2
A.//3
B;//4
整體是兩個語句,123是第一個語句
4是第二個語句
多個fou循環(huán)的嵌套使用:
整體是兩個語句。上圖中,先執(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í)行。
進(jìn)制之間的轉(zhuǎn)換:如234為5進(jìn)制,那么轉(zhuǎn)換成10進(jìn)制是
多少:2x5x5+3x5+4的值就是轉(zhuǎn)換成的10進(jìn)制。234e是16
進(jìn)制,轉(zhuǎn)換成2進(jìn)制是多少:2x16x16x16+3x16x16+4x16+12
for(1;2;3)
for(4;5;6)
{
A,
B,
}
整體是L個語句
3.
for(7;8:9)
for(1;2:3)
for(4;5;6)
C;
)
整體是一個語句|
的值就是轉(zhuǎn)換成10進(jìn)制的值。注意上面的規(guī)律。那么把十
進(jìn)制轉(zhuǎn)換成r進(jìn)制呢,其實很簡單,就是把10進(jìn)制數(shù)除以
r,知道商是0的時候。然后取余數(shù),余數(shù)倒序排列:
瑣碎的運(yùn)算符:自增:
(398l)io=(?必
163981余數(shù)
162-4H13.Ii>
16(215......8
0.....15(F)
(3981)io=(F8D)16
自增[或者自減]
分類?
前自增一++i
后自培一il
前自培和后自增的異同:
相同:
最終都使i的值加1
不同
前自增整體表達(dá)聲的值是i加1之后的值
后自增整體表達(dá)法的值是i加1之前的值
#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é):
前自增整體表達(dá)式的值是i加1之后的值
后自承延偉泰達(dá)式的值是i加1之前的值
學(xué)習(xí)自增要明白的幾個問題
1.我們編程時應(yīng)該盡置屏蔽掉前自增和后自增的差別
2.自增表達(dá)式最好不要作為一個更大的表達(dá)式的一部分來使
或者說
i++和++i單獨(dú)成一個語句,不要把它作為一個完整復(fù)
合語句的一部分來使用
自減:和自增一樣。三目運(yùn)算符:
A?B:t
等價于
if(A)
B;
olso
C:|
#include<stdio.h>
intmain(void)
{
inti;
i=@2?5:1);
printf(*%d\n*,i),
return0.
)
最終的輸出結(jié)果是
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025三人合伙開店合同
- 2025農(nóng)田承包合同范本
- 2025關(guān)于電子元件加工合同的范本
- 20252項目任務(wù)合同書(模板)x
- 課題申報參考:勞動就業(yè)、人力資本積累與消費(fèi)研究
- 穿越星際科技前沿的宇宙探索
- 2024年便攜溫度校驗儀項目資金需求報告代可行性研究報告
- 職業(yè)技能提升的多元化教學(xué)方法
- 江蘇省南通市如皋市2024-2025學(xué)年八年級上學(xué)期1月期末道德與法治試題(含答案)
- 安徽省阜陽市太和縣2023-2024學(xué)年八年級下學(xué)期4月期中物理試題【含答案、解析】
- 化學(xué)-河南省TOP二十名校2025屆高三調(diào)研考試(三)試題和答案
- 智慧農(nóng)貿(mào)批發(fā)市場平臺規(guī)劃建設(shè)方案
- 林下野雞養(yǎng)殖建設(shè)項目可行性研究報告
- 2023年水利部黃河水利委員會招聘考試真題
- Python編程基礎(chǔ)(項目式微課版)教案22
- 01J925-1壓型鋼板、夾芯板屋面及墻體建筑構(gòu)造
- 欠電費(fèi)合同范本
- 2024年新高考地區(qū)數(shù)學(xué)選擇題填空壓軸題匯編十八含解析
- 網(wǎng)易云音樂用戶情感畫像研究
- 小學(xué)四年級奧數(shù)題平均數(shù)問題習(xí)題及答案
- 工作違紀(jì)違規(guī)檢討書范文
評論
0/150
提交評論