亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

C語言:黑客學員必修課(一)

2019-11-17 05:07:23
字體:
來源:轉載
供稿:網友
  第一章: C語言概論  

 ?。谜Z言的發展過程   

  當代最優秀的程序設計語言

  早期的C語言主要是用于UNIX系統。
由于C語言的強大功能和各方面的優點逐漸為人們熟悉,到了八十年代,C開始進入其它操作系統,并很快在各類大、中、小和微型計算機上得到了廣泛的使用。成為當代最優秀的程序設計語言之一。  

 ?。谜Z言的特點

  C語言是一種結構化語言。它層次清楚,便于按模塊化方式組織程序,易于調試和維護。C語言的表現能力和處理能力極強。它不僅具有豐富的運算符和數據類型,便于實現各類復雜的數據結構。它還可以直接訪問內存的物理地址,進行位(bit)一級的操作。由于C語言實現了對硬件的編程操作,因此C語言集高級語言和低級語言的功能于一體。既可用于系統軟件的開發,也適合于應用軟件的開發。此外,C語言還具有效率高,可移植性強等特點。因此廣泛地移植到了各類各型計算機上,從而形成了多種版本的C語言。  

 ?。谜Z言版本

  目前最流行的C語言有以下幾種:

     ·Microsoft C 或稱 MS C

     ·Borland Turbo C 或稱 Turbo C

     ·AT&T C

    這些C語言版本不僅實現了ANSI C標準,而且在此基礎上各自作了一些擴充,使之更加方便、完美。  

  面向對象的程序設計語言

  在C的基礎上,一九八三年又由貝爾實驗室的Bjarne Strou-strup推出了C++。 C++進一步擴充和完善了C語言,成為一種面向 對象的程序設計語言。C++目前流行的最新版本是Borland C++4.5,Symantec C++6.1,和Microsoft VisualC++ 2.0。C++提出了一些更為深入的概念,它所支持的這些面向對象的概念輕易將問題空間直接地映射到程序空間,為程序員提供了一種與傳統結構程序設計不同的思維方式和編程方法。因而也增加了整個語言的復雜性,把握起來有一定難度。  

  C和C++

  但是,C是C++的基礎,C++語言和C語言在很多方面是兼容的。因此,把握了C語言,再進一步學習C++就能以一種熟悉的語法來學習面向對象的語言,從而達到事半功倍的目的。  

 ?。迷闯绦虻慕Y構特點

  為了說明C語言源程序結構的特點,先看以下幾個程序。這幾個程 序由簡到難,表現了C語言源程序在組成結構上的特點。雖然有關內容還未介紹,但可從這些例子中了解到組成一個C源程序的基本部分和書寫格式。main()

  {

  
  }

    main是主函數的函數名,表示這是一個主函數。每一個C源程序都必須有,且只能有一個主函數(main函數)。函數調用語句,printf函數的功能是把要輸出的內容送到顯示器去顯示。printf函數是一個由系統定義的標準函數,可在程序中直接調用。

  #include

  #include

  main()

  {

  double x,s;

  printf("input number:/n");

  scanf("%lf",&x);

  s=sin(x);

  printf("sine of %lf is %lf/n",x,s);

  }    更多文章 更多內容請看C/C++進階技術文檔專題,或   每行注釋

  include稱為文件包含命令擴展名為.h的文件也稱為頭文件或首部文件

  定義兩個實數變量,以被后面程序使用

  顯示提示信息

  從鍵盤獲得一個實數x

  求x的正弦,
