中文字幕日韩精品一区二区免费_精品一区二区三区国产精品无卡在_国精品无码专区一区二区三区_国产αv三级中文在线

C語言初階——手把手教零基礎(chǔ)/新手入門(萬字心得筆記)-創(chuàng)新互聯(lián)

目錄

為隆陽等地區(qū)用戶提供了全套網(wǎng)頁設(shè)計(jì)制作服務(wù),及隆陽網(wǎng)站建設(shè)行業(yè)解決方案。主營業(yè)務(wù)為網(wǎng)站制作、做網(wǎng)站、隆陽網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會得到認(rèn)可,從而選擇與我們長期合作。這樣,我們也可以走得更遠(yuǎn)!

前言

一、C語言是什么?

二、開發(fā)環(huán)境

1.編譯器

三、初始C語言

1.第一個(gè)C語言程序

2.數(shù)據(jù)類型

2.1 數(shù)據(jù)類型的長度

3. 變量 && 常量

3.1 如何定義變量

3.2?變量的分類?

3.3?變量的作用域和生命周期

3.4常量

1.字面常量

2.const修飾的常變量

3.#define定義的標(biāo)識符常量

4.枚舉常量

4.字符串 && 轉(zhuǎn)義字符

4.1 字符串

4.2 轉(zhuǎn)義字符

5. 判斷&&選擇語句?

5. 循環(huán)

1. for循環(huán)

2. while循環(huán)

3.do...while語句

6. 函數(shù)

7. 數(shù)組

1. 一維數(shù)組?

8. 操作符

9. 常見關(guān)鍵字

1. break

2. continue?

3.?static

10. 指針

11. 結(jié)構(gòu)體

四、?總結(jié)



前言

作者將把C語言的知識要點(diǎn),學(xué)習(xí)心得以文章形式發(fā)表,由于作者目前還是一個(gè)菜鳥,難以避免錯誤和存在觀點(diǎn)片面的時(shí)候,非常感謝讀者指正!希望能在這里與大家共同進(jìn)步,早日成為大牛!

本系列(初始C語言)只是簡單介紹每個(gè)知識點(diǎn)、C語言的基礎(chǔ)知識,意在使讀者(還有自己)大概了解C語言。


寫在前面

? “日志”以及“寫在最后”是我在同一天寫的,如果想聽“沒用”的廢話,那就翻到最后吧:)

? 這是我第一篇也是我熱度最高的博客,雖然遠(yuǎn)不及大佬的博客,我會一直努力。它傾注了我作為初學(xué)者,雖只有淺薄知識但卻擁有這個(gè)這個(gè)年紀(jì)最熱血的情感。它粗糙不堪,許多同學(xué)耐著性子讀它,也細(xì)心地發(fā)現(xiàn)了不少問題,非常感謝!同時(shí)我希望大家學(xué)習(xí)的時(shí)候也能一起修修補(bǔ)補(bǔ)它,雖然它只是塊破布,但我一定會因?yàn)樗谴罄袀兊膲|腳石而感到開心。

我希望我的語言不要像專業(yè)書那樣讓人眼花繚亂,所以除了必要的專業(yè)詞匯,我盡量以“人話”解釋一些語法。

日志

22/9/1:

  • 在函數(shù)版塊新增了C語言輸入和輸出的兩個(gè)函數(shù),以及它常用的格式(oj題和考試可能會遇到的)。
  • 修正了三(2)中存儲單位換算,原來少了KB和MB。

? 22/9/4:

  • 修正了打印函數(shù)中左右對齊的描述。

? 22/10/3:

  • ? 增加了對const的理解敘述。
一、C語言是什么?

C語言是是一門經(jīng)久不衰的計(jì)算機(jī)編程語言,萬物始于C,學(xué)好C語言,能讓我們?yōu)榫幊讨反蛳聢?jiān)實(shí)基礎(chǔ)。(我也不知道寫什么,反正非常重要就對了)


二、開發(fā)環(huán)境
1.編譯器

我們把計(jì)算機(jī)編程語言稱之為高級語言,那什么是低級語言呢?

? 在中學(xué)物理我們知道:電子元件只能傳達(dá)"開"或"閉"兩種信息,所以電子元件(即晶體管)之間也只能用這兩種方式通信。人們把"開"用1代替,把"閉"用0代替。電子計(jì)算機(jī)在初期時(shí),只能識別0和1兩種信號,所以那個(gè)時(shí)候只有科學(xué)家才能進(jìn)行編程工作,這在那時(shí)候是十分困難的。

上面提到的0/1信號,正好為二進(jìn)制提供了用武之地,所以我們把最基本的、計(jì)算機(jī)能夠直接讀取的語言稱之為低級語言。

? 在這里,低級語言就是一串由0和1組成的東西,它轉(zhuǎn)換成匯編語言,進(jìn)而轉(zhuǎn)換成高級語言,才被我們大多數(shù)人學(xué)習(xí)。

? 編譯器的作用就是把上面的過程反過來,將我們?nèi)四芸吹枚?、接近自然語言的、而且能寫出來的高級語言轉(zhuǎn)換成機(jī)器能夠讀懂的低級語言。

? 筆者最初使用的編譯器是Dev C++,然后是Visual? Studio 2019。我比較喜歡VS2019,因?yàn)樗谖覍懘a的同時(shí)能用中文提醒我的錯誤,但有時(shí)候才vs不能通過的代碼反而在Dev C++里能通過,所以目前我以vs為主。

如果有同學(xué)剛接觸C,我建議先使用Dev C++吧,熟悉一下編程環(huán)境,如果已經(jīng)有一定基礎(chǔ)了,直接上vs2019吧。

三、初始C語言 1.第一個(gè)C語言程序

下面以Dev C++為例

(1)先新建源文件:文件->新建->源代碼

(2)寫預(yù)處理命令,寫主函數(shù),建立基本框架

尖括號(<>)中的stdio.h叫標(biāo)準(zhǔn)輸入輸出函數(shù),即standard input output.header

#include是一種預(yù)處理命令,它的作用是找到尖括號(或者英文雙引號)中的文件,并將它包含到當(dāng)前文件,被包含的文件中的文本將替換源代碼文件(就是我們正在編寫的東西)中的#include指令。

