初級程序員下半年下午試題_第1頁
初級程序員下半年下午試題_第2頁
初級程序員下半年下午試題_第3頁
初級程序員下半年下午試題_第4頁
初級程序員下半年下午試題_第5頁
已閱讀5頁,還剩8頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、初級程序員2011下半年下午試題試題一閱讀以下說明和流程圖。說明以下流程圖用于檢查數組A1:n中的元素是否為自然數1n的一個排列(含有1n各數)。若是,則輸出OK否則輸出所缺的自然數及其個數mi為檢查A1:n中是否含有k,只要判斷P(k)=(A(1)-k)*(A(2)-k)*-*(A(n-k)是否等于0即可。流程圖試題二1、閱讀以下說明和C程序代碼。說明下面是一個待修改的C程序,其應該完成的功能是:對于輸入的一個整數num1計算其位數k,然后將其各位數字按逆序轉換為字符串保存并輸出。若num為負整數,則輸出字符串應有前綴“-”。例如,將該程序修改正確后,運行時若輸入“14251”,則輸出“15

2、241”;若輸入“-6319870',則/&出“-0789136下面給出的C程序代碼中有五處錯誤,請指出錯誤代碼所在的行號并給出修改正確后的完整代碼行。C程序代碼行號代碼01#include<stdio.h>02#include<stdlib.h>03intmain()0405longnum=0,t=0;char*pstr,i=0,k=0;0607scanf("%1d",num);/*輸入一個整數,存入num*/08t=num;k=num!=0?0:1;09while(t>=0)/*計算位數*/10t=t/10;11k+;121

3、314pstr=(char*)malloc(k+2)*sizeof(char);/十中請字符串的存儲空間15*/16if(pstr=0)return-1;1718i=0:19if(num<0)20num=-num;21pstr0='-';i=1;2223for(;k>0;k-)/*形成字符串*/24pstri+=num%10;25num=num/10;2627pstrk尸'0'/*設置字符串結尾*/28printf("%sn",pstr);29free(pstr);30return0:試題三閱讀以下說明和C代碼。說明某市在進行市長

4、選舉,該市共分為M個選區(qū)(1<M<6,從1開始順序編號),共有N個競選者參選(1<N<5,從A開始順序編號)。經投票后,所得選票數據如表3-1所示。表3-1選票數據選區(qū)競選者A競選者B競選者C競選者D1192482063721479031221318612121384114214083952671338229現已將選票數據存入文本文件data.txt,該文件內容格式如下:共有M行,每行N+1個整數,第一個整數為選區(qū)編號,隨后為N個競選者在該選區(qū)所得票數。下面的程序先從文件中讀入選票數據存入二維數組data,然后完成下列功能:a.計算并顯示每個競選者獲得的選票數及占總選票

5、數的百分比;b.如果任一競選者獲得的選票數超過總選票數的50%則顯示該競選者獲勝;c.如果沒有競選者獲得總選票數的50犯上,則顯示兩位得票最高的競選者需再進行決選。在下面的程序代碼中,競選者A的編號為1,競選者B的編號為2,以此類推。C代碼#include<stdio.h>#include<stdlib.h>#defineM5/*選區(qū)數*/#defineN4/*競選者人數*/intmain(intargc,charargv口)FILE*fin;intdataM+1N+1;/*data0存放選區(qū)編號,dataMj存放j號競選者得票總數*/intMAXP1,cd1;/*MA

6、XP1、cd1存放得票最多者的票數和競選者編號*/intMAXP2,cd2;/*MAXP2、cd2存放得票次多者的票數和競選者編號*/inti,j,totalP;/*totalP存放總票數*/fin=fopen("data.txt","r");if(!fin)return-1;i=0;j=0;while(!feof(fin)/*從文件讀入數據*/fscanf(fin,"%d",&dataij);;if(j>N)j=0;i+;fclose(fin);totalP=0;MAXP1=0;MAXP2=0;cd1=0;cd2=0;

7、for(j=1;j<N+1;j+)dataMj=;/*設置競選者得票總數初始值*/for(i=0;i<M;i+)/*計算j號競選者的得票總數*/dataMj+=dataijif(dataMjMAXP1);cd2=cd1;MAXP1=dataMj;cd1=j;elseif(dataMj>MAXP2)(MAXP2=dataMj;cd2=j;(4) ;/*計算總票數*/for(j=1;j<N+1;j+)printf("Candidate-%c:%ci",j+'A'-1,dataMj);printf(%.21fn",(double)

8、dataMj/totalP);printf("n");if(5)>0.5)/*判斷得票數最多者的得票率*/ncd1+'A'-1);elseprintf("Result:Candidate-%CPKCandidate-ncd1+'A'-1,cd2+'A'-1);system("pause);return0;試題二閱讀以下說明和C函數。說明約瑟夫問題是一個經典的問題,其描述是:有n個人(編號為1n)圍成一圈,從第1個人開始,按照順時針方向從1開始計數到m(即數到第m個人),讓其出圈,然后再從其順時針方向的

9、下一個人開始,依次計數到m并讓其出圈,重復這個過程,直到所有人都出圈,試給出出圈者的順序。以n-5,m-3為例,其出圈順序為3,1,5,2,4,過程如圖4-1所示。下面的函數Joseph()在單向循環(huán)鏈表表示的基礎上模擬上述出圈過程。n為5時的單向循環(huán)鏈表結構如圖4-2所示。鏈表的結點類型定義如下:typedefstructNodeintno;structNode*next;Node,*LinkList;函數Joseph(LinkListtail,intn,intm)的處理思路如下:(1)用k計數,每次都從0開始,當計數到m-1時結束本次計數;(2)通過指針p查找出圈者所對應的結點,當k的值等

10、于m-1時,p應指向出圈者對應結點的前驅結點;(3)通過刪除結點表示出圈處理;(4)當m大于圈中剩余人數時,為了避免重復計數,用模運算修改m的值;(5)計數和刪除操作完成后再恢復m的原值。C函數voidJoseph(LinkListtail,intn,intm)/*單循環(huán)鏈表包含n個結點,tai1為鏈表的尾指針,m為計數值*/LinkListp,q;intk,i,old_m=m;p=tai1;for(i=n;i>1;-i)/*i表示圈中剩余人數*/m=m%i;/*避免重復計數*/if(0=m)m=(1);k=0;while(k<(2);k+;printf("%d'

11、n",(4);/*輸出出圈者的編號*/q=p->next;(5) =q->next;/*刪除出圈者對應的結點*/free(q);m=old_m;printf("%(n",p->No);試題五閱讀以下說明、圖和C+弋碼。說明已知某公司主要有兩大類耗電資產(Asset):計算機(ComputerAsset)和建筑物(BuildingAsset)。為了節(jié)約能源,通過控制各種電源,將可關閉的房燈、計算機顯示器等在夜間關閉。為了實現上述需求,設計了如圖5-1所示的類圖,并用下面的C+弋碼加以實現。C抖代碼#include<typeinfo>#i

12、nclude<iostream>usingnamespacestd;classAsset/*通用資產,基類*/public:virtualAsset();classPowerSwitchable/*抽象基類,可在夜間關閉電源的物體接口*/public:virtualvoidpowerDown()=0;/*powerDown()函數接口*/virtualvoidpowerUp()=0;/*powerUp函數接口*/;一classComputerAsset:publicAsset/*計算機資產*/protected:intdeskNumber;public:ComputerAsset(

13、intdeskNumber)this->deskNumber=deskNumber;;classComputerCPU/*計算機主機,永不關閉*/public:ComputerAssetComputerCPU(intdeskNumber):(deskNumber);classComputerMonitor/*計算機顯示器*/public:ComputerMonitor(introomNumber):ComputerAsset(roomNumber), PowerSwitchable() ComputerMonitor() void powerDown() void powerUp() /

14、*關電源,代碼略*/*開電源,代碼略*/;/*BuildingAsset 、BuildingLight.EmergencyLight 略*/和 RoomLights 代碼classBuildingManagementprivate:Asset*things24;intnumltems;public:voidgoodNight()/*值班員定時“關閉”時調用,關閉可關閉的電源*/for(inti=0;i<numltems;i+)(3)ps=dynamlccast<PowerSwitchable*>(thingsi);if(ps!=0)ps->powerDown();/*g

15、oodMorning()與goodNight()類似,依次調用powerUp(),實現略*/voidadd(Asset*thing)/*為建筑添加資產*/things(4)=thing;;intmain()BuildingManagement*b1=(5)BuildingManagement。;/101房間的控/101房間的應急/101房間4號b1->add(newRoomLights(101);b1->add(newEmergencyLight(101);b1->add(newComputerCPU(10104);桌上的計算機主機b1->add(newComputer

16、Monitor(10104);/101房間4號桌上的計算機顯示器b1->goodNight();deleteb1;試題六閱讀以下說明和Java代碼。說明已知某公司主要有兩大類耗電資產(Asset):計算機(ComputerAsset)和建筑物(BuildingAsset)。為了節(jié)約能源,通過控制各種電源,將可關閉的房燈、計算機顯示器等在夜間關閉。為了實現上述需求,設計了如圖6-1所示的類圖,并用下面的Java代碼加以實現。Java代碼abstractclassAsset/*通用資產,基類*/interfacePowerSwitchable/*可在夜間關閉電源的物體實現該接口*/publi

17、cvoidpowerDown();publicvoidpowerUp();abstractclassBuildingAssetextendsAsset/*建筑物資產*/protectedintroom;publicBuildingAsset(introom)this.room=room;abstractclassBuildingLightextendsBuildingAsset/燈的通用信息:flourescent/incandescent等,略BuildingLight(introomNumber)super(roomNumber);classEmergencyLight(/*應急燈,永不關

18、閉*/EmergencyLight(introomNumber)super(roomNumber);classRoomLights(2)RoomLights(introomNumber)super(roomNumber);publicvoidpowerDown()/*關電源,代碼略*/publicvoidpowerUp()/*開電源,代碼略*/*ComputerAsset.ComputerCPU和ComputerMonitor代碼略*/publicclassBuildingManagementAssetthings=newAsset24;intnumltems=0;publicvoidgood

19、Night()/*值班員定時“關閉”時調用,關閉可關閉的電源*/for(inti=0;i<things.length;i+)if(thingsiinstanceof(3)(PowerSwitchable)thingsi).powerDown();/*goodMorning()與goodNight()類似,依次調用powerUp(),其實現細節(jié)此處略*/publicvoidadd(Assetthing)/*為建筑添加資產*/things(4)=thing;publicstaticvoidmain(String口args)BuildingManagementb1=(5)BuildingMan

20、agement();bl.add(newRoomLights(101);/101房間的控制燈bl.add(newEmergencyLight(101);/101房間的應急燈b1.add(newComputerCPU(10104);/101房間4號桌上的計算機主機b1.add(newComputerMonitor(10104);/101房間4號桌上的計算機顯示器b1.goodNight();答案:試題一1、2、3、P*(A(i)-k)4、P=05、m+1解析本題考查算法設計和描述的基本能力。從流程圖看出,首先需要對m賦初值,然后對k=1,2,,n循環(huán),檢查數組A中是否含k。為此,在該循環(huán)中,需要

21、嵌套內循環(huán)來計算P(k)。然后判斷計算結果P的值是否等于0,來決定數組A中是否含k,并采取相應的動作。為了對i循環(huán)計算累乘的P(k),需要先在P中送初值1。因此(2)處應填1,并在(3)處填寫P*(A(i-k)進行累乘。內循環(huán)結束后,(4)處應判斷P=O是否成立。P=0表示數組A中含k,否則表示數組A中缺ko因此,(4)處應填寫P=d如果數組A中缺k,則缺數計數m應增1。因此,(5)處應填m+1,而m的初值應送0,從而(1)處應填00k循環(huán)結束后,應根據m的值決定輸出結果。m=0表示數組A中包含全部自然數1至n,即數組A的元素就是1n的一個排列;m不等于0表示數組A中短缺其中m個自然數。本題的

22、算法可應用于判斷標準數獨的答案是否正確。例如,9階(9*9)標準數獨解答所得的結果應在每行、每列、每個3*3宮內都包含19,并不重復,即都是19的一個排列??咳斯z查稍有麻煩,尤其是16階標準數獨解答結果的人工檢查更令人煩惱,這個算法則提供了一種處理思路。試題二1、說明行修改正確后的完整代碼號行7scanf("%ld",&num);while(t!=0)9或者while(t)!pstr 可替換為 pstr=0 或 pstr=NULL'0' 可由 48、 060、 0x30、 '060' 、 'x30' 或其他相等值代替

23、''0可由0代替15if(!pstr)return-1;23pstri+=num%10+'0'pstri尸0'26或pstri+='0'以上解答不分次序解析本題考查C程序員查找錯誤和排除錯誤的基本能力。程序中的錯誤主要分為語法錯誤和語義錯誤兩類。語法錯誤是指語言結構上的錯誤,例如,是否引用了未定義的變量,表達式中缺少操作數等等。語義錯務是指語言結構含義不正確或程序的運算邏輯有錯誤,這類錯誤可能在編譯階段發(fā)現(靜態(tài)語義),也可能推遲到運行階段才暴露。例如,表達式中運算符號不能處理所引用的運算對象,無窮循環(huán)等??忌枰浅J煜語言的基本語法

24、,從而通過走查源代碼來發(fā)現語法錯誤。查找語義錯誤則需要充分理解程序的邏輯,也就是整個程序的結構和每條語句所起的作用。前2行為預處理命令行,對于最常使用的include命令,考生應該非常熟悉,以便檢查程序中對常用函數的調用是否正確。本程序中前兩行無錯誤。顯然,接下來的四行分別為mamg數的首部,函數體的開始符號“”、變量定義語句和空白行,這里也沒有錯誤。第7行為格式化輸入函數scanf的調用語句,這是比較容易出錯的地方,常見的錯誤是格式控制串與輸入表列中的變量不匹配,或者是丟失變量前的取地址運算符號“&”,該行的錯誤即在這里。第8行至第12行用于計算所輸入整數的位數并用k來計算(記錄),

25、這幾行代碼應作為一個整體來理解。程序中首先將num的值備份至t,并對k賦值,然后通過循環(huán)對t進行輾轉除以10的運算,使t每次都丟掉其個位數,即t的位數逐漸減少(t每減少1位,k就增加1),直到t的值為0時為止,此時k的值即為num的位數。第9行的循環(huán)條件錯誤導致了無窮循環(huán)(t等于0時也繼續(xù)循環(huán)),由于t的初值也可能是負數,因此應將其中的“t>=0”改為“t!=0”。第14行沒有錯誤。第15行的錯誤很明顯,也很常見,即將“=”誤用為“=”,從而改變其所在語句的語義,其中的"pst=O”則將pstr的值重置為0,使pstr所記錄的字符串存儲空間首地址信息丟失,此后針對pstr的運算

26、都會出錯。第17行至第21行用于處理num為負數時輸出字符串應包含前綴“一”的要求,這幾行沒有錯誤。第22行至第25行用于從num得到其逆置的數字字符串,其錯誤在第23行,屬于邏輯錯誤。num%1的運算2果為num的個位數字,而pstr口中要存儲的是數字字符(即ASCII值),因此應將num%l0勺運算結果加上字符'0'(或字符0的ASCII碼值48)。第26行用于設置字符串結束標志,需要注意的是串結束標志的位置。由于num可能為負數,因此將字符串結束標志字符設置在k下標處可能出錯,保險的做法是繼續(xù)用i作為下標,使得'0'正好跟在最后一個數字字符的后面。第27行

27、至第30行沒有錯誤。試題三1、j+,或+j,或其等價表示2、3、MAXP2=MAXP14、totalP+=dataMj,或totalP+=totalP+dataMj,或其等價表示5、(double)MAXP1/totalP,或(float)MAXP1/totalP,或其等價表示其中,將(double)或(float)寫在totalP之前亦可解析本題考查C程序設計基本能力。題目中涉及的知識點主要有數組、文件、循環(huán)和類型轉換,分析程序時首先要明確各個變量(或數組元素)所起的作用,并以語句組分析各段代碼的功能,從而完成空缺處的代碼填充。根據題目描述,首先將文件中的數據讀入數組data。顯然,i和j分

28、別起行號、列號的作用。行號i應在一行的數據都讀入后增加1,而列號j則每讀入一個數據就要增加1,因此空(1)處應填寫“j+”或其等價形式的語句。將數據讀入數組data后,以題中的數據為例,data數組的內容可表示如下:data00=1 data10=2 data20=3 data30=4 data40=5 data50=?data01=192 data11=147 data21=186 data31=114 data41=267 data51=?data02=48 data12=90 data22=12 data32=21 data42=13 data52=?data03=206 data13=

29、312 data23=121 data33=408 data43=382 data53=?dataMi 存放 i 號競選者的得票總數, data0data04=37 data14=21 data24=38 data34=39 data44=29 data54=?存放的是選區(qū)編號,因此dataM0不用。以上表為例,需要將data01、data11、.、dataM-11加起來存入dataM1,因此,空(2)處應填入0,以設置dataM1、dataM2、.dataMN的初始值???3)所在的語句組用于找出得票數最多的競選者,此時,因此之前的最多票數(MAXP1)將成為次多數(MAXP2)即空(3)處

30、填入“MAXP2=MAXP1空(4)處為計算總票數的語句,根據說明,應填入“totalP+=dataMj或其等價形式???5)處為計算票數最多者得票率的表達式,根據說明是將MAXP馀以totalP,需要注意的是:MAXP和totalP都是整數且MAXP小于totalP,因此應至少對其中的一個數值進行整數到實數的類型轉換,否則其結果為0,因此,空(5)處應填入“(double)MAXP1/totalP”或其等價形式。試題三1、2、m-13、p=p->next4、p->next->No5、p->next解析本題考查C程序設計基本能力及指針的應用。題目中涉及的考點主要有鏈表運

31、算和程序邏輯,分析程序時首先要明確各個變量所起的作用,并按照語句組分析各段代碼的功能,從而完成空缺處的代碼填充。根據函數Joseph的處理思路,"m=m%i可避免計數過程重復(通俗來說,就是計數時繞著圈地數),需要考慮的特殊情況是m可能取值為0,此時對應的情況應該是正好要數到目前所在位置的前一個人,由于鏈表指針的單向特點,還需逐個結點數過去才行,即當圈中還剩下i個人時,最多計數到i,因此空處應填入“i”。下面的語句組在單循環(huán)鏈表中掃描結點并完成計數。由于計數器k從0開始計數,因此,while語句的循環(huán)條件應為“k<m-1”,因此,空(2)處應填入“m-1”。由于在鏈表中通過指針

32、p指向結點并進行遍歷,所以空處應填入“p=p->next”。根據題目中函數Joseph的處理思路說明,當k的值等于m-1時,p指向出圈者對應結點的前驅結點,因此,p->next所指向的結點是要被刪除的結點,其編號為p->next->No,因此空(4)處應填入“p->next->No'。刪除p所指結點的后繼結點的處理如下圖所示,即要刪除數據域為y的結點,需要將p所指結點的指針域指向z結點,對應的處理是:p->next=p->next->next,由于已經使得q指向了y結點,從而有等同的處理:p->next=q->next.

33、因止匕空(5)處應填入“p->next”。試題五1、:publicComputerAsset2、:publicComputerAsset,publicPowerSwitchable3、PowerSwitchable*4、numltems+5、new解析本題考查面向對象程序設計及其C+鈉言實現的能力,涉及類和抽象類、對象、函數和虛函數的定義和相關操作以及繼承關系。要求考生根據給出的案例、類圖和執(zhí)行過程說明,認真閱讀理清程序思路,然后完成題目。先考查針對案例的特定需求,構建類圖整體結構。本題中根據類圖定義了以下類:BuildingManagement、Asset、ComputerAsset、

34、BuildingAsset、ComputerCPUComputerMoniter、BuildingLight、RoomLights、EmergencyLight和PowerSwitchable。其中,Asset為抽象類,表示通用資產,作為所有資產類的基類;ComputerAsset表示計算機有關資產、BuildingAsset表示建筑物有關資產,兩者作為Asset的子類,繼承了Asset類;ComputerCPUComputerMoniter分別表示計算機CPUffi顯示器,繼承了ComputerAsset0BuildingLight是一種建筑物資產,表示建筑物內的照明設備,繼承了Buildi

35、ngAsset,而照明設備有RoomLights和EmergencyLight,作為BuildingLight的子類。由于案例中兩大類耗電資產(Asset):計算機(ComputerAsset)和建筑物(BuildingAsset),可在夜間關閉的房燈(RoomLights)、計算機顯示器(ComputerMoruter)屬于不同的資產類型,所以將可關閉的資產設計為抽象基類PowerSwitchable,規(guī)定可在夜間關閉電源的物體的開關電源接口,即包含兩個純虛擬(virtual)函數。因此,RoomLights和ComputerMoniter繼承了PowerSwitchable。C+”有不同種

36、類的繼承方式,本題目中,ComputerCPlMComputerAsset的子類,并且在子類的構造函數中,調用父類的構造函數,所以繼承的權限為public。其語法為:public后加父類名。ComputerMonitor是ComputerAsset的子類,而且均是可關閉的,具有開關電源的相同接口,均繼承了PowerSwitchable,并且在子類的構造函數中,調用父類的構造函數,所以繼承的權限均為public,多個父類的繼承語法是:public父類名1,public父類名2。系統中有各類資產,在BuildingManagement中使用Asset通用資產類型數組,用add函數依次為建筑添加資產

37、。由于add函數中對數組添加元素只有一條語句,需要在下標中完成指明當前添加資產元素的下標,并將下標后移。在goodNight函數中對可關閉的資產進行控制,需要判定其是否可關閉,也就是資產是否為PowerSwitchable類的子類。通過動態(tài)類型轉換進行判定,如果資產類型是PowerSwitchable的子類,則轉換后的類型調用相應接口,并綁定到具體對象,執(zhí)行對象的關閉電源行為。類BuildingManagement中沒有定義構造函數,編譯器會生成一個缺省的構造函數,采用new關鍵字進行對象創(chuàng)建。使用完成之后,通過delete進行釋放。因此空(1)需要表現出公有繼承:publicComputer

38、Asset;空(2)處添加繼承兩個父類,并且權限均為public,即:publicComputerAsset,publicPowerSwitchable;空(3)處動態(tài)類型轉換為抽象類,即PowerSwitchable*;空(4)處完成指明當前添加資產元素的下標,并將下標后移,即numltems+;空(5)處補充通過使用編譯器生成的缺省構造函數創(chuàng)建對象,即應填入“new”。試題六1、extendsBuildingLight2、extendsBuildingLightimplementsPowerSwitchable3、PowerSwitchable4、numltems+5、new解析本題考查面

39、向對象程序設計及其Java語言實現的能力,涉及類和接口、抽象類、對象、方法的定義和相關操作,以及繼承和實現關系。要求考生根據給出的案例、類圖和執(zhí)行過程說明,認真閱讀理清程序思路,然后完成題目。先考查針對案例的特定需求,構建類圖整體結構。本題中根據類圖定義了類:BuildingManagement、Asset、ComputerAsset、BuildingAsset、ComputerCPU、ComputerMoniter、BuildingLight、RoomLights、EmergencyLight和PowerSwitchable。其中Asset為抽象類,表示通用資產,作為所有資產類的基類。ComputerAsset表示計算機有關資產、BuildingAsset表示建筑物有關資產,兩者作為Asset的子類,繼承了Asset類,ComputerCPUComputerMoniter分別表示計算機CPUS顯示器,繼承了ComputerAsset。BuildingLight是一種建筑

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論