并把它賦給變量s

  顯示程序運算結果

  main函數結束     

  程序的功能是從鍵盤輸入一個數x,求x的正弦值,然后輸出結果。在main()之前的兩行稱為預處理命令(詳見后面)。預處理命令還有其它幾種,這里的include 稱為文件包含命令,其意義是把尖括號""或引號<>內指定的文件包含到本程序來,成為本程序的一部分。被包含的文件通常是由系統提供的,其擴展名為.h。因此也稱為頭文件或首部文件。C語言的頭文件中包括了各個標準庫函數的函數原型。因此,凡是在程序中調用一個庫函數時,都必須包含該函數原型所在的頭文件。在本例中,使用了三個庫函數:輸入函數scanf,正弦函數sin,輸出函數printf。sin函數是數學函數,其頭文件為math.h文件,因此在程序的主函數前用include命令包含了math.h。scanf和printf是標準輸入輸出函數,其頭文件為stdio.h,在主函數前也用include命令包含了stdio.h文件。

  需要說明的是,C語言規定對scanf和printf這兩個函數可以省去對其頭文件的包含命令。所以在本例中也可以刪去第二行的包含命令#include。同樣,在例1.1中使用了printf函數,也省略了包含命令。

  在例題中的主函數體中又分為兩部分,一部分為說明部分,另一部分執行部分。說明是指變量的類型說明。例題中未使用任何變量,因此無說明部分。C語言規定,源程序中所有用到的變量都必須先說明,后使用,否則將會出錯。這一點是編譯型高級程序設計語言的一個特點,與解釋型的BASIC語言是不同的。說明部分是C源程序結構中很重要的組成部分。本例中使用了兩個變量x,s,用來表示輸入的自變量和sin函數值。由于sin函數要求這兩個量必須是雙精度浮點型,故用類型說明符double來說明這兩個變量。說明部分后的四行為執行部分或稱為執行語句部分,用以完成程序的功能。執行部分的第一行是輸出語句,調用printf函數在顯示器上輸出提示字符串,請操作人員輸入自變量x的值。第二行為輸入語句,調用scanf函數,接受鍵盤上輸入的數并存入變量x中。第三行是調用sin函數并把函數值送到變量s中。第四行是用printf 函數輸出變量s的值,即x的正弦值。程序結束。   

  printf("input number:/n");

  scanf("%lf",'C10F10&x);

  s=sin(x);

  printf("sine of %lf is %lf/n",'C10F10x,s);

    運行本程序時,首先在顯示器屏幕上給出提示串input number,這是由執行部分的第一行完成的。用戶在提示下從鍵盤上鍵入某一數,如5,按下回車鍵,接著在屏幕上給出計算結果。  

  輸入和輸出函數

  在前兩個例子中用到了輸入和輸出函數scanf和 printf,在第三章中我們要具體介紹。這里我們先簡單介紹一下它們的格式,以便下面使用。scanf和 printf這兩個函數分別稱為格式輸入函數和格式輸出函數。其意義是按指定的格式輸入輸出值。因此,這兩個函數在括號中的參數表都由以下兩部分組成: “格式控制串”,參數表  格式控制串是一個字符串,必須用雙引號括起來,它表示了輸入輸出量的數據類型。各種類型的格式表示法可參閱第三章。在printf函數中還可以在格式控制串內出現非格式控制字符,這時在顯示屏幕上將原文照印。參數表中給出了輸入或輸出的量。當有多個量時,用逗號間隔。例如:

  printf("sine of %lf is %lf/n",x,s);

    其中%lf為格式字符,表示按雙精度浮點數處理。它在格式串中兩次現,對應了x和s兩個變量。其余字符為非格式字符則照原樣輸出在屏幕上

  int max(int a,int b);

  main(){

  int x,y,z;

  printf("input two numbers:/n");scanf("%d%d",&x,&y);

  z=max(x,y);

  printf("maxmum=%d",z);

  }

  int max(int a,int b){

  if(a>b)return a;else return b;

  }

  此函數的功能是輸入兩個整數,輸出其中的大數。

  /*函數說明*/

  /*主函數*/

  /*變量說明*/

  /*輸入x,y值*/

  /*調用max函數*/

  /*輸出*/

  /*定義max函數*/

  /*把結果返回主調函數*/

    上面例中程序的功能是由用戶輸入兩個整數,程序執行后輸出其中較大的數。本程序由兩個函數組成,主函數和max 函數。函數之間是并列關系??蓮闹骱瘮抵姓{用其它函數。max 函數的功能是比較兩個數,然后把較大的數返回給主函數。max 函數是一個用戶自定義函數。因此在主函數中要給出說明(程序第三行)。可見,在程序的說明部分中,不僅可以有變量說明,還可以有函數說明。關于函數的具體內容將在第五章介紹。在程序的每行后用/*和*/括起來的內容為注釋部分,程序不執行注釋部分。

  上例中程序的執行過程是,首先在屏幕上顯示提示串,請用戶輸入兩個數,回車后由scanf函數語句接收這兩個數送入變量x,y中,然后調用max函數,并把x,y 的值傳送給max函數的參數a,b。在max函數中比較a,b的大小,把大者返回給主函數的變量z,最后在屏幕上輸出z的值。


  C源程序的結構特點   

  1.一個C語言源程序可以由一個或多個源文件組成。  

  2.每個源文件可由一個或多個函數組成。   

  3.一個源程序不論由多少個文件組成,都有一個且只能有一個main函數,即主函數。   

  4.源程序中可以有預處理命令(include 命令僅為其中的一種),預處理命令通常應放在源文件或源程序的最前面。  

  5.每一個說,每一個語句都必須以分號結尾。但預處理命令,函數頭和花括號“}”之后不能加分號。   

  6.標識符,要害字之間必須至少加一個空格以示間隔。若已有明顯的間隔符,也可不再加空格來間隔。    更多文章 更多內容請看C/C++進階技術文檔專題,或   書寫程序時應遵循的規則

  從書寫清楚,便于閱讀,理解,維護的角度出發,在書寫程序時 應遵循以下規則:   

  1.一個說明或一個語句占一行。   

  2.用{} 括起來的部分,通常表示了程序的某一層次結構。
{}一般與該結構語句的第一個字母對齊,并單獨占一行。   

  3.低一層次的語句或說明可比高一層次的語句或說明縮進若干格后書寫。以便看起來更加清楚,增加程序的可讀性。在編程時應力求遵循這些規則,以養成良好的編程風格。   

  C語言的字符集

  字符是組成語言的最基本的元素。C語言字符集由字母,數字,空格,標點和非凡字符組成。在字符常量,字符串常量和注釋中還可以使用漢字或其它可表示的圖形符號。

  1.字母  小寫字母a~z共26個,大寫字母A~Z共26個   

  2.數字  0~9共10個   

  3.空白符 空格符、制表符、換行符等統稱為空白符??瞻追辉谧址A亢妥址A恐衅鹱饔?。在其它地方出現時,只起間隔作用, 編譯程序對它們忽略。因此在程序中使用空白符與否,對程序的編譯不發生影響,但在程序中適當的地方使用空白符將增加程序的清楚性和可讀性。   

  4.標點和非凡字符   

  C語言詞匯

  在C語言中使用的詞匯分為六類:標識符,要害字,運算符,分隔符,常量,注釋符等。   

  1.標識符

  在程序中使用的變量名、函數名、標號等統稱為標識符。除庫函數的函數名由系統定義外,其余都由用戶自定義。C 規定,標識符只能是字母(A~Z,a~z)、數字(0~9)、下劃線()組成的字符串,并且其第一個字符必須是字母或下劃線。   

  以下標識符是合法的:   

  a,x, 3x,BOOK 1,sum5   

  以下標識符是非法的:

  3s 以數字開頭

  s*T 出現非法字符*

  -3x 以減號開頭

  bowy-1 出現非法字符-(減號)

    在使用標識符時還必須注重以下幾點:

  (1)標準C不限制標識符的長度,但它受各種版本的C 語言編譯系統限制,同時也受到具體機器的限制。例如在某版本C 中規定標識符前八位有效,當兩個標識符前八位相同時,則被認為是同一個標識符。

  (2)在標識符中,大小寫是有區別的。例如BOOK和book 是兩個不同的標識符。

  (3)標識符雖然可由程序員隨意定義,但標識符是用于標識某個量的符號。因此,命名應盡量有相應的意義,以便閱讀理解,作到“顧名思義”。   

  2.要害字

  要害字是由C語言規定的具有特定意義的字符串,通常也稱為保留字。用戶定義的標識符不應與要害字相同。C語言的要害字分為以下幾類:

  (1)類型說明符

  用于定義、說明變量、函數或其它數據結構的類型。如前面例題中用到的int,double等

  (2)語句定義符

  用于表示一個語句的功能。如例1.3中用到的if else就是條件語句的語句定義符。

  (3)預處理命令字

  用于表示一個預處理命令。如前面各例中用到的include。   

  3.運算符

 ?。谜Z言中含有相當豐富的運算符。運算符與變量,函數一起組成表達式,表示各種運算功能。運算符由一個或多個字符組成。   

  4.分隔符

  在C語言中采用的分隔符有逗號和空格兩種。逗號主要用在類型說明和函數參數表中,分隔各個變量??崭穸嘤糜谡Z句各單詞之間,作間隔符。在要害字,標識符之間必須要有一個以上的空格符作間隔, 否則將會出現語法錯誤,例如把int a;寫成 inta;C編譯器會把inta當成一個標識符處理,其結果必然出錯。   

  5.常量

  C 語言中使用的常量可分為數字常量、字符常量、字符串常量、符號常量、轉義字符等多種。在第二章中將專門給予介紹。   

  6.注釋符

  C 語言的注釋符是以“/*”開頭并以“*/”結尾的串。在“/*”和“*/”之間的即為注釋。程序編譯時,不對注釋作任何處理。注釋可出現在程序中的任何位置。注釋用來向用戶提示或解釋程序的意義。在調試程序中對暫不使用的語句也可用注釋符括起來,使
翻譯跳過不作處理,待調試結束后再去掉注釋符。
更多文章 更多內容請看C/C++進階技術文檔專題,或   第二章: 數據類型、運算符、表達式

  

 ?。谜Z言的數據類型

  在第一課中,我們已經看到程序中使用的各種變量都應預先加以說明,即先說明,后使用。
對變量的說明可以包括三個方面:

  ·數據類型

  ·存儲類型

  ·作用域

    在本課中,我們只介紹數據類型說明。其它說明在以后各章中陸續介紹。所謂數據類型是按被說明量的性質,表示形式,占據存儲空間的多少,構造特點來劃分的。在C語言中,數據類型可分為:基本數據類型,構造數據類型,指針類型,空類型四大類。

  

  1.基本數據類型

  基本數據類型最主要的特點是,其值不可以再分解為其它類型。也就是說,基本數據類型是自我說明的。

  

  2.構造數據類型構造數據類型

  是根據已定義的一個或多個數據類型用構造的方法來定義的。也就是說,一個構造類型的值可以分解成若干個“成員”或“元素”。每個“成員”都是一個基本數據類型或又是一個構造類型。在C語言中,構造類型有以下幾種:

  ·數組類型

  ·結構類型

  ·聯合類型

  

  3.指針類型

  指針是一種非凡的,同時又是具有重要作用的數據類型。其值用來表示某個量在內存儲器中的地址。雖然指針變量的取值類似于整型量,但這是兩個類型完全不同的量,因此不能混為一談。4.空類型在調用函數值時,通常應向調用者返回一個函數值。這個返回的函數值是具有一定的數據類型的,應在函數定義及函數說明中給以說明,例如在例題中給出的max函數定義中,函數頭為: int max(int a,int b);其中“int ”類型說明符即表示該函數的返回值為整型量。又如在例題中,使用了庫函數 sin,由于系統規定其函數返回值為雙精度浮點型,因此在賦值語句s=sin (x);中,s 也必須是雙精度浮點型,以便與sin函數的返回值一致。所以在說明部分,把s說明為雙精度浮點型。但是,也有一類函數,調用后并不需要向調用者返回函數值, 這種函數可以定義為“空類型”。其類型說明符為void。在第五章函數中還要具體介紹。在本章中,我們先介紹基本數據類型中的整型、浮點型和字符型。其余類型在以后各章中陸續介紹。

  對于基本數據類型量,按其取值是否可改變又分為常量和變量兩種。在程序執行過程中,其值不發生改變的量稱為常量,取值可變的量稱為變量。它們可與數據類型結合起來分類。例如,可分為整型常量、整型變量、浮點常量、浮點變量、字符常量、字符變量、枚舉常量、枚舉變量。在程序中,常量是可以不經說明而直接引用的,而變量則必須先說明后使用。

  

  整型量

  

  整型量包括整型常量、整型變量。整型常量就是整常數。在C語言中,使用的整常數有八進制、十六進制和十進制三種。

  

  整型常量   

  1.八進制整常數八進制整常數必須以0開頭,即以0作為八進制數的前綴。數碼取值為0~7。八進制數通常是無符號數。

  以下各數是合法的八進制數:

  015(十進制為13) 0101(十進制為65) 0177777(十進制為65535)

  以下各數不是合法的八進制數:

  256(無前綴0) 03A2(包含了非八進制數碼) -0127(出現了負號)   

  2.十六進制整常數

  十六進制整常數的前綴為0X或0x。其數碼取值為0~9,A~F或a~f。

  以下各數是合法的十六進制整常數:

  0X2A(十進制為42)  0XA0 (十進制為160)  0XFFFF (十進制為65535)

  以下各數不是合法的十六進制整常數:

  5A (無前綴0X)  0X3H (含有非十六進制數碼)   

  3.十進制整常數

  十進制整常數沒有前綴。其數碼為0~9。

  以下各數是合法的十進制整常數:

  237 -568 65535 1627

  以下各數不是合法的十進制整常數:

  023 (不能有前導0) 23D (含有非十進制數碼)

  在程序中是根據前綴來區分各種進制數的。因此在書寫常數時不要把前綴弄錯造成結果不正確。4.整型常數的后綴在16位字長的機器上,基本整型的長度也為16位,因此表示的數的范圍也是有限定的。十進制無符號整常數的范圍為0~65535,有符號數為-32768~+32767。八進制無符號數的表示范圍為0~0177777。十六進制無符號數的表示范圍為0X0~0XFFFF或0x0~0xFFFF。假如使用的數超過了上述范圍,就必須用長整型數來表示。長整型數是用后綴“L”或“l”來表示的。例如:


  十進制長整常數 158L (十進制為158) 358000L (十進制為-358000)

  八進制長整常數 012L (十進制為10) 077L (十進制為63) 0200000L (十進制為65536)

  十六進制長整常數 0X15L (十進制為21) 0XA5L (十進制為165) 0X10000L (十進制為65536)

    長整數158L和基本整常數158 在數值上并無區別。但對158L,因為是長整型量,C編譯系統將為它分配4個字節存儲空間。而對158,因為是基本整型,只分配2 個字節的存儲空間。因此在運算和輸出格式上要予以注重,避免出錯。無符號數也可用后綴表示,整型常數的無符號數的后綴為“U”或“u”。例如: 358u,0x38Au,235Lu 均為無符號數。前綴,后綴可同時使用以表示各種類型的數。如0XA5Lu表示十六進制無符號長整數A5,其十進制為165。    更多文章 更多內容請看C/C++進階技術文檔專題,或   整型變量   

  整型變量可分為以下幾類:

  1.基本型

  類型說明符為int,在內存中占2個字節,其取值為基本整常數。

  2.短整量

  類型說明符為short int或short'C110F1。
所占字節和取值范圍均與基本型相同。

  3.長整型

  類型說明符為long int或long ,在內存中占4個字節,其取值為長整常數。

  4.無符號型

  類型說明符為unsigned。

  無符號型又可與上述三種類型匹配而構成:

  (1)無符號基本型 類型說明符為unsigned int或unsigned。

  (2)無符號短整型 類型說明符為unsigned short

  (3)無符號長整型 類型說明符為unsigned long

  各種無符號類型量所占的內存空間字節數與相應的有符號類型量相同。但由于省去了符號位,故不能表示負數。 下表列出了Turbo C中各類整型量所分配的內存字節數及數的表示范圍。

  類型說明符    數的范圍     分配字節數

  int       -32768~32767     ■■

  short int    -32768~32767     ■■

  signed int    -32768~32767     ■■

  unsigned int   0~65535        ■■

  long int  -2147483648~2147483647  ■■■■

  unsigned long  0~4294967295     ■■■■

  整型變量的說明

  變量說明的一般形式為: 類型說明符 變量名標識符,變量名標識符,...; 例如:

  int a,b,c; (a,b,c為整型變量)

  long x,y; (x,y為長整型變量)

  unsigned p,q; (p,q為無符號整型變量)   

  在書寫變量說明時,應注重以下幾點:

  1.答應在一個類型說明符后,說明多個相同類型的變量。各變量名之間用逗號間隔。類型說明符與變量名之間至少用一個空格間隔。

  2.最后一個變量名之后必須以“;”號結尾。

  3.變量說明必須放在變量使用之前。一般放在函數體的開頭部分。

  [Practice] //1int a,b;

  short int c;

  short d=100;

  a=d-20;

  b=a+d;

  c=a+b+d;

  d=d-a+c-b;'Vtable

  a,2,0

  b,2,0

  c,2,0

  d,2,100

  of Vtable

  'Vupdate

  1,0;2,0

  3,0

  4,100

  1,80

  2,180

  3,360

  4,200

  of Vupdate

  of Practice

  [Practice] //2int a=5;

  int b=9;

  long int c;

  long d;

  c=a+b-7;

  d=a*b*c;

  c=d*d*d;

  a=c-d;'Vtable

  a,2,5

  b,2,9

  c,4,0


  d,4,0

  of Vtable

  'Vupdate

  1,5

  2,9

  3,0

  4,0

  3,7

  4,315

  3,31255875

  1,-5112

  of Vupdate

  of Practice

  [Practice] //3int a=6,b=19;

  unsigned int c;

  int d;

  c=a-b+7;

  d=b*c;

  a=b+c+d;

  b=-a;'Vtable

  a,2,6

  b,2,19

  c,2,0

  d,2,0

  of Vtable

  'Vupdate

  1,6;2,19

  3,0

  4,0

  3,65530

  4,-114

  1,-101

  2,101

  of Vupdate

  of Practice

  void main(){

  long x,y;

  int a,b,c,d;

  x=5;

  y=6;

  a=7;

  b=8;

  c=x+a;

  d=y+b;

  printf("c=x+a=%d,d=y+b=%d/n",c,d);

  }

  將main說明為返回void,即不返回任何類型的值

  x,y被定義為long型

  a,b,c,d被定義為int型

  5->x

  6->y

  7->a

  8->b

  x+a->c

  y+b->d

  顯示程序運行結果 of long x,y;

  int a,b,c,d;

  c=x+a;

  d=y+b;

    從程序中可以看到:x, y是長整型變量,a, b是基本整型變量。它們之間答應進行運算,運算結果為長整型。但c,d被定義為基本整型,因此最后結果為基本整型。本例說明,不同類型的量可以參與運算并相互賦值。其中的類型轉換是由編譯系統自動完成的。有關類型轉換的規則將在以后介紹?!?更多文章 更多內容請看C/C++進階技術文檔專題,或   實型量   

  實型常量   

  實型也稱為浮點型。實型常量也稱為實數或者浮點數。在C語言中,實數只采用十進制。它有二種形式: 十進制數形式指數形式

  1.十進制數形式

  由數碼0~ 9和小數點組成。
例如:0.0,.25,5.789,0.13,5.0,300.,-267.8230等均為合法的實數。

  2.指數形式

  由十進制數,加階碼標志“e”或“E”以及階碼(只能為整數,可以帶符號)組成。其一般形式為a E n (a為十進制數,n為十進制整數)其值為 a*10,n 如: 2.1E5 (等于2.1*10,5), 3.7E-2 (等于3.7*10,)-2*) 0.5E7 (等于0.5*10,7), -2.8E-2 (等于-2.8*10,)-2*)以下不是合法的實數 345 (無小數點) E7 (階碼標志E之前無數字)  -5 (無階碼標志) 53.-E3 (負號位置不對) 2.7E (無階碼)

  標準C答應浮點數使用后綴。后綴為“f”或“F”即表示該數為浮點數。如356f和356.是等價的。例2.2說明了這種情況:

  void main()

  {

  printf("%f/n%f/n",356.,356f);

  }

  void 指明main不返回任何值 利用printf顯示結果 結束   

  實型變量   

  實型變量分為兩類:單精度型和雙精度型,

  其類型說明符為float 單精度說明符,double 雙精度說明符。在Turbo C中單精度型占4個字節(32位)內存空間,其數值范圍為3.4E-38~3.4E+38,只能提供七位有效數字。雙精度型占8 個字節(64位)內存空間,其數值范圍為1.7E-308~1.7E+308,可提供16位有效數字。

  實型變量說明的格式和書寫規則與整型相同。

  例如: float x,y; (x,y為單精度實型量)


      double a,b,c; (a,b,c為雙精度實型量)

  實型常數不分單、雙精度,都按雙精度double型處理。

  void main(){

  float a;

  double b;

  a=33333.33333;

  b=33333.33333333333333;

  printf("%f/n%f/n",a,b);

  }

  此程序說明float、double的不同

  a ■■■■

  b ■■■■■■■■

  a<---33333.33333

  b<---33333.33333333333;;

  顯示程序結果

  此程序說明float、double的不同

  float a;

  double b;

  a=33333.33333;

  b=33333.33333333333333; 從本例可以看出,由于a 是單精度浮點型,有效位數只有七位。而整數已占五位,故小數二位后之后均為無效數字。b 是雙精度型,有效位為十六位。但Turbo C 規定小數后最多保留六位,其余部分四舍五入。

  [Practice] //floatint a=32;

  float b;

  double d;

  b=12345678;

  d=b*100;

  d=d+a;

  d=d+58.123456;'Vtable

  a,2,32

  b,4,0.0

  d,8,0.0

  of Vtable

  'Vupdate

  1,32

  2,0

  3,0

  2,12345678.00000

  3,1234567800

  3,1234567832

  3,1234567890.123456

  of Vupdate

  of Practice

  [Practice] //1int a=543;

  float b;

  b=123.123962+a;

  b=b-100;

  a=b;'Vtable

  a,2,543

  b,4,0.0

  of Vtable

  'Vupdate

  1,543

  2,0.0

  2,123.123962

  2,23.123962

  1,23

  of Vupdate

  of Practice   

  字符型量   

  字符型量包括字符常量和字符變量。   

  字符常量

  字符常量是用單引號括起來的一個字符。例如'a','b','=','+','?'都是合法字符常量。在C語言中,字符常量有以下特點:

  1.字符常量只能用單引號括起來,不能用雙引號或其它括號。

  2.字符常量只能是單個字符,不能是字符串。

  3.字符可以是字符集中任意字符。但數字被定義為字符型之后就

  不能參與數值運算。如'5'和5 是不同的。'5'是字符常量,不能參與運算。   

  轉義字符

  轉義字符是一種非凡的字符常量。轉義字符以反斜線"/"開頭,后跟一個或幾個字符。轉義字符具有特定的含義,不同于字符原有的意義,故稱“轉義”字符。例如,在前面各例題printf函數的格式串中用到的“/n”就是一個轉義字符,其意義是“回車換行”。轉義字符主要用來表示那些用一般字符不便于表示的控制代碼。

  常用的轉義字符及其含義

  轉義字符  轉義字符的意義

  /n      回車換行

  /t      橫向跳到下一制表位置

  /v      豎向跳格

  /b      退格

  /r      回車

  /f      走紙換頁

  //      反斜線符"/"

  /'      單引號符

  /a      鳴鈴

  /ddd     1~3位八進制數所代表的字符

  /xhh     1~2位十六進制數所代表的字符

  廣義地講,C語言字符集中的任何一個字符均可用轉義字符來表示。表2.2中的/ddd和/xhh正是為此而提出的。ddd和hh分別為八進制和十六進制的ASCII代碼。如/101表示字?quot;A" ,/102表示字母"B",/134表示反斜線,/XOA表示換行等。轉義字符的使用

  void main()

  {

  int a,b,c;

  a=5; b=6; c=7;

  printf("%d/n/t%d %d/n %d %d/t/b%d/n",a,b,c,a,b,c);

  }

  此程序練習轉義字符的使用

  a、b、c為整數 5->a,6- c 更多文章 更多內容請看C/C++進階技術文檔專題,或
  此程序練習轉義字符的使用

  a、b、c為整數 5->a,6->b,7->c

  調用printf顯示程序運行結果

  printf("%d/n/t%d %d/n %d %d/t/b%d/n",a,b,c,a,b,c);

  程序在第一列輸出a值5之后就是“/n”,