?看到上面那段話是不是很懵呢,說白了:<>里面的東西有我們等下寫代碼要用的東西,它所包含的代碼會幫我們實(shí)現(xiàn)某些功能,它只是個(gè)名字,實(shí)際上它包含了不少代碼。因?yàn)槟悄硞€(gè)功能我們接下來要用很多次,如果每次都把<>里面的東西打出來,就太麻煩了!而#include就用一行代碼代替了這么多代碼,是不是方便了許多?

舉個(gè)栗子?

如果接下來我們要用到從鍵盤輸入或從屏幕輸出,那我們就需要#include來簡化我們實(shí)現(xiàn)輸入和輸出功能的步驟。

這里說得有點(diǎn)啰嗦,我剛接觸這個(gè)的時(shí)候很懵:為什么每個(gè)函數(shù)都要加上#include呢?為什么啰嗦這么多呢:如果有初學(xué)者看到我的文章,那我希望他能懂:D

忘了說了,第二種主函數(shù)這種寫法已經(jīng)是遠(yuǎn)古版本了,最好寫第一種。

一個(gè)程序/工程只能有一個(gè)主函數(shù)(? main()),它是程序/工程的入口。注意main不要寫成mian??!

2.數(shù)據(jù)類型
char//字符數(shù)據(jù)類型//就是不是數(shù)字的字符
short//短整型//就是數(shù)字?。ń^對值)的整數(shù),很少用
int //整型//就是整數(shù)
long//長整型//就是數(shù)字(絕對值)大的整數(shù)
long long//更長的整型//很少用
float//單精度浮點(diǎn)數(shù)//就是小數(shù)
double//雙精度浮點(diǎn)數(shù)//小數(shù)位數(shù)多的小數(shù)

§ 為什么會出現(xiàn)這么多類型?

——因?yàn)槲覀儸F(xiàn)實(shí)生活中要用到整數(shù),小數(shù)呀

§ 那為什么整數(shù)有int 和 short 還用long、long long,小數(shù)有float、double這么多種類呢?為啥不只用一種數(shù)據(jù)類型來表示呢?

——這個(gè)問題問得好(精神分裂ing)。單看英文字母和中文字符的復(fù)雜程度應(yīng)該不難猜想:不同字符在計(jì)算機(jī)中所占大小是不同的,讓我簡要介紹計(jì)算機(jī)中的儲存單位:最小的單位是bit,8bit = 1Byte,1024Byte = 1KB,接著是MB,GB,TB等。bit(比特)是最小單位。這里說個(gè)題外話,不少人在辦理寬帶有這樣的困惑:為什么我明明買的是200M寬帶呀,為什么最高才十幾二十兆每秒呢?原因是:運(yùn)營商所宣傳的200M寬帶實(shí)際上是寬帶接入的速率為200Mbps,這里的B指的是Byte(字節(jié)),換算下來200M寬帶理論上峰速為25.6MB/s。這不重要,知道就好,讓我們跳回來。事實(shí)上,不同數(shù)據(jù)類型在內(nèi)存中所占大小是不一樣的,如果用大小的盒子裝蛋糕,蛋糕有大有小,難免造成空間的浪費(fèi),所以人們規(guī)定了不同的數(shù)據(jù)類型,以便空間被物盡其用。

在這里有一個(gè)很重要的思想,我稱之為黑屋思想:把內(nèi)存想象成一個(gè)個(gè)小黑屋,里面存放著我們想要存進(jìn)的東西,也存著我們不能動的東西,當(dāng)然也存著我們想取的東西。

2.1 數(shù)據(jù)類型的長度

這里用sizeof()判斷數(shù)據(jù)類型或者表達(dá)式長度的運(yùn)算符,sizeof()不是函數(shù),后面會介紹(好像也沒什么介紹的= =)。

C語言規(guī)定sizeof(long long) >= sizeof(long),其他以此類推,上面的結(jié)果因編譯器和操作平臺而異。

3. 變量 && 常量

生活中的有些值是不變的(比如:圓周率,性別,身份證號碼,血型等等)
有些值是可變的(比如:年齡,體重,薪資)。

3.1 如何定義變量

如 3.2.1圖

格式如下:變量類型? (空格)變量名(自己起);

最好初始化變量,避免臟數(shù)據(jù)影響后續(xù)調(diào)試,如 int a = 0;如果變量名有實(shí)際含義,最好用對應(yīng)的英文(再不行就拼音,或英文簡寫)表示,后續(xù)也會明白。??

3.2?變量的分類?

1.局部變量 && 全局變量

顧名思義,全局變量就是整個(gè)工程都能用的,而局部變量只能在{}內(nèi)部使用,這里的{}不僅限于主函數(shù)的大括號,在后面的循環(huán)或判斷語句中的{}也同樣適用。

//如果全局變量和局部變量名字一樣呢?是誰起作用呢?

顯然,在這里局部變量會覆蓋掉同名的全局變量。?

這里簡要介紹printf(),scanf()函數(shù),顧名思義,前者是打印,后者是掃描,讀?。╢是函數(shù)的意思),從鍵盤讀取輸入,它們是被包含在stdio.h頭文件中的。gets() && puts()也用同樣的功能,具體差異會在后續(xù)文章解釋。

3.3?變量的作用域和生命周期

1.變量的作用域

作用域(scope,這個(gè)詞要記住,后面編譯器報(bào)錯可能會出現(xiàn))是程序設(shè)計(jì)概念,通常來說,一段程序代碼中所用到的名字并不總是有效/可用的,而限定這個(gè)名字的可用性的代碼范圍就是這個(gè)名字的作用域。

1. 局部變量的作用域是變量所在的局部范圍。(就是大括號里邊的變量只能在大括號里用)
2. 全局變量的作用域是整個(gè)工程。(就是大括號外邊的變量在哪都能用)? ? ? ? ? ? ? ? ? ??

2.生命周期

變量的生命周期指的是變量的創(chuàng)建到變量的銷毀之間的一個(gè)時(shí)間段
1. 局部變量的生命周期是:進(jìn)入作用域生命周期開始,出作用域生命周期結(jié)束。(大括號大括號!)
2. 全局變量的生命周期是:整個(gè)程序的生命周期。 (在哪都行!)? ?

