郝斌c語言視頻教程筆記_第1頁
郝斌c語言視頻教程筆記_第2頁
郝斌c語言視頻教程筆記_第3頁
郝斌c語言視頻教程筆記_第4頁
郝斌c語言視頻教程筆記_第5頁
已閱讀5頁,還剩100頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論