故回車換行;接著又是“/t”,于是跳到下一制表位置(設制表位置間隔為8),再輸出b值6;空二格再輸出c 值7后又是"/n",因此再回車換行;再空二格之后又輸出a值5;再空三格又輸出b的值6;再次后"/t"跳到下一制表位置(與上一行的6 對齊),但下一轉義字符“/b”又使退回一格,故緊挨著6再輸出c值7。   

  字符變量

  字符變量的取值是字符常量,即單個字符。字符變量的類型說明符是char。字符變量類型說明的格式和書寫規則都與整型變量相同。

  例如:

  char a,b; 每個字符變量被分配一個字節的內存空間,因此只能存放一個字符。字符值是以ASCII碼的形式存放在變量的內存單元之中的。如x的

  十進制ASCII碼是120,y的十進制ASCII碼是121。對字符變量a,b賦予'x'和'y'值: a='x';b='y';實際上是在a,b兩個單元內存放120和121的二進制代碼: a 0 1 1 1 1 0 0 0

       b 0 1 1 1 1 0 0 1

  所以也可以把它們看成是整型量。 C語言答應對整型變量賦以字符值,也答應對字符變量賦以整型值。在輸出時, 答應把字符變量按整型量輸出,也答應把整型量按字符量輸出。 整型量為二字節量,字符量為單字節量,當整型量按字符型量處理時, 只有低八位字節參與處理。

  main(){

  char a,b;

  a=120;

  b=121;

  printf("%c,%c/n%d,%d/n",a,b,a,b);

  }

  a ■ b ■

  a <-- 120

  b <--- 121

  顯示程序結果 char a,b;

  a=120;

  b=121;

  本程序中說明a,b為字符型,但在賦值語句中賦以整型值。從結果看,a,b值的輸出形式取決于printf函數格式串中的格式符,當格式符為"c"時,對應輸出的變量值為字符,當格式符為"d"時,對應輸出的變量值為整數。

  void main(){

  char a,b;

  a='x';

  b='y';

  a=a-32;

  b=b-32;

  printf("%c,%c/n%d,%d/n",a,b,a,b);

  }

  a,b被說明為字符變量并賦予字符值

  把小寫字母換成大寫字母

  以整型和字符型輸出

  本例中,a,b被說明為字符變量并賦予字符值,C語言答應字符變量參與數值運算,即用字符的ASCII 碼參與運算。由于大小寫字母的ASCII 碼相差32,因此運算后把小寫字母換成大寫字母。然后分別以整型和字符型輸出。

  [Practice] //charint a=49;

  char b;

  char d;

  b=a+10;

  d=a+b;'Vtable

  a,2,49

  b,1,隨機

  d,1,隨機

  of Vtable

  'Vupdate

  1,49

  2,隨機

  3,隨機

  2,';'

  3,'l'

  of Vupdate

  of Practice

  [Practice] //char c1,c2;

  c1='a';c2='b';

  c1=c1-32;c2=c2-32;'Vtable

  c1,1,隨機

  c2,1,隨機

  of Vtable

  'Vupdate

  1,隨機;2,隨機

  1,'a';2,'b'

  1,'A';2,'B'

  of Vupdate

  of Practice    更多文章 更多內容請看C/C++進階技術文檔專題,或   字符串常量

  字符串常量是由一對雙引號括起的字符序列。例如: "CHINA" ,"C program: , "$12.5" 等都是合法的字符串常量。字符串常量和字符常量是不同的量。它們之間主要有以下區別:


  1.字符常量由單引號括起來,字符串常量由雙引號括起來。


  2.字符常量只能是單個字符,字符串常量則可以含一個或多個字符。

  3.可以把一個字符常量賦予一個字符變量,但不能把一個字符串常量賦予一個字符變量。在C語言中沒有相應的字符串變量。

  這是與BASIC 語言不同的。但是可以用一個字符數組來存放一個字符串常量。在數組一章內予以介紹。

  4.字符常量占一個字節的內存空間。字符串常量占的內存字節數等于字符串中字節數加1。增加的一個字節中存放字符"/0"(ASCII碼為0)。這是字符串結束的標志。例如,字符串 "C program"在內存中所占的字節為:C program/0。字符常量'a'和字符串常量"a"雖然都只有一個字符,但在內存中的情況是不同的。

  'a'在內存中占一個字節,可表示為:a

  "a"在內存中占二個字節,可表示為:a/0符號常量   

  符號常量

  在C語言中,可以用一個標識符來表示一個常量,稱之為符號常量。符號常量在使用之前必須先定義,其一般形式為:

  #define 標識符 常量

  其中#define也是一條預處理命令(預處理命令都?quot;#"開頭),稱為宏定義命令(在第九章預處理程序中將進一步介紹),其功能是把該標識符定義為其后的常量值。一經定義,以后在程序中所有出現該標識符的地方均代之以該常量值。習慣上符號常量的標識符用大寫字母,變量標識符用小寫字母,以示區別。

  #define PI 3.14159

  void main(){

  float s,r;

  r=5;

  s=PI*r*r;

  printf("s=%f/n",s);

  }

  由宏定義命令定義PI 為3.14159 s,r定義為實數 5->r PI*r*r->s

  顯示程序結果 float s,r; r=5; s=PI*r*r; 本程序在主函數之前由宏定義命令定義PI 為3.14159,在程序中即以該值代替PI 。s=PI*r*r等效于s=3.14159*r*r。應該注重的是,符號常量不是變量,它所代表的值在整個作用域內不能再改變。也就是說,在程序中,不能再用賦值語句對它重新賦值。   

  變量的初值和類型轉換  

  變量賦初值

  在程序中經常需要對變量賦初值,以便使用變量。語言程序中可有多種方法,在定義時賦以初值的方法,這種方法稱為初始化。在變量說明中賦初值的一般形式為:

  類型說明符 變量1= 值1,變量2= 值2,……; 例如:

  int a=b=c=5;

  float x=3.2,y=3f,z=0.75;

  char ch1='K',ch2='P';

  應注重,在說明中不答應連續賦值,如a=b=c=5是不合法的。

  void main(){

  int a=3,b,c=5;

  b=a+c;

  printf("a=%d,b=%d,c=%d/n",a,b,c);

  } a<---3,b<--0,c<---5

  b<--a+c

  顯示程序運行結果   

  變量類型的轉換

  變量的數據類型是可以轉換的。轉換的方法有兩種, 一種是自動轉換,一種是強制轉換。   

  自動轉換

  自動轉換發生在不同數據類型的量混合運算時,由編譯系統自動完成。自動轉換遵循以下規則:

  1.若參與運算量的類型不同,則先轉換成同一類型,然后進行運算。

  2.轉換按數據長度增加的方向進行,以保證精度不降低。如int型和long型運算時,先把int量轉成long型后再進行運算。

  3.所有的浮點運算都是以雙精度進行的,即使僅含float單精度量運算的表達式,也要先轉換成double型,再作運算。

  4.char型和short型參與運算時,必須先轉換成int型。

  5.在賦值運算中,賦值號兩邊量的數據類型不同時, 賦值號右邊量的類型將轉換為左邊量的類型。 假如右邊量的數據類型長度左邊長時,將丟失一部分數據,這樣會降低精度, 丟失的部分按四舍五入向前舍入。圖21表示了類型自動轉換的規則。

  void main(){

  float PI=3.14159;

  int s,r=5;

  s=r*r*PI;

  printf("s=%d/n",s);

  } PI<--3.14159

  s<--0,r<--5

  s<--r*r*PI

  顯示程序運行結果

  float PI=3.14159;

  int s,r=5;

  s=r*r*PI;

  本例程序中,PI為實型;s,r為整型。在執行s=r*r*PI語句時,r和PI都轉換成double型計算,結果也為double型。但由于s為整型,故賦值結果仍為整型,舍去了小數部分。   
