999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

C語言代碼缺陷分析輔助編程實踐系統(tǒng)①

2022-05-10 12:11:50邱曉紅楊瑞安敖紫迎陳佳麗
計算機系統(tǒng)應(yīng)用 2022年3期
關(guān)鍵詞:規(guī)則檢測學(xué)生

邱曉紅,楊瑞安,敖紫迎,陳佳麗

(江西理工大學(xué) 軟件工程學(xué)院,南昌 330013)

新冠疫情影響下,各大高校學(xué)生課堂學(xué)習(xí)采用了“停課不停學(xué)”“停課不停教”的遠程網(wǎng)絡(luò)教學(xué)模式.但與此同時,遠程網(wǎng)絡(luò)教學(xué)也會帶來弊端,它不僅削弱了師生間學(xué)習(xí)交流的“互動性”,造成“教”“學(xué)”分離的現(xiàn)象,無形中增加了學(xué)生學(xué)習(xí)的難度.特別是在編程類學(xué)科的學(xué)習(xí)過程中,學(xué)生課堂學(xué)習(xí)時間短、知識點不易吸收,課后老師能解答的問題也有限,課余自主編程學(xué)習(xí)效率又低,碰到難題無法及時解決.傳統(tǒng)的代碼缺陷都是人工審查來完成,因此存在過度依賴個人經(jīng)驗和低效等問題.自動化代碼檢測編程實踐系統(tǒng)就成為非計算專業(yè)學(xué)生以及初學(xué)者學(xué)習(xí)編程輔助軟件,既可以提高學(xué)生的編程效率,還可以讓學(xué)生可以自己解決編程問題.從國內(nèi)外研究成果來看,目前編程實踐系統(tǒng)有很多種.文獻[1]學(xué)者研究互動測試系統(tǒng),以提高學(xué)生在計算機程式設(shè)計課程的學(xué)習(xí)效果,解決學(xué)生在課后學(xué)習(xí)中缺乏編程和缺陷實踐的問題.文獻[2]提出了一種基于網(wǎng)絡(luò)的學(xué)習(xí)活動與Scratch 工具集成的方案來幫助學(xué)習(xí)者提高編程能力,學(xué)生通過循序漸進學(xué)習(xí)知識內(nèi)容從而反向輔助自己學(xué)習(xí)程序編程.文獻[3]設(shè)計一款編程測試練習(xí)平臺,平臺中有很多案例程序,可以很好幫助初學(xué)者和上班族閑暇時間學(xué)習(xí).文獻[4]設(shè)計并實現(xiàn)了一個靈活的、自適應(yīng)的在線高性能計算學(xué)習(xí)平臺EasyHPC,平臺不僅涵蓋學(xué)習(xí)內(nèi)容和經(jīng)典案例,同時嵌入檢測工具,加強代碼檢測技術(shù),在線編程學(xué)習(xí)和解決缺陷問題.所以研發(fā)一款輔助學(xué)習(xí)C 語言編程實踐的系統(tǒng),加強代碼檢測技術(shù)是當(dāng)前網(wǎng)絡(luò)教學(xué)背景下代替老師的首要任務(wù).根據(jù)文獻[5]和文獻[6]中幾種檢測工具的比較分析,以及Dev、Visual C++[7]等編譯器的檢測效果比較,雖然它們可以檢測識別大部分錯誤,但對于初學(xué)者常犯的那些代碼缺陷,例如字符混淆、變量名寫錯、空語句問題、運算符優(yōu)先級問題、ifelse 不配對問題、Case 語句后不以break 結(jié)尾、數(shù)組越界等,這些錯誤編譯器和檢測工具無法正確檢測.其中,Dev 對語法、詞法缺陷上識別率不高,Visual C++對語法、語義缺陷上檢測正存在不足,而且沒有明確的解釋與修改意見,老師在遠程教學(xué)中也難以面對多個學(xué)生且復(fù)雜多樣的問題,這就會導(dǎo)致學(xué)生無法編程學(xué)習(xí)和解決問題.

