本文目錄一覽:
- 1、C語言入門知識
- 2、怎麼自學C語言 入門
- 3、學習C語言需要掌握哪些基本知識?
- 4、零基礎如何學習C語言?
- 5、c語言編程怎樣入門
C語言入門知識
C語言基礎知識
1.1 C語言簡介
C語言於1972年由美國的Dennis Ritchie發明,並首次在配備了UNIX操作系統的DEC PDP-11計算機上實現。它由早期的編程語言BCPL(Basic Combind Programming Language)發展演變而來。1970年,ATT貝爾實驗室的Ken Thompson根據BCPL語言設計出了較先進並取名為B的語言,通過不斷修改、完善,更先進的C語言問世了。
C語言是一種功能強大、應用廣泛、具有發展前途的計算機語言。它既可用於系統軟體的設計,也可用於應用軟體的開發。許多著名的系統軟體都是由C語言編寫的。C語言具有下列特點:
(1)C語言既具有低級語言直接操縱硬體的特點,又具有高級語言與 自然語言和人的思維邏輯相似的特點,C語言程序易編寫、易查錯,而且實用性很強。
(2)C語言具有豐富的數據類型和運算符,語法結構簡單。
(3)C語言是一種結構化程序設計語言,提供了完整的程序控制語句。
(4)C語言是一種模塊化程序設計語言,適合大型軟體的開發和研製。
(5)C語言還有一個突出的優點就是適合於多種操作系統,如DOS、UNIX,也適用於多種機型,其程序移植性好。
1.2 C語言的數據類型
數據是程序處理的對象,數據類型是數據的內在表現形式。例如,學生的年齡和成績具有一般數值的特點,在C語言中稱為數值型,其中年齡是整數,稱為整型;成績可以為小數,稱為實型。而學生的姓名和性別是文字,在C語言中稱為字元型數據。
C語言具有豐富的數據類型,其中基本的數據類型有整型、實型、字元型。
1.2.1 變數
變數是在程序執行過程中其值可以被改變的量。
1.變數命名規則
和人的取名一樣,變數的命名也有一定的規則。
(1)由字母、數字和下劃線組成;
(2)必須以字母或下劃線打頭;
(3)字母區分大小寫(在系統默認狀態下);
(4)前32個字元有效(在系統默認狀態下)。
例如:a,Book,book,_Make_Cipher都是合法的變數名,且Book與book是不同的變數名,而123A,x+y都不是變數名。
2.變數的數據類型
變數可以是任意的一種數據類型,如整型變數、字元型變數、指針變數等。C語言中的基本數據類型及其特性如表1-1所示。
表1-1 C語言的基本數據類型
數據類型名 數據類型描述 數據類型的長度(位元組) 數據取值範圍
char 字元型 1 0~255
int 有符號整型 2 –32 768~32 767
unsigned int 無符號整型 2 0~65 535
short 短整型 2 –32 768~32 767
long 長整型 4 –2 147 483 648~2 147 483 647
unsigned long 無符號長整型 4 0~4 294 967 295
float 單精度實數 4 |3.4×10–38|~|3.4×1038|
double 雙精度實數 8 |1.7×10–308|~|1.7×10308|
long double 長雙精度實數 10 |3.4×10–4932|~|3.4×104932|
3.變數的定義
每個變數在使用前都必須先定義其數據類型,定義變數數據類型的語法格式如下:
數據類型符 變數名1,變數名2,…;
例如:
int age,score; /* 定義年齡和成績為整型 */
char name[20]; /* 定義姓名為至多含20個字元的字元數組 */
4.變數的存儲類型
當定義某個變數時,C語言的編譯系統就要給該變數分配若干個存儲單元用來存放該變數的值。而在計算機中寄存器和內存都可以存放數據,內存又可分為臨時佔用和長期佔用。變數的存儲類型是指變數在計算機中的存放位置及時間。
定義變數存儲類型的語法格式如下:
存儲類型符 數據類型符 變數名1,變數名2,…;
變數的存儲類型有自動型(auto)、寄存器型(register)、靜態型(static)和外部型(extern),具體特點和使用方法在後面的章節中詳細介紹。
在變數定義時,如未說明存儲類型,則系統默認為自動型(auto)。
5.變數的初始化
變數的初始化是給變數賦初值的一種方法,是指在變數定義時就給變數賦予初始值。變數初始化的方法很簡單,在變數定義的語句中,在變數名後加一個等號和初值即可。
例如:
int x, age=20, score=100;
在上面的定義中,變數x未賦初值,而變數age和score的初值分別為20和100。
在程序中,變數未賦值之前不允許使用,即要遵循「先賦值後使用」的規則。
1.2.2 常量
常量是在程序運行過程中值不發生改變的數據。例如,圓周率3.1415926就是一個常量。常量也有數據類型,它們是整型常量、實型常量、字元常量、字元串常量及符號常量,整型常量及實型常量的數據長度及取值範圍與變數的規定相同。
1.整型常量
整型常量用來表示整數,整型數據可以以不同數制形式來表示,不同的進位制有其不同的表示方式,其表示方式如表1-2所示。
表1-2 整型常量的表示方式
數 制 表 示 方 式 示 例
十進位 一般整數的寫法 0,–22,55
八進位 在八進位整數前加數字0 00,–072,+0331
十六進位 在十六進位整數前加數字0和字母x 0x0,0x1B5,–0xb3
另外,對於長整型常量,應當在其後加後綴L或l,例如30L。30L和30數值一樣,但佔用內存的大小不一樣。30佔用2個位元組的存儲空間,而30L佔用4個位元組的存儲空間。
2.實型常量
實型常量只有十進位數表示方式,它沒有單精度和雙精度之分。其表示方式有定點數表示和浮點數表示兩種。具體表示方式如表1-3所示。
表1-3 實型常量的書寫方法
類 別 表 示 方 式 示 例
定點數 整數部分.小數部分 0.0,1.34,–34.0
浮點數 尾數E(或e)指數 3.57E10,–5.6e–9
說明:
(1)浮點數表示方式相當於數學中的科學計數法,其換算公式如下:
尾數E(或e)指數=尾數×10指數
(2)浮點數中的指數部分只能是整型數,尾數可以大於或等於10。
3.字元常量
字元常量是用兩個單引號引住單個字元來表示的。例如:’A’、’*’、’!’等。使用字元常量時應注意以下幾點:
(1)空格也是字元,表示為’a’。
(2)單引號中必須恰好有一個字元,不能空缺。如’ ‘是錯誤的字元常量。
在C語言中有一類特殊的字元常量,被稱為轉義字元。它們用來表示特殊符號或鍵盤上的控制代碼,常見的轉義字元如表1-4所示。
表1-4 常用轉義字元表
轉 義 字 符 意 義 轉 義 字 符 意 義
\n 回車換行符 \a 響鈴
\t 水平製表符 \” 雙引號
\v 垂直製表符 \’ 單引號
\b 左退一格 \\ 反斜杠
\r 回車符 \ddd 1~3位八進位數ddd對應的字元
\f 換頁符 \xhh 1~2位十六進位數hh對應的字元
4.字元串常量
字元串是用雙引號引住的若干個字元。例如,”hello!”,”485769″,”a”。
字元串可以不含任何字元,稱為空串,表示為””。
字元串中所含的字元個數稱為字元串的長度。例如,”abc123″,”3″,””的長度分別為6,1,0。計算字元串長度時應注意以下幾點:
(1)對於含有轉義字元的字元串,應將轉義字元計算為1個字元。例如,”abc\\12\n”的長度為7,而不是9;”abc\\\12\n”及”abc\\\123\n”的長度均為6。
(2)在字元串中,反斜杠表示轉義字元的開始,如果其後面沒有表1-4中所列出的轉義符號,則該反斜杠被忽略,並不參與計算長度。例如,”\A”的長度為1,但”\”是非法的。
5.符號常量
上面所介紹的常量都是具體數據,在程序中也可以用特定符號來表示某個常量,這個符號被稱為符號常量。
符號常量的語法格式如下:
#define 符號常量名 常量
例如:
#define PI 3.1415926
經過上述定義後,可以在程序中使用PI來代替3.1415926。
在程序中使用符號常量有兩個好處:一是提高了程序的易讀性;二是為修改程序提供了方便。例如,當不需要太高精度時,只需要將符號常量定義修改為
#define PI 3.14
而不需要在程序中去修改每一處的圓周率。
1.3 算術運算符與算術表達式
用來表示各種運算的符號稱為運算符。C語言中包括以下七大類的基本運算符:算術運算符、邏輯運算符、關係運算符、賦值運算符、逗號運算符、條件運算符和位運算符。本節主要介紹算術運算符,其他的運算符將在後續章節中詳細介紹。
1.3.1 算術運算符
C語言中的算術運算符和數學中的算術運算相似,是對數據進行算術運算的。算術運算符的運算對象、運算規則及結合性如表1-5所示。
表1-5 算術運算符
運算對象個數 名 稱 運 算 符 運 算 規 則 運算對象
數據類型 結 合 性
單目 正 + 取原值 整型或實型 自右向左
負 – 取負值
雙目 加 + 加法運算 自左向右
減 – 減法運算
乘 * 乘法運算
除 / 除法運算
模 % 整除取余 整型
單目 增1(前綴) ++ 先加1,後使用 整型、字元型、指針型變數或數組元素、實型 自右向左
增1(後綴) ++ 先使用,後加1
減1(前綴) – – 先減1,後使用
減1(後綴) – – 先使用,後減1
在C語言中,參加運算的對象個數稱為運算符的「目」。單目運算符是指參加運算的對象只有一個,如+10,–67,x++。雙目運算符是指參加運算的對象有兩個,如2+3,7%3。
相同運算符連續出現時,有的運算符是從左至右進行運算,有的運算符是從右至左進行運算,C語言中,將運算符的這種特性稱為結合性。
加法(+)、減法(–)、乘法(*)與數學中的算術運算相同。例如:3.5+4.7結果是8.2;3.5 – 4.7結果是–0.8;3.5*4.7結果是16.45。
除法運算(/)與數學中的除法不完全相同,它與參加運算的對象的數據類型相關。當參加運算的兩個對象均為整型數據時,其運算結果為數學運算結果的整數部分。如7/4結果為1,而不是1.75。若參加運算的兩個對象有一個是實型或兩個都是實型,那麼運算結果為實際運算的值,如7/5.0的運算結果為1.4。
模運算的運算對象必須為整型,結果是相除後的餘數,如7%5結果為2。
增1減1運算符都是單目運算符,用來對整型、實型、字元型、指針型變數或數組元素等變數進行加1或減1運算,運算的結果仍是原類型。
1.3.2 常用數學函數
C語言系統提供了400多個標準函數(稱為庫函數),設計程序時可以直接使用它們。庫函數主要包括數學函數、字元處理函數、類型轉換函數、文件管理函數及內存管理函數等幾類。下面介紹常用的數學函數,其他類型的函數將在後面章節中陸續介紹。
1.函數名:abs
原型:int abs(int i);
功能:求整數的絕對值。
例如,設x=abs(5),y=abs(–5),z=abs(0),則x=5,y=5,z=0。
2.函數名:labs
原型:long labs(long n);
功能:求長整型數的絕對值。
例如,設x=labs(40000L),y=labs(–5),z=labs(0),則x=40000,y=5,z=0。
3.函數名:fabs
原型:double fabs(double x);
功能:求實數的絕對值。
例如,設x=fabs(5.3),y=fabs(–5.3),z=fabs(0),則x=5.3,y=5.3,z=0。
4.函數名:floor
原型:double floor(double x);
功能:求不大於x的最大整數,它相當於數學函數[x]。
例如,設x=floor(–5.1),y=floor(5.9),z=floor(5),則x= –6,y=5,z=5。
5.函數名:ceil
原型:double ceil(double x);
功能:求不小於x的最小整數。
例如,設x=ceil(–5.9),y=ceil(5.1),z=ceil(5),則x = –5,y=6,z=5
6.函數名:sqrt
原型:double sqrt(double x);
功能:求x的平方根。
例如,設x=sqrt(4),y=sqrt(16),則x=1.414214,y=4.0
7.函數名:log10
原型:double log10(double x);
功能:求x的常用對數。
8.函數名:log
原型:double log(double x);
功能:求x的自然對數。
9.函數名:exp
原型:double exp(double x);
功能:求歐拉常數e的x次方。
10.函數名:pow10
原型:double pow10(int p);
功能:求10的p次方。
例如,設x=pow10(3),y=pow10(0),則x=1000,y=1
11.函數名:pow
原型:double pow(double x, double y);
功能:求x的y次方。
例如,設x=pow(3,2),y=pow(–3,2),則x=9,y=9
12.函數名:sin
原型:double sin(double x);
功能:正弦函數。
13.函數名:cos
原型:double cos(double x);
功能:餘弦函數。
14.函數名:tan
原型:double tan(double x);
功能:正切函數。
1.3.3 算術表達式
由算術運算符和運算對象連接形成的式子稱為算術表達式。
算術運算符的優先順序從高到低規定如下:
++ – –
* / %
+ –
位於同一行的運算符的優先順序相同。
1.4 數據類型轉換規則
對數據進行運算時,要求參與運算的對象的數據類型相同(運算得到的運算結果的類型與運算對象也相同)。因此,在運算過程中常常需要對變數或常量的數據類型進行轉換,轉換的方法有兩種,一種是系統自動轉換(又稱為隱式轉換);另一種是在程序中強制轉換(又稱為顯式轉換)。
1.4.1 自動轉換規則
在不同類型數據的混合運算中,由系統自動實現轉換。轉換規則如下:
(1)若參與運算的數據的類型不同,則應先轉換成同一類型,然後進行運算。
(2)將低類型數據轉換成高類型數據後進行運算。如int型和long型運算時,先把int型轉換成long型後再進行運算。
類型的高低是根據其所佔空間的位元組數按從小到大的順序排列的,順序如下:
char,int,long,float,double。
(3)所有的浮點運算都是按照雙精度進行運算的,即使僅含float型單精度量運算的表達式,也要先轉換成double型,再作運算。
(4)char型和short型參與運算時,必須先轉換成int型。
例如,設有:
float PI=3.14;
int s,r=7;
s=r*r*PI;
因為PI為單精度型,s和r為整型,在執行s=r*r*PI語句時,r和PI都轉換成double型後再進行計算,運算結果也為double型,右邊的運算結果為153.86,但由於s為整型,故應將賦值號右邊的運算結果轉換成整型(捨去小數部分),因此s的值為153。
1.4.2 強制類型轉換
強制類型轉換是通過類型轉換運算來實現的,其語法格式如下:
(類型說明符)(表達式)
其功能是把表達式的運算結果強制轉換成類型說明符所表示的類型。例如: (float) a 把a轉換為實型;(int)(x+y) 把x+y的結果轉換為整型;而(int)x+y 則只將x轉換為整型。
在使用強制類型轉換時應注意以下問題:
(1)類型說明符和表達式都必須加括弧(單個變數可以不加括弧),如把(int)(x+y)寫成(int)x+y則只是把x轉換成int型之後再與y相加。
(2)對於被轉換的單個變數而言,無論是強制轉換還是自動轉換,都只是為了本次運算的需要而對變數的數據長度進行臨時性轉換,而不會改變變數定義時所聲明的類型。
例如,設有:
float f = –5.75;
int x;
x= (int)f;
將f強制轉換成整數–5,因此x = –5,而f本身的類型並未改變且其值仍為–5.75。
1.5 程序結構
1.5.1 主函數結構
每一個C源程序都是一系列函數的集合。其中,必須有且只能有一個主函數,其函數名為main,其結構如下:
void main(void)
{
…
}
其中,void main(void) 稱為函數說明部分(又稱函數頭),而
{
…
}
稱為函數體,函數體中的每個語句行末尾都必須用分號結束。
1.5.2 文件包含命令
C語言系統提供了400多個庫函數,並將這些函數根據其功能分成了若干組,每組都有一個組名。如數學類函數組的組名為math。在C語言系統所安裝文件夾的下級文件夾中有一個與其相對應的文件math.h,這些擴展名為.h的文件稱為頭文件。
include稱為文件包含命令,當用戶在程序中使用到系統的標準庫函數中的函數時,需要在程序中(一般在程序的首部)增加一條預處理語句如#includestdio.h,以便告知系統需要使用某個頭文件中的函數。
1.5.3 C語言程序基本結構
一個完整的C語言源程序由如下5個部分構成:
(1)預處理命令;
(2)全局變數說明;
(3)函數原型說明;
(4)主函數;
(5)其他子函數。
一個簡單的C語言源程序只需要(1)和(4)兩個部分,其中「預處理命令」一般是一系列文件包含命令,即include命令。
關於程序結構,應當注意以下幾方面的問題:
(1)可由若干個函數構成,其中必須有且只有一個以main命名的主函數,可以沒有其他函數。每個函數完成一定的功能,函數與函數之間可以通過參數傳遞信息。main()函數可以位於原程序文件中任何位置,但程序的執行總是從main函數開始,main函數執行完畢時程序執行結束。
(2)子函數的結構與主函數相同,即分為函數說明部分和函數體兩個部分。
(3)函數中的每個語句最後要有一個分號,作為語句結束標記。但某些特殊的語句行末尾不需要分號,有時還不能有分號。
(4)「/*」和「*/」括住的任意一段字元稱為「程序注釋」,用來對程序作說明,可以插入到程序的任何地方,且可以跨行使用。程序注釋不影響程序運行結果。
(5)函數的書寫格式很靈活,在一行中可以書寫多個語句(每個語句末尾都要有分號),一個語句也可以寫在多行中。在程序的任何地方都可以插入空格或回車符。
(6)主函數可以調用任何子函數但不能調用它自己,任何子函數之間也可以相互調用,但是子函數不能調用主函數。
下面是一個簡單的C語言源程序:
【例1-1】 求圓的面積。
#include stdio.h
void main(void)
{
float r,s,p=3.14;
r=10.5;
s=r*r*p;
printf(“圓的面積是:%f “,s);
}
下面是一個較完整的C語言源程序:
【例1-2】 較完整的C語言程序示例。
#includestdio.h
#includeconio.h
int y,z;
void abc(int x);
void main(void)
{
int x;
clrscr();
x=10;
y=20;
z=30;
printf(“ok1: x=%d y=%d z=%d \n”,x,y,z);
abc(x);
printf(“ok2: x=%d y=%d z=%d \n”,x,y,z);
getch();
}
void abc(int x)
{
int y;
printf(“ok3: x=%d y=%d z=%d \n”,x,y,z);
x=100;
y=200;
z=300;
printf(“ok4: x=%d y=%d z=%d \n”,x,y,z);
}
怎麼自學C語言 入門
在開始學習C語言基礎時,要反問自己為什麼學C語言,如何學好C語言。同時要知道什麼是C語言以及C語言的發展。
當對這些知識有了一個概念之後,就正式開始學習C語言了,其中,可能會學到數據類型、運算符、表達式、數組、/函等,這些是為了對C語言的基礎有一個基礎認知,擴展,整合;還會學到指針、聯合體、結構體、枚舉、位運算、預處理、文件等知識點,學這些是為了全面掌握面向過程設計、實練邏輯演算法,拓展思維模式等過程。
學完了這些,還可能會講到VS、VC++、C++、C和TC—認識開發環境和語言的區別。
這裡只給大家介紹一個大概,如果有興趣的話,可以和我私聊哦
第二階段:上機實戰訓練
學完了這些理論知識後,就得將學到的知識點全部運用到實踐中去。這樣才能更好學習入門。分享不錯裙的有軟體視頻資料分享
1、C++語言熟練,熟悉C++語法,包括面向對象的概念,模版等
這一階段需要比較艱辛的過程,需要學習很多書,包括《C++ Programming Language》,《Effective C++》,《More Effective C++》,《Thinking in C++》,《C++對象模型》,《C++ 模版》,如果上述書籍已經很熟悉了,本人認為,在學習階段,已經很不錯了。該過程可以在大學完成,需要一到兩年的時間,應為是純理論的東西,只能算熟悉。在該過程中,需要做一些簡單的程序。
2、C++做項目,使用C++做項目,需要比較多的其它庫,比如UI庫,還需要使用一些網路庫等,這個時候,就可以看到C++的博大精深了,此時,光有C++語言知識是不夠的,需要補充一些平台開發的知識,看看開源的C++項目。比如:Windows程序設計,C++網路編程,DirectX遊戲開發,如果用C++做了兩個以上的項目,那以及很不錯了。
3、最高境界是精通,自然是量的積累才會有質地變化。
學習C語言需要掌握哪些基本知識?
1.入門程序
#include stdio.h
int main()
{
printf(“Hello World!”);
return 0;
}
2.數據類型
數據類型:
1.基本數據類型:
1.1. 整型:int 4個位元組
1.2. 字元型:char 1個位元組
1.3. 實型(浮點型)
1.3.1.單精度型:float 4個位元組
1.3.2.雙精度型:double 8個位元組
2.構造類型:
2.1.枚舉類型
2.2.數組類型
2.3.結構體類型
2.4.共用體類型
3.指針類型:
4.空類型:
3.格式化輸出語句
%d:十進位整數;
%c:單個字元;
%s:字元串;
%f:6位小數;
#include stdio.h
int main()
{
int age = 18;
float height = 1.85;
char unit = ‘m’;
printf(“小明今年%d歲\n”, age);
printf(“小明身高%f%c\n”, height, unit);
printf(“小明現在在慕課網上學習IT技術\n”);
return 0;
}
學好C++才是入職大廠的敲門磚! 當年要是有這課,我的C++也不至於這樣
已失效
4.常量
值不發生改變的量成為常量;
定義字元常量(注意後面沒有;)
#include stdio.h
#define POCKETMONEY 10 //定義常量及常量值
int main()
{
printf(“小明今天又得到%d元零花錢\n”, POCKETMONEY);
return 0;
}
5.運算符
5.1.算數運算符:+,-,*,/,%,++,–;前++/–,先運算,再取值.後++/–,先取值,再運算;
5.2.賦值運算符:
5.3.關係運算符;
5.4.邏輯運算符;
5.5.三目運算符:
表達式1 ? 表達式2 : 表達式3;
6.水仙花數計算
輸出所有三位數的水仙花數字
所謂「水仙花數」是指一個三位數,其各位數字立方和等於該數,如:153就是一個水仙花數,153=111+555+333。
#include stdio.h
int main()
{
//定義三位數num,個位數sd,十位數td,百位數hd
int num, sd, td, hd;
//循環所有三位數
for( num=100 ; num1000 ; num++ )
{
//獲取三位數字num百位上的數字
hd = num/100 ;
//獲取三位數字num十位上的數字
td = num/10%10 ;
//獲取三位數字num個位上的數字
sd = num%10 ;
//水仙花數的條件是什麼?
if(num ==hd*hd*hd+td*td*td+sd*sd*sd )
{
printf(“水仙花數字:%d\n”, num);
}
}
return 0;
}
7.列印正三角形的*
#include stdio.h
int main()
{
int i, j, k;
for(i=1; i5; i++)
{
/* 觀察每行的空格數量,補全循環條件 */
for( j=i ; j5 ; j++ )
{
printf(” “); //輸出空格
}
/* 觀察每行*號的數量,補全循環條件 */
for( k=0 ; k2*i-1 ; k++ )
{
printf(“*”); //每行輸出的*號
}
printf(“\n”); //每次循環換行
}
return 0;
}
8.臭名遠揚的goto語句
很少使用
#include stdio.h
int main()
{
int sum = 0;
int i;
for(i=1; i=10; i++)
{
printf(“%d\n”, i);
if(i==3){
goto LOOP;//滿足條件就執行goto語句
}
}
//執行goto
LOOP:printf(“結束for循環了….”); //請選擇合適位置添加標識符
return 0;
}
9.形參與實參
形參:形參是在定義函數名和函數體的時候使用的參數,目的是用來接收調用該函數時傳入的參數;
實參:實參是在調用時傳遞該函數的參數。
函數的形參和實參具有以下特點:
形參只有在被調用時才分配內存單元,在調用結束時,即刻釋放所分配的內存單元。因此,形參只有在函數內部有效。函數調用結束返回主調函數後則不能再使用該形參變數。
實參可以是常量、變數、表達式、函數等,無論實參是何種類型的量,在進行函數調用時,它們都必須具有確定的值,以便把這些值傳送給形參。因此應預先用賦值等辦法使實參獲得確定值。
在參數傳遞時,實參和形參在數量上,類型上,順序上應嚴格一致,否則會發生類型不匹配」的錯誤。
10.函數返回值注意
注意:void函數中可以有執行代碼塊,但是不能有返回值,另void函數中如果有return語句,該語句只能起到結束函數運行的功能。其格式為:return;
11.遞歸
#include stdio.h
int getPeachNumber(int n) //這裡要定義n,要不編譯器會報錯!
{
int num;
if(n==10)
{
return 1;
}
else
{
num = (getPeachNumber(n+1)+1)*2;
printf(“第%d天所剩桃子%d個\n”, n, num);
}
return num;
}
int main()
{
int num = getPeachNumber(1);
printf(“猴子第一天摘了:%d個桃子。\n”, num);
return 0;
}
12.變數存儲類別 !
12.1.生存周期劃分存儲方式
C語言根據變數的生存周期來劃分,可以分為靜態存儲方式和動態存儲方式。
靜態存儲方式:是指在程序運行期間分配固定的存儲空間的方式。靜態存儲區中存放了在整個程序執行過程中都存在的變數,如全局變數。
動態存儲方式:是指在程序運行期間根據需要進行動態的分配存儲空間的方式。動態存儲區中存放的變數是根據程序運行的需要而建立和釋放的,通常包括:函數形式參數;自動變數;函數調用時的現場保護和返回地址等。
12.2.存儲類型劃分
C語言中存儲類別又分為四類:自動(auto)、靜態(static)、寄存器的(register)和外部的(extern) ;
用關鍵字auto定義的變數為自動變數,auto可以省略,auto不寫則隱含定為「自動存儲類別」,屬於動態存儲方式。
用static修飾的為靜態變數,如果定義在函數內部的,稱之為靜態局部變數;如果定義在函數外部,稱之為靜態外部變數。
注意:靜態局部變數屬於靜態存儲類別,在靜態存儲區內分配存儲單元,在程序整個運行期間都不釋放;靜態局部變數在編譯時賦初值,即只賦初值一次;如果在定義局部變數時不賦初值的話,則對靜態局部變數來說,編譯時自動賦初值0(對數值型變數)或空字元(對字元變數)
為了提高效率,C語言允許將局部變數的值放在CPU中的寄存器中,這種變數叫「寄存器變數」,用關鍵字register作聲明。
注意:只有局部自動變數和形式參數可以作為寄存器變數;一個計算機系統中的寄存器數目有限,不能定義任意多個寄存器變數;局部靜態變數不能定義為寄存器變數。
用extern聲明的的變數是外部變數,外部變數的意義是某函數可以調用在該函數之後定義的變數。
#includ stdio.h
//來源公眾號:C語言與CPP編程
int main()
{
//定義外部局部變數
extern int x;
return 0;
}
int x=100;
13.內部函數外部函數 !
在C語言中不能被其他源文件調用的函數稱為內部函數 ,內部函數由static關鍵字來定義,因此又被稱為靜態函數,形式為:
static [數據類型] 函數名([參數])
這裡的static是對函數的作用範圍的一個限定,限定該函數只能在其所處的源文件中使用,因此在不同文件中出現相同的函數名稱的內部函數是沒有問題的。
在C語言中能被其他源文件調用的函數稱為外部函數 ,外部函數由extern關鍵字來定義,形式為:
extern [數據類型] 函數名([參數])
C語言規定,在沒有指定函數的作用範圍時,系統會默認認為是外部函數,因此當需要定義外部函數時extern也可以省略。 extern可以省略; 14.數組 數組:一塊連續的,大小固定並且裡面的數據類型一致的內存空間, 數組的聲明:數據類型 數組名稱[長度n]
數據類型 數組名稱[長度n] = {元素1,元素2,元素3,……};
數據類型 數組名稱[] = {元素1,元素2,元素3,……};
數類類型 數組名稱[長度n]; 數組名稱[0] = 元素1;數組名稱[1] = 元素2;…… 注意: 1、數組的下標均以0開始; 2、數組在初始化的時候,數組內元素的個數不能大於聲明的數組長度; 3、如果採用第一種初始化方式,元素個數小於數組的長度時,多餘的數組元素初始化為0; 4、在聲明數組後沒有進行初始化的時候,靜態(static)和外部(extern)類型的數組元素初始化元素為0,自動(auto)類型的數組的元素初始化值不確定。
15.數組遍歷
#include stdio.h
int main()
{
int arr[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
int i;
for(i=0;i10;i++)
{
printf(“%d\n”,arr[i]);
}
return 0;
}
數組的冒泡排序
冒泡排序的思想:相鄰元素兩兩比較,將較大的數字放在後面,直到將所有數字全部排序。
字元串與數組
在C語言中,是沒有辦法直接定義子字元串數據類型的,需使用數組來定義所要的字元串,形式如下:
char 字元串名稱[長度] = “字元串內容”;
char 字元串名稱[長度] = {‘字元串1′,’字元串2′,….,’字元串n’,’\0′};
注:
[]中的長度可以省略不寫;
採用第二種方式最後一個元素必須是’\0′,表示結束;
第二種方式不能寫中文!; 輸出字元串時,要使用:printf(“%s”,字元數組名);或puts(字元數組名);
16.字元串函數
strlen(s):獲取字元串s的長度;
strcmp(s1,s2):比較字元串;比較的時候會把字元串轉換成ASCII碼再進行比較,返回結果為0表示s1和s2的ASCII碼值相等,返回結果為1表示s1比s2的ASCII碼大,返回結果為-1表示s1比s2的ACSII碼小;
strcpy(s1,s2):字元串拷貝;s2會取代s1中的內容;
strcat(s1,s2)將s2拼接到s1後面;注意:s1的length要足夠才可以!
atoi(s1)將字元串轉為整數!
17.多維數組
數據類型 數組名稱[常量表達式1]…[常量表達式n];
多維數組的初始化與一維數組的初始化類似也是分兩種:
數據類型 數組名稱[常量表達式1][常量表達式2]…[常量表達式n] = {{值1,..,值n},{值1,..,值n},…,{值1,..,值n}};
數據類型 數組名稱[常量表達式1][常量表達式2]…[常量表達式n]; 數組名稱[下標1][下標2]…[下標n] = 值;
多維數組初始化要注意以下事項:
採用第一種始化時數組聲明必須指定列的維數。因為系統會根據數組中元素的總個數來分配空間,當知道元素總個數以及列的維數後,會直接計算出行的維數;
採用第二種初始化時數組聲明必須同時指定行和列的維數。
18.多維度數組的遍歷
使用嵌套循環
注意:多維數組的每一維下標均不能越界!
19.結構體
C 數組允許定義可存儲相同類型數據項的變數,結構是 C 編程中另一種用戶自定義的可用的數據類型,它允許您存儲不同類型的數據項。
結構用於表示一條記錄,假設您想要跟蹤圖書館中書本的動態,您可能需要跟蹤每本書的下列屬性:
Title
Author
Subject
Book ID
定義結構
為了定義結構,您必須使用 struct 語句。struct 語句定義了一個包含多個成員的新的數據類型,struct 語句的格式如下:
struct tag {
member-list
member-list
member-list
…
} variable-list ;
tag 是結構體標籤。
member-list 是標準的變數定義,比如 int i; 或者 float f,或者其他有效的變數定義。
variable-list 結構變數,定義在結構的末尾,最後一個分號之前,您可以指定一個或多個結構變數。下面是聲明 Book 結構的方式:
struct Books
{
char title[50];
char author[50];
char subject[100];
int book_id;
} book;
在一般情況下,tag、member-list、variable-list 這 3 部分至少要出現 2 個。以下為實例:
//此聲明聲明了擁有3個成員的結構體,分別為整型的a,字元型的b和雙精度的c
//同時又聲明了結構體變數s1
//這個結構體並沒有標明其標籤
struct
{
int a;
char b;
double c;
} s1;
//此聲明聲明了擁有3個成員的結構體,分別為整型的a,字元型的b和雙精度的c
//結構體的標籤被命名為SIMPLE,沒有聲明變數
struct SIMPLE
{
int a;
char b;
double c;
};
//用SIMPLE標籤的結構體,另外聲明了變數t1、t2、t3
struct SIMPLE t1, t2[20], *t3;
//也可以用typedef創建新類型
typedef struct
{
int a;
char b;
double c;
} Simple2;
//現在可以用Simple2作為類型聲明新的結構體變數
Simple2 u1, u2[20], *u3;
訪問結構成員
為了訪問結構的成員,我們使用成員訪問運算符(.)。成員訪問運算符是結構變數名稱和我們要訪問的結構成員之間的一個句號。您可以使用 struct 關鍵字來定義結構類型的變數。下面的實例演示了結構的用法:
#include stdio.h
#include string.h
//來源公眾號:C語言與CPP編程
struct Books
{
char title[50];
char author[50];
char subject[100];
int book_id;
};
int main( )
{
struct Books Book1; /* 聲明 Book1,類型為 Books */
struct Books Book2; /* 聲明 Book2,類型為 Books */
/* Book1 詳述 */
strcpy( Book1.title, “C Programming”);
strcpy( Book1.author, “Nuha Ali”);
strcpy( Book1.subject, “C Programming Tutorial”);
Book1.book_id = 6495407;
/* Book2 詳述 */
strcpy( Book2.title, “Telecom Billing”);
strcpy( Book2.author, “Zara Ali”);
strcpy( Book2.subject, “Telecom Billing Tutorial”);
Book2.book_id = 6495700;
/* 輸出 Book1 信息 */
printf( “Book 1 title : %s\n”, Book1.title);
printf( “Book 1 author : %s\n”, Book1.author);
printf( “Book 1 subject : %s\n”, Book1.subject);
printf( “Book 1 book_id : %d\n”, Book1.book_id);
/* 輸出 Book2 信息 */
printf( “Book 2 title : %s\n”, Book2.title);
printf( “Book 2 author : %s\n”, Book2.author);
printf( “Book 2 subject : %s\n”, Book2.subject);
printf( “Book 2 book_id : %d\n”, Book2.book_id);
return 0;
}
學好C++才是入職大廠的敲門磚! 當年要是有這課,我的C++也不至於這樣
已失效
20.共用體
共用體是一種特殊的數據類型,允許您在相同的內存位置存儲不同的數據類型。您可以定義一個帶有多成員的共用體,但是任何時候只能有一個成員帶有值。共用體提供了一種使用相同的內存位置的有效方式。
#include stdio.h
#include string.h
union Data
{
int i;
float f;
char str[20];
};
int main( )
{
union Data data;
printf( “Memory size occupied by data : %d\n”, sizeof(data));
return 0;
}
21.指針
#include stdio.h
int main ()
{
int var = 20; /* 實際變數的聲明 */
int *ip; /* 指針變數的聲明 */
ip = var; /* 在指針變數中存儲 var 的地址 */
printf(“Address of var variable: %p\n”, var );
/* 在指針變數中存儲的地址 */
printf(“Address stored in ip variable: %p\n”, ip );
/* 使用指針訪問值 */
printf(“Value of *ip variable: %d\n”, *ip );
return 0;
}
22.文件讀寫
寫入文件
#include stdio.h
int main()
{
FILE *fp = NULL;
fp = fopen(“/tmp/test.txt”, “w+”);
fprintf(fp, “This is testing for fprintf…\n”);
fputs(“This is testing for fputs…\n”, fp);
fclose(fp);
}
讀取文件
#include stdio.h
int main()
{
FILE *fp = NULL;
char buff[255];
fp = fopen(“/tmp/test.txt”, “r”);
fscanf(fp, “%s”, buff);
printf(“1: %s\n”, buff );
fgets(buff, 255, (FILE*)fp);
printf(“2: %s\n”, buff );
fgets(buff, 255, (FILE*)fp);
printf(“3: %s\n”, buff );
fclose(fp);
}
C語言與C++學習路線
23.排序演算法
十大經典排序演算法(動態演示+代碼)
24.查找演算法
九種查找演算法
25.面試知識
C語言與C++面試知識總結
26.字元串操作
字元串操作的全面總結
27. C語言常用標準庫解讀
C語言常用標準庫解讀
28. C語言最常用的貪心演算法
C語言最常用的貪心演算法就這麼被攻克了
29. 常見的C語言內存錯誤及對策
常見的C語言內存錯誤及對策
30. C語言實現面向對象的原理
C語言實現面向對象的原理
31. C語言/C++內存管理
看完這篇你還能不懂C語言/C++內存管理?
32. 再談C語言指針
再談指針:大佬給你撥開 C 指針的雲霧
C語言函數指針之回調函數
C語言指針詳解(文末有福利)
33. C語言預處理命令
長文詳解:C語言預處理命令
34. C語言高效編程與代碼優化
C語言高效編程與代碼優化
35. C語言結構體
C語言之結構體就這樣被攻克了!值得收藏!
36. 原碼, 反碼, 補碼 詳解
原碼, 反碼, 補碼 詳解
37. C語言宏定義
簡述C語言宏定義的使用
38. c語言之共用體union、枚舉、大小端模式
c語言之共用體union、枚舉、大小端模式
零基礎如何學習C語言?
第一、多看代碼。在一定的基礎之後,您應該多看其他人的代碼,並注意代碼中的演算法和數據結構。畢竟,學習C是演算法和數據結構的重要關口。當涉及到數據結構時,指針是其中的一個重要部分,大多數數據結構都是基於指針的。例如鏈表、隊列、樹、圖等等,所以只有當你學好了指針,你才能真正學會C語言。
別的方面也要注意一下,比如變數的命名,庫函數的用法等等。有些庫函數是經常要用到的,對於這些函數的用法就要牢牢的記住。
第二、要自己動手,程序是一項真正的工作,光說不練假把式,永遠就只停留在理論階段。你可以在開始的時候練習書中的練習題。對於自己不懂的地方,自己編一個小程序實驗是最好的方法,能給自己留下深刻的印象。你應該不斷改正你的壞習慣和認知錯誤。有一個地方可以試著編一個小遊戲,如果你的基礎很紮實了,可以編造一些關於數據結構方面的東西。
第三、選擇一個好的編譯器,英文版TurboCv2.0,是最經典的C語言編譯器,另外一個就是win-tc1.91 ,支持Windows下的編譯。
第四、養成良好的編程習慣,基本上每本C語言教材上都會教到,作為新手一定要時時的遵守。在比較複雜的代碼後面一定要有注釋,然後語句的嵌套不能過長,再者,注意語句的選擇,C語言對一個程序設計人是非常重要的,是開啟程序設計之路的鑰匙。如果不懂C語言,想寫程序是非常可笑的。
c語言編程怎樣入門
任何知識的學習沒有太多捷徑,但有經驗、方法及教訓
(1)基礎教材選擇-系統又通俗易懂,最好有該書配套免費視頻
建議選擇系統正統的大學教材,盡量不要選擇「多少天精通C語言」等吸引眼球的教程,相信一點C語言學習沒有速成。這裡給大家推薦一本不錯的入門教程:清華大學出版社-孫海洋-C語言程序設計,講解很透徹、知識點很全面、常式較多且通俗易懂。優酷「孫海洋課題」還有全書免費教學視頻,便於自學。
(2)動起手來–立馬安裝VC++6.0或VS開發環境
C語言是特別注重動手實操能力的課程!!動起手來,現在開始安裝VC++6.0開發環境,從第一個經典程序「Hello,world!」開始,每一個例題及知識點均通過開發環境驗證、理解深化。多做每一章小型實驗操作(網上多得很)。提升代碼調試能力。
(3)有了基礎後,一般可以有兩個發展方向可供選擇
(i)轉向項目實戰
建議購買一本C語言項目教程,在實踐項目中強化理論知識的學習。
(ii)繼續深入理論學習
建議購買國外經典深入學習C語言的教程,人民郵電出版社-C Primer Plus(第5版),或者 機械工業出版社-C程序設計語言(第2版.新版)
下定信心,堅持下去!希望對你有所幫助。
下面是轉載的 孫海洋 版 C語言程序設計 部分內容截圖。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/244777.html