§ 看完了嗎?用人話來說作用域就是變量在哪能用,生命周期就是它啥時(shí)候產(chǎn)生,啥時(shí)候消失。

3.4常量 1.字面常量

是指可以用字符串表示的常量,包括整型常量,字符型常量,字符串常量,也可以是結(jié)構(gòu)型的符號常量。

2.const修飾的常變量

首先來看沒有被修飾的變量:

顯然,未被修飾的變量的值是可以被改變的

再來看被const修飾的變量

編譯器告訴我們,a的值是不能改變的,也就是說,它是個(gè)常量,但不完全是,人們把它稱為常變量。原因是:用const修飾的變量只是在語法上將它作為常量,但它本質(zhì)還是變量,了解即可。?


(新增于22/10/3)

? 關(guān)于“常變量”的理解:用 const 修飾的變量,無論是全局變量還是局部變量,生存周期都是程序從運(yùn)行開始到運(yùn)行結(jié)束,也就是說,使用 const 修飾過的局部變量有了「靜態(tài)特性」。什么變量具有靜態(tài)屬性?我們知道全局變量是靜態(tài)的,靜態(tài)的生存周期就是程序運(yùn)行的整個(gè)過程。但是一定要區(qū)分的是:用const修飾過的局部變量只是有了「靜態(tài)特性」,并沒有說它變成了「靜態(tài)變量」。

? 之所以把const放在最后,是因?yàn)槔斫馑摹胳o態(tài)特性」需要理解全局變量和局部變量。

3.#define定義的標(biāo)識符常量

看圖里的代碼可以知道:格式:#define 常量名 值,在這里常量名和值之間不需要等號。

4.枚舉常量
#define MON  1
#define TUE  2
#define WED  3
#define THU  4
#define FRI  5
#define SAT  6
#define SUN  7

假設(shè)我們要用到星期一到星期五7個(gè)變量,如果用#define的方法定義變量,我們需要用7行代碼,而使用enum(枚舉)常量能用更少的代碼表示相同的意思。

enum DAY
{
      MON = 0, TUE, WED, THU, FRI, SAT, SUN
};

第一個(gè)枚舉成員的默認(rèn)值為整型的 0,(在這里我用 = 0來表示,實(shí)際上它被省略了)后續(xù)枚舉成員的值在前一個(gè)成員上加 1,以此類推。

當(dāng)然我們可以在定義時(shí)修改任意枚舉成員的值:

enum DAY
{
      MON = 1, TUE, WED = 100, THU, FRI, SAT, SUN
};

對于沒有指定值的枚舉元素,其值為前一元素加 1。在這里TUE = 2, THU = 101,以此類推。

枚舉常量先介紹到這里,實(shí)際上初學(xué)者的后續(xù)項(xiàng)目中用得較少,至少我現(xiàn)在還沒遇到過(大一期末)。

打印結(jié)果如下:

4.字符串 && 轉(zhuǎn)義字符 4.1 字符串
"hello world!"

形如這樣被雙引號擴(kuò)起來的一串字符稱為字符串。

在vs2019編譯器中鍵入以上代碼,按下f10鍵,依次點(diǎn)擊調(diào)試->窗口->監(jiān)視。結(jié)果如圖。

我在定義數(shù)組時(shí)并未初始化數(shù)組大小,因?yàn)榫幾g器會根據(jù)輸入的內(nèi)容判定數(shù)組大小。由監(jiān)視窗口中的值和類型欄中可以看出,雖然顯示的是相同的內(nèi)容,但是由雙引號引起的字符串多了一個(gè)'\0',它在數(shù)組中是有實(shí)際大小的。由于人們要對字符串進(jìn)行一系列的處理,但是我們不是每次都能知道一個(gè)文本中的字符個(gè)數(shù),若要對處理它,很難保證不越界且不浪費(fèi)內(nèi)存,于是人們想到將'\0'當(dāng)作字符串結(jié)束的標(biāo)志(它是一個(gè)轉(zhuǎn)義字符,后面會介紹),這樣人們在處理字符串的時(shí)候就不必?fù)?dān)心數(shù)組越界和未知長度的問題了。

接下來我們定義三個(gè)數(shù)組,arr1是一個(gè)字符串,arr2和arr3都是字符數(shù)組,它們的區(qū)別在于arr2沒'\0',而arr3有,這樣的區(qū)別會帶來怎樣的影響呢?讓我們打印一下。?

結(jié)果非常的amazing啊,中間怎么有個(gè)奇怪的東西?

我們先看一樣的arr1和arr3,在監(jiān)視窗口中,它們包含的成員完全相同,當(dāng)然,我們可以認(rèn)為字符數(shù)組加上'\0'就是一個(gè)字符串,那為什么沒'\0'的字符數(shù)組arr2顯示出來但沒完全顯示出來呢?上面我們提到,'\0'是字符串的結(jié)束標(biāo)志(這里恰好證實(shí)了字符數(shù)組加上'\0'就是一個(gè)字符串這一猜想),打印函數(shù)只有碰到'\0'才會停下來,arr2數(shù)組里并不包含,所以機(jī)器就一直找呀找,找到別的小黑屋里去了,最終出現(xiàn)燙燙燙這樣的亂碼字符,以后你還會碰到錕斤拷(笑)。

用一張圖簡要表示數(shù)組在內(nèi)存中是如何被處理的。?

4.2 轉(zhuǎn)義字符

當(dāng)我想打印路徑c:\code\test.c,結(jié)果為什么不是想象中的樣子呢?

這里就不得不提一下轉(zhuǎn)義字符了。轉(zhuǎn)義字符顧名思義就是轉(zhuǎn)變意思。
下面看一些轉(zhuǎn)義字符。

\' 表示單引號'

\" 表示雙引號"

\\表示一個(gè)反斜杠

\n表示換行

\r表示回車

\t表示水平制表符,相當(dāng)于按下tab鍵,還有一些轉(zhuǎn)義字符沒有提及,因?yàn)閯傞_始用的很少

補(bǔ)充一下ASCII碼表