因此,為了幫助學(xué)生更好的學(xué)習(xí)編程,輔助老師開展教學(xué)活動,研究“輔助編程實踐系統(tǒng)”來輔助學(xué)生學(xué)習(xí)編程,解決編程中的常見問題.首先,需要對學(xué)生在編程中容易出現(xiàn)錯誤分類,分析代碼詞法、語法和語義缺陷,歸納出不易被編譯器檢測的缺陷以及代碼知識規(guī)則;其次,設(shè)計輔助編程實踐系統(tǒng),構(gòu)建代碼缺陷分析器,該分析器集成CppCheck[8]、PC-Lint[9]以及GCC 編譯環(huán)境作為智能分析器的靜態(tài)檢測組成工具,對學(xué)生編程中常犯代碼缺陷分析,分析這些代碼缺陷的特征抽象模式,利用正則表達式進行抽象表示,并擴展到代碼知識規(guī)則庫中;然后對代碼進行檢測處理,與知識規(guī)則庫中所有缺陷模式匹配,并給出檢查分析報告;最后,系統(tǒng)會根據(jù)檢測分析報告給出相應(yīng)的錯誤原因和修改意見,在遠程教學(xué)紅很方便的代替老師,達到一個電子智慧教師的身份,輔助學(xué)生編程實踐.同時還會提供符合的教學(xué)視頻和練習(xí)習(xí)題幫助學(xué)生鞏固缺少的知識點.

1 C 語言易犯代碼缺陷分類

代碼缺陷的本質(zhì)就是程序中有不符合語言標(biāo)準(zhǔn)、違背良好的設(shè)計規(guī)范和編碼規(guī)范.代碼看似沒有問題,但是運行起來違背開發(fā)者的意愿,并有可能導(dǎo)致程序崩潰的陷阱.這里探討的陷阱分為詞法、語法和語義缺陷.

1.1 詞法陷阱

初學(xué)者剛剛接觸編程,對編程的規(guī)范性還不是很熟悉.有時候在編程中因為主觀意識和敲擊鍵盤的不注意,容易導(dǎo)致代碼名詞寫錯,一般會有如下錯誤情況:漏寫字符;字符重復(fù);字符順序顛倒;相似字符混淆.C 語言詞法中常見陷阱如下:=和==混淆;&&、||與&、|混淆;字符和字符串格式混淆;變量名寫錯導(dǎo)致未定義.

1.2 語法陷阱

各種字符、關(guān)鍵詞組合不同就產(chǎn)生不同的含義,編譯器對這些組合語句有都特定的定義和識別方法.初學(xué)者在編程過程中,盡管代碼符合語法格式,但結(jié)合上下文,就有可能存在語法缺陷.C 語言語法中常見陷阱如下:if、for、while 語句后接分號導(dǎo)致空語句;case語句后不以break 結(jié)尾;運算符優(yōu)先級問題;“懸掛”else 引發(fā)的配對問題;輸入函數(shù)scanf()漏寫取地址符.

1.3 語義陷阱

在詞法和語法都編寫正確的情況下,詞義陷阱也是初學(xué)者常犯的錯誤.詞義陷阱主要是指運行過程中出現(xiàn)的邏輯問題,這將導(dǎo)致運行結(jié)果的不正確性,而這些問題大多也難以被編譯器檢測出來.C 語言語義中常見陷阱如下:未初始化變量或沒有分配合法的值;可能存在空指針;深拷貝與淺拷貝;存在數(shù)組越界;兩個整數(shù)求商等于0.

2 輔助編程實踐系統(tǒng)

系統(tǒng)集成代碼缺陷分析器中,存儲了C 語言知識規(guī)則和常見缺陷特征信息,可以智能分析檢測代碼并幫助學(xué)生編程實踐.本節(jié)重點論述缺陷分析器、代碼缺陷檢測以及偏差糾正學(xué)生模型的設(shè)計.

2.1 系統(tǒng)體系結(jié)構(gòu)

