計算機二級C 想過必看

計算機二級C     想過必看

2012910

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中間不許有間隔 

28putchar 用於輸出字符, 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):又稱聯合體,使幾種不同類型的變量共用一段存儲空間;

                                                                                                                         

 

 

 

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章