簡單來說,因?yàn)闄C(jī)器內(nèi)存中只能存儲二進(jìn)制0和1,所以當(dāng)我們想要使用各式各樣的符號時(shí),只要使用對應(yīng)的ASCII碼,編譯器會將它們轉(zhuǎn)換成二進(jìn)制編碼,進(jìn)而被機(jī)器識別?,F(xiàn)在請將0,a,A對應(yīng)的ascii碼值記住。?

5. 判斷&&選擇語句?

1. if語句

從字面上看容易理解:如果怎樣就執(zhí)行,不怎樣就不執(zhí)行。格式如下:

if(判斷條件)
{
執(zhí)行內(nèi)容
}

如果沒有{},if語句只執(zhí)行緊跟它的第一個(gè)語句,因?yàn)?;"表示執(zhí)行語句的終止。所以if語句和后面的各種語句,即使要執(zhí)行的語句只有一句,也要加上花括號,以便以后更好地維護(hù)程序,也增加了程序的可讀性。

人們規(guī)定判斷結(jié)果為真的表達(dá)式的值為1,否則為0;

2. if...else語句

一個(gè)?if 語句?后可跟一個(gè)?else 語句,else 語句在它之后的語句結(jié)果為假時(shí)執(zhí)行。

#includeint main()
{
	int n = 0;
	if (n == 0)
	{
		printf("hello\n");
	}
	else
	{
		printf("world\n");
	}
	return 0;
}

顯然,打印結(jié)果為hello。

3.if...else if...else 語句

一個(gè)?if?語句后可跟一個(gè)?else if...else?語句。

我把格式改成這樣:? ?if...(else if) * n...(else) * m?

n >= 0 ,m = 0或1;

三個(gè)部分都最好加上花括號。

也就是說,else if可以沒有,else也可以沒有,但是else if有大于0個(gè)時(shí),必須有else。且else必須在最后。這里的各個(gè)else if互不干擾,只要條件符合,就執(zhí)行語句后括號的內(nèi)容,判斷的變量必須與if括號中的一致。

int main()
{
	int a = 1, b = 0;
	if (a == 1)
	{
		printf("a\n");
	}
	else if (b == 0)  //這里改變了變量
	{
		printf("b\n");
	}
	else
	{
		printf("no\n");
	}
	return 0;
}

當(dāng)然,if語句還可以嵌套,由于這是初始C,時(shí)間和篇幅有限,后面再介紹。

4.?switch?語句

先來個(gè)小總結(jié)

(1) switch括號內(nèi)的常量表達(dá)式,必須是一個(gè)整型或枚舉類型(上面有提到)。

(2) case 語句可以有任意個(gè),case 后跟一個(gè)對應(yīng)switch括號內(nèi)相同數(shù)據(jù)類型的值和一個(gè)冒號(前面需要一個(gè)空格)。

(3) 當(dāng)case內(nèi)的浴具語句執(zhí)行完畢后,如果未遇到break,將會繼續(xù)執(zhí)行下一個(gè)語句,直到遇見break或直到switc語句終止。當(dāng)然,break不是必要的。

(4) default語句 用于switch接收的常量或枚舉類型都不等于上面case語句冒號后的常量或枚舉常量,同樣,default也不是必要的。

(5) case語句和default語句后最好加上花括號。

看著真麻煩,話不多說,上代碼:(還是用截圖吧,看得清楚些)

這里打印結(jié)果為0,1,2?,是因?yàn)榈谝粋€(gè)case語句就像一個(gè)入口,如果沒遇到break,程序?qū)恢眻?zhí)行。這里的入口位置是任意的。

當(dāng)我修改n的值以后,對于此時(shí)的n,入口發(fā)生改變了。

當(dāng)我再次修改變量n的值且加入default語句結(jié)果如上。因?yàn)樯厦娴腸ase語句中沒有對應(yīng)的入口,只能通過default進(jìn)入switch語句。

當(dāng)然,switch語句也可以嵌套。

5. 循環(huán)

前面我們依次簡要介紹了順序結(jié)構(gòu)、選擇結(jié)構(gòu),接下來我們要介紹循環(huán)結(jié)構(gòu)。

此處算是C的難度上升期,對于筆者而言,它大概是這樣的:

可能對大多數(shù)初學(xué)者并沒有這么夸張,但筆者當(dāng)初初學(xué)循環(huán)時(shí),似乎因?yàn)樽吡艘粫?,之后的就懵懵懂懂,一知半解,在?shí)驗(yàn)課束手無策,甚至一度懷疑自己的智商是否是編程這塊料,如此惡性循環(huán)。好在經(jīng)過我的惡補(bǔ)還有許多練習(xí),使我稍微掌握了循環(huán)結(jié)構(gòu)的使用。我從這里悟到一個(gè)編程學(xué)習(xí)者必須具備的素質(zhì),不要光聽不做,不要眼高手低,動手實(shí)踐才是真正學(xué)習(xí)編程??!

在這里再插一句:當(dāng)你遇到bug時(shí),盡量先自己找bug,因?yàn)橹挥薪?jīng)歷過痛苦才會刻骨銘心。

1. for循環(huán)

我相信讀者比我更聰明,且看介紹。

規(guī)范、易讀的寫法如上,也可以在for后的括號定義計(jì)數(shù)器變量。但有些編譯器會報(bào)錯。

也可以這樣寫:

計(jì)數(shù)器初始化在for循環(huán)外也可,計(jì)數(shù)器變化在花括號內(nèi)也可,由上可知:for括號內(nèi)的兩個(gè)頓號是必須要寫的的,且不論執(zhí)行語句有多少,最好加上花括號。

在這里有個(gè)初學(xué)者經(jīng)常犯的錯誤:計(jì)數(shù)器的位置。

首先說一下機(jī)器執(zhí)行for循環(huán)的順序(常規(guī)結(jié)構(gòu)):?

也就是說,for后面括號內(nèi)語句的執(zhí)行并不是完全按順序的。當(dāng)我把計(jì)數(shù)器i++放在花括號內(nèi),且把它放在不是最后的位置,那它就不是最后執(zhí)行的語句了,所以要讓它作為計(jì)數(shù)器,就要把它放在最后。但是筆者認(rèn)為這樣的可讀性不算好,也不是很美觀,非必要情況下還是把計(jì)數(shù)器放在括號里吧。

