tft每日頭條

 > 生活

 > c語言基本知識的了解

c語言基本知識的了解

生活 更新时间:2024-07-31 00:25:09

如果又什麼遺漏的,歡迎留言,我再補充

c語言基本知識的了解(C語言的基礎知識)1

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; }

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 ; num<1000 ; num ) { //獲取三位數字num百位上的數字 hd = num/100 ; //獲取三位數字num十位上的數字 td = num/10 ; //獲取三位數字num個位上的數字 sd = num ; //水仙花數的條件是什麼? 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; i<5; i ) { /* 觀察每行的空格數量,補全循環條件 */ for( j=i ; j<5 ; j ) { printf(" "); //輸出空格 } /* 觀察每行*号的數量,補全循環條件 */ for( k=0 ; k<2*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.形參與實參

形參:形參是在定義函數名和函數體的時候使用的參數,目的是用來接收調用該函數時傳入的參數;

實參:實參是在調用時傳遞該函數的參數。

函數的形參和實參具有以下特點:

  1. 形參隻有在被調用時才分配内存單元,在調用結束時,即刻釋放所分配的内存單元。因此,形參隻有在函數内部有效。函數調用結束返回主調函數後則不能再使用該形參變量。
  2. 實參可以是常量、變量、表達式、函數等,無論實參是何種類型的量,在進行函數調用時,它們都必須具有确定的值,以便把這些值傳送給形參。因此應預先用賦值等辦法使實參獲得确定值。
  3. 在參數傳遞時,實參和形參在數量上,類型上,順序上應嚴格一緻,否則會發生類型不匹配”的錯誤。

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) ;

  1. 用關鍵字auto定義的變量為自動變量,auto可以省略,auto不寫則隐含定為“自動存儲類别”,屬于動态存儲方式。
  2. 用static修飾的為靜态變量,如果定義在函數内部的,稱之為靜态局部變量;如果定義在函數外部,稱之為靜态外部變量。

注意:靜态局部變量屬于靜态存儲類别,在靜态存儲區内分配存儲單元,在程序整個運行期間都不釋放;靜态局部變量在編譯時賦初值,即隻賦初值一次;如果在定義局部變量時不賦初值的話,則對靜态局部變量來說,編譯時自動賦初值0(對數值型變量)或空字符(對字符變量)

  1. 為了提高效率,C語言允許将局部變量的值放在CPU中的寄存器中,這種變量叫“寄存器變量”,用關鍵字register作聲明。

注意:隻有局部自動變量和形式參數可以作為寄存器變量;一個計算機系統中的寄存器數目有限,不能定義任意多個寄存器變量;局部靜态變量不能定義為寄存器變量。

  1. 用extern聲明的的變量是外部變量,外部變量的意義是某函數可以調用在該函數之後定義的變量。

#includ <stdio.h> int main() { //定義外部局部變量 extern int x; return 0; } int x=100;

13.内部函數外部函數 !

在C語言中不能被其他源文件調用的函數稱為内部函數 ,内部函數由static關鍵字來定義,因此又被稱為靜态函數,形式為:

static [數據類型] 函數名([參數])

這裡的static是對函數的作用範圍的一個限定,限定該函數隻能在其所處的源文件中使用,因此在不同文件中出現相同的函數名稱的内部函數是沒有問題的。

在C語言中能被其他源文件調用的函數稱為外部函數 ,外部函數由extern關鍵字來定義,形式為:

extern [數據類型] 函數名([參數])

C語言規定,在沒有指定函數的作用範圍時,系統會默認認為是外部函數,因此當需要定義外部函數時extern也可以省略。 extern可以省略; 14.數組 數組:一塊連續的,大小固定并且裡面的數據類型一緻的内存空間, 數組的聲明:數據類型 數組名稱[長度n]

  1. 數據類型 數組名稱[長度n] = {元素1,元素2,元素3,......};
  2. 數據類型 數組名稱[] = {元素1,元素2,元素3,......};
  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;i<10;i ) { printf("%d\n",arr[i]); } return 0; }

  1. 數組的冒泡排序

冒泡排序的思想:相鄰元素兩兩比較,将較大的數字放在後面,直到将所有數字全部排序。

  1. 字符串與數組

在C語言中,是沒有辦法直接定義子字符串數據類型的,需使用數組來定義所要的字符串,形式如下:

  • char 字符串名稱[長度] = "字符串内容";
  • char 字符串名稱[長度] = {'字符串1','字符串2',....,'字符串n','\0'};

注:

  1. []中的長度可以省略不寫;
  2. 采用第二種方式最後一個元素必須是'\0',表示結束;
  3. 第二種方式不能寫中文!; 輸出字符串時,要使用:printf("%s",字符數組名);或puts(字符數組名);

16.字符串函數

  1. strlen(s):獲取字符串s的長度;
  2. strcmp(s1,s2):比較字符串;比較的時候會把字符串轉換成ASCII碼再進行比較,返回結果為0表示s1和s2的ASCII碼值相等,返回結果為1表示s1比s2的ASCII碼大,返回結果為-1表示s1比s2的ACSII碼小;
  3. strcpy(s1,s2):字符串拷貝;s2會取代s1中的内容;
  4. strcat(s1,s2)将s2拼接到s1後面;注意:s1的length要足夠才可以!
  5. atoi(s1)将字符串轉為整數!

17.多維數組

數據類型 數組名稱[常量表達式1]...[常量表達式n];

多維數組的初始化與一維數組的初始化類似也是分兩種:

  1. 數據類型 數組名稱[常量表達式1][常量表達式2]...[常量表達式n] = {{值1,..,值n},{值1,..,值n},...,{值1,..,值n}};
  2. 數據類型 數組名稱[常量表達式1][常量表達式2]...[常量表達式n]; 數組名稱[下标1][下标2]...[下标n] = 值;

多維數組初始化要注意以下事項:

  1. 采用第一種始化時數組聲明必須指定列的維數。因為系統會根據數組中元素的總個數來分配空間,當知道元素總個數以及列的維數後,會直接計算出行的維數;
  2. 采用第二種初始化時數組聲明必須同時指定行和列的維數。

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> 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; }

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); }

23.排序算法

十大經典排序算法(動态演示 代碼)

24.查找算法

九種查找算法

25.字符串操作

C語言與C 面試知識總結

26.面試知識

字符串操作的全面總結

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关生活资讯推荐

热门生活资讯推荐

网友关注

Copyright 2023-2024 - www.tftnews.com All Rights Reserved