PAT C語言基礎知識

2021-09-11 22:48:46 字數 2611 閱讀 3958

雖然說都知道,但是有些東西還是不清晰。在這裡寫一寫,日後慢慢更新。

變數的第乙個字元:字母或下劃線,其他字元:字母,下劃線,數字。

int整型範圍:32位(32位整數,10^9以內),-2^31~~+2^31-1。絕對值在10^9以內的都可以定義成int。

long long範圍:(64位整數,10^18以內)2的63次方。超過2147483647的就要用long long。後面要加ll識別符號。

浮點型:遇見浮點型直接用double就可以,float精度低不必考慮。%lf輸入,%f輸出。

字元型:記住幾個ascii碼:'0'->48;    'a'->65;    'a'->97;

小寫字母比大寫字母大32;

開 char s 字元陣列的時候一定要多申請乙個來存放  '\0'  結束標誌。

比如存10個char的動態陣列:char* s = (char*) malloc(sizeof(char)*11)

應該是這樣吧

關於scanf():

long long n;           scanf("%lld",&n);

double n;               scanf("%lf",&n);        //double的輸入佔位符是%lf

scanf("%c",&c);     //是可以讀入空格字元的,因為是%c

printf():

double n;      print("%f",n);     double的輸出佔位符是%f

%2d、%02d、%.2f:超出的會直接輸出而並不是格式化的2位

round(double x)
四捨五入,返回double型變數,需要強轉取整一下。

memset(陣列名,值,sizeof(陣列名))
為陣列中的元素按位元組賦值。需要包括string.h。只建議初學者賦值0或-1,因為涉及到補碼問題。

只有scanf和gets會在字元陣列最後加 '\0' 結束標誌,其他的(比如getchar)不會新增需要手動加。

string.h中常用函式

#includeint strlen(字元陣列);        \\得到字元陣列中'\0'前的字元的個數

例如:"memeda\0muadarling"得到的長度是6

int strcmp(字元陣列1,字元陣列2); \\字串比較大小,比較字典序,as2,返回正整數

strcpy(字元陣列1,字元陣列2); \\字串複製,2複製給1

strcat(字元陣列1,字元陣列2); \\字串連線,2連到1後面

sscanf()與sprintf()

int n = 223;

char str[100] = 123;

sscanf(str,"%d",&n);

從左到右,將str以%d形式輸入到n裡,n=123

sprintf(str,"%d",n);

從右到左,將n以%d形式輸入到str裡,str=223

qsort()排序函式

引用自大佬部落格:

快速排序是一種用的最多的排序演算法,在c語言的標準庫中也有快速排序的函式,下面說一下詳細用法。

qsort函式包含在中

qsort函式宣告如下:

void qsort(void * base,size_t nmemb,size_t size ,int(*compar)(const void *,const void *));

引數說明:

base,要排序的陣列

nmemb,陣列中元素的數目

size,每個陣列元素占用的記憶體空間,可使用sizeof函式獲得

compar,指向函式的指標也即函式指標。這個函式用來比較兩個陣列元素,第乙個引數大於,等於,小於第二個引數時,分別顯示正值,零,負值。

下面看幾個例子:

#include#include#include#includevoid main(void)

;    char b[10]=;

double c[10]=;

int cmp1(const void * a,const void * b)

int cmp2(const void * a,const void *b)

int c***(const void * a,const void * b)

qsort(a,10,sizeof(int),&cmp1);//對於函式指標(指向函式的指標),直接傳入函式名和函式名進行&

//運算都是可以的,因為在呼叫函式時也是取的函式的位址

qsort(b,10,sizeof(char),cmp2);

qsort(c,10,sizeof(double),c***);

for(i=0;i<10;i++)

printf("%d ",a[i]);

for(i=0;i<10;i++)

printf("%c ",b[i]);

for(i=0;i<10;i++)

printf("%lf ",c[i]);

}

為啥用chrome窄視窗寫完csdn還錯版了呢。。。這麼不行的麼

C語言基礎知識

1 的問題。int i 1 int j 2 int k i j printf d k 輸出k為3。編譯原理有關編譯器在詞法解析的時候,對於運算子,總是查詢最大的匹配也就是說,i j,編譯器在找到 的時候,它不立即理解為 而是繼續下乙個字元,下乙個字元仍然是 可以組成 再往下的話便是 不成立了。所以i...

C語言基礎知識

一 位元組對齊 位元組對齊的原因,是機器在訪問記憶體中儲存的資料的高效性。通常機器是機器位數為自然邊界來訪問記憶體的,如果乙個4位元組整形數,所在的記憶體不在虛擬記憶體的自然邊界。則cpu需要讀多於一次的資料,這樣就降低了效率。所以,簡單地說,就是保證cpu指令在訪問資料的時候,能一次讀取,而不需要...

程式語言基礎知識

1.字符集 掌握跟本門課程相關的字符集組成,例如字母 嚴格區分大小寫 數字,運算子,特別注意運算子 的左右兩邊必須為整數,且結果 的符號由 前面數字符號決定,比如 8 5 3 2.識別符號 由系統預定義識別符號 關鍵字 和使用者自定義識別符號兩種組成 需要注意的是 使用者自定義識別符號的命名規則分為...