計(jì)數(shù)器的地位舉足輕重,如果沒有它,條件判斷的結(jié)果永為真,這將是一個(gè)死循環(huán)。并不是所有的死循環(huán)都是錯誤的,因?yàn)槲覀兛傆行┦虑樾枰獧C(jī)器一直執(zhí)行,后面我們會用更簡潔的形式實(shí)現(xiàn)死循環(huán)。只有當(dāng)條件判斷的結(jié)果為假時(shí),循環(huán)才會停止。

for循環(huán)括號內(nèi)的判斷語句至少寫一句,很多時(shí)候,我們要在for循環(huán)語句內(nèi)添加判斷語句,其實(shí)也可以將?判斷語句寫在上面的括號內(nèi),不過這樣寫還是可讀性不是很好,也不算美觀(至少對初學(xué)者是這樣的),知道即可。

? 在這里強(qiáng)調(diào)一下計(jì)數(shù)器初始化的重要性:

? 我用兩個(gè)相同的循環(huán)結(jié)構(gòu),是否能打印兩組"1 2 3 4 5"呢??

從圖上我們知道,只打印了一組,我們把第二個(gè)條件判斷改一下:

兩個(gè)循環(huán)結(jié)構(gòu)我都沒有初始化計(jì)數(shù)器,當(dāng)然,對于第一個(gè)循環(huán)實(shí)際上它已經(jīng)在定義變量i時(shí)被初始化了。當(dāng)程序走完第一個(gè)循環(huán)結(jié)構(gòu)時(shí),i的值為6(以為是5的同學(xué)再思考一下),所以第二個(gè)循環(huán)打印不出來值,因?yàn)?>5,所以第二個(gè)循環(huán)根本進(jìn)不去,于是程序終止。??????

? 解決它有兩個(gè)辦法:

(1)定義不同變量用于不同計(jì)數(shù)器,這樣各個(gè)計(jì)數(shù)器之間就不會互相干擾了。?

(2)每次使用計(jì)數(shù)器之前都初始化它,即使用規(guī)范格式。

?這個(gè)小問題,每隔一段時(shí)間就會讓我惱火一陣子,有時(shí)是真的找不出來錯誤,因?yàn)槲也皇敲看螌懙母袷蕉际且粯拥?,所以說規(guī)范地寫代碼很重要??!??

2. while循環(huán)

結(jié)構(gòu)如下:

計(jì)數(shù)器的位置同樣會影響打印結(jié)果。?

可以發(fā)現(xiàn),while循環(huán)只不過是把條件判斷留在了括號中,變量初始化和計(jì)數(shù)器放在了其他地方。

用法和注意點(diǎn)與for循環(huán)大致相同,區(qū)別在今后的博客中細(xì)說。

3.do...while語句

目前不太需要,一般用在菜單選項(xiàng)的時(shí)候,到時(shí)候就知道了。

學(xué)??荚嚨囊c(diǎn):

int i = 0;
do
{
   i++;
}while(...)

如果while括號中結(jié)果為假,do中的操作都是一定先執(zhí)行的,也就是說do...while循環(huán)至少執(zhí)行一次。?

6. 函數(shù)

個(gè)人理解?

這里的函數(shù)不是數(shù)學(xué)中的函數(shù),不太喜歡數(shù)學(xué)的同學(xué)先別關(guān)掉:D。在我看來,函數(shù)就像生活中的各種店鋪,五金店,電器維修店,服裝店......它們在我們生活中有著各自的作用。函數(shù)的作用就像一個(gè)個(gè)店鋪,把各種具有不同功能的代碼打包,就像店鋪之間都隔著墻一樣。這樣的好處是簡化代碼。試想各種店鋪混在一起的場景,且結(jié)合筆者下面的解釋,應(yīng)該大致能理解函數(shù)的作用。

舉個(gè)栗子

這里只是舉一個(gè)十分簡單的例子,我想說的是:某些功能實(shí)現(xiàn)起來并不難,但實(shí)際上往往需要多次使用該功能,由于懶是第一生產(chǎn)力(:D),于是函數(shù)誕生了。

函數(shù)名括號內(nèi)的東西就相當(dāng)于店鋪門,你往門里丟東西,它就會根據(jù)它對應(yīng)的功能返回給你相應(yīng)的東西。函數(shù)先介紹到這里,后續(xù)會詳細(xì)講。


(新增于22/9/1)輸入輸出函數(shù):

? 通過上面對眾多語法的解釋,我經(jīng)常使用printf()函數(shù)來打印,其實(shí)以后如果遇到某些問題難以解決,通過“打印大法”經(jīng)常能化險(xiǎn)為夷,快速定位問題。(扯遠(yuǎn)了),現(xiàn)在列舉幾種C語言輸入輸出需要注意的方面和它們的常見用法。

要點(diǎn):

  • 必須包含頭文件。原因是:最初提到stdio,它是標(biāo)準(zhǔn)輸入輸出。 why?因?yàn)镃語言沒有內(nèi)置輸入輸出函數(shù),在最初期C語言流行的時(shí)候,很多公司都是自己寫的輸入輸出函數(shù),但是它們或多或少都有區(qū)別,這樣某個(gè)公司寫的軟件或者接口可移植性就很差,于是有個(gè)叫“標(biāo)準(zhǔn)委員會”的就出來規(guī)定了輸入輸出標(biāo)準(zhǔn)。舉一反三,無規(guī)矩不成方圓,各種“標(biāo)準(zhǔn)”也就成了語言內(nèi)置的“庫”了。(庫在學(xué)習(xí)的過程中會漸漸理解它)
  • 如果指定了類型,人必須按照雙引號中的格式輸入,那么機(jī)器也肯定會按照格式輸出,詳情如下。

常見用法:

? 下面通過輸入輸出的幾種組合解釋:

請注意:如果你現(xiàn)在不知道輸入輸出語句,那就先記住它的格式,雙引號,逗號,括號什么的。

運(yùn)行以上代碼,會有一個(gè)光標(biāo)在閃動,輸入100,回車。代碼中打印了三次,不同的是第二次,添加了一個(gè)換行符。其中輸入語句中最后的是&(取地址),現(xiàn)在只要記住輸入要這個(gè)符號即可。

用其他的呢?