輔助編程實踐系統(tǒng)主要由人機交互接口、知識規(guī)則庫、代碼缺陷分析器、教師模型、學(xué)生模型、解釋器等6 部分構(gòu)成,如圖1所示.

圖1 輔助編程實踐系統(tǒng)組成結(jié)構(gòu)

(1)人機交互接口:人機交互接口是系統(tǒng)與學(xué)生數(shù)據(jù)交互的模塊,同時包括自然語言處理技術(shù)的應(yīng)用、人機對話的處理、對領(lǐng)域知識庫擴展和維護的接口.

(2)知識規(guī)則庫:存儲開源檢測工具的內(nèi)置缺陷規(guī)則集,以及擴充第1 節(jié)分類中常見的缺陷模式,作為檢測分析學(xué)生編寫程序的重要知識源.

(3)代碼缺陷分析器:該系統(tǒng)的分析器由開源檢測工具集成GCC 編譯器構(gòu)成.分別可以對程序進行語法、語義、非語法上的錯誤進行檢測[10].

(4)教師模型:其主要任務(wù)將教學(xué)視頻和相關(guān)練習(xí)題并通過接口以適當(dāng)?shù)谋磉_形式提供給學(xué)生.

(5)學(xué)生模型:對學(xué)生學(xué)習(xí)和編程實踐過程中進行全面分析,最終判斷學(xué)生是否達到專家標(biāo)準(zhǔn)的缺陷糾正能力,從而做出下一步教學(xué)策略[11].

(6)解釋器:分析器檢測出的缺陷報告在匹配知識庫中的規(guī)則之后,會由解釋器做出詳細解釋報告和修改意見,并定位缺陷位置,反饋給學(xué)生.

2.2 代碼缺陷分析器

代碼缺陷分析器同時利用靜態(tài)檢測工具和本地動態(tài)檢測,并擴展一些學(xué)生編程中常犯的缺陷,強化靜態(tài)分析技術(shù).

2.2.1 組成結(jié)構(gòu)

代碼缺陷分析器由規(guī)則集加載器、靜態(tài)檢測工具、缺陷規(guī)則集合、本地動態(tài)檢測、檢測結(jié)果解釋器等5 部分構(gòu)成,如圖2所示.

圖2 智能分析器體系結(jié)構(gòu)

(1)規(guī)則集加載器:負責(zé)把知識規(guī)則庫中存儲的一些缺陷規(guī)則和特征信息加載到內(nèi)存中,便于在檢測時候匹配錯誤缺陷.

(2)靜態(tài)檢測工具:集成CppCheck、PC-Lint和GCC 編譯環(huán)境[12].PC-Lint是邏輯語義分析的檢測工具;CppCheck是針對代碼非語法錯誤的檢測工具;GCC是C 語言編譯器底層編譯程序工具.

(3)缺陷規(guī)則集合:集合中有CppCheck 中的內(nèi)置檢測類和缺陷模式、PC-Lint 代碼錯誤警告列表和GCC 編譯器中的一些語法規(guī)則,還有自定義的擴充檢測類型和缺陷模式[13].

(4)本地動態(tài)檢測:根據(jù)擴充的缺陷規(guī)則去實時檢測代碼,并用正則表達式去匹配缺陷,同時反饋錯誤提示報告給用戶.

(5)檢測結(jié)果解釋器:匹配知識庫中的對應(yīng)規(guī)則后并給出錯誤原因.

2.2.2 知識規(guī)則庫

CppCheck:主要存儲CppCheck 檢查后相關(guān)問題的描述,分類及建議解決方法.如表1所示.

表1 CppCheck 檢查知識規(guī)則

GCC 錯誤代碼中文對照:主要存儲相關(guān)編譯錯誤代碼其中文解釋.

GCC 錯誤代碼解決方案:主要存儲相關(guān)編譯錯誤代碼,相似案例代碼,以及建議解決方法.

運行時問題:主要存儲運行時問題描述、對應(yīng)操作及它們之間的邏輯關(guān)系.

2.2.3 擴展常見代碼缺陷

