摘要:注在語言中如何表示真假呢表示真,非表示假。用于終止本次循環(huán),也就是本次循環(huán)中后面的代碼不會(huì)再執(zhí)行,而是直接跳轉(zhuǎn)到語句的判斷部分,進(jìn)入下一次循環(huán)判斷。形式參數(shù)當(dāng)函數(shù)調(diào)用完成之后就自動(dòng)銷毀了。
2、循環(huán)語句(while、for、do while)
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)行的編程語言。
#include //頭文件int main()//main函數(shù)為程序入口,一個(gè)工程中main函數(shù)僅有一個(gè){ printf("hello/n"); return 0;//return函數(shù)結(jié)束,后面不執(zhí)行}
數(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)
(1)變量的作用域和生命周期
a、局部變量作用域?yàn)樽兞克诘木植糠秶?/p>
b、全局變量作用域?yàn)檎麄€(gè)工程。
變量對(duì)應(yīng)的生命周期為該變量的作用域。
(2)C語言中常量分類
轉(zhuǎn)義字符 | 釋義 |
/" | 表示字符常量" |
/" | 表示字符串內(nèi)部的雙引號(hào) |
// | 表示反斜杠 |
/b | 退格 |
/n | 換行 |
/r | 回車 |
/ffffd | ffffd表示1~3個(gè)八進(jìn)制數(shù)字 |
/xdd | dd表示兩個(gè)十六進(jìn)制數(shù)字 |
注:幾個(gè)常用快捷鍵
Ctrl+k+f? ? ? ? ?//整理代碼格式
Ctrl+k+c?? ? ? ?//整體注釋
Ctrl+k+u? ? ? ? //取消注釋
(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;}
(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
(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)常使用。
C語言函數(shù)分類:庫函數(shù)、自定義函數(shù)
注: 但是庫函數(shù)必須知道的一個(gè)秘密就是:使用庫函數(shù),必須包含 #include 對(duì)應(yīng)的頭文件。
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;}
形式參數(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í)拷貝。
(1)函數(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;}
(1)什么是遞歸?
把一個(gè)大型復(fù)雜的問題層層轉(zhuǎn)化為一個(gè)與原問題相似的規(guī)模較小的問題來求解,遞歸策略只需少量的程序就可描述出解題過程所需要的多次重復(fù)計(jì)算,大大地減少了程序的代碼量。 遞歸的主要思考方式在于:把大事化小
(2)遞歸的兩個(gè)必要條件
例:求斐波那契數(shù)
int fib(int n){ if (n <= 2) return 1; else return fib(n - 1) + fib(n - 2);}
代碼在運(yùn)行時(shí)存在以下問題:
在調(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í)開銷。
(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ù)存放的。
(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)
算術(shù)操作符、移位操作符、位操作符、賦值操作符、單目操作符、關(guān)系操作符、邏輯操作符、條件操作符、逗號(hào)表達(dá)式
< ? ?左移操作符
>>? ? ?右移操作符
(1)左移操作符
左邊拋棄、右邊補(bǔ)0
(2)右移操作符
1. 邏輯移位 左邊用0填充,右邊丟棄
2. 算術(shù)移位 左邊用原該值的符號(hào)位填充,右邊丟棄
&? ? ? ?//按位與,兩位都為1時(shí)為1
|? ? ? ? //按位或,對(duì)應(yīng)位為1,結(jié)果為1
^? ? ? ?//按位異或,不一樣的位為1,一樣為0
注:他們的操作數(shù)必須是整數(shù)。
0異或任何數(shù)為數(shù)字本身;兩個(gè)相同的數(shù)字異或?yàn)?。
邏輯操作符有哪些?
&&? ? ? ? 邏輯與(短路與)
||? ? ? ? ? ?邏輯或(短路或)
區(qū)分邏輯與和按位與 區(qū)分邏輯或和按位或
1 & 2?----->?0
1 && 2?---->?1
1 | 2?----->?3
1 || 2?---->?1
exp1 ? exp2 : exp3
//exp1為真,執(zhí)行exp2,否則執(zhí)行exp3
exp1, exp2, exp3, …expN
逗號(hào)表達(dá)式,就是用逗號(hào)隔開的多個(gè)表達(dá)式。 逗號(hào)表達(dá)式,從左向右依次執(zhí)行。整個(gè)表達(dá)式的結(jié)果是最后一個(gè)表達(dá)式的結(jié)果。
在計(jì)算機(jī)科學(xué)中,指針(Pointer)是編程語言中的一個(gè)對(duì)象,利用地址,它的值直接指向
(points to)存在電腦存儲(chǔ)器中另一個(gè)地方的值。由于通過地址能找到所需的變量單元,可以說,地址指向該變量單元。因此,將地址形象化的稱為“指針”。意思是通過它能找到以它為地址的內(nèi)存單元。
?
總結(jié):
概念: 野指針就是指針指向的位置是不可知的(隨機(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. 指針使用之前檢查有效性
例如描述一個(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)體。
struct Point{ int x; int y;}p1; //聲明類型的同時(shí)定義變量p1struct Point p2; //定義結(jié)構(gòu)體變量p2//初始化:定義變量的同時(shí)賦初值。struct Point p3 = {x, y};
#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
摘要:而面向搜索引擎,就是我們要及時(shí)的使用百度谷歌遇到問題無法解決,先別急著放棄,可以去網(wǎng)絡(luò)尋找答案,你的坑大部分別人都已經(jīng)走過了,大部分都可以找到合適的解決方案。 showImg(https://segmentfault.com/img/remote/1460000019236352?w=866&h=456); 前言: ●眾多的語言,到底哪一門才是適合我的?●我們?yōu)槭裁匆獙W(xué)習(xí)Java語言呢...
摘要:是你學(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)讀】本文由知名開源平...
摘要:入門,第一個(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,相信小伙們一定有很多收獲...
摘要:入門,第一個(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,相信小伙們一定有很多收獲...
閱讀 2700·2021-11-23 09:51
閱讀 3275·2021-11-22 14:44
閱讀 4618·2021-11-22 09:34
閱讀 5284·2021-10-08 10:14
閱讀 2587·2021-09-22 15:47
閱讀 3543·2021-09-22 15:40
閱讀 1539·2019-08-30 15:44
閱讀 1646·2019-08-28 18:23