内容導讀
1.什麼是c語言
1.1計算機語言
1.2C語言自我介紹
1.2.1概述
1.2.2前世今生
1.2.3C語言特點
1.3第一個C程式
1.4C語言關鍵字
1.5補碼
2.輸入與輸出
2.1輸出
2.2輸入
3.資料類型
3.1資料類型分類
3.2常見資料類型所占記憶體大小與取值範圍
3.3字元型資料與ASCII碼
3.3.1字元型字元集
3.3.2ASCII
4變量與常量
4.1概述
4.2常量
4.3變量
4.3.1變量的屬性與使用方法
4.3.2變量的分類,作用域和生命周期
5.了解字元的奧秘
5.1字元串
5.2轉義字元
5.3運算符
5.3.1常見運算符歸類
5.3.2自增(++)自減(--)運算符
5.3.3自動類型轉換
5.3.4強制類型轉換
作者水準很有限,如果發現錯誤,一定要及時告知作者哦!感謝感謝! 部落客的碼雲gitee,平常部落客寫的程式代碼都在裡面。
機器語言:計算機能直接識别和接受的二進制代碼稱為機器指令。機器指令的集合就是該計算機的機器語言。 特點:難學,難記,難檢查,難修改,難以推廣使用。依賴具體機器難以移植。 彙編語言:機器語言的符号化。用英文字母和數字表示指令的符号語言。 特點:相比機器語言簡單好記,但仍然難以普及。彙編指令需通過彙程式設計式轉換為機器指令才能被計算機執行。依賴具體機器難以移植。 進階語言:進階語言更接近于人們習慣使用的自然語言和數學語言。 特點:功能強大,不依賴于具體機器。用進階語言編寫的源程式需要通過編譯程式轉換為機器指令的目标程式。
C語言是一門面向過程的計算機程式設計進階語言,與C++、Java等面向對象程式設計語言有所不同。C語言的設計目标是提供一種能以簡易的方式編譯、處理低級存儲器、僅産生少量的機器碼以及不需要任何運作環境支援便能運作的程式設計語言。C語言描述問題比彙編語言迅速,工作量小、可讀性好,易于調試、修改和移植,而代碼品質與彙編語言相當。C語言一般隻比彙編語言代碼生成的目标程式效率低10%~20%。是以,C語言可以編寫系統軟體。 二十世紀八十年代,美國國家标準局為了避免各開發廠商用的C語言文法産生差異,給C語言制定了一套完整的美國國家标準文法,稱為ANSI C。作為C語言最初的标準。 2011年12月8日,國際标準化組織(ISO)和國際電工委員會(IEC)釋出的C11标準是C語言的第三個官方标準,也是C語言的最新标準,該标準更好的支援了漢字函數名和漢字辨別符,一定程度上實作了漢字程式設計。 C語言編譯器普遍存在于各種不同的作業系統中,例如Microsoft Windows, Mac OS X, Linux, Unix等。C語言的設計影響了衆多後來的程式設計語言,例如C++、Objective-C、Java、C#等。 摘自《360百科》
1972—1973年間,美國貝爾實驗室的D.M.Ritchie 在B語言的基礎上設計出了C語言。 最初的C語言隻是為描述和實作UNIX作業系統提供一種工作語言而設計的。 随着UNIX的日益廣泛使用,C語言也迅速得到推廣。1978年以後,C語言先後移植到大、中、小和微型計算機上。C語言便很快風靡全世界,成為世界上應用最廣泛的程式設計進階語言。 以UNIX第7版中的C語言編譯程式為基礎,1978年,Brian W.Kernighan和Dennis M.Ritchie 合著了影響深遠的名著The C Programming Language,這本書中介紹的C語言成為後來廣泛使用的C語言版本的基礎,它是實際上第一個C語言标準。 1983年,美國國家标準協會(ANSI),根據C語言問世以來各種版本對C語言的發展和擴充,制定了第一個C語言标準草案(’83 ANSI C)。 1989年,ANSI公布了一個完整的C語言标準——ANSI X3.159—1989(常稱為ANSI C或C 89)。 1990年,國際标準化組織ISO(International Standard Organization)接受C 89作為國際标準ISO/IEC 9899: 1990,它和ANSI的C 89基本上是相同的。 1999年,ISO又對C語言标準進行了修訂,在基本保留原來的C語言特征的基礎上,針對應用的需要,增加了一些功能,尤其是C++中的一些功能,并在2001年和2004年先後進行了兩次技術修正,它被稱為C 99,C 99是C 89的擴充。