將第1 節(jié)中的編譯器和檢測工具無法檢測的錯誤整理出,分析其缺陷模式并提取抽象模式,利用正則表達式的進行特征表示,如表2所示.

表2 新增缺陷規(guī)則

2.3 代碼缺陷智能分析檢測

2.3.1 缺陷檢測處理框架流程

首先通過命令行讀入待檢測文件的路徑,然后遍歷所有文件夾下面的c/cpp 文件,每遍歷一個c/cpp 文件,對讀取的程序進行預(yù)處理,去除注釋語句.靜態(tài)檢測工具通過字符流將程序讀入到預(yù)處理后程序的首部,對處理后的程序進行詞法分析,建立Token 雙鏈表,并對Token 鏈表進行語義分析,通過循環(huán)調(diào)用檢查類中定義的缺陷模式來實現(xiàn)缺陷的檢測,最后通過定位找出程序中存在缺陷.運行流程如圖3所示.

圖3 缺陷檢測處理框架流程圖

2.3.2 抽象缺陷模式匹配算法

利用缺陷的抽象模式,通過正則表達式去匹配字符串,如果匹配成功則返回true,否則匹配不成功,就不存在該缺陷[14,15].缺陷模式匹配算法的偽代碼如算法1.

算法1.缺陷模式匹配算法的偽代碼Procedure Check(code[]/**/,detect[]/**/)/*創(chuàng)建一個新的鏈表*/Begin:*p=code,*q=defect,Link *s=L While(p是否為空)While(q是否為空)if(p 中的內(nèi)容與q 中的內(nèi)容進行正則表達式匹配是否為true)newNode /*創(chuàng)建一個新的結(jié)點*/newNode->data=q-data /*將q 中的缺陷模式賦值給s*/s->next=newNode /*尾插法插入新結(jié)點s*/s=newNode /*指針指向新結(jié)點*/End if q=q->next /*q 指針向后移一位*/End while p=p->next/*p 指針向后移一位*/End while End Return L

2.4 學(xué)生模型

2.4.1 學(xué)生模型結(jié)構(gòu)

根據(jù)分析,考慮既要全面描述學(xué)生,又便于實現(xiàn),將覆蓋、偏差、認(rèn)知模型進行復(fù)核和簡化,得到一個綜合學(xué)生模型結(jié)構(gòu),并集成在系統(tǒng)中.其數(shù)據(jù)結(jié)構(gòu)關(guān)系模型見圖4.

圖4 學(xué)生模型的數(shù)據(jù)結(jié)構(gòu)(關(guān)系模型)

在該模型中,一方面吸收了覆蓋模型的成分,用于計算和記錄學(xué)生的學(xué)習(xí)進度,保證后續(xù)提供的學(xué)習(xí)內(nèi)容和知識點不會重復(fù).二是吸收了偏差模型的成分,每次編程學(xué)習(xí)并測試后都要計算學(xué)習(xí)偏,即找到本次編程中缺少的知識點和認(rèn)識錯誤的知識,系統(tǒng)確定需要彌補和加強的知識,并提出需要重新學(xué)習(xí)的內(nèi)容[16].如此反復(fù)編程實踐直到掌握缺少的知識.三是引入了認(rèn)知模型的成分,每次測試后都需要分析計算認(rèn)知能力,調(diào)整重新學(xué)習(xí)內(nèi)容的難度和所有缺少知識點的側(cè)重點.

上述數(shù)據(jù)結(jié)構(gòu)描述了學(xué)生模型的靜態(tài)結(jié)構(gòu),而圖5則描述了學(xué)生模型的動態(tài)結(jié)構(gòu).動態(tài)結(jié)構(gòu)表現(xiàn)了學(xué)習(xí)中數(shù)據(jù)的動態(tài)過程.可以看出,它跟蹤學(xué)生的學(xué)習(xí)活動,通過對學(xué)生學(xué)習(xí)行為的分析,記錄并調(diào)整學(xué)生的知識結(jié)構(gòu)、學(xué)習(xí)能力等描述學(xué)生個性化特征的信息,從此得出教學(xué)策略.其中,決策機處于中心地位,它的功能是:有關(guān)數(shù)據(jù)庫的維護、決策的生成、決策的沖突消除等[17].

