C基礎系列 一

2022-06-08 12:15:10 字數 3680 閱讀 1467

這裡做一些c語言的語法的總結。

1.輸出數字型別

printf("

%d\n

",2);

2.保留小數點後一位,示例為1 不是 l

printf("

%.1f\n

",8.0/5.0);

3.整數值用 %d,實數用 %f 輸出。

4.開平方,需要引入 #include

sqrt(3)

5.scanf中的佔位符和變數的資料型別應一一對應,且每個變數前都需要加&符號。

6.輸入兩個實數(含小數):這裡是兩個l,即為 lf , 這裡要注意,輸入實數採用的是 「%lf 」 而不會 「 %f 」

scanf("

%lf%lf

",&r,&h);

7.用const關鍵字宣告常數

const

double pi = acos(-1.0);

8.要把25輸出為025,可以使用 %03d 即可。

printf("

%03d\n

", m);

9.在c99中,double的輸出必須用 %f , 而輸入需要用 %lf 

10. 怎麼輸出 \n , 可以 用「\\n」

11.怎麼輸出 %d , 可以用 「%%d」

12. 在定義變數時,最好盡量縮小變數定義的範圍。

13. 浮點數的運算有可能存在誤差。那麼怎麼避免呢?

為了減小誤差的影響,一般改成四捨五入,即 floor(x+0.5)。

14. 浮點運算可能存在誤差。在進行浮點數比較時,應考慮到浮點誤差。

15. 在大多數平台中,int都是32位整數,範圍是 -2147483648 ~ 2147483647 。要注意int型別溢位問題。

16. 要計算只包含加法,減法和乘法的整數表示式除以正整數n的餘數,可以在每步計算之後對n取餘,結果不變。

17. 可以使用time.h和clock()函式獲得程式執行時間。常數clocks_per_sec 和 作業系統,

請不要直接使用clock()的返回值,而應總是除以clock_per_sec。

printf("

time used = %.2f\n

", (double)clock()/clocks_per_sec);

18.變數在未賦值之前的值是不確定的。

19. 使用檔案最簡單的方法是使用輸入輸出重定向

freopen("

input.txt

","r

", stdin);

freopen(

"output.txt

","w

",stdout);

20.#ifdef 和 #endif 如果怎樣就執行

#define local...

intmain()

21.如果要求用檔案輸入輸出,但是禁止使用重定向的方式,可以如下

#include#define inf 100000000

intmain()

fprintf(fout,

"%d %d %.3f\n

",min,max,(double)s/n);

fclose(fin);

fclose(fout);

return0;

}

可以看出,先宣告變數 fin 和 fout, 把 scanf 改成 fscanf ,第乙個引數為 fin ; 

把 printf 改成 fprintf,第乙個引數為 fout ,最後執行 fclose,關閉兩個檔案。

22.輸出精確到小數點c為的實數。

printf("

%.*lf\n

",c,(double)a/(double)b);

而對下面用法,前面的*定義的是總的寬度,後面定義的是輸出個數,分別對應外面的引數m,n

printf("

%*.*s\n

",m,n,ch);

23.一維陣列定義

int a[maxn]

24.陣列a可以被宣告在main裡面也可以在外面。只有在外面時,陣列a才可以開的很大;放在main函式裡面,陣列稍大就會異常退出。

25. 陣列不能夠進行賦值操作,如果要從陣列a複製k個元素到陣列b,可以這樣做:

memcpy(b,a,sizeof(int)*k)

當然,如果陣列a和b是浮點型的,複製時要寫成 

memcpy(b,a,sizeof(double)*k)

使用memcpy函式,需要包含標頭檔案 string.h。

如果要把陣列a全部複製到陣列b中,可以這樣

memcpy(b,a,sizeof(a))

26. 把陣列清零

memset(a,0,sizeof(a));

27.二維陣列

int a[maxn][maxn];

28. 讀入乙個不含空格、tab和回車符的字串,存入字元陣列s

scanf("

%s",s);

它遇到空白字元會停下來。

29.把數字輸入到字元陣列中

sprintf(buf, "

%d%d%d%d%d

",abc,de,x,y,z);

30.判斷buf中的指定位置的字元是否包含在字元陣列s中,如果不包含則為null

if(strchr(s,buf[i])==null) ok = 0;

31.在乙個字串中查詢單個字元: strchr 

32. strlen(s) 返回的是結束標記之前的字元個數。

33. 由於字串的本質是陣列,它也不是一等公民,只能用strcpy(a,b),strcmp(a,b), strcat(a,b)來執行賦值,比較,和連線操作。

34. 對於由空格的字串輸入,可以使用 fgetc(fin), 它讀取乙個開啟的檔案 fin,讀取乙個字元,然後返回乙個 int值。

如果要從標準輸入讀取乙個字元,可以用getchar,它等價於 fgetc(stdin)。

第二種方法是使用 fgets(buf, maxn,fin) 讀取完整的一行。

fgets(buf,maxn,fin) 將讀取完整的一行放在字元陣列 buf 中。應該保證 buf 能夠存放下檔案的一行內容。

fgets的標準輸入版 gets , gets沒有指明讀取的最大字元數。

gets已經被廢除了。

c語言中的 gets(s) 存在緩衝區溢位漏洞,不推薦使用。

while((c=getchar()) !=eof)

35. 常量陣列

char s = "

1234567890

"

36.找字元在常量陣列中的位置

while((c=getchar()) !=eof )

37. isalpha 判斷字元是否是字母,類似的 isdigit , isprint 等,都是定義在標頭檔案 ctype.h

而 toupper, tolower 等可以用來轉換大小寫。

C 基礎系列

c 基礎系列 net framework平台體系結構 c 基礎系列 棧和託管堆 值型別和引用型別 裝箱和拆箱 c 基礎系列 覆蓋與過載 override overload c 基礎系列 抽象方法和虛方法的區別 c 基礎系列 深入剖析c 的多型 c 基礎系列 委託和事件 c 基礎系列 委託模型和事件模...

C 基礎入門系列 一 基本語法

1.1 基本型別 基本型別可以使用乙個或多個型別修飾符進行修飾 include using namespace std intmain 1.2 typedef 重新定義型別名 作用 可以使用 typedef 為乙個已有的型別取乙個新的名字。下面是使用 typedef 定義乙個新型別的語法 inclu...

C 基礎系列 C 中委託與事件 一

我們都知道,c 中有 介面 這個概念,所謂的 介面 就是定義一套標準,然後由實現類來具體實現其中的方法,所以說 介面,是一組類的抽象 同樣道理,我們可以將 委託 理解為 方法的抽象 也就是說定義乙個方法的模板,至於這個方法具體是怎麼樣的,就由方法自己去實現。我們知道介面的最大好處就是可以實現多型,同...