? 運(yùn)行上述程序,輸入6699回車,且不論打印的數(shù)字位置如何,它們卻只有2位。原因是:可以把輸入輸出語句中的雙引號以及它里面的東西翻譯成“格式”,輸入輸出就是按格式走的,是強(qiáng)制的。

? 這個(gè)%多少d,“多少”代表寬度,你看即使我輸入4個(gè)數(shù)字,那它也只讀取前兩個(gè)數(shù)字。下面兩個(gè)數(shù)字位置不同的原因是:打印函數(shù)的寬度正數(shù)靠右,負(fù)數(shù)靠左。如果沒有規(guī)定寬度,那么也就沒有絕對的靠右靠左對齊可言,不過從左到右習(xí)慣來講,不規(guī)定寬度默認(rèn)是靠左的。請注意對齊是在有移動空間的前提下才會體現(xiàn)出來。就像后面兩個(gè)打印函數(shù),長度(絕對值)都是4,是大于讀取的2位數(shù)字的長度的。

再來一個(gè)!

運(yùn)行上面的程序,但是請注意打印的格式與要打印的變量的類型不符合,就這段代碼而言,打印的是'A'和'B'的ASCII碼(還記得a的ASCII碼么?)。從格式上的強(qiáng)制性來說,規(guī)定打印的格式十分重要,不是說一定要類型符合,經(jīng)常是靈活使用。比如有一些題比如就是要打印字符的ASCII值,那么直接以%d打印字符就ok;再比如可能要遍歷A~Z,直接在循環(huán)65~106中用%c打印即可。

最后一個(gè)!

? 運(yùn)行程序。這次打印的是一個(gè)浮點(diǎn)數(shù),通過最后一個(gè)打印語句可以知道,%f默認(rèn)打印的是?保留6位小數(shù)。而在百分號和f之間的'.2'就代表小數(shù)點(diǎn)后保留兩位。經(jīng)常會在寫應(yīng)用題的時(shí)候遇到保留xx位小數(shù)這樣的要求。

在這里再次強(qiáng)調(diào)動手做的重要性,看得懂連入門都不算,當(dāng)然動手也需要熟練~

7. 數(shù)組

數(shù)組的定義:一組相同類型元素的集合?

1. 一維數(shù)組?

聲明&&初始化數(shù)組

從左至右依次為數(shù)組數(shù)據(jù)類型,數(shù)組名,數(shù)組元素個(gè)數(shù),數(shù)組元素。?

在這里,"[ ]"內(nèi)的數(shù)字可以不用寫

,編譯器會根據(jù)元素個(gè)數(shù)來改變它

數(shù)組的下標(biāo)

即數(shù)組的下標(biāo)是從0開始的,這點(diǎn)需要初學(xué)者下意識地在練習(xí)中成為肌肉記憶。

數(shù)組的使用?

數(shù)組的使用,單看它的形式,也就[]內(nèi)的數(shù)字可以變化,當(dāng)我想把數(shù)組中的元素打印出來呢

?????在這里,i的區(qū)間為[0,10),是有直觀意義的,它表示我們操作了數(shù)組中下標(biāo)為0到9的每個(gè)元素。

更多知識點(diǎn)與細(xì)節(jié)將在后續(xù)發(fā)出~

8. 操作符

(簡單介紹)

算數(shù)操作符和賦值操作符的前五個(gè)相信大家都知道,這里提一下位操作符'&',當(dāng)我們每次使用scanf函數(shù)時(shí),總是要在變量名前加上&,&變量a的意思是取變量a的地址,這是&符號的作用之一。

對于上面的單目操作符和關(guān)系操作符,我們可能對解引用操作符不太熟悉(*),它和剛才提到的&符號取變量地址是對應(yīng)的,例如:*a = &a,它們是完全等價(jià)的。不太明白沒關(guān)系,這里以后會重點(diǎn)講。

這個(gè)條件操作符我們總是不容易想到,不經(jīng)常使用,但有時(shí)它能有種四兩撥千斤的效果,能簡化不少。

這個(gè)操作符的意思是:當(dāng)表達(dá)式一的結(jié)果為真,整個(gè)表達(dá)式結(jié)果就為表達(dá)式2,否則結(jié)果為表達(dá)式3。例如:

逗號表達(dá)式的意思就是一個(gè)語句由N個(gè)被逗號分隔的子語句(實(shí)際上不能稱之為語句)組成,那么這個(gè)語句的結(jié)果就為最后一個(gè)子語句的結(jié)果。例如:

9. 常見關(guān)鍵字

關(guān)鍵字在此只介紹初學(xué)時(shí)重要、常見的幾個(gè)。

1. break

在switch選擇語句使用的尤其多,其次是循環(huán)語句中。它的作用是一旦條件符合,就跳出整個(gè)循環(huán)or選擇語句。例如:

在這里唯一的不同是在a = 2后加了break,它的作用是阻止語句往下執(zhí)行。也就是說,switch語句要么從入口一直執(zhí)行完畢,要么從入口開始執(zhí)行,直到遇到break終止。

循環(huán)例子如下:

2. continue?

它常用于循環(huán)語句中。它的作用是當(dāng)符合條件時(shí),continue后面的語句不再執(zhí)行,跳出本次循環(huán),再開始下一次循環(huán)。

例如:

理解了break,continue自然不難理解。

當(dāng)然,break和continue在不同情況下的差異會在后續(xù)詳細(xì)講。

3.?static

在C語言中:
static是用來修飾變量和函數(shù)的
(1). 修飾局部變量

由第二次的結(jié)果來看,函數(shù)內(nèi)的局部變量并沒有像第一次一樣,每次調(diào)用都是為變量i開辟內(nèi)存空間,而是將變量i的值保存下來。

故:
static修飾局部變量改變了變量的生命周期,讓靜態(tài)局部變量超出了作用域后依然存在,直到程序結(jié)束時(shí),生命周期才結(jié)束。

(2). 修飾全局變量

這個(gè)例子舉起來有些麻煩,姑且讓我說說吧:在實(shí)際項(xiàng)目中,一個(gè)工程中會有至少一個(gè)源文件(xxx.c)。當(dāng)一個(gè)全局變量被static修飾,這個(gè)全局變量就只能在本源文件內(nèi)使用,不能在其他源文件內(nèi)使用。(此處忘記全局變量的同學(xué)往上翻^_^)