圖5 學(xué)生模型的動態(tài)結(jié)構(gòu)圖

2.4.2 偏差糾正學(xué)習(xí)

根據(jù)缺陷錯誤報告合理的找出需要學(xué)習(xí)的知識點,并在視頻庫中選出符合該學(xué)生學(xué)習(xí)的教學(xué)知識點講解視頻,同時在習(xí)題庫中智能匹配出覆蓋全部知識點的測試題試卷.偏差糾正學(xué)習(xí)流程如圖6所示.

圖6 偏差糾正學(xué)習(xí)流程

學(xué)生進入系統(tǒng)代碼檢測之后,首先判斷該學(xué)生是否是第一次使用系統(tǒng)進行檢測,若是第一次使用就直接推薦代碼中知識缺陷教學(xué)講解視頻,然后開始學(xué)習(xí),配合做習(xí)題進行測試,系統(tǒng)會在交卷時給出相應(yīng)知識點掌握程度和缺陷糾正能力值,若沒有達到專家的標(biāo)準(zhǔn),則重新制定教學(xué)策略再次學(xué)習(xí).如果達到了專家標(biāo)準(zhǔn)可以選擇繼續(xù)練習(xí)編程,發(fā)現(xiàn)新的知識缺陷.如果不是第一次使用系統(tǒng),則系統(tǒng)會根據(jù)之前的學(xué)習(xí)認(rèn)知測評能力和缺陷報告重新制定教學(xué)策略和教學(xué)內(nèi)容.

2.4.3 偏差糾正認(rèn)知能力計算

學(xué)生在學(xué)習(xí)完對應(yīng)的教學(xué)視頻之后,首先會通過相應(yīng)的練習(xí)測驗題來鞏固所學(xué)的知識,然后再進行測試.該知識點測試題目一般由單選題、判斷題、填空題、編程題四大部分組成.題庫中至少要能測試“識記”“理解”“應(yīng)用”“分析”“綜合”“評價”幾項認(rèn)知能力中的一項能力.具體過程如下:

(1)學(xué)生在做測試題時對于每一道題都有各項認(rèn)知能力指標(biāo),如果這道題答對則能力值為1,答錯能力值為-1,不答就為0.學(xué)生在做完每一套測試題后都會得到一張測試記錄表,如表3所示.

表3 不同認(rèn)知能力 (Rij)的測試記錄表

(2)學(xué)生答完測試題就可以得到每道題的各項能力的正確率矢量:

每一道題的6 項指標(biāo)都如這樣表示就可以構(gòu)成整張試卷所有題目認(rèn)知能力的評價矩陣:

其中,a11-a16表示第1 道題的6 項認(rèn)知能力評價值,a21-a26表示第2 道題的6 項能力評價值,以此類推.

(3)定義每道題的相對權(quán)值為W=(W1,W2,···,Wn).

(4)每道題的權(quán)值由專家或者出題者給出:

權(quán)重w1,w2,···,wn,其中,wi為第i道題的權(quán)重,wi∈[0,1],0≤i≤n.

(5)計算測試后的最終認(rèn)知能力評價結(jié)果矢量:

(6)最后計算出該學(xué)生對于該部分的知識點和知識缺陷糾正綜合能力值:

其中,Q為各項指標(biāo)能力的綜合權(quán)值,這也由專家給出.將計算出學(xué)生的認(rèn)知模型和試卷專家給出的難易程度以及知識點覆蓋率做出綜合判斷,最后決定該學(xué)生是否已經(jīng)掌握該部分知識點和知識缺陷糾正能力.

3 實驗測試

3.1 代碼缺陷檢測

下面程序的主要功能是判斷從控制臺輸入flag 來分別執(zhí)行不同的功能,功能有求兩個數(shù)的最大公約數(shù)和最小公倍數(shù)、計算一個數(shù)是否為質(zhì)量、求解兩個數(shù)的商,對一個數(shù)組進行冒泡排序.

