亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

c語言入門筆記

sixleaves / 2890人閱讀

摘要:注在語言中如何表示真假呢表示真,非表示假。用于終止本次循環(huán),也就是本次循環(huán)中后面的代碼不會再執(zhí)行,而是直接跳轉(zhuǎn)到語句的判斷部分,進入下一次循環(huán)判斷。形式參數(shù)當(dāng)函數(shù)調(diào)用完成之后就自動銷毀了。

目錄

一、初識c語言

1、什么是C語言?

2、第一個C語言程序

3、數(shù)據(jù)類型

4、變量、常量

5、轉(zhuǎn)義字符

6、注釋

二、選擇與循環(huán)語句

1、選擇語句(if和switch語句)

2、循環(huán)語句(while、for、do while)

三、函數(shù)

1、C語言常用庫函數(shù)

2、自定義函數(shù)

3、函數(shù)參數(shù)

4、函數(shù)的聲明和定義

5、函數(shù)遞歸

四、數(shù)組

1、一維數(shù)組

2、二維數(shù)組

五、操作符

1、操作符分類

2、移位操作符

3、位操作符

4、邏輯操作符

5、條件操作符

6、逗號表達式

六、指針

1、指針是什么?

2、野指針

七、結(jié)構(gòu)體

1、結(jié)構(gòu)體的聲明

2、結(jié)構(gòu)體變量的定義和初始化

3、結(jié)構(gòu)體傳參


一、初識c語言

1、什么是C語言?

C語言是一門面向過程計算機編程語言,廣泛應(yīng)用于底層開發(fā),與C++、java等面向?qū)ο?/strong>的編程語言有所不同。Cyuyan的設(shè)計目標(biāo)是提供一種能以簡易的方式編譯、處理低級存儲器、產(chǎn)生少量的機器碼以及不需要任何運行環(huán)境支持便能運行的編程語言。

2、第一個C語言程序

#include //頭文件int main()//main函數(shù)為程序入口,一個工程中main函數(shù)僅有一個{	printf("hello/n");	return 0;//return函數(shù)結(jié)束,后面不執(zhí)行}

3、數(shù)據(jù)類型

數(shù)據(jù)類型打印方式
char字符%c
short短整型%d
int整型%d
long長整型%d/%ld
float單精度浮點數(shù)%f
double雙精度浮點數(shù)%lf

? ? ? ?注:打印八進制數(shù)(%0),打印十六進制數(shù)(%0x)

4、變量、常量

(1)變量的作用域和生命周期

  • 作用域

a、局部變量作用域為變量所在的局部范圍。

b、全局變量作用域為整個工程。

  • 生命周期

變量對應(yīng)的生命周期為該變量的作用域。

(2)C語言中常量分類

  • 字面常量
  • const修飾的常變量
  • #define定義的標(biāo)識符常量
  • enum枚舉常量(定義常量時,默認(rèn)從0開始)

5、轉(zhuǎn)義字符

轉(zhuǎn)義字符釋義
/"表示字符常量"
/"表示字符串內(nèi)部的雙引號
//表示反斜杠
/b退格
/n換行
/r回車
/ffffdffffd表示1~3個八進制數(shù)字
/xdddd表示兩個十六進制數(shù)字

6、注釋

  • C語言注釋風(fēng)格/*xxxxxxx*/(缺陷:不能嵌套使用
  • C++注釋風(fēng)格 //xxxxxxx

注:幾個常用快捷鍵

Ctrl+k+f? ? ? ? ?//整理代碼格式

Ctrl+k+c?? ? ? ?//整體注釋

Ctrl+k+u? ? ? ? //取消注釋

二、選擇與循環(huán)語句

1、選擇語句(if和switch語句)

1)if語句

“=”表示賦值,“==”判斷相等,“!=”判斷不相等。

//多分支情況
if (表達式)
{
?? ?語句一;
}
else if (表達式)
{
?? ?語句二;
}
else
{
?? ?語句三;
}

如果表達式為真,則語句執(zhí)行。

注:在C語言中如何表示真假呢?

0表示真,非0表示假。

(2)switch語句(常用于多分支情況)

比如:

輸入1:輸出星期一

輸入2:輸出星期二