(3). 修飾函數(shù)

同上,一個(gè)函數(shù)被static修飾,這個(gè)函數(shù)就只能在本源文件內(nèi)使用,不能在其他源文件內(nèi)使用。

10. 指針

指針和內(nèi)存管理是C語言的雙刃劍。

由于這部分十分重要,所以這里我簡要介紹有關(guān)指針的基礎(chǔ)知識。

1. 內(nèi)存

內(nèi)存是電腦上特別重要的存儲器,計(jì)算機(jī)中程序的運(yùn)行都是在內(nèi)存中進(jìn)行的 。所以為了有效的使用內(nèi)存,就把內(nèi)存劃分成一個(gè)個(gè)小的內(nèi)存單元,每個(gè)內(nèi)存單元的大小是1個(gè)字節(jié)。為了能夠有效的訪問到內(nèi)存的每個(gè)單元,就給內(nèi)存單元進(jìn)行了編號,這些編號被稱為該內(nèi)存單元的地址。

變量是創(chuàng)建內(nèi)存中的(在內(nèi)存中分配空間的),每個(gè)內(nèi)存單元都有地址,所以變量也是有地址的。在前面我提到:*a = &a,為什么呢?

? 對于等號右邊,它表示的是變量a的地址,它也是一個(gè)具體的值,我得用房間給它住,所以人們規(guī)定定義int?*a存放a的地址。注意:?在定義指針變量時(shí),*符號只是表示定義的是一個(gè)指針變量,而使用指針變量時(shí)*a中的*符號指的是機(jī)器通過存放的a的地址找到a的值。

1.1?指針的簡單使用

通過地址的存放,解引用,達(dá)到了賦值的目的。?

11. 結(jié)構(gòu)體

結(jié)構(gòu)體是C語言中特別重要的知識點(diǎn),結(jié)構(gòu)體使得C語言有能力描述復(fù)雜類型。比如描述學(xué)生,學(xué)生包含: 名字+年齡+性別+學(xué)號這幾項(xiàng)信息。這里只能使用結(jié)構(gòu)體來描述了。直接上圖:

聲明一個(gè)結(jié)構(gòu)休類型的一般形式如下:

struct 結(jié)構(gòu)體名

{成員列表};

? 這個(gè)結(jié)構(gòu)體名在本工程中就是一個(gè)用戶定義的數(shù)據(jù)類型了,就像int那樣,不過需要注意的是,定義并初始化結(jié)構(gòu)體時(shí),成員的數(shù)據(jù)類型要于結(jié)構(gòu)體聲明時(shí)對應(yīng)。

? 細(xì)心的同學(xué)會發(fā)現(xiàn),我兩次打印時(shí),后面的一坨東西看起來不一樣,但結(jié)果卻完全一致。實(shí)際上這與指針有關(guān),在后面也會詳細(xì)講。

四、?總結(jié)

? 關(guān)于反思。?

不知道有沒有細(xì)心的同學(xué)發(fā)現(xiàn)我的文章寫了很久:21_12_26 ->22_1_18,實(shí)際寫的天數(shù)大概小于10天左右。起初只是為了為迎接期末考試而寫的博客,本來是要從頭到尾都寫一遍了,結(jié)果發(fā)現(xiàn)太長太長了,所以我把題目改成了“C語言初階”,即使這樣,我還是沒辦法在考試之前寫完它,因?yàn)?號就考完了,直到13號放假回家?,F(xiàn)在已經(jīng)是23:33了,我在家玩了3天,拖延癥真的不好啊,百害無利的那種。太容易讓人泄氣了,惡性循環(huán)。

這篇文章我覺得它爛尾了,函數(shù)前面的部分,我寫的時(shí)候是充滿熱情的,總是愿意抽出時(shí)間寫。現(xiàn)在一閑下來,回到家,只要一開始玩就很難停下來(不過比沒我以前那么夸張),好在我堅(jiān)持了下來,終于寫完它了。在玩的時(shí)候如果去想著學(xué)習(xí),對于我來說一定是十分痛苦的,幸運(yùn)的是,每當(dāng)我投入時(shí)我是感到快樂的,因?yàn)檫@是我喜歡的事!

看了自己上面寫的東西,感覺文不對題(因?yàn)槲腋牧祟}目),好多廢話,想重新寫,但是上面的絕大部分都是我敲出來的,耗費(fèi)了我不少精力和時(shí)間,有頭有尾地做事(瞧瞧這像是拖延癥晚期的人說的話嗎),如果我把它就這樣擱置了,我會難過很久的,因?yàn)槲矣掷速M(fèi)了時(shí)間。由于前面的內(nèi)容沒有必要的內(nèi)容太多,且這篇寫這篇博客的目的是讓讀者初識C,也就是能看得懂代碼,沒有必要記憶太多東西,不過也好,前面的東西相對來說對初學(xué)者十分重要,講詳細(xì)點(diǎn)也并非沒有好處。不知道讀者的意見如何呢?歡迎評論!

寫在最后【建議】【學(xué)習(xí)、生活、人生計(jì)劃、心得】

? 時(shí)間真快,我的大學(xué)生活已經(jīng)已經(jīng)過了1/3了,大四我不算在內(nèi),因?yàn)槲矣X得前三年是這輩子(students in CN)唯一能夠用一大把可自由支配的時(shí)間用來提升自己、尋找/做自己熱愛的事情的時(shí)間段了,其他時(shí)間段跟這個(gè)階段比可能沒那么純粹。如果你現(xiàn)在(準(zhǔn))大一/大二,千萬要做自己的主人——自信、勇敢、獨(dú)立是剩下的人生需要具備的,你我聽過許多道理,一起進(jìn)步吧。

【學(xué)習(xí)】