#include<stdlib.h>#include<st dio.h>#include<string.h>#include<sys/types.h>#include<dirent.h>//求最大公約和最小公倍int dump(double m,double n){int k=0,t,a,b;a=m;b=n;if(m<n);{t=m;m=n;n=t;}while(k!=0)k=m%n;m=n;n=k;printf("最大公約數(shù):%d ",m);printf("最小公倍數(shù):%d ",a*b/m);return 0;}//求質(zhì)數(shù)intzhishu(double k){for(inti=2;i<k;i++);{

int s=i%2;if(s=0){printf("%s","不是質(zhì)數(shù)");break;}}return 0;}//求兩個數(shù)的商intalg(double m,double n){if(m>0&n<0){printf("%d",m/n);}else{printf("請輸入兩個正整數(shù):");}}//冒泡排序Intinit_change(){int array[8]={49,38,65,97,76,13,27,49};inti,j,al;int key;for (i=0;i<8;i++){key=0;a1=array[9];for (j=0;j+1<8-i;j++){if (array[j]>array[j+1]){key=1;swap(&array[j],&array[j+1]);}}if (key==0)break;}return 0;}int main(){floatm,n;scanf("%f",m);scanf("%f",n);int flag;scanf("%d",&flag);if(flag&&m&&n!=0){switch(flag){case 1:init_dump(m,n);case 2:init_zhishu(m);case 3:init_alg(m,n);case 4:init_change();default:printf("%s","結(jié)束");}}return 0;}

使用Dev 去編譯程序代碼,編譯結(jié)果顯示是沒有任何警告和錯誤,說明編譯器Dev 無法檢測出學(xué)生編程中非語法錯誤.使用Visual C++編譯器去編譯程序代碼,編輯結(jié)果顯示出一些警告信息,其中包含了部分代碼中存在的錯誤和語法規(guī)則問題,但是同時也檢測出一些不應(yīng)該存在的錯誤,并且只說明了錯誤原因,沒有解釋說明如何修改錯誤.所以Visual C++在檢測正確識別率和覆蓋率性能上都不是很樂觀.Dev與Visual編譯結(jié)果如圖7所示.

圖7 Dev與Visual 編譯結(jié)果效果圖

而使用智能分析器能檢測出很多語法和邏輯上的錯誤,第1 節(jié)總結(jié)的缺陷都是初學(xué)者容易犯的錯誤,編譯器根本無法全部檢測這些缺陷,這款輔助工具就可以幫助初學(xué)者檢測出問題,說明在檢測覆蓋率和識別正確率得到了很大的提升.代碼檢測報告如圖8所示.

圖8 檢測結(jié)果報告

分別對Dev、Visual C++、本文中的智能分析器檢測新增缺陷的性能做出比較,性能比較結(jié)果如表4所示.

表4 性能對比分析表

3.2 輔助學(xué)生編程實踐學(xué)習(xí)

對于上一步檢測結(jié)果報告每一個知識點錯誤都有對應(yīng)的習(xí)題測試和教學(xué)視頻鏈接,學(xué)生點擊鏈接之后,可以通過學(xué)習(xí)教學(xué)視頻和習(xí)題測試鞏固學(xué)習(xí)缺失的知識點.效果圖如圖9和圖10所示.

圖9 視頻學(xué)習(xí)截圖

圖10 習(xí)題測試截圖

視頻學(xué)習(xí)過程中同時可以返回繼續(xù)編程并修改自己的錯誤,系統(tǒng)會重新檢查代碼,匹配重新編程之后的錯誤教學(xué)視頻.視頻學(xué)習(xí)之后學(xué)生可以開始習(xí)題測試,測試結(jié)束之后會由系統(tǒng)計算出缺陷糾正認(rèn)知能力值從而判斷學(xué)生對這些知識點是否已經(jīng)掌握,如果沒有達到專家的標(biāo)準(zhǔn),系統(tǒng)就會重新匹配符合學(xué)生能力的測試題繼續(xù)學(xué)習(xí),如果達到了專家標(biāo)準(zhǔn)學(xué)生就可以繼續(xù)編程發(fā)現(xiàn)其他的知識點缺陷.