輸入3:輸出星期三

輸入4:輸出星期四

輸入5:輸出星期五

輸入6:輸出星期六

輸入7:輸出周日

如果用if語句的話會顯得很麻煩,我么們可以用switch語句來實現(xiàn)。

#includeint main(){	int day = 0;	scanf("%d", &day);	switch (day)//條件只能是整型	{	case 1:  //case后面只能是整型常量		printf("星期一/n");		break;	case 2:		printf("星期二/n");		break;	case 3:		printf("星期三/n");		break;	case 4:		printf("星期四/n");		break;	case 5:		printf("星期五/n");		break;	case 6:		printf("星期六/n");		break;	case 7:		printf("周天/n");		break;	}	return 0;}
  • 在switch語句中,沒法直接實現(xiàn)分支,搭配break使用才能實現(xiàn)真正的分支。break語句的實際效果是把語句列表劃分為不同的部分。
  • default子句:在switch表達式的值不匹配所有的case標(biāo)簽的值時,default字句后面的語句就會執(zhí)行。所以,每個switch語句中只能出現(xiàn)一條default子句。

2、循環(huán)語句(while、for、do while)

(1)while循環(huán)

在屏幕上打印1-10的數(shù)字

#includeint main(){	int i = 1;	while (i <= 10)	{		printf("%d ", i);		i++;	}	return 0;}

while循環(huán)里的break和continue

  • break:循環(huán)中只要遇到break,就停止后期的所有循環(huán),直接終止循環(huán)。所以:while中的break是用來永久終止循環(huán)的。
  • continue:用于終止本次循環(huán),也就是本次循環(huán)中continue后面的代碼不會再執(zhí)行,而是直接跳轉(zhuǎn)到while語句的判斷部分,進入下一次循環(huán)判斷。

(2)for循環(huán)

for(表達式一;表達式二;表達式三)

? ? ? ?循環(huán)語句;

表達式一用于初始化循環(huán)變量。表達式二條件判斷部分,用于判斷循環(huán)是否終止。表達式三用于循環(huán)條件的調(diào)整。

使用for循環(huán)在屏幕上打印1-10數(shù)字

#includeint main(){	int i = 0;	//for (i = 1/*初始化*/; i <= 10/*判斷部分*/; ++i/*調(diào)整部分*/)	for (i = 1; i <= 10; ++i)	{		printf("%d ", i);	}	return 0;}

注:1、不可在for循環(huán)內(nèi)修改循環(huán)變量,防止for循環(huán)失去控制。

? ? ? ?2、建議for語句的循環(huán)控制變量的取值采用前閉后開區(qū)間寫法。

(3)do……while()循環(huán)

do

? ? ? 循環(huán)語句;

while(表達式);

特點:循環(huán)至少執(zhí)行一次,適用的場景有限,所以不是經(jīng)常使用。

三、函數(shù)

C語言函數(shù)分類:庫函數(shù)、自定義函數(shù)

1、C語言常用庫函數(shù)

  • IO函數(shù)
  • 字符串操作函數(shù)
  • 內(nèi)存操作函數(shù)
  • 時間/日期函數(shù)
  • 數(shù)學(xué)函數(shù)
  • 其他庫函數(shù)

注: 但是庫函數(shù)必須知道的一個秘密就是:使用庫函數(shù),必須包含 #include 對應(yīng)的頭文件。

2、自定義函數(shù)

ret_type fun_name(para1, * )//ret_type返回類型,fun_name函數(shù)名,para1函數(shù)參數(shù){statement;//語句項}

舉一個例子:

寫一個函數(shù)可以找出兩個整數(shù)中的最大值。

#include //get_max函數(shù)的設(shè)計int get_max(int x, int y){	return (x>y) ? (x) : (y);}int main(){	int num1 = 10;	int num2 = 20;	int max = get_max(num1, num2);	printf("max = %d/n", max);	return 0;}

3、函數(shù)參數(shù)

形式參數(shù)(形參):

真實傳給函數(shù)的參數(shù),叫實參。實參可以是:常量、變量、表達式、函數(shù)等。無論實參是何種類型的量,在進行函數(shù)調(diào)用時,它們都必須有確定的值,以便把這些值傳送給形參。