? 從大一萌新到現(xiàn)在的大二“老油條”,有不少事情我認(rèn)為越早知道越好:

  • 適當(dāng)翹課,挖東補(bǔ)西:如果你的學(xué)校一般,不久后你就會發(fā)現(xiàn)學(xué)校老師教課很一般,水課就不用說了。翹課當(dāng)然不好,但是爛課對我們個(gè)人而言是浪費(fèi)人生的,而且是黃金階段的人生,我認(rèn)為這是非常不值得的。翹課不一定要肉身翹課,精神上翹課也是可以的,因?yàn)閷W(xué)校抓的嚴(yán),我也比較慫,本人常年最后一排,都在干自己的事,完全不用管你認(rèn)為講課不好的老師講的課。注意,最后一節(jié)課或幾節(jié)課,必須必須必須去,因?yàn)槔蠋煵粌H可能會點(diǎn)名,很多老師會直接劃重點(diǎn),也就是考范圍。但有的學(xué)校嚴(yán),老師可能會暗示。
  • 必須學(xué)會自學(xué):承接上一話題翹課,在不那么重要的課上干自己認(rèn)為重要的事就是自學(xué)。不上老師的爛課,自己在網(wǎng)上(嗶哩嗶哩或YouTube、tb/pdd)查找優(yōu)質(zhì)課程資源能提高效率和質(zhì)量,尤其是專業(yè)課。自學(xué)是大學(xué)生必須學(xué)會的一門技能,公司招人的時(shí)候,也許你面試的是C++,但是經(jīng)常會讓你轉(zhuǎn)Java;或者你作為一個(gè)新人,入門就給你一大冊書,配給你一個(gè)指導(dǎo)老師,xx月后再來面試你,這就是在考察你的學(xué)習(xí)能力。自學(xué)不完全是自己找課學(xué),自學(xué)更重要的是查找資源,整合資源的能力,比如你現(xiàn)在在學(xué)C,在網(wǎng)上查找C的資料就是自學(xué)的過程。牛頓這么牛逼他也是站在巨人的肩膀上,要學(xué)會使用工具。
  • 保證績點(diǎn):大學(xué)和高中的成績評價(jià)標(biāo)準(zhǔn)不同,一般而言,如果一門課比較重要,比如高數(shù)線代這些大課,那么它的平時(shí)分占30%,如果是像政治類的水課,那么它的平時(shí)分占比可能會大一些,占40%,比例一般不會五五開,具體看學(xué)校。就我的經(jīng)驗(yàn)而言,如果你作業(yè)都有交,上課點(diǎn)名沒被記(偶爾也是可以的,但不能過分,不管是不是借口,都要找老師說明,老師都懂的,主要是不要得罪老師),如果你的最終考試的成績ok,平時(shí)成績一定不會差,很大程度來說,一般考試越難的,平時(shí)分也是會跟著你的卷面分走的。再來說一下水課,如果你想保住你的績點(diǎn)(可以自己去查績點(diǎn)是什么),不管是保研還是出國(留學(xué)一般要平均分80+),還是為了自尊心,都要知道一些技巧的。還有就是水課其實(shí)有時(shí)候很拉學(xué)分,特別是我很討厭的文科類。水課的平時(shí)分占比較大,所以盡量不要被老師發(fā)現(xiàn)你翹課,水課學(xué)期末的作業(yè)非常重要,雖然看上去只是抄一篇作文,但是一定要工整,越簡單的工作越要讓老師看到你的態(tài)度,分?jǐn)?shù)自然高一些。
  • 考前突擊:承接上一點(diǎn),得到高分跟你學(xué)多久其實(shí)并沒有多大關(guān)系。同學(xué)可能會納悶,說反了吧?大學(xué)里的課程都是通過性考試(至少一般大學(xué)是這樣的),不是像高考那樣的選拔性考試,所以難度不會太大。學(xué)校是有題庫的,如果你刷遍前5-10年的期末題(老師沒發(fā)找學(xué)長學(xué)姐要),那么你考試?yán)锏念}非常多的題都是原題,也有很多換湯不換藥的。如果老師明確指出考試的題就是課后題,那么 請好好對待它吧,特別是高數(shù)線代概率,因?yàn)檫@是考研的基礎(chǔ)。雖然很多人說到時(shí)候都會忘記重新學(xué),但是你懂的~,還有就是如果你現(xiàn)在不打算讀研/留學(xué),也不要放下績點(diǎn),因?yàn)槿说南敕〞S著閱歷而改變的?;氐竭@個(gè)話題,你學(xué)習(xí)某一門課程,也許并不需要像學(xué)校安排的課程需要半個(gè)多學(xué)期、一個(gè)學(xué)期學(xué)完它,如果只是想拿到高分,也許從考前2-1月開始學(xué)習(xí)一門課程就足夠了,當(dāng)然這只是我的一面之談,因?yàn)槲掖笠坏谝粚W(xué)期學(xué)非專業(yè)課的時(shí)間拉的很長,備考不是很高效,也浪費(fèi)了我很多自學(xué)編程的時(shí)間。大一第二學(xué)期的前半學(xué)期都在自學(xué)專業(yè)課,快考試才學(xué)其他的,知識點(diǎn)也記得比較清楚。最后說一句,大學(xué)生的期末是要人命的......尤其是你比較在意績點(diǎn)但你只想把時(shí)間用來學(xué)專業(yè)課或其他課程的同學(xué)。所以考前突擊還是要把戰(zhàn)線拉長一些,要不然期末周很多課排在一起考試一起突擊很難受的。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 已經(jīng)深夜,持續(xù)更新--2022/9/1

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧

網(wǎng)站標(biāo)題:C語言初階——手把手教零基礎(chǔ)/新手入門(萬字心得筆記)-創(chuàng)新互聯(lián)
標(biāo)題鏈接:http://www.rwnh.cn/article24/pgoce.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供自適應(yīng)網(wǎng)站、云服務(wù)器網(wǎng)站維護(hù)、搜索引擎優(yōu)化網(wǎng)站排名、定制開發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

綿陽服務(wù)器托管
岳普湖县| 大竹县| 宣恩县| 宜川县| 娄底市| 巴中市| 广灵县| 城市| 清苑县| 开阳县| 和田市| 永寿县| 嘉禾县| 济阳县| 沙田区| 舞钢市| 肇源县| 兴和县| 镇赉县| 通渭县| 惠安县| 柞水县| 桐庐县| 常德市| 克什克腾旗| 精河县| 竹山县| 南木林县| 宁津县| 五峰| 正定县| 嵩明县| 廊坊市| 瓦房店市| 永登县| 龙州县| 安吉县| 高碑店市| 浦城县| 青铜峡市| 陆良县|