更多文章 更多內容請看C/C++進階技術文檔專題,或   強制類型轉換

  強制類型轉換是通過類型轉換運算來實現的。其一般形式為: (類型說明符) (表達式) 其功能是把表達式的運算結果強制轉換成類型說明符所表示的類型。
例如: (float) a 把a轉換為實型(int)(x+y) 把x+y的結果轉換為整型在使用強制轉換時應注重以下問題:

  1.類型說明符和表達式都必須加括號(單個變量可以不加括號),如把(int)(x+y)寫成(int)x+y則成了把x轉換成int型之后再與y相加了。

  2.無論是強制轉換或是自動轉換,都只是為了本次運算的需要而對變量的數據長度進行的臨時性轉換,而不改變數據說明時對該變量定義的類型。

  main(){

  float f=5.75;

  printf("(int)f=%d,f=%f/n",(int)f,f);

  }

  f<--5.75

  將float f強制轉換成int f float f=5.75;printf("(int)f=%d,f=%f/n",(int)f,f); 本例表明,f雖強制轉為int型,但只在運算中起作用, 是臨時的,而f本身的類型并不改變。因此,(int)f的值為 5(刪去了小數)而f的值仍為5.75。   

  基本運算符和表達式   

  運算符的種類、優先級和結合性

 ?。谜Z言中運算符和表達式數量之多, 在高級語言中是少見的。正是豐富的運算符和表達式使C語言功能十分完善。 這也是C語言的主要特點之一。

 ?。谜Z言的運算符不僅具有不同的優先級, 而且還有一個特點,就是它的結合性。在表達式中, 各運算量參與運算的先后順序不僅要遵守運算符優先級別的規定,還要受運算符結合性的制約, 以便確定是自左向右進行運算還是自右向左進行運算。 這種結合性是其它高級語言的運算符所沒有的,因此也增加了C語言的復雜性。   

  運算符的種類C語言的運算符可分為以下幾類:

  1.算術運算符

  用于各類數值運算。包括加(+)、減(-)、乘(*)、除(/)、求余(或稱模運算,%)、自增(++)、自減(--)共七種。

  2.關系運算符

  用于比較運算。包括大于(>)、小于(<)、等于(==)、 大于等于(>=)、小于等于(<=)和不等于(!=)六種。

  3.邏輯運算符

  用于邏輯運算。包括與(&&)、或(  )、非(!)三種。

  4.位操作運算符

  參與運算的量,按二進制位進行運算。包括位與(&)、位或( )、位非(~)、位異或(^)、左移(<<)、右移(>>)六種。

  5.賦值運算符

  用于賦值運算,分為簡單賦值(=)、復合算術賦值(+=,-=,*=,/=,%=)和復合位運算賦值(&=, =,^=,>>=,<<=)三類共十一種。

  6.條件運算符

  這是一個三目運算符,用于條件求值(?:)。

  7.逗號運算符

  用于把若干表達式組合成一個表達式(,)。

  8.指針運算符

  用于取內容(*)和取地址(&)二種運算。

  9.求字節數運算符

  用于計算數據類型所占的字節數(sizeof)。

  10.非凡運算符

  有括號(),下標[],成員(→,.)等幾種。   

  優先級和結合性

 ?。谜Z言中,運算符的運算優先級共分為15級。1級最高,15級最低。在表達式中,優先級較高的先于優先級較低的進行運算。 而在一個運算量兩側的運算符優先級相同時, 則按運算符的結合性所規定的結合方向處理。 C語言中各運算符的結合性分為兩種,即左結合性(自左至右)和右結合性(自右至左)。例如算術運算符的結合性是自左至右,即先左后右。如有表達式x-y+z則y應先與“-”號結合, 執行x-y運算,然后再執行+z的運算。這種自左至右的結合方向就稱為“左結合性”。而自右至左的結合方向稱為“右結合性”。 最典型的右結合性運算符是賦值運算符。如x=y=z,由于“=”的右結合性,應先執行y=z再執行x=(y=z)運算。 C語言運算符中有不少為右結合性,應注重區別,以避免理解錯誤。     更多文章 更多內容請看C/C++進階技術文檔專題,或   算術運算符和算術表達式基本的算術運算符

  1.加法運算符“+”加法運算符為雙目運算符,即應有兩個量參與加法運算。如a+b,4+8等。具有右結合性。

  2.減法運算符“-”減法運算符為雙目運算符。