實際參數(shù)(實參):

形式參數(shù)是指函數(shù)名后括號中的變量,因為形式參數(shù)只有在函數(shù)被調(diào)用的過程中才實例化(分配內(nèi)存單元),所以叫形式參數(shù)。形式參數(shù)當(dāng)函數(shù)調(diào)用完成之后就自動銷毀了。因此形式參數(shù)只在函數(shù)中有效。

上面代碼x、y為形參,num1、num2為實參。形參實例化之后其實相當(dāng)于實參的一份臨時拷貝。

4、函數(shù)的聲明和定義

(1)函數(shù)聲明

  • 告訴編譯器有一個函數(shù)叫什么,參數(shù)是什么,返回類型是什么。但是具體是不是存在,無關(guān)緊要。
  • 函數(shù)的聲明一般出現(xiàn)在函數(shù)的使用之前。要滿足先聲明后使用
  • 函數(shù)的聲明一般要放在頭文件中的。

test.h放置函數(shù)聲明

#ifndef __TEST_H__#define __TEST_H__//函數(shù)的聲明int Add(int x, int y);#endif //__TEST_H__

(2)函數(shù)定義:交待函數(shù)的功能實現(xiàn)。

?test.c放置函數(shù)定義

#include "test.h"http://函數(shù)Add的實現(xiàn)int Add(int x, int y){    return x+y;}

5、函數(shù)遞歸

(1)什么是遞歸?

把一個大型復(fù)雜的問題層層轉(zhuǎn)化為一個與原問題相似的規(guī)模較小的問題來求解,遞歸策略只需少量的程序就可描述出解題過程所需要的多次重復(fù)計算,大大地減少了程序的代碼量。 遞歸的主要思考方式在于:把大事化小

(2)遞歸的兩個必要條件

  • 存在限制條件,當(dāng)滿足這個限制條件的時候,遞歸便不再繼續(xù)。
  • 每次遞歸調(diào)用之后越來越接近這個限制條件。

例:求斐波那契數(shù)

int fib(int n){	if (n <= 2)		return 1;	else		return fib(n - 1) + fib(n - 2);}

代碼在運行時存在以下問題:

  • 在使用 fib 這個函數(shù)的時候如果我們要計算第50個斐波那契數(shù)字的時候特別耗費時間。
  • 使用 factorial 函數(shù)求10000的階乘(不考慮結(jié)果的正確性),程序會崩潰。

在調(diào)試 factorial 函數(shù)的時候,如果你的參數(shù)比較大,那就會報錯:stack overflow(棧溢出這樣的信息)。 系統(tǒng)分配給程序的??臻g是有限的,但是如果出現(xiàn)了死循環(huán),或者(死遞歸),這樣有可能導(dǎo)致一直開辟??臻g,最終產(chǎn)生棧空間耗盡的情況,這樣的現(xiàn)象我們稱為棧溢出。

注:

1. 許多問題是以遞歸的形式進行解釋的,這只是因為它比非遞歸的形式更為清晰。
2. 但是這些問題的迭代實現(xiàn)往往比遞歸實現(xiàn)效率更高,雖然代碼的可讀性稍微差些。
3. 當(dāng)一個問題相當(dāng)復(fù)雜,難以用迭代實現(xiàn)時,此時遞歸實現(xiàn)的簡潔性便可以補償它所帶來的運行時開銷。

四、數(shù)組

1、一維數(shù)組

(1)數(shù)組創(chuàng)建

type_t arr_name [const_n];//type_t 是指數(shù)組的元素類型//const_n 是一個常量表達式,用來指定數(shù)組的大小

注:數(shù)組創(chuàng)建, [] 中要給一個常量才可以,不能使用變量。數(shù)組在創(chuàng)建的時候如果想不指定數(shù)組的確定的大小就得初始化。數(shù)組的元素個數(shù)根據(jù)初始化的內(nèi)容來確定。

(2)一維數(shù)組的使用、在內(nèi)存中的存儲

a、數(shù)組是使用下標(biāo)來訪問的,下標(biāo)是從0開始。?數(shù)組的大小可以通過計算得到。
b、在內(nèi)存中的存儲

