成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

c語言入門筆記

sixleaves / 2699人閱讀

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

目錄

一、初識(shí)c語言

1、什么是C語言?

2、第一個(gè)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、逗號(hào)表達(dá)式

六、指針

1、指針是什么?

2、野指針

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

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

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

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


一、初識(shí)c語言

1、什么是C語言?

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

2、第一個(gè)C語言程序

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

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

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

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

4、變量、常量

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

  • 作用域

a、局部變量作用域?yàn)樽兞克诘木植糠秶?/p>

b、全局變量作用域?yàn)檎麄€(gè)工程。

  • 生命周期

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

(2)C語言中常量分類

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

5、轉(zhuǎn)義字符

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

6、注釋

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

注:幾個(gè)常用快捷鍵

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

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

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

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

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

1)if語句

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

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

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

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

0表示真,非0表示假。

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

比如:

輸入1:輸出星期一

輸入2:輸出星期二

輸入3:輸出星期三

輸入4:輸出星期四

輸入5:輸出星期五

輸入6:輸出星期六

輸入7:輸出周日

如果用if語句的話會(huì)顯得很麻煩,我么們可以用switch語句來實(shí)現(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語句中,沒法直接實(shí)現(xiàn)分支,搭配break使用才能實(shí)現(xiàn)真正的分支。break語句的實(shí)際效果是把語句列表劃分為不同的部分。
  • default子句:在switch表達(dá)式的值不匹配所有的case標(biāo)簽的值時(shí),default字句后面的語句就會(huì)執(zhí)行。所以,每個(gè)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后面的代碼不會(huì)再執(zhí)行,而是直接跳轉(zhuǎn)到while語句的判斷部分,進(jìn)入下一次循環(huán)判斷。

(2)for循環(huán)

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

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

表達(dá)式一用于初始化循環(huán)變量。表達(dá)式二條件判斷部分,用于判斷循環(huán)是否終止。表達(dá)式三用于循環(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(表達(dá)式);

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

三、函數(shù)

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

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

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

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

2、自定義函數(shù)

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

舉一個(gè)例子:

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

#include //get_max函數(shù)的設(shè)計(jì)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í)參。實(shí)參可以是:常量、變量、表達(dá)式、函數(shù)等。無論實(shí)參是何種類型的量,在進(jìn)行函數(shù)調(diào)用時(shí),它們都必須有確定的值,以便把這些值傳送給形參。

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

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

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

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

(1)函數(shù)聲明

  • 告訴編譯器有一個(gè)函數(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ù)的功能實(shí)現(xiàn)。

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

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

5、函數(shù)遞歸

(1)什么是遞歸?

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

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

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

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

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

代碼在運(yùn)行時(shí)存在以下問題:

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

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

注:

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

四、數(shù)組

1、一維數(shù)組

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

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

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

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

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

?隨著數(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ù)組計(jì)算長度只有在定義時(shí)使用有效。

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

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

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

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

五、操作符

1、操作符分類

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

2、移位操作符

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

(1)左移操作符

左邊拋棄、右邊補(bǔ)0

(2)右移操作符

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

3、位操作符

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

0異或任何數(shù)為數(shù)字本身;兩個(gè)相同的數(shù)字異或?yàn)?。

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、逗號(hào)表達(dá)式

exp1, exp2, exp3, …expN

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

六、指針

1、指針是什么?

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

總結(jié):

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

2、野指針

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

(1)野指針成因

  • 指針未初始化
#include int main(){   int *p;//局部變量指針未初始化,默認(rèn)為隨機(jī)值   *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的范圍時(shí),p就是野指針		*(p++) = i;	}	return 0;}

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

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

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

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

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

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

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

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

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

struct Point{    int x;    int y;}p1; //聲明類型的同時(shí)定義變量p1struct Point p2; //定義結(jié)構(gòu)體變量p2//初始化:定義變量的同時(shí)賦初值。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ù)哪個(gè)好些?
答案是:首選print2函數(shù)。 原因:

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

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

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

相關(guān)文章

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

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

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

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

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

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

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

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

    nihao 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<