但“-”也可作負值運算符,此時為單目運算,如-x,-5等具有左結合性。

  3.乘法運算符“*”雙目運算,具有左結合性。

  4.除法運算符“/”雙目運算具有左結合性。參與運算量均為整型時, 結果也為整型,舍去小數。假如運算量中有一個是實型,則結果為雙精度實型。

  void main(){

  printf("/n/n%d,%d/n",20/7,-20/7);

  printf("%f,%f/n",20.0/7,-20.0/7);

  }

  雙目運算具有左結合性。參與運算量均為整型時, 結果也為整型,舍去小數。假如運算量中有一個是實型,則結果為雙精度實型。 printf("/n/n%d,%d/n",20/7,-20/7);

  printf("%f,%f/n",20.0/7,-20.0/7);

  本例中,20/7,-20/7的結果均為整型,小數全部舍去。而20.0/7和-20.0/7由于有實數參與運算,因此結果也為實型。

  5.求余運算符(模運算符)“%”雙目運算,具有左結合性。要求參與運算的量均為整型。 求余運算的結果等于兩數相除后的余數。

  void main(){

  printf("%d/n",100%3);

  }

  雙目運算,具有左結合性。求余運算符% 要求參與運算的量均為整型。本例輸出100除以3所得的余數1。   

  自增1,自減1運算符

  自增1運算符記為“++”,其功能是使變量的值自增1。自減1運算符記為“--”,其功能是使變量值自減1。自增1,自減1運算符均為單目運算,都具有右結合性??捎幸韵聨追N形式: ++i i自增1后再參與其它運算。--i i自減1后再參與其它運算。

  i++  i參與運算后,i的值再自增1。

  i--  i參與運算后,i的值再自減1。

  在理解和使用上輕易出錯的是i++和i--。 非凡是當它們出在較復雜的表達式或語句中時,經常難于弄清,因此應仔細分析。

  void main(){

  int i=8;

  printf("%d/n",++i);

  printf("%d/n",--i);

  printf("%d/n",i++);

  printf("%d/n",i--);

  printf("%d/n",-i++);

  printf("%d/n",-i--);

  } i<--8

  i<--i+1

  i<--i-1

  i<--i+1

  i<--i-1

  i<--i+1

  i<--i-1 int i=8;

  printf("%d/n",++i);

  printf("%d/n",--i);

  printf("%d/n",i++);

  printf("%d/n",i--);

  printf("%d/n",-i++);

  printf("%d/n",-i--);

  i的初值為8

  第2行i加1后輸出故為9;

  第3行減1后輸出故為8;

  第4行輸出i為8之后再加1(為9);

  第5行輸出i為9之后再減1(為8) ;

  第6行輸出-8之后再加1(為9);

  第7行輸出-9之后再減1(為8)

  void main(){

  int i=

  void main(){

  int i=5,j=5,p,q;

  p=(i++)+(i++)+(i++);

  q=(++j)+(++j)+(++j);

  printf("%d,%d,%d,%d",p,q,i,j);

  }

  i<--5,j<--5,p<--0,q<--0

  i+i+i--->p,i+1-->i,i+1-->i,i+1-->i

  j+1->j,j+1->j,j+1->j,j+j+j->q int i=5,j=5,p,q;

  p=(i++)+(i++)+(i++);

  q=(++j)+(++j)+(++j);

  這個程序中,對P=(i++)+(i++)+(i++)應理解為三個i相加,故P值為15。然后i再自增1三次相當于加3故i的最后值為8。而對于q 的值則不然,q=(++j)+(++j)+(++j)應理解為q先自增1,再參與運算,由于q自增1三次后值為8,三個8相加的和為24,j的最后值仍為8。算術表達式表達式是由常量、變量、函數和運算符組合起來的式子。 一個表達式有一個值及其類型, 它們等于計算表達式所得結果的值和類型。表達式求值按運算符的優先級和結合性規定的順序進行。 單個的常量、變量、函數可以看作是表達式的特例。     更多文章 更多內容請看C/C++進階技術文檔專題,或

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品一区二区性色av| 丝袜美腿亚洲一区二区| 日韩视频在线观看免费| 在线观看精品自拍私拍| 亚洲区在线播放| 亚洲国产精品嫩草影院久久| 高清日韩电视剧大全免费播放在线观看| 久久精品这里热有精品| 2019中文字幕全在线观看| 久久精品国产精品亚洲| 日韩在线欧美在线国产在线| 日韩成人在线视频网站| 欧美国产精品va在线观看| 国产精品免费视频久久久| 日韩中文字幕在线观看| 97国产真实伦对白精彩视频8| 成人免费网站在线| 国产精品女人久久久久久| 精品国产一区二区三区在线观看| 97成人超碰免| 欧美性生交大片免网| 日韩激情视频在线播放| 亚洲乱亚洲乱妇无码| 国产原创欧美精品| 亚洲香蕉成视频在线观看| 热久久免费国产视频| 亚洲电影av在线| 97碰在线观看| 国产精品久久久久久亚洲影视| 日韩a**中文字幕| 国产精品午夜国产小视频| 亚洲区中文字幕| 日韩中文字幕在线视频播放| 日韩av免费在线| 97人人爽人人喊人人模波多| 国产精品入口尤物| 国产精品中文在线| 国产美女精彩久久| 成人中文字幕+乱码+中文字幕| 国内精品小视频在线观看| 欧美多人乱p欧美4p久久| 国产精品久久久久久五月尺| 日本欧美爱爱爱| 91欧美视频网站| 亚洲无亚洲人成网站77777| 2019亚洲日韩新视频| 欧美精品亚州精品| 在线观看视频亚洲| 欧美亚洲另类激情另类| 国产69精品久久久久99| 精品久久久久久中文字幕大豆网| 国产成人午夜视频网址| 97高清免费视频| 国产69久久精品成人看| 国产有码在线一区二区视频| 国产成人av在线播放| 精品久久久久久中文字幕一区奶水| 久久香蕉频线观| 在线观看国产精品淫| 91精品国产777在线观看| 久久久噜久噜久久综合| 国产经典一区二区| 国产精品成人av在线| 91久久在线播放| 国产日产亚洲精品| 日韩中文字幕在线看| 青草青草久热精品视频在线网站| 国产精品久久久久久久9999| 欧美日韩人人澡狠狠躁视频| 亚洲跨种族黑人xxx| 亚洲香蕉伊综合在人在线视看| 国语自产精品视频在线看| 精品亚洲aⅴ在线观看| 欧美疯狂xxxx大交乱88av| 日本在线精品视频| 亚洲xxxx18| 日韩在线观看av| 日韩av电影在线播放| 日韩在线观看免费高清完整版| 国产精品久久久久久久av大片| 中文字幕欧美亚洲| 97精品国产aⅴ7777| 亚洲va欧美va国产综合剧情| 国产主播在线一区| 色香阁99久久精品久久久| 中文在线资源观看视频网站免费不卡| 亚洲一区二区中文字幕| 亚洲sss综合天堂久久| 精品亚洲男同gayvideo网站| 亚洲大胆人体av| 91超碰中文字幕久久精品| 欧美专区在线观看| 欧美精品电影免费在线观看| 三级精品视频久久久久| 亚洲视频免费一区| 欧美精品一区二区三区国产精品| yw.139尤物在线精品视频| 中日韩午夜理伦电影免费| 亚洲xxxxx| 97在线精品视频| 亚洲国产精品成人va在线观看| 日韩天堂在线视频| 亚洲综合第一页| 国色天香2019中文字幕在线观看| 亚洲一区中文字幕在线观看| 91久久久久久久久久久久久| 91精品国产91久久久久久| 九九九热精品免费视频观看网站| 欧美成在线观看| 国产综合久久久久| 日韩在线视频观看正片免费网站| 亚洲直播在线一区| 日韩欧美在线免费观看| 成人网在线免费看| 亚洲视频在线观看视频| 国产综合色香蕉精品| 欧美亚洲国产视频| 国产精品成人一区二区| 成人深夜直播免费观看| 亚洲欧美国产高清va在线播| 国产日韩在线看| 欧洲成人午夜免费大片| 国产精品视频一区二区高潮| 国产精品第一视频| 久久伊人精品天天| 亚洲欧美国产一区二区三区| 中文字幕免费精品一区高清| 日韩av免费网站| 欧美成人第一页| 精品久久久久久久久中文字幕| 国产成人一区三区| 亚洲iv一区二区三区| 成人h片在线播放免费网站| 久久综合亚洲社区| 国产精品欧美一区二区| 国产欧美精品在线播放| 亚洲第一国产精品| 欧美一级黑人aaaaaaa做受| 最新国产精品拍自在线播放| 欧美一区二粉嫩精品国产一线天| 日韩欧美在线一区| 欧美日韩国产成人在线| 亚洲国产精品中文| 久久久免费高清电视剧观看| 97超级碰碰碰| 欧美日韩国产精品一区二区不卡中文| 欧美日韩亚洲视频一区| 久久国产精品电影| 国产色综合天天综合网| 国产精品日韩在线观看| 欧美最猛性xxxxx(亚洲精品)| 国产精品男人爽免费视频1| 久久久中精品2020中文| 欧美激情网友自拍| 亚洲国产精品成人一区二区| 亚洲人成在线观看网站高清| 精品久久中文字幕久久av| 欧美精品一区二区免费| 国产亚洲激情视频在线| 在线观看国产成人av片| 欧美激情久久久久久| 国产欧美精品va在线观看| 精品视频9999| 亚洲人成77777在线观看网|