?隨著數(shù)組下標(biāo)的增長,元素的地址,也在有規(guī)律的遞增。 由此可以得出結(jié)論:數(shù)組在內(nèi)存中是連續(xù)存放的。

2、二維數(shù)組

(1)二維數(shù)組初始化

//數(shù)組初始化int arr[3][4] = {1,2,3,4};//其余的為0int arr[3][4] = {{1,2},{4,5}};int arr[][4] = {{2,3},{4,5}};//

注:

二維數(shù)組行標(biāo)可以省略,列標(biāo)不能省略;數(shù)組計算長度只有在定義時使用有效。

(2)二維數(shù)組在內(nèi)存中的存儲

二維數(shù)組在內(nèi)存中也是連續(xù)存在的。二維數(shù)組是特殊的一維數(shù)組。

注:數(shù)組名代表數(shù)組首元素地址。

(兩個例外,sizeof(arr)、&arr)

五、操作符

1、操作符分類

算術(shù)操作符、移位操作符、位操作符、賦值操作符、單目操作符、關(guān)系操作符、邏輯操作符、條件操作符、逗號表達式

2、移位操作符

< ?左移操作符
>>? ? ?右移操作符

(1)左移操作符

左邊拋棄、右邊補0

(2)右移操作符

1. 邏輯移位 左邊用0填充,右邊丟棄
2. 算術(shù)移位 左邊用原該值的符號位填充,右邊丟棄

3、位操作符

&? ? ? ?//按位與,兩位都為1時為1
|? ? ? ? //按位或,對應(yīng)位為1,結(jié)果為1
^? ? ? ?//按位異或,不一樣的位為1,一樣為0
注:他們的操作數(shù)必須是整數(shù)。

0異或任何數(shù)為數(shù)字本身;兩個相同的數(shù)字異或為0。

4、邏輯操作符

邏輯操作符有哪些?

&&? ? ? ? 邏輯與(短路與)
||? ? ? ? ? ?邏輯或(短路或)

區(qū)分邏輯與按位與 區(qū)分邏輯或按位或

1 & 2?----->?0
1 && 2?---->?1
1 | 2?----->?3
1 || 2?---->?1

5、條件操作符

exp1 ? exp2 : exp3
//exp1為真,執(zhí)行exp2,否則執(zhí)行exp3

6、逗號表達式

exp1, exp2, exp3, …expN

逗號表達式,就是用逗號隔開的多個表達式。 逗號表達式,從左向右依次執(zhí)行。整個表達式的結(jié)果是最后一個表達式的結(jié)果。

六、指針

1、指針是什么?

在計算機科學(xué)中,指針(Pointer)是編程語言中的一個對象,利用地址,它的值直接指向
(points to)存在電腦存儲器中另一個地方的值。由于通過地址能找到所需的變量單元,可以說,地址指向該變量單元。因此,將地址形象化的稱為“指針”。意思是通過它能找到以它為地址的內(nèi)存單元。
?

總結(jié):

  • 指針就是變量,用來存放地址的變量。(存放在指針中的值都被當(dāng)成地址處理)
  • 指針的大小在32位平臺是4個字節(jié),在64位平臺是8個字節(jié)。

2、野指針

概念: 野指針就是指針指向的位置是不可知的(隨機的、不正確的、沒有明確限制的)。

(1)野指針成因

  • 指針未初始化
#include int main(){   int *p;//局部變量指針未初始化,默認(rèn)為隨機值   *p = 20;return 0;}
  • 指針越界訪問
#include int main(){	int arr[10] = { 0 };	int *p = arr;	int i = 0;	for (i = 0; i <= 11; i++)	{		//當(dāng)指針指向的范圍超出數(shù)組arr的范圍時,p就是野指針		*(p++) = i;	}	return 0;}

如何規(guī)避野指針?

1. 指針初始化
2. 小心指針越界
3. 指針指向空間釋放即使置NULL
4. 指針使用之前檢查有效性

七、結(jié)構(gòu)體

1、結(jié)構(gòu)體的聲明

例如描述一個學(xué)生:

