在上一篇中,對C語言的編譯器進行了說明,而且着重講述瞭如何使用VS,緊接着就講述瞭如何寫第一個C語言程序,而後依次介紹了數據類型,再以後就介紹了變量的定義分類和使用,有不清楚的能夠去翻閱一下個人博客「初識C語言1」中的內容。數組
今天咱們接着上一次說,上一次說到了變量,但是咱們的生活中不止有像年齡、身高、體重等會變的量,還有例如身份證號碼、血型、圓周率等不變的量,C語言做爲人類和計算機交流的語言也必需要涉足於這些量,因此在C語言中,咱們把這些不能改變的量稱之爲常量。ide
在C語言中常量分爲4類:字面常量、const修飾的常變量和#define定義的標識符常量以及枚舉常量。
給出如下示例代碼:函數
#include <stdio.h> #define PI 3.14 //此時PI爲#define定義的標識符常量,其值爲3.14 enum Sex//定義枚舉常量的枚舉關鍵字enum { MAN, FEMALE, SECRET }//此時MAN,FEMALE,SECRET爲枚舉常量,其值由系統分配,是不可改變的 int main() { 3;//字面常量 100;//字面常量 const int num=4;//此時num是const修飾的常變量,其值爲4在使用過程當中不可變 }
代碼是很簡單的代碼,帶了註釋,方便你們理解,在註釋裏面也分別標識了四種常量。
字面常量,就是直接給出的常量,例如:1,2,3,4,5,6,7等等,像上示例代碼中的3和100等直接給出的常量均爲字面常量。
const修飾的常變量,其是變量被const修飾以後就具備了常屬性,其在編譯中是按變量編譯的,這和C++是有區別的,在C++中const修飾的常變量是一個常量。
#define定義的標識符常量,就我我的理解#define定義的標識符常量就是一種定義方式而已,在上示例代碼中,PI就是此種常量,它的值爲3.14是不能夠改變的。
還有最後一種就是枚舉常量,枚舉常量就像列舉法同樣,把全部的量都一一列舉出來,每個列舉出來的量,系統都會給其分配一個值,這個值是固定的,不可改變的,能夠直接打印輸出的。學習
前面咱們介紹數據類型的時候介紹過字符型數據,可是在生活中咱們常常會用到多個字符連在一塊兒的字符串:測試
"Hello world!"
像上面示例代碼中用雙引號包起來的一串字符就是字符串,在C語言中咱們能夠用數組來儲存字符串。code
#include <stdio.h>//輸入輸出函數的頭文件 #include <string.h>//求字符串長度的函數的頭文件 int main() { char arr1[]="abc";//定義字符型數組保存字符串 char arr2[]={'a','b','c'};//定義字符型數組保存字符串 char arr3[]={'a','b','c',0};//定義字符型數組保存字符串 printf("arr1=%s\n",arr1);//輸出字符串 printf("arr2=%s\n",arr2);//輸出字符串 printf("arr3=%s\n",arr3);//輸出字符串 //strlen--求字符串的長度的函數,是C語言庫函數,在使用以前必須打招呼 printf("arr1字符串長度爲:%d\n",strlen(arr1));//輸出字符串長度 printf("arr2字符串長度爲:%d\n",strlen(arr2));//輸出字符串長度 printf("arr3字符串長度爲:%d\n",strlen(arr3));//輸出字符串長度 return 0; }
示例代碼運行結果以下:
經過上面運行結果,發現輸出字符串的時候,arr2數組輸出出現亂碼的狀況,而arr1和arr3輸出的就是咱們須要的結果,在輸出字符串長度時,arr1和arr3字符串長度都是3個字節,而arr2的字符串長度倒是15個字節,而arr2和arr3最主要的區別就是:arr3數組裏面有(0),而arr2裏面沒有,這個0是相當重要的。
在C語言中字符串的結束標誌是'\0',這個'\0'是一個轉義字符(等會會說到)在計算字符串長度時,以'\0'爲結束標誌,其不算字符串的內容。而在ASCII碼錶中'\0'對應的就是十進制下的0。
因此在上述示例代碼中,arr2中是沒有結束標誌的,arr3中有結束標誌'\0',因爲是字符型數組,因此數組中的內容在編譯的過程當中會按ASCII碼將十進制0轉換成'\0'故:arr3中是有結束標誌的,在arr1中,雖然沒有寫'\0'可是雙引號內的字符串都會默認最後有'\0'結束標誌,故arr3和arr1均有字符串結束標誌,在編譯完成以後輸出了咱們想要的結果,而arr2中沒有字符串結束標誌,故其在輸出過程當中,出現了亂碼,在輸出字符串長度時是一個隨機值,當讀完數組元素後還會往下讀,直到讀到'\0'結束標誌才停,故其輸出的內容不是咱們想要的結果,輸出的字符串長度是隨機值。blog
轉義字符,顧名思義就是改變意思的字符,咱們來看一個示例代碼:字符串
#include <stdio.h> int main() { printf("E:\class\test.c\n"); return 0; }
運行結果以下:
咱們原本是要打印一個目錄的,結果運行結果不盡人意,主要是在編譯的過程當中,系統把'\t'當作轉義字符(水平製表符)來編譯了,才致使出現了截圖的運行結果。
在C語言中還有很多轉義字符,就是經過'\'和字符來組成的,出現這種狀況咱們一般要在'\'以前再加上一個'\'變成'\'(其實也是轉義字符)來消除以上狀況,能夠將上述示例代碼進行修改爲以下代碼:編譯器
#include <stdio.h> int main() { printf("E:\class\test.c\n"); printf("E:\\class\\test.c\n"); return 0; }
在運行的過程當中出現了一個小插曲,我所寫的代碼文件被個人電腦管家誤認爲是***了。。
遇到這種狀況你們不用着急,由於大部分的***都是人爲編寫的,因此各類殺毒軟件對咱們編寫的代碼文件都極爲敏感,會出現一不當心就判斷爲***的狀況,咱們只需找回文件,以後將咱們代碼文件放入信任區便可。
將文件放入信任區以後咱們就能夠正常運行了。
運行結果以下:
在第5行代碼中將'\'變成了'\'便可以正常的打印目錄。
下表是常見的轉義字符:
博客
代碼中有不須要的代碼能夠刪除掉,也能夠註釋掉;
代碼中有比較難懂的代碼能夠加一些註釋方便其餘人閱讀,以及後面本身查閱。
C語言註釋:
/*111111111*/
其存在缺陷:不能嵌套註釋
/* 1111111/*111111*/1111 */
在上述示例代碼中
框框裏面的內容沒有被註釋,這是由於在C語言中當編譯到'/*'
後但凡遇到了'*/'
就會結束註釋,所以C語言風格的註釋最大的缺陷就是不能嵌套註釋。
C++註釋:
//1111111111 //1111111111
能夠註釋一行也能夠註釋多行。
鑑於以上,在寫代碼過程咱們一般使用C++註釋,C語言註釋用的少。
在生活中咱們會面臨着各類各樣的選擇,C語言做爲人類和計算機溝通的語言,也應該有相應的語句與咱們平常生活中的選擇相對應。在C語言中須要根據某一條件是否知足來決定是否執行指定的操做任務,或者從給定的兩種或多種操做中選擇其一,這樣的結構叫作選擇結構。
C語言中有兩種選擇語句:if語句和switch語句,初識C語言不作闡述,後面聊選擇結構的時候細說。僅舉個示例:
#include <stdio.h> int main() { int i; printf("是否有好好學習?(如有好好學習,請鍵入非零正整數;若沒有好好學習,請鍵入0)\n");//給出選擇 scanf("%d",&i); if(i==0)//判斷 printf("請好好學習\n");//一種選擇下的結論 else printf("真棒!請繼續加油\n");//另外一種選擇下的結論 return 0; }
兩種不一樣選擇時的運行結果以下:
上述示例代碼的做用就是判斷有沒有好好學習,如有好好學習則鍵入一個非零正整數,輸出'真棒!請繼續加油',若沒有好好學習則鍵入一個0,輸出'請好好學習'。此選擇結構採用了if選擇語句。
在生活中,咱們天天都要吃飯,天天都要工做或者學習,咱們會常常重複着同一件事情,在C語言中,也有相應的語句與之相對應。重複着同一個語句,這樣的結構叫作循環結構。
C語言中循環語句有三種:while語句、for語句以及do...while語句,初識C語言不作闡述,後面聊循環結構的時候細說。僅以while語句爲例來舉一個示例代碼:
#include <stdio.h> int main() { int a=1; while(a<=10)//結束循環的條件 { //循環體 printf("%d\t",a);//'\t'轉義字符(水平製表符)使其輸出整齊 a=a+1; } printf("\n");//'\n'轉義字符(換行) return 0; }
運行結果以下:
上述示例代碼中運用了while循環來依次輸出了1,2,3,4,5,6,7,8,9,10這十個數字。
C語言程序是由語句構成的,而實現一個小功能的多個語句結合而成,給封裝起來就變成了函數,函數的做用就是使程序簡單化,防止重複使用一樣的多行代碼。
舉個栗子:
#include <stdio.h> int Max(int a,int b)//函數聲明 { if(a>=b) return a; else return b; } int main() { int x,y,m,n,max; printf("請輸入兩個正整數x,y:\n"); scanf("%d %d",&x,&y); printf("請輸入兩個正整數m,n:\n"); scanf("%d %d",&m,&n); max=Max(x,y);//調用函數 printf("x和y這兩個數較大的是:%d\n",max); max=Max(m,n);//調用函數 printf("m和n這兩個數較大的是:%d\n",max); return 0; }
運行結果以下:
上述示例代碼實現的功能就是依次鍵入兩組數,每組數中有兩個數字,輸出每組數中的最大值,代碼中輸出最大值功能的代碼被封裝在自定義的Max函數中,後面經過調用Max函數來實現輸出最大值功能。
在咱們數學中有集合的定義,也就是具備相同屬性的事物的集合稱之爲一個集合,集合裏面的每一個事物稱之爲元素,在C語言中也有與之對應的定義----數組。
在C語言中:一組相同數據類型的元素的集合稱之爲數組。
在C語言中,數組的定義和變量定義差很少,看實例:
char arr[10];//定義了一個字符型數組 int arr1[3]={1,2,3};//定義了一個整型數組,並賦值
在上述實例中,arr是一個字符型數組,其容量爲10,也就是說裏面最多隻能有10個元素,arr1爲整形數組,而且其被賦值,裏面有3個元素,3個元素的值依次爲1,2,3。
在C語言中,咱們一般經過訪問下標來訪問數組中的元素,使用循環結構來輸出一個數組,例如:
#include <stdio.h> int main() { int n=0; int n1=0; int arr[10]={1,2,3,4,5,6,7,8,9,10};//定義一個整型數組,元素個數爲10,並賦值 //打印數組元素 while(n<=9) { printf("打印數組的第%d個元素:%d\n",n,arr[n]);//經過下標來訪問數組元素,下標由0開始 n=n+1; } printf("數組所佔字節大小:sizeof(arr)=%d\n",sizeof(arr));//sizeof是計算數據類型長度(單位是字節),是C語言的庫函數,其頭文件和printf函數的頭文件相同 n1=sizeof(arr)/sizeof(arr[1]);//數組的元素個數=整個數組的數據類型長度/每一個元素的數據類型長度 printf("數組中元素的個數:n1=%d\n",n1); return 0; }
運行結果以下:
在C語言中,是經過下標來訪問數組元素的,下標是由0開始的,經過循環結構依次來訪問數組元素,進而輸出數組中各元素。
初識C語言不作闡述,後面聊操做符的時候細說。僅作簡單介紹:
+ - * / %
>> <<
& ^ |
= += -= *= /= &= ^= |= >>= <<=
! 邏輯反操做 - 負值 + 正值 & 取地址 sizeof 操做數的類型長度(以字節爲單位) ~ 對一個數的二進制按位取反 -- 前置、後置-- ++ 前置、後置++ * 間接訪問操做符(解引用操做符) (類型) 強制類型轉換
> >= < <= != 用於測試「不相等」 == 用於測試「相等」
&& 邏輯與 || 邏輯或
exp ? exp2 : exp3
exp1,exp2,exp3,…expN
[] () . ->
此篇結束