<kbd id="daqct"></kbd>

  • <nav id="daqct"></nav>
    <wbr id="daqct"><pre id="daqct"></pre></wbr>
    <wbr id="daqct"></wbr>
    <form id="daqct"><th id="daqct"></th></form>
    更多課程 選擇中心

    C/C++培訓
    達內IT學院

    400-111-8989

    C/C++語言考試知識點歸納分析

    • 發布:C++培訓
    • 來源:學習筆記
    • 時間:2017-09-08 09:56

    大家都知道C++有兩種成功的學習方式,一種是直接從高強度的編程實踐入手,另一種是從基本要素入手,但是殊途同歸。本文主要從實踐入手同時也會穿插一些理論知識來幫助大家備考C++期末考試。由于文章篇幅有限,小編就只能幫大家梳理下主干知識了。當然本文也可以為沒有接觸過C++的同學提供一些入門的方法,接下來小編就按照先C語言再C++附帶小技巧和C++學習意義的順序帶你進入美妙的編程之旅,期末復習助攻來了!

    C語言第一講

    像漢語英語中的疑問句陳述句一樣,C語言也有它的基本語句(順序語句此處略)。

    1.if條件語句用法:if(條件){怎么怎么樣;}else if(條件){怎么怎么樣;}else{怎么怎么樣;}根據問題的需要,你可以多次使用或不使用if,else if,else語句。

    2.for循環語句用法:for(變量初始值;循環條件;該次循環后變量的變化){怎么怎么樣;}意為:當變量的初始值滿足循環條件時執行循環,完成該次循環后變量變化,若變化后的變量仍滿足循環條件,繼續循環,直到變量不滿足循環條件。

    3.while循環語句用法:while(循環條件){怎么怎么樣;},該語句可理解為簡化的for語句。

    4.do-while循環語句用法:do{怎么怎么樣;}while(循環條件);意為:先執行循環(至少會執行一次),再判斷循環條件,若滿足繼續循環,若不滿足跳出循環。

    5.continue語句用法:放入循環語句中,跳過其后未執行的語句。

    6.switch語句用法:C語言還提供了另一種用于多分支選擇的switch語句, 其一般形式為:switch(表達式){case 常量表達式1:語句1;case 常量表達式2:語句2; …;case 常量表達式n:語句n;default:語句n+1;}意為:先計算表達式的值。 并逐個與其后的常量表達式值相比較,當表達式的值與某個常量表達式的值相等時, 即執行其后的語句,然后不再進行判斷,繼續執行后面所有case后的語句(如果你在該語句后面加了“break;”那如果滿足判斷條件后,除該語句其他語句就不再執行)。如表達式的值與所有case后的常量表達式均不相同時,則執行default后的語句。

    7.break語句用法:在switch語句中用來跳出switch執行其后的語句,在循環語句中則是用來跳出所在的封閉循環。

    8.goto語句用法:它可以將程序的運行引流到事先用標識符標識的程序段。goto因為降低了程序的可讀性不被大家熟知,不過有時候它能比break更快捷的跳出循環,舉例如下。輸出兩個小于十并且乘積為64的自然數:…for(int i=1;i<10;i++){for(int j=1;j<10;j++)if(i*j)=64} goto End;}End:cout<<i<<””<<j;…其中End就為標識符。

    C語言第二講

    接下來講函數,有數學基礎函數還是好學的,函數原型和參數什么的大家都耳熟能詳了,下面講一下函數部分的常考點。

    1.遞歸函數的使用(比如求斐波那契數列前幾項和)和遞歸函數非遞歸化都是常考的。就以斐波那契數列的C++實現為例:…int fb(int ){if(n<0){return -1;}if(n==0||n==1){return 1;}return fb(n-1)+f(n-2);},以下是該程序段的非遞歸化:int fb(int n){if(n<0){return -1;}if(n==0||n==1){return 1;}int a=1;int b=1;int c;for(int i=2;i<=n;i++){c=a+b;a=b;b=c;}return c;}…

    2.內聯函數的使用,內聯函數用類似宏定義(優于宏定義)的作用減少了函數的調用,提高程序執行的效率(缺點是僅適用于少部分的而且以代碼膨脹來換取速度)比如:…inline int max(int m,int n){return m>n? m:n;}…編譯器看到inline后為這個短小的max函數創建一段代碼,之后max的每次調用都用該段代碼來替換(注意而不是調用)。名詞解釋,宏定義:C語言提供的三種預處理功能之一,比如# define N 6(放在主函數前)意為N用6替代。

    3.重載函數的使用。C語言的函數如果在返回類型,參數類型,參數個數,參數順序上有不同,則認為函數就不同,這樣就可以在函數的返回類型,參數類型,參數個數,參數順序上動動手腳,這樣你就可以把一些函數名字都取成一樣的,多省事。

    C語言第三講

    第三講是數組,數組也有下列幾個常考點。

    1.冒泡排序(從小到大排序)。為了幫助大家掌握,下面給出詳細的實現及注釋。

    void bubble(int a[],int size)

    {int i, t;

    for (int round=1;

    round<size;round++)//size為實現初始化好的數組a含有的元素個數,共比較size-1回合(比如說只有兩個元素只需比較一個回合)

    {for (i = 0; i<size - round; i++)//比較一回合

    if (a[i + 1] < a[i]){ //如果第二個元素比第一個元素小,交換兩元素位置

    t = a[i];

    a[i] = a[i + 1];

    a[i + 1] = t;}}

    for (i = 0; i < size; i++)//比較一次后兩元素誰小就先輸出誰

    cout << a[i] << endl;

    2.插入排序。為了幫助大家掌握,下面給出詳細的實現及注釋。

    void isort (int a[],int size){//size是你要排序的元素個數,存在于事先初始化好的數組a中

    int inserter,index;//inserter是插入元素,index是每個元素的下標

    for(int i=1;i<size;i++){

    inserter=a[i];

    index=i-1;

    while(index>=0&&inserter<a[index])

    {a[index+1]=a[index];//如果元素比插入元素大則后挪一個位置

    Index--;}

    a[index+1]=inserter;// 兩層含義:1. 如果元素比插入元素大,則元素后挪一個位置之后,插入元素前挪一個位置。2.如果元素比插入元素小則把插入元素挪到元素后面

    //如此循環直至這i+1個數按照升序排好

    for(int j=0;j<size;j++){比較一輪就把所有元素輸出一次

    cout<<a[j]<<”,”;

    if(j==i)//排序過后的數與未排序的以“|”分界

    cout<<’|’;}

    cout<<endl;}}

    3.接下來講容易被忽略的二維數組,二維數組與一維數組最大的不同在于它的每一個元素都需要兩個下標才能標識。這里以用二維數組實現矩陣的乘法為例:

    for(int i=0;i<arow;i++)//arow為數組a的行數

    for(int j=0;j<bcol;i++)//bcol為數組b的列數

    {c[i][j]=0;

    for(intn=0;n<acol;n++) //acol為數組a的列數或數組b的行數c[i][j]+=a[i][n]*b[n][i];}

    其中a和b都是事先初始化好的數組,比如int a[2][3]={{1,2},{4}}意為:1,2,0初始化了a[0][0],a[0][1],a[0][2,],4,0,0初始化了a[1][0],a[1][1],a[1][2]。

    C語言第四講

    接下來第四講,指針和結構

    本來打算數組那里再講一下Josephus問題的,因為指針和結構內容不多,就把指針,結構,Josephus問題和動態內存分配一塊講了。Josephus問題(報數出圈問題)的一個實現如下:

    struct jose//這是一個結構,它抽象了一個小孩,一個“小孩”里面有三個變量來描述這個小孩,code是這個小孩的編號,*next是這個小孩用來指向下一個小孩的指針,*pre是這個小孩用來指向上一個小孩的指針

    {int code;

    jose*next;// 這里的*next就是一個名叫next的指針,它的類型是jose(只要是結構都得 。就像貿大的地址是北京市朝陽區惠新東街十號一樣,*next可以理解為一個地址,可以說是一個“門牌號”,這個“門牌號”就是“*next”指針。有了指針,編譯器就能按照指針這個“門牌號”在內存空間上找到對應的變量,數組,函數等。

    jose*pre;};//同上

    int main(){//賦初值

    int numOfBoys, interval;

    cout << "please input the number of boys,\n" //numOfBoys為小孩數

    << "interval of counting:\n";//報數報到interval的出圈

    cin >> numOfBoys >> interval;

    //下列建立小孩結構數組

    jose*pJose = new jose[numOfBoys];//這就是動態內存分配,通過new(新建)這個函數,在堆上新建了一個數組,與一般新建數組不同的是,動態內存分配一定要配備一個delete[]函數來釋放內存,見本程序段末尾。

    jose*pCurrent = pJose;//當前節點指針

    初始化結構數組:構成環鏈,小孩編號,輸出編號

    int itemsInLine = 0;//輸出項數,為了避免每一行輸出的數字太多,可不加

    for (int i = 1; i <= numOfBoys; i++){

    pCurrent->next = pJose + i%numOfBoys;//鏈到下一個元素

    pCurrent->code = i;//小孩編號

    pCurrent = pCurrent->next;//改變當前位置

    if (itemsInLine++ % 10 == 0)

    cout << endl;

    cout << setw(4) << i;}//pCurrent此時等于pJose

    itemsInLine = 0;

    jose*pivot = NULL;//鏈表哨兵

    pCurrent = &pJose[numOfBoys - 1];//下一個就是數組的第一個元素pJose[0]

    while (pCurrent->next != pCurrent){//處理未獲勝的所有小孩

    for (int j = 0; j < interval; j++)//數interval個數

    {pivot = pCurrent;

    pCurrent = pivot->next;}

    if (itemsInLine++ % 10 == 0)//輸出小孩

    cout << endl;

    cout << setw(4) << pCurrent->code;

    pivot->next = pCurrent->next;//小孩脫鏈

    /*pCurrent = pivot;*/}

    cout << "\n\nthe winner is " << pCurrent->code << endl;//輸出獲勝者

    delete[]pJose;//釋放堆空間內存

    system("pause");//防止DOS窗口一閃而過的函數,后面會說到的}

    //細心的讀者已經發現,上面也包括了單向鏈表的知識嘻嘻

    問題補充:有的同學問了,為什么要有delete[]函數?先說下程序的內存區域。一個程序將操作系統分配給其運行的內存塊分為四個區域:1.代碼區2.全局數據區3.堆區4.棧區,棧區存放局部變量,在函數退出后,其中的局部變量隨之消失,而堆區中存放的全局變量就不同,為了保證足夠內存,就要用到該函數釋放內存(這和析構函數一個道理)。

    C語言第五講

    C語言第五講,文件讀取與寫入

    文件讀取與寫入方法很多,下面提供小編經常接觸的一種。

    1.讀取文件:

    fstreaminput;//定義一個input對象,fstream是類名,隨后講到

    string str[c];定義一個c個元素的數組

    input.open(“…”);//括號內為要讀取的文件位置,比如“D:\\uibe\\sales.txt”。

    while (!input.eof()){

    getline(input, str[i],',');//將文本的內容以逗號為間隔全部讀入數組

    i++;//記錄行數

    }input.close();//讀取文件以后一定要把文件關閉

    2.寫入文件:

    ofstream stat(“…”); //定義一個stat對象,括號內為要寫入東西的文件位置

    stat <<“…”<<…//“<<”后的就為你寫入該文件的東西,你可以寫字符串(字符串加“”號)或者是數據等

    好的!C語言的部分就結束啦!小編喝口茶先~

    其實小編講C語言的時候用的仍然是I/O流,為此在這里附上printf函數和scanf函數的使用方法,便于大家掌握原始C語言的輸入輸出。

    一、printf()函數

    printf()函數的調用格式為:printf("格式化字符串", 輸出項1,輸出項2,…);

    其中格式化字符串包括正常字符(這些字符將按原樣輸出)和格式化規定字符(以"%"開始, 后跟一個或幾個規定字符,用來確定輸出內容格式)

    1.格式化規定符

    符號作用

    %d十進制有符號整數

    %u十進制無符號整數

    %f浮點數

    %s字符串

    %c單個字符

    %p指針的值

    %e指數形式的浮點數

    %x, %X無符號以十六進制表示的整數

    0%無符號以八進制表示的整數

    %g自動選擇合適的表示法

    溫馨提示

    (1). 可以在"%"和字母之間插進數字表示最大長寬。

    例如: %3d表示輸出3位整型數, 不夠3位右對齊。%9.2f 表示輸出場寬為9的浮點數, 其中小數位為2, 整數位為6,小數點占一位, 不夠9位右對齊。%8s表示輸出8個字符的字符串,不夠8個字符右對齊。另外,若想在輸出值前加一些0, 就應在長寬項前加個0。例如%04d表示在輸出一個小于4位的數值時,將在前面補0使其總寬度為4位。如果用浮點數表示字符或整型量的輸出格式,小數點后的數字代表最大寬度,小數點前的數字代表最小寬度。例如%6.9s表示顯示一個長度不小于6且不大于9的字符串。若大于9,則第9個字符以后的內容將被刪除。

    (2). 可以在"%"和字母之間加小寫字母l,表示輸出的是長型數。

    例如:%ld表示輸出long整數%lf表示輸出double浮點數。

    (3). 可以控制輸出左對齊或右對齊,即在"%"和字母之間加入一個"-" 號可說明輸出為左對齊,否則為右對齊。

    例如:%-7d 表示輸出7位整數左對齊,%-10s 表示輸出10個字符左對齊。

    2. 一些特殊規定字符

    字符作用

    \n換行

    \f清屏并換頁

    \r回車

    \tTab符

    \xhh表示一個ASCII碼用16進表示(其中hh是1到2個16進制數)

    二、scanf()函數

    scanf()函數是格式化輸入函數, 它從標準輸入設備(鍵盤) 讀取輸入的信息。

    其調用格式為:scanf("格式化字符串",地址1,地址2,…);

    格式化字符串包括以下三類不同的字符:

    1.格式化說明符: 格式化說明符與printf()函數中的格式說明符基本相同。

    2.空白字符: 空白字符會使scanf()函數在讀操作中略去輸入中的一個或多個空白字符。

    3.非空白字符: 一個非空白字符會使scanf()函數在讀入時剔除掉與這個非空白字符相同的字符。地址表是需要讀入的所有變量的地址, 不是變量本身。這與printf()函數完全不同, 要特別注意。各個變量的地址之間同","分開。

    溫馨提示

    (1). 對于字符串數組或字符串指針變量, 由于數組名和指針變量名本身就是地址, 因此使用scanf()函數時, 不需要在它們前面加上"&"操作符。

    例1:

    mian(){

    char *p, str[20];

    scanf("%s", p);//從健盤輸入字符串

    scanf("%s", str);

    printf("%s\n", p);//向屏幕輸出字符串

    printf("%s\n", str);}

    (2). 可以在格式化字符串中的"%"各格式化規定符之間加入一個整數, 表示任何讀操作中的最大位數。

    例1中若規定只能輸入10字符給字符串指針p,則第一條scanf() 函數語句變為scanf("%10s", p);程序運行時一旦輸入字符個數大于10, p就不再繼續讀入, 而后面的一個讀入函數即scanf("%s", str)就會從第11個字符開始讀入。 注意,在使用上述兩個函數時要記得加上頭文件stdio.h哦。

    接下來就是C++的面向對象的程序設計部分,小編覺得C++講的就是C沒有的,大家覺得呢?

    說類得先說對象,所謂對象就是類的實例,而所謂類就是一種抽象,比如上面講到的Josephus問題,其中的小孩就被抽象成了只有編號code,該小孩用來指向下一個小孩的指針*next和該小孩用來指向上一個小孩的指針*pre三個元素的“小孩”類,類的實例比如這群被抽象了的小孩中的每一個小孩,小孩1,小孩2…就是對象,下面通過具體的編程幫助大家更好地理解類。

    C++第一講

    基于對象的程序設計(為啥不是面向對象?請往后看)該講小編用經典的復數類同時講解類,運算符重載,友元函數和拷貝構造函數。

    //以下是類的聲明:

    #ifndef _COMPLEX_INCLUDE_ //#ifndef…#define……#endif是C++的一種預處理,可以防止程序被多次編譯

    #define _COMPLEX_INCLUDE_

    #include <iostream>

    class ComplexNumber{ //ComplexNumber就是一個類,它是復數類,它被抽象成了兩部分:實部和虛部,下文的ComplexNumber c1(1,2),ComplexNumber c2(3,4)就是復數類的實例,也就是對象

    private: //私有成員定義,一個類包含私有成員和公有成員(有的還有保護成員)

    double real;//實部

    double imaginary;//虛部

    public: //公有成員定義

    ComplexNumber():real(0),imaginary(0){}//構造函數,無返回值,初始化復數

    ComplexNumber(double r,double i):real(r),imaginary(i){}//構造函數,給復數賦值

    ComplexNumber(const ComplexNumber& c);//拷貝構造函數:在C++中,當一個對象需要通過另外一個對象進行初始化時,利用拷貝構造函數不但復制了對象從而初始化另外一個對象,也復制了對象的堆內存空間,對象們各有各的空間,內存資源管理好,程序也就不會出現錯誤(如下圖)

    void Print();//輸出復數

    friend ComplexNumber operator+(ComplexNumber &c1,ComplexNumber &c2);//這里有兩個考點:

    1.運算符重載(這里重載了加號):運算符是函數,但是重載運算符時除了不能更改運算順序和優先級以外,參數和返回類型都可以重新定義,即重載。重載的形式為:返回類型 operator 運算符(參數表);

    2.友元函數:注意到該函數是一個友元函數,它可以訪問類的私有(或保護)數據成員,這里是 double real(實部),double imaginary(虛部),進而提高了程序的效率。延伸出去還可以把一個類定義成友元類哦

    #endif

    //以下是復數類的實現

    #include "Complex.h" //包含頭文件

    ComplexNumber::ComplexNumber(const ComplexNumber &c){

    std::cout<<"Copying......"<<std::endl;

    this->real = c.real;

    this->imaginary = c.imaginary; }

    void ComplexNumber::Print(){

    std::cout<<real

    <<(imaginary>=0?"+":"")

    <<imaginary<<"i"<<std::endl;}

    ComplexNumber operator+(ComplexNumber &c1,ComplexNumber &c2){

    std::cout<<"operator +"<<std::endl;

    ComplexNumber temp;

    temp.real = c1.real+c2.real;

    temp.imaginary=c1.imaginary+c2.imaginary;

    return temp;}

    //以下是復數類的調用

    #include <iostream>

    #include "Complex.h"

    using namespace std;

    int main1(){

    cout<<"Hello Operator!"<<endl;

    ComplexNumber c1(1,2);

    ComplexNumber c2(3,4);

    c1.Print();

    c2.Print();

    ComplexNumber c3 = c1+c2;//友元函數實現操作符重載

    c3.Print();

    return 0;}

    C++第二講

    面向對象的程序設計,類的繼承,虛函數(覆蓋),和多態性

    #include <iostream>

    using namespace std;

    class Shape{//這是一個抽象類圖形類,即包含純虛函數的類,不能創建抽象類的對象protected://保護成員

    double x,y;//坐標

    public://公有成員

    Shape(double x, double y){//初始化坐標

    this->x = x;

    this->y = y;}

    virtual double GetArea()=0;//這是一個純虛函數,純虛函數是在基類中聲明的虛函數,它在基類中沒有定義,但要求任何派生類都要定義自己的實現方法。在基類中實現純虛函數的方法是在函數原型后加“=0”

    virtual ~Shape(){}//“~ 類名”即為析構函數,原理同C語言中的delete[],同時它也是一個純虛函數

    };

    class Circle: public Shape//這就是類的繼承:老爸是Shape圖形類,兒子是Circle圓形類,public代表公有繼承,即兒子可以訪問老爸的公有,保護成員但是不能訪問老爸的私有成員

    private:

    double radius;//半徑

    public:

    Circle(double x, double y, double r) :Shape(x,y),radius(r){}

    virtual double GetArea(){//純虛函數在子類中的實現,這就叫覆蓋(override)

    return 3.14*radius*radius;

    virtual ~Circle(){}//純虛析構函數在子類中的實現,純虛函數在子類中的實現就實現了C++的多態性,多態性是C++的核心,一句話說的好“若語言不支持多態,則不能成為面向對象的。只能成為基于對象”。

    ………

    ………

    有同學可能想知道除公有繼承以外的繼承,在這里貼上類繼承方式表格:

    繼承方式父類的public成員父類的protected成員父類的private成員

    private繼承變為private成員變為private成員子類不可訪問

    protected繼承變為protected成員變為protected成員子類不可訪問

    public繼承變為public成員變為protected成員子類不可訪問

    C++第三講

    C++常考點第三講,模板。首先用模板函數引入模板這個概念。

    #include <iostream>

    using namespace std;

    //以下是實現輸出兩個字符或數值變量最大值的模板函數

    template <typename T> T max2(T a, T b){//這就是模板函數,此時該函數的返回類型是模板型,參數表也是模板變量(變量前加“T”)。如果你想讓一個函數的返回值或者一個變量是多種類型比如數值或字符,但是又不能同時定義一個既是字符又是數值的變量,你就可以把它定義為模板變量,此時函數必須定義為模板函數(前加“template <typename T1,typename T2…>”)

    return a>b? a:b;}//這里的a,b就是模板變量,他們可以是字符,也可以是數值(整型,浮點型等)

    template <typename T1,typename T2> void Print(T1 v1, T2 v2){

    cout<<v1<<" "<<v2<<endl;

    }

    int main(){

    cout<<"Hello template!"<<endl;

    cout<<max2(100,200)<<endl;//這時模板變量是整型的,函數返回值也是整型

    cout<<max2(100.55,200.66)<<endl;//這時模板變量是浮點型的,函數返回值也是浮點型

    cout<<max2('A','a')<<endl;//這時模板變量是字符型的,函數返回值也是字符型

    Print(3.14, 100); //<double, int> 同理,print()函數同時輸出了浮點型和整型,模板是不是很方便?

    Print('A',5.6); //<char, double>

    return 0; }

    了解模板的用法后,把它遷移到類上,你就會使用模板類了。

    噗!本文一共一萬一千一百三十七個字符!小編已吐血!!本來想著再寫一下多重繼承,FILE指針的,靜態成員,雙向鏈表blablabla……但小編覺著能把以上內容看懂個大概,其他知識點什么的都是浮云了嘻嘻。

    溫馨提示

    C++常用小技巧:

    1.有時候編譯程序DOS窗口會一閃而過,這時你可以在主程序最末加上system(“pause”)(如果有return 0,加在return 0之前)。

    2.為了最大限度保證編譯通過,main()函數最好寫成int main(int argc,char*argv[])。

    3.每次使用一個函數時,不光要知道它的用法,還要記得查它要求的頭文件。

    4.一個語句或者一個程序段結束后記得加上分號“;”(至于“{}”編譯器會自動生成),細節決定成敗。

    5.對知識永遠要保持一顆敬畏,若渴的心態。

    最后問下大家,學習了C語言你可以干什么?或者說你為什么要學C語言?

    小編覺得學C++還是收益良多的,首先編程就像魔術一般酷,學好了你不僅有個好成績,妹子們遇到難題的時候你還可以挺身而出,學到一定程度你還可以用MFC制作并發布一些windows程序比如制作貸款計算器、小游戲并分享給其他人,如果你需要運營微信平臺的話,這時你還可以選擇開發者模式,讓你的微信平臺更出類拔萃,更深入一些你可以考個C++編程二級證書,這對你將來的發展有好處。C++作為一門用途廣泛的編程語言,學會之后還能讓你在學習其他計算機語言或者使用軟件是提供便利,比如java編程,swift編程,matlab使用等。如果可能的話,你甚至可以像facebook創始人扎克伯格一樣制作出一個受萬人追捧的程序。

    預約申請免費試聽課

    填寫下面表單即可預約申請免費試聽!怕錢不夠?可就業掙錢后再付學費! 怕學不會?助教全程陪讀,隨時解惑!擔心就業?一地學習,可全國推薦就業!

    上一篇:C語言指針是什么?C語言指針學習和用法詳解
    下一篇:C語言入門基礎知識,C語言入門知識點學習

    C語言創建windows窗口實例

    C++回調函數是什么?

    C++ shared_ptr和動態數組

    C語言有哪些關鍵詞,C語言44個關鍵詞大全

    • 掃碼領取資料

      回復關鍵字:視頻資料

      免費領取 達內課程視頻學習資料

    • 視頻學習QQ群

      添加QQ群:1143617948

      免費領取達內課程視頻學習資料

    Copyright ? 2021 Tedu.cn All Rights Reserved 京ICP備08000853號-56 京公網安備 11010802029508號 達內時代科技集團有限公司 版權所有

    選擇城市和中心
    黑龍江省

    吉林省

    河北省

    湖南省

    貴州省

    云南省

    廣西省

    海南省

    欧美三级片,白洁外传,第四色播日韩AV第一页,啪啪免费观看大全av 百度 好搜 搜狗
    <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <文本链> <文本链> <文本链> <文本链> <文本链> <文本链>