typedef struct Stu{    char name[20];//名字    int age;//年齡    char sex[5];//性別    char id[20];//學(xué)號}Stu;//分號不能丟

結(jié)構(gòu)體成員的類型:

結(jié)構(gòu)的成員可以是標(biāo)量、數(shù)組、指針,甚至是其他結(jié)構(gòu)體。

2、結(jié)構(gòu)體變量的定義和初始化

struct Point{    int x;    int y;}p1; //聲明類型的同時定義變量p1struct Point p2; //定義結(jié)構(gòu)體變量p2//初始化:定義變量的同時賦初值。struct Point p3 = {x, y};

3、結(jié)構(gòu)體傳參

#includestruct S{	int data[1000];	int num;};struct S s = { { 1, 2, 3, 4 }, 1000 };//結(jié)構(gòu)體傳參void print1(struct S s){	printf("%d/n", s.num);}//結(jié)構(gòu)體地址傳參void print2(struct S* ps){	printf("%d/n", ps->num);}int main(){	print1(s); //傳結(jié)構(gòu)體	print2(&s); //傳地址	return 0;}

上面的 print1 和 print2 函數(shù)哪個好些?
答案是:首選print2函數(shù)。 原因:

函數(shù)傳參的時候,參數(shù)是需要壓棧的。 如果傳遞一個結(jié)構(gòu)體對象的時候,結(jié)構(gòu)體過大,參數(shù)壓棧的系統(tǒng)開銷比較大,所以會導(dǎo)致性能的下降。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/124499.html

相關(guān)文章

  • Java入門請不要放棄,學(xué)習(xí)路線以及側(cè)重點分析

    摘要:而面向搜索引擎,就是我們要及時的使用百度谷歌遇到問題無法解決,先別急著放棄,可以去網(wǎng)絡(luò)尋找答案,你的坑大部分別人都已經(jīng)走過了,大部分都可以找到合適的解決方案。 showImg(https://segmentfault.com/img/remote/1460000019236352?w=866&h=456); 前言: ●眾多的語言,到底哪一門才是適合我的?●我們?yōu)槭裁匆獙W(xué)習(xí)Java語言呢...

    mochixuan 評論0 收藏0
  • 重磅 | 完備的 AI 學(xué)習(xí)路線,最詳細(xì)的資源整理!

    摘要:是你學(xué)習(xí)從入門到專家必備的學(xué)習(xí)路線和優(yōu)質(zhì)學(xué)習(xí)資源。的數(shù)學(xué)基礎(chǔ)最主要是高等數(shù)學(xué)線性代數(shù)概率論與數(shù)理統(tǒng)計三門課程,這三門課程是本科必修的。其作為機器學(xué)習(xí)的入門和進階資料非常適合。書籍介紹深度學(xué)習(xí)通常又被稱為花書,深度學(xué)習(xí)領(lǐng)域最經(jīng)典的暢銷書。 showImg(https://segmentfault.com/img/remote/1460000019011569); 【導(dǎo)讀】本文由知名開源平...

    荊兆峰 評論0 收藏0
  • SegmentFault 技術(shù)周刊 Vol.40 - 2018,來學(xué)習(xí)一門新的編程語言吧!

    摘要:入門,第一個這是一門很新的語言,年前后正式公布,算起來是比較年輕的編程語言了,更重要的是它是面向程序員的函數(shù)式編程語言,它的代碼運行在之上。它通過編輯類工具,帶來了先進的編輯體驗,增強了語言服務(wù)。 showImg(https://segmentfault.com/img/bV1xdq?w=900&h=385); 新的一年不知不覺已經(jīng)到來了,總結(jié)過去的 2017,相信小伙們一定有很多收獲...

    caspar 評論0 收藏0
  • SegmentFault 技術(shù)周刊 Vol.40 - 2018,來學(xué)習(xí)一門新的編程語言吧!

    摘要:入門,第一個這是一門很新的語言,年前后正式公布,算起來是比較年輕的編程語言了,更重要的是它是面向程序員的函數(shù)式編程語言,它的代碼運行在之上。它通過編輯類工具,帶來了先進的編輯體驗,增強了語言服務(wù)。 showImg(https://segmentfault.com/img/bV1xdq?w=900&h=385); 新的一年不知不覺已經(jīng)到來了,總結(jié)過去的 2017,相信小伙們一定有很多收獲...

    nihao 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<