要求在螢幕上輸出:歡迎加入C語言大家庭!
輸出示意圖
程式解讀分析 main是函數的名字,表示“主函數”;每一個C語言程式都必須有一個 main 函數。 main前面的int表示此函數的類型是int類型(整型),即在執行主函數後會得到一個值(即函數值),其值為整型。 return 0;的作用是當main函數執行結束前将整數0作為函數值,傳回到調用函數處。 函數體由花括号{}括起來。 printf是C編譯系統提供的函數庫中的輸出函數。printf函數中雙引号内的字元串″歡迎加入C語言大家庭!″按原樣輸出。\n是換行符,即在輸出″歡迎加入C語言大家庭!″後,顯示屏上的光标位置移到下一行的開頭。 每個語句最後都有一個分号,表示語句結束。 在使用函數庫中的輸入輸出函數時,編譯系統要求程式提供有關此函數的資訊,程式第1行“#include <stdio.h>”的作用就是用來提供這些資訊的。stdio.h是系統提供的一個檔案名,stdio是standard input & output的縮寫,檔案字尾.h的意思是頭檔案(header file),因為這些檔案都是放在程式各檔案子產品的開頭的。輸入輸出函數的相關資訊已事先放在stdio.h檔案中。 //表示從此處到本行結束是“注釋”,用來對程式有關部分進行必要的說明。在寫C程式時應當多用注釋,以友善自己和别人了解程式各部分的作用。在程式進行預編譯處理時将每個注釋替換為一個空格,是以在編譯時注釋部分不産生目标代碼,注釋對運作不起作用。注釋隻是給人看的,而不是讓計算機執行的。
在這個地方談到了注釋,那在C語言中可以用什麼符号表示呢?
以//開始的單行注釋
以/*開始,以*/結束的塊式注釋
在計算機中,帶符号的整型都是以補碼形式存在的。
printf函數——格式聲明(1) printf函數輸出時,務必注意輸出對象的類型應與格式說明比對,否則将會出現錯誤。 (2) 除了X,E,G外,其他格式字元必須用小寫字母,如%d不能寫成%D。 (3) 可以在printf函數中的格式控制字元串内包含轉義字元,如\n,\t,\b,\r,\f和\377等。 (4) 一個格式聲明以“%”開頭,以格式字元之一為結束,中間可以插入附加字元(也稱修飾符)。 (5) 如果想輸出字元“%”,應該在“格式控制字元串”中用連續兩個“%”表示,如:printf(″%f%%\n″,1.0/3);![]()
揭開C語言神秘的面紗,簡單的C語言程式
putchar函數 從計算機向顯示器輸出一個字元。用putchar函數既可以輸出可顯示字元,也可以輸出控制字元和轉義字元。 putchar(c)中的c可以是字元常量、整型常量、字元變量或整型變量(其值在字元的ASCII代碼範圍内)。![]()
揭開C語言神秘的面紗,簡單的C語言程式
scanf函數——格式聲明scanf("%類型",位址); (1) scanf函數中的格式控制後面應當是變量位址,而不是變量名。 應與上述格式說明比對,否則将會出現錯誤。 (2)如果在格式控制字元串中除了格式聲明以外還有其他字元,則在輸入資料時在對應的位置上應輸入與這些字元相同的字元。 (3)在用“%c”格式聲明輸入字元時,空格字元和“轉義字元”中的字元都作為有效字元輸入。 (4) 在輸入數值資料時,如輸入空格、回車、Tab鍵或遇非法字元(不屬于數值的字元),認為該資料結束。![]()
揭開C語言神秘的面紗,簡單的C語言程式
getchar函數 向計算機輸入一個字元。函數沒有參數。 函數的值就是從輸入裝置得到的字元。 隻能接收一個字元。 如果想輸入多個字元就要用多個函數。 不僅可以從輸入裝置獲得一個可顯示的字元,而且可以獲得控制字元(如回車,空格等)。 用getchar函數得到的字元可以賦給一個字元變量或整型變量,也可以作為表達式的一部分。如,putchar(getchar());将接收到的字元輸出。![]()
揭開C語言神秘的面紗,簡單的C語言程式
所謂類型,就是對資料配置設定存儲單元的安排,包括存儲單元的長度(占多少位元組)以及資料的存儲形式。不同的類型配置設定不同的長度和存儲形式。
常見資料類型:整型,浮點型 char // 字元資料類型 short 短整型 int 整形 long 長整型 long long 更長的整形 float 單精度浮點數 double 雙精度浮點數 注意:C語言中沒有字元串類型
sizeof是c語言中的一種單目操作符,并不是函數。它能夠以位元組為機關給出操作數的儲存大小。是以,我們可以利用這個操作符求出各資料類型的大小。
由上述程式可知各資料類型大小(機關為位元組) 說明: C标準沒有具體規定各種類型資料所占用存儲單元的長度,隻要求sizeof(short)≤sizeof(int)≤sizeof(long)≤sizeof(long long),具體由各編譯系統自行決定的。 sizeof是測量類型或變量長度的運算符。 char 1byte short 2byte int 4byte long (int) 4byte(32位平台為4byte,64位平台為8byte) long long (int) 8byte float 4byte double 8byte long double 8byte (32位平台為8byte,64位平台為16byte)
整型資料類型
預設形式的
位元組數
取值範圍
[signed ]int
int
4
-2147483648~2147483647
unsigned [int]
unsigned
0~4294967295
[signed] short [int]
short
2
-32768~32767
unsigned short [int]
unsigned short
0~65535
[signed ]long [int]
long
unsigned long [int]
unsigned long
[signed ]long long [int]
long long
8
-9223372036854775808~9223372036854775807
unsigned long long [int]
unsigned long long
0~18446744073709551615
ASCII字元集包括: 字母: 大寫英文字母A~Z,小寫英文字母a~z 數字: 0~9 專門符号: 29個,包括 ! " # & ' ( ) * + , - . / : ; < = > ? [ \ ] ^ _ ` { | } ~ 空格符: 空格、水準制表符(tab)、垂直制表符、換行、換頁(form feed) 不能顯示的字元: 空(null)字元(以'\0'表示)、警告(以'\a'表示)、倒退(以'\b'表示)、回車(以'\r'表示)等
注意:字元′1′和整數1是不同的概念。 字元′1′隻是代表一個形狀為′1′的符号,在需要時按原樣輸出,在記憶體中以ASCII碼形式存儲,占1個位元組。 而整數1是以整數存儲方式(二進制補碼方式)存儲的,占2個或4個位元組。 整數運算1+1等于整數2,而字元′1′+′1′并不等于整數2或字元′2′。
生活中的有些 值是不變的(比如:圓周率,性别(?),身份證号碼,血型等等),有些值是可變的(比如:年齡,體重,薪資)。 不變的值, C 語言中用 常量 的概念來表示,變的值 變量 來表示。
常量常見的包括以下幾類: 整型常量,例如 12;100;88;0;12345;-365 實型常量(包括小數和指數形式),例如 3.14;2.86e3 字元常量,例如 普通字元 'a';'F';'2';'#';'?' 轉義字元 '\n';'\302';'\t' 字元串常量, 例如 "abc";"apple";"FBI";"CSDN";"部落格" 符号常量, 例如 #define PI 3.1416;const常量 枚舉常量
變量代表一個有名字的、具有特定屬性的一個存儲單元。 變量用來存放資料,也就是存放變量的值。 在程式運作期間,變量的值是可以改變的。 變量必須先定義,後使用。
定義變量方法 age = 18 ; float weight 55.5f char ch 'w' //類型 變量名 = 值;
變量可分為全局變量與局部變量。 通俗點說: 在大括号(代碼塊)内部定義的變量就是局部變量。 在大括号(代碼塊)外部定義的變量就是全局變量。 作用域 作用域(scope),程式設計概念,通常來說,一段程式代碼中所用到的名字并不總是有效或者是可用的,而限定這個名字的可用性的代碼範圍就是這個名字的作用域。 1. 局部變量的作用域是變量所在的局部範圍。 2. 全局變量的作用域是整個工程。 生命周期 變量的生命周期指的是變量的建立到變量的銷毀之間的一個時間段。 1. 局部變量的生命周期是:進入作用域生命周期開始,出作用域生命周期結束。 2. 全局變量的生命周期是:整個程式的生命周期。
當局部變量和全局變量同名時,局部變量優先。
這種由雙引号(
Double Quote
)引起來的一串字元稱為字元串字面值(
String Literal
),或者簡稱
字元串
。
注:字元串的結束标志是一個 \0 的轉義字元。在計算字元串長度的時候 \0 是結束标志,不算作字元串内容。
要了解\0前先了解一下數組的基本概念
請關注部落客另一篇文章:數組的介紹與應用(點選直達)
知道數組概念後看看下面一個程式:
讓我們來看看輸出結果,arr1與arr3都是輸出正常的結果,但是arr2後面多了一些亂七八糟的字元。這是怎麼回事呢?原因是“\0”,因為\0是字元串結束的标志并且字元串除了我們可見的内容外,字元串結尾還有個\0,當把數組裡的内容以%s字元串形式輸出時,是以\0為标志來作為結束的标志,遇到\0字元串輸出到這就結束了。是以arr1與arr3能正常輸出,而arr2輸出異常。輸出arr2時由于沒有\0,是以編譯器會一直往後讀直到讀到\0才結束輸出,是以說arr2"FBI"後的内容都是随機的。
除了"\n","\0"這些轉義字元,c語言中還有許多其他的轉義字元。
OJ題:BC131 KiKi學程式設計基礎
BoBo老師教了KiKi學習程式設計基礎,他知道C++是帶類的C語言,這個“++”主要包含三部分内容:對C語言進行文法上的擴充、面向對象(封裝、繼承和多态),STL(即模闆)。這學期KiKi學習了C和C++,學好他們,其他程式設計語言都可以很輕松掌握。C和C++的輸入有差別,請幫KiKi輸出C和C++輸出Hello world的代碼。 無 printf("Hello world!\n"); cout << "Hello world!" << endl;
輸出 ' 與 "
舉個栗子 其中strlen()函數用來求字元個數
兩個實數相除的結果是雙精度實數,兩個整數相除的結果為整數。 %運算符要求參加運算的運算對象(即操作數)為整數,結果也是整數。
++i,--i 在使用i之前,先使i的值加/減1(先加再用)
i++,i-- 在使用i之後,使i的值加/減1 (先用再加)
不同類型資料間的混合運算
如果一個運算符兩側的資料類型不同,則先自動進行類型轉換,使二者成為同一種類型,然後進行運算。整型、實型、字元型資料間可以進行混合運算。規律為: +、-、*、/運算的兩個數中有一個數為float或double型,結果是double型,因為系統将所有float型資料都先轉換為double型,然後進行運算。 如果int型與float或double型資料進行運算,先把int型和float型資料轉換為double型,然後進行運算,結果是double型。 字元(char)型資料與整型資料進行運算,就是把字元的ASCII代碼與整型資料進行運算。如果字元型資料與實型資料進行運算,則将字元的ASCII代碼轉換為double型資料,然後進行運算 。
指派過程中的類型轉換
如果指派運算符兩側的類型一緻,則直接進行指派。 如果指派運算符兩側的類型不一緻,但都是基本類型時,在指派時要進行類型轉換。類型轉換是由系統自動進行的,轉換的規則是: 将浮點型資料(包括單、雙精度)賦給整型變量時,先對浮點數取整,即舍棄小數部分,然後賦予整型變量。 将整型資料賦給單、雙精度變量時,數值不變,但以浮點數形式存儲到變量中。 将一個double型資料賦給float變量時,先将雙精度數轉換為單精度,即隻取6~7位有效數字,存儲到float型變量的4個位元組中。應注意雙精度數值的大小不能超出float型變量的數值範圍;将一個float型資料賦給double型變量時,數值不變,在記憶體中以8個位元組存儲,有效位數擴充到15位。 字元型資料賦給整型變量時,将字元的ASCII代碼賦給整型變量。 将一個占位元組多的整型資料賦給一個占位元組少的整型變量或字元變量時,隻将其低位元組原封不動地送到被指派的變量(即發生“截斷”)。
(double)a 将a轉換成double型 (int)(x+y) 将x+y的值轉換成int型 (float)(5%3) 将5%3的值轉換成float型 (int)x+y 隻将x轉換成整型,然後與y相加 int a; float x,y;double b; a=(int)x ; 進行強制類型運算(int)x後得到一個int類型的臨時值,它的值等于x的整數部分,把它賦給a,注意x的值和類型都未變化,仍為float型。該臨時值在指派後就不再存在了。
C語言專欄下期内容預告:
選擇結構與循環結構