4 結(jié)論與展望

目前,該系統(tǒng)在測試中獲得了學(xué)生的一致好評,檢測能力強,智能分析錯誤并給出修改意見,大部分學(xué)生自主編程實踐能力得到提升.但是代碼缺陷分析器主要還是針對編程初學(xué)者的易犯錯誤給出了智能提示和相應(yīng)修改建議,相比其他的編譯器在覆蓋率和識別率都有顯著提高,但對于有幾年編程經(jīng)驗的程序員可能就不太適用.這時就需要重新擴展知識庫并豐富數(shù)據(jù)庫的推理規(guī)則,做到和現(xiàn)在很多高級語言的編譯器一樣能夠提示很多邏輯語義上的錯誤.因此,該系統(tǒng)還存在一些不足之處,需要更好的擴展知識庫和強化推理機制,讓更多的初學(xué)者體會到智能編程實踐的優(yōu)點.

猜你喜歡
規(guī)則檢測學(xué)生
撐竿跳規(guī)則的制定
“不等式”檢測題
“一元一次不等式”檢測題
“一元一次不等式組”檢測題
數(shù)獨的規(guī)則和演變
趕不走的學(xué)生
讓規(guī)則不規(guī)則
Coco薇(2017年11期)2018-01-03 20:59:57
TPP反腐敗規(guī)則對我國的啟示
學(xué)生寫話
學(xué)生寫的話
主站蜘蛛池模板: 日韩无码白| 一级爆乳无码av| 亚洲视频在线网| 国产精品精品视频| 视频一区亚洲| 精品国产成人三级在线观看| 天天综合网在线| 国产99在线观看| 欧洲熟妇精品视频| 国产色网站| 久久综合五月婷婷| 久久美女精品| 亚洲一区波多野结衣二区三区| 国内精品视频区在线2021| 依依成人精品无v国产| a级毛片在线免费| 一本一本大道香蕉久在线播放| 色天天综合| 18禁色诱爆乳网站| 欧美日本在线播放| 波多野结衣二区| 久久久久久尹人网香蕉| 在线观看国产小视频| 国产丝袜第一页| 国产精品丝袜在线| 亚洲视频a| 狠狠色丁香婷婷综合| 精品综合久久久久久97超人| 国产一线在线| 国产高潮视频在线观看| 99re66精品视频在线观看| 国产亚洲精品97在线观看| 天天干伊人| 丝袜国产一区| 性做久久久久久久免费看| 亚洲国产成人无码AV在线影院L| 人妻熟妇日韩AV在线播放| 青青草原国产| 波多野结衣第一页| 五月天在线网站| 国产精品短篇二区| 久久黄色视频影| 大香伊人久久| 色综合中文| 久久鸭综合久久国产| 波多野结衣的av一区二区三区| 天天干天天色综合网| 色视频国产| 日本久久网站| 日本草草视频在线观看| 久久久精品国产SM调教网站| 3D动漫精品啪啪一区二区下载| 久久九九热视频| 亚洲成人一区二区| 无码免费视频| 国产波多野结衣中文在线播放| 99视频全部免费| 久久成人18免费| 青青草原国产av福利网站| 免费又爽又刺激高潮网址| 国产呦精品一区二区三区网站| 国产女人在线| 日韩国产精品无码一区二区三区| 国产农村1级毛片| 欧美激情首页| 亚洲视频在线网| 国产精品欧美激情| 波多野结衣亚洲一区| 午夜a视频| 欧美高清视频一区二区三区| 国产在线精品99一区不卡| 欧美午夜网| 亚洲福利片无码最新在线播放| 日韩天堂视频| 国产美女免费网站| 一级毛片中文字幕| 日韩一级毛一欧美一国产| 国产91导航| 日韩久草视频| 青草视频在线观看国产| 一本色道久久88综合日韩精品| 国产真实乱了在线播放|