計算機二級C 想過必看
2012年9月10日
20:42
1、在C語言中
基本上是:!>算術>關係>邏輯>條件>賦值>逗號
(1)、算術裏“*、/”高於“+、-”;
(2)、關係裏"<、<=、>、>="優先級相同都大於“==、!=”;
(3)、邏輯中!級別最高,&&次之,||邏輯或最低;
(4)、正號和負號高於算術運算符
(5)、“[]”高於“*”號 ;
(6)、指針中“*”和“&”級別相同;
(7)、“*”與“++”又相同,“—>”最高;
(8)、“.”高於“*”號;
(9)、“<<”高於“^”;
(10)、單目運算高於雙目運算;
(11)、“()、[]、->、.”級別同,“!、~、++、--、+正、-負、*、&、(類型名)、sizeof級別同,前四者高於後者;
2、pow是乘方、fabs是取絕對值、sqrt是開根號,只要涉及到這三個頭文件中就要加<math.h>;
3、必須記住的幾個Ascii值:
a 97 A 65 空格 32
b 98 B 66 0 48
z 122 Z 90 9 57
規律:同一個字母相差32;
Ascii中:小寫>大寫>數字>符號;
4、a++ 整個式子a++不變,但是a更新加1 先使用a的值,用後再加1
++a 整個式子++a增1,而且a更新加1 先將a加1後再使用
5、scanf 會將空格作爲分隔符
%c、putchar、gets 時:空格、Tab和回車符都將被作爲分隔符被讀入;
%s 輸入時:空格、Tab和回車符都將被作爲分隔符不被讀入;
注意:getchar只能輸入一個字符;
6、main是主函數名,C語言中規定必須main作爲主函數名;
每一個可執行的C程序中,都必須有一個且只能有一個主函數;
一個C程序中可以包含任意多個不同名的函數,但只能有一個主函數;
空語句,語法上認爲一條語句;
7、只有十進制數可以是負數,八進制和十六進制只能是整數;
8、末尾帶u或U的表示無符號常量,而無符號常量不能表示成小於0的負數;-200u 是不對的;
9、short[int]數值範圍是-32768~32767
例如:shortint a=32769 (×) 改:long int a=32769 改的時候範圍不能改變;
11、2.0==2.0 不能比較, 因爲小數類型的有double和float 類型不確定;
2=2 可以完全正確
12、求餘運算兩邊只能爲整形,求除運算可整形也可實型;
1.0/2.0=0.5 1/2=0 類型一致,不一致自動轉換
13、賦值運算左側只能是變量,不能是常量或表達式
a=b=7 √ a=b+2=7 ×
14、自加或自減本身就是一種賦值運算,可整形可實型,但不能是常量或表達式;負號與自加運算符優先級相同,自由至左計算;
-i++ 相當於-(i++)
15、printf可以沒有輸出項;
16、scanf從終端鍵盤上讀入數據 格式:scanf("%d%d",&a,&b);
判斷:scanf("%6.3f",&a); × 因爲輸入不可以指定小數位;
scanf可以指定正整數輸入所佔的寬度,但不能對實數指定小數位寬度;
17、在VC6.0下,輸入short型整數,格式控制要求用%hd;要輸入double型數據格式控制必須用%lf(或le),否則數據不能正確輸入;
int k, float m, double n;
scanf("%d%f%le",&k,&m,&n);
18、輸入一個double型數,使該數保留小數點後兩位,對第三位小樹進行四捨五入,然後輸出此數
#include <stdio.h>
main()
{ double x;
printf("Enter x:\n");
scanf("%lf",&x);
printf("(1)x=%lf\n",x);
x=x*100;
x=x+0.5;
x=(int)x;
x=x/100;
Printf("(2)x=%lf\n",x);
}
19、邏輯值有兩個(0和1);
20、循環中 switch() ()不能省;
if(a>b) a=b; 分號不能省;
21、如何破解嵌套:
先執行一次外循環;
再執行一次內循環;
直到內循環爲假,再去執行外循環,都爲假使退出;
22、break是跳出switch語句,也可用break在循環中終止本層循環體,從而提前結束本層循環;
continue是跳過本次循環中餘下尚未執行的語句,即:結束本層循環
注意: break是語句和循環體都不做,包括下面也不做,
continue並沒有使整個循環終止,僅是跳過本次的;
在for中,遇到continue後,跳過循環體中餘下語句,去做“表達式3”,求值之後再與表達式2決定循環是否再次執行;
23、字符常量只能包含一個字符,因此'abc'是非法的。
字符常量在內存中佔一個字節,所有字符常量都作爲整型量來處理。
\ddd三位八進制 代表一個ASCII字符, '\101' 爲A;
\xhh三位十六進制代表一個ASCII字符, '\x6d'爲m;
24、字符串是由雙引號括起來的一串字符,
“ ≡”表示等價,相當於數學中的“=”
25、字符與字符參與運算,結果是數值; '9'-'0'≡57-48≡9
數值與字符參與運算,結果是字符;4+'0'≡4+48≡52≡'4'
26、字符變量用關鍵字char定義,定義同時可賦值 char ch1='x';
%d輸出ASCII碼值 char ch='A' ; printf("%d%c",ch,ch);
%c輸出它的字符;
27、char a,b,c; scanf("%c%c%c",&a,&b,&c);
注意:當使用%c一個緊接一個時,在輸入字符時,字符經不應有間隔符,這時空格、回車符、Tab都將作爲字符讀入;
如:輸入 TH<CR> 則變量a中存放字符T,b中存放字符H,c中爲回車符
E<CR>
注意:當交叉輸入數值數據和字符數據時:
若是%c%d中間必須輸入間隔符,其他不用輸;
若是%d%c中間不許有間隔
28、putchar 用於輸出字符, putchar(ch);獨立語句, putchar('Y'); 終端顯示Y;
getchar 用於輸入字符,ch=getchar();
getchar 後的一對圓括號內沒有參數,但這一對圓括號不能省, getchar ()函數從終端讀入一個字符作爲函數值。以上是把讀入的一個字符賦給變量ch,在輸入時空格、回車符、都將作爲字符讀入;
29、要求給c1、c2分別輸入字符A和B,給a1,a2分別輸入7.29和101.298,從鍵盤正確輸入數據的形式是:
30、函數若沒有返回值,則必須把函數定義爲void類型,函數應該先定義再使用;
31、函數調用的步驟:
1>、無論書上題目多長,一律從主函數main開始看;
2>、遇到某函數時,找相應的函數名;
33、求地址運算符&只能用於變量和數組元素,不能用於表達式、常量或register的變量;
表達式q=&(k+1)是錯誤的, &必須放在運算對象左邊,且運算對象類型必須與指針變量的基類型相同;
34、當q=&k時,scanf("%d",&k);和scanf("%d",q);是等價的;
P=NULL 等價於P='\0';或P=0;指針P並不是指向地址爲0的存儲單元,而是具有一個確切的值——“空”;
35、當指針變量中存放了一個確切的地址值時,可用“間接訪問運算符*”通過指針來引用該地址的存儲單元;
int *p,i=10,j; p=&i; 賦值語句是:j=*p;
是指p所指存儲單元(i)的內容即10,賦予變量j;*p代表p所指的變量i;以上語句等價於j=i;
36、j=*(&i) *和&優先級同且有又至左,所以括號可省略爲j=*&i;
37、j=*p+1 指針變量p所指存儲單元中內容的值加1後再賦給變量j;
38、*p=100; *p=*p+1; 取指針變量p所指的存儲單元的值加1,再放入p所指的存儲單元中。顯然,當*p出現在賦值號左邊時,代表的是指針所指的存儲單元;當*p出現在賦值號右邊時,代表的是指針所指的存儲單元的內容。
即:以“=”賦值號爲界
*p = *p+1
左爲指針 右爲指針所指存儲單元的內容
*p = *p+1 等價於 *p+=1 或 ++*p或(*p)++
39、“++”和“*”級別同,自由至左,所以++ *p相當於++ (*p)
(*p)++ p先取存儲單元的 值,然後增1作爲表達式的值;
*p++ 先計算*p作爲表達式的值,然後使指針變量p本身增1,*p++移動了指針;
41、常量不能直接賦給指針 *a=10;是錯誤的;
42、一個數組佔有一串連續的存儲單元,在C中,一個數組是不能整體引用;
數組賦值之間用逗號隔開,當少於元素個數時,自動補0.
43、二維數組第一個“[]"可省,第二個不可以省;
44、若有定義:int *p[3],a[3][2],I,j;
在這裏,一對“[]”高於“*”,因此p先於[]結合,構成p[3],說明p是一個數組名,系統將爲它開闢3個連續的存儲單元,在它前面的*號則說明了p是指針類型,它的每個元素都是基類型爲int的指針;
45、在C中,無論是指針數組還是行指針,都是按行存放;
46、若有以下定義:int a[3][2],(*p)[2];
在說明符(*p)[2]中,由於一對圓括號的存在,所以*先於P結合,說明p是一個指針變量,然後再與說明符[2]結合,說明指針變量p的基類型是一個包含有兩個int元素的數組。
47、'\0'是一個轉義字符,稱爲'空值',它的ASCII代碼值爲0;'\0'作爲標誌佔用存儲空間,但不計入串的實際長度;
字符串“abc”的存儲爲:
a |
b |
c |
\0 |
佔4個空間 sizeof爲4 但實際長度strlen爲3;
48、在scanf中使用說明符%s,可以實現字符串的整體輸入;
當%s格式符輸入字符時,空格、回車都將作爲分隔符不被讀入;
A˽BCDEFG<CR> 將存入的是A,而不是A˽BCDEFG<CR>;
49、字符串常用的函數:
<1>、字符串賦值 strcpy strcpy (s1,s2)
將s2所指的字符串的內容賦值到s1所指空間中,返回s1的值,即串首地址
<2>、連接函數 strcat strcat (s1,s2)
將s2所指的字符串的內容連接到s1所指字符串後面,並自動覆蓋s1串末尾的\0,返回s!的地址值;
<3>、求字符串長度 strlen strlen(s) 這一長度不包括串尾的結束標誌\0;
<4>、字符串比較函數 strcmp strcmp (s1,s2);
若s1>s2 函數值大於0
若s1<s2 函數值小於0
若s1=s2 函數值等於0
比較方法:依次對s1和s2中對應位置上的字符兩兩比較,剛出現第一對不相同的字符時,即由這兩個字符決定串的大小;
50、(1)、用戶定義類型typedef:對已有的類型另外說明一個新的類型;
(2)、結構圖(struct):把具有相互關係的數據組成一個有機的整體;
(3)、共用體(union):又稱聯合體,使幾種不同類型的變量共用一段存儲空間;