




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
實(shí)驗一:熟悉C語言的運(yùn)行環(huán)境1.實(shí)驗?zāi)康?.1、熟悉利用VisualC++6.0編輯運(yùn)行C程序的方法和步驟。1.2、運(yùn)行調(diào)試簡單的C語言程序。2、實(shí)驗方法及步驟2.1、熟悉利用VisualC++6.0編輯運(yùn)行C程序的方法和步驟:(1)打開VisualC++6.0如圖1所示,單擊“文件”→“新建”→“工程”→“Win32ConsoleApplication”,輸入工程名,選擇存儲位置。圖1(2)文件”→“新建”→“文件”→“C++SourceFile”,輸入C程序文件名并添加到工程,如圖2所示。注意:如果文件名不寫后綴,系統(tǒng)會默認(rèn)指定為.cpp,表示要建立的是C++源程序,因此命名時要加上后綴.c。圖2(3)編寫程序代碼,如圖3所示。圖3(4)點(diǎn)擊菜單欄中“組建”菜單下的“編譯”、“組建”、“執(zhí)行”按鈕,運(yùn)行程序。如果在編譯、組建、執(zhí)行過程中出現(xiàn)錯誤,修改程序后重新運(yùn)行“編譯”、“組建”和“執(zhí)行”過程。(5)根據(jù)需要輸入、輸出數(shù)據(jù)。(6)點(diǎn)擊“文件”→“關(guān)閉”。2.2、輸入并調(diào)試下列程序,熟悉C語言程序的調(diào)試過程,程序如下:#include<stdio.h>voidmain()﹛doublea,b,area;a=1.2;b=3.6;area=a*b;printf(“a=%f,b=%f,area=%f\n”,a,b,area);﹜執(zhí)行以上程序后的輸出結(jié)果為:a=1.200000,b=3.600000,area=4.320000三、輸入并調(diào)試下列程序,理解為什么會出現(xiàn)這樣的結(jié)果。#include<stdio.h>main(){charch1,ch2,ch;unsignedcharc;inta;ch1=78;ch2=67;ch=ch1+ch2;c=ch1+ch2;a=ch1+ch2;printf(“ch1+ch2=%d\n”,ch1+ch2);printf(“ch=%d\n”,ch);printf(“c=%d\n”,c);printf(“a=%d\n”,a);}運(yùn)行結(jié)果:結(jié)果分析:運(yùn)行結(jié)果中ch=-111原因是因為ch定義為char型,所以其值不能大于128,而ch1+ch2=145,145大于128,即ch=ch1+ch2溢出。3.實(shí)驗總結(jié)由以上程序運(yùn)行結(jié)果可知,在編寫程序代碼時,一定要定義函數(shù)類型和變量,變量類型的定義要確保在可執(zhí)行的范圍內(nèi)。實(shí)驗二詞法分析器實(shí)驗?zāi)康募耙蟊敬螌?shí)驗通過用C語言設(shè)計、編制、調(diào)試一個詞法分析子程序,識別單詞,實(shí)現(xiàn)一個C語言詞法分析器,經(jīng)過此過程可以加深對編譯器解析單詞流的過程的了解。運(yùn)行環(huán)境:硬件:windowsxp軟件:visualc++6.0實(shí)驗步驟查詢資料,了解詞法分析器的工作過程與原理。分析題目,整理出基本設(shè)計思路。實(shí)踐編碼,將設(shè)計思想轉(zhuǎn)換用c語言編碼實(shí)現(xiàn),編譯運(yùn)行。4.測試功能,多次設(shè)置包含不同字符,關(guān)鍵字的待解析文件,仔細(xì)察看運(yùn)行結(jié)果,檢測該分析器的分析結(jié)果是否正確。通過最終的測試發(fā)現(xiàn)問題,逐漸完善代碼中設(shè)置的分析對象與關(guān)鍵字表,拓寬分析范圍提高分析能力。實(shí)驗內(nèi)容本實(shí)驗中將c語言單詞符號分成了四類:關(guān)鍵字key(特別的將main說明為主函數(shù))、普通標(biāo)示符、常數(shù)和界符。將關(guān)鍵字初始化在一個字符型指針數(shù)組*key[]中,將界符分別由程序中的case列出。在詞法分析過程中,關(guān)鍵字表和case列出的界符的內(nèi)容是固定不變的(由程序中的初始化確定),因此,從源文件字符串中識別出現(xiàn)的關(guān)鍵字,界符只能從其中選取。標(biāo)識符、常數(shù)是在分析過程中不斷形成的。對于一個具體源程序而言,在掃描字符串時識別出一個單詞,若這個單詞的類型是關(guān)鍵字、普通標(biāo)示符、常數(shù)或界符中之一,那么就將此單詞以文字說明的形式輸出.每次調(diào)用詞法分析程序,它均能自動繼續(xù)掃描下去,形成下一個單詞,直到整個源程序全部掃描完畢,從而形成相應(yīng)的單詞串。輸出形式例如:void$關(guān)鍵字源程序代碼:#include<string.h>#include<stdio.h>#include<stdlib.h>#include<ctype.h>//定義關(guān)鍵字char*Key[10]={"main","void","int","char","printf","scanf","else","if","return"};charWord[20],ch;//存儲識別出的單詞流intIsAlpha(charc){//判斷是否為字母 if(((c<='z')&&(c>='a'))||((c<='Z')&&(c>='A')))return1; elsereturn0;}intIsNum(charc){//判斷是否為數(shù)字 if(c>='0'&&c<='9')return1; elsereturn0;}intIsKey(char*Word){//識別關(guān)鍵字函數(shù) intm,i; for(i=0;i<9;i++){ if((m=strcmp(Word,Key[i]))==0) { if(i==0) return2; return1; } } return0;}voidscanner(FILE*fp){//掃描函數(shù) charWord[20]={'\0'}; charch; inti,c; ch=fgetc(fp);//獲取字符,指針fp并自動指向下一個字符 if(IsAlpha(ch)){//判斷該字符是否是字母 Word[0]=ch; ch=fgetc(fp); i=1; while(IsNum(ch)||IsAlpha(ch)){//判斷該字符是否是字母或數(shù)字 Word[i]=ch; i++; ch=fgetc(fp); } Word[i]='\0';//'\0'代表字符結(jié)束(空格) fseek(fp,-1,1);//回退一個字符 c=IsKey(Word);//判斷是否是關(guān)鍵字 if(c==0)printf("%s\t$普通標(biāo)識符\n\n",Word);//不是關(guān)鍵字 elseif(c==2)printf("%s\t$主函數(shù)\n\n",Word); elseprintf("%s\t$關(guān)鍵字\n\n",Word);//輸出關(guān)鍵字 }else//開始判斷的字符不是字母 if(IsNum(ch)){//判斷是否是數(shù)字 Word[0]=ch; ch=fgetc(fp); i=1; while(IsNum(ch)){ Word[i]=ch; i++; ch=fgetc(fp); } Word[i]='\0'; fseek(fp,-1,1);//回退 printf("%s\t$無符號實(shí)數(shù)\n\n",Word); } else//開始判斷的字符不是字母也不是數(shù)字 { Word[0]=ch; switch(ch){ case'[': case']': case'(': case')': case'{': case'}': case',': case'"': case';':printf("%s\t$界符\n\n",Word);break; case'+':ch=fgetc(fp); Word[1]=ch; if(ch=='='){ printf("%s\t$運(yùn)算符\n\n",Word);//運(yùn)算符“+=” } elseif(ch=='+'){ printf("%s\t$運(yùn)算符\n\n",Word);//判斷結(jié)果為“++” } else{ fseek(fp,-1,1); printf("%s\t$運(yùn)算符\n\n",Word);//判斷結(jié)果為“+” } break; case'-':ch=fgetc(fp); Word[1]=ch; if(ch=='='){ printf("%s\t$運(yùn)算符\n\n",Word); } elseif(ch=='-'){ printf("%s\t$運(yùn)算符\n\n",Word);//判斷結(jié)果為“--” } else{ fseek(fp,-1,1); printf("%s\t$運(yùn)算符\n\n",Word);//判斷結(jié)果為“-” } break; case'*': case'/': case'!': case'=':ch=fgetc(fp); if(ch=='='){ printf("%s\t$運(yùn)算符\n\n",Word); } else{ fseek(fp,-1,1); printf("%s\t$運(yùn)算符\n\n",Word); } break; case'<':ch=fgetc(fp); Word[1]=ch; if(ch=='='){ printf("%s\t$運(yùn)算符\n\n",Word);//判斷結(jié)果為運(yùn)算符“<=” } elseif(ch=='<'){ printf("%s\t$運(yùn)算符\n\n",Word);//判斷結(jié)果為“<<” } else{ fseek(fp,-1,1); printf("%s\t$運(yùn)算符\n\n",Word);//判斷結(jié)果為“<” } break;case'>':ch=fgetc(fp); Word[1]=ch; if(ch=='=')printf("%s\t$運(yùn)算符\n\n",Word); else{ fseek(fp,-1,1); printf("%s\t$運(yùn)算符\n\n",Word); } break; case'%':ch=fgetc(fp); Word[1]=ch; if(ch=='='){printf("%s\t$運(yùn)算符\n\n",Word);} if(IsAlpha(ch))printf("%s\t$類型標(biāo)識符\n\n",Word); else{ fseek(fp,-1,1); printf("%s\t$取余運(yùn)算符\n\n",Word); } break; default:printf("無法識別字符!\n\n");break; } }}main(){ charin_fn[30];//文件路徑FILE*fp;printf("\n請輸入源文件名(包括路徑和后綴名):");while(1){ gets(in_fn); //scanf("%s",in_fn);if((fp=fopen(in_fn,"r"))!=NULL)break;//讀取文件內(nèi)容,并返回文件指針,該指針指向文件的第一個字符elseprintf("文件路徑錯誤!請重新輸入:"); }printf("\n*******************詞法分析結(jié)果如下*******************\n");do{ ch=fgetc(fp); if(ch=='#')break;//文件以#結(jié)尾,作為掃描結(jié)束條件 elseif(ch==''||ch=='\t'||ch=='\n'){}//忽略空格,空白,和換行 else{ fseek(fp,-1,1);//回退一個字節(jié)開始識別單詞流 scanner(fp); }}while(ch!='#');return(0);}實(shí)驗結(jié)果解析源文件:voidmain(){inta=3;a+=b;printf("%d",a);return;}#解析結(jié)果:實(shí)驗總結(jié):通過本次實(shí)驗,讓我再次瀏覽了有關(guān)c語言的一些基本知識,特別是對文件,字符串進(jìn)行基本操作的方法。C語言中沒有string類型,因此本實(shí)驗中的對字符串提取與識別均借助#include<string.h>及字符型數(shù)組來實(shí)現(xiàn)。讓我練習(xí)對字符串函數(shù)應(yīng)用的同時也提高了自己的邏輯思維能力。在本次實(shí)驗中,我糾正了一個一直以來的概念錯誤:main不是關(guān)鍵字,它定義為程序的入口,是主函數(shù)!在本實(shí)驗中,雖然我把main初始化在關(guān)鍵字表(字符指針類型數(shù)組)*Key[10]中,當(dāng)與該數(shù)組中字符串進(jìn)行比較時,若與main匹配成功,則返回2,若為其他關(guān)鍵字則返回1,以此來把main從關(guān)鍵字中區(qū)別出來。在本實(shí)驗中的關(guān)鍵字表只初始化了幾個常用的關(guān)鍵字,還可繼續(xù)擴(kuò)充(只需擴(kuò)大數(shù)組,向其中補(bǔ)充要添加的關(guān)鍵字)。如果要對本程序中未識別的c語言中的一些其他的字符進(jìn)行擴(kuò)充(目前處理為不可識別字符),可在程序代碼中繼續(xù)添加case選項,分別對相應(yīng)要識別的特殊字符加以描述實(shí)驗三微小語言及其文法一、實(shí)驗?zāi)康木幹埔粋€遞歸下降分析程序,實(shí)現(xiàn)對詞法分析程序所提供的單詞序列的語法檢查和結(jié)構(gòu)分析。二實(shí)驗內(nèi)容利用C語言編制遞歸下降分析程序,并對簡單語言進(jìn)行語法分析。2.1待分析的簡單語言的語法用擴(kuò)充的BNF表示如下:⑴<程序>::=begin<語句串>end⑵<語句串>::=<語句>{;<語句>}⑶<語句>::=<賦值語句>⑷<賦值語句>::=ID:=<表達(dá)式>⑸<表達(dá)式>::=<項>{+<項>|-<項>}⑹<項>::=<因子>{*<因子>|/<因子>⑺<因子>::=ID|NUM|(<表達(dá)式>)2.2實(shí)驗要求說明輸入單詞串,以“#”結(jié)束,如果是文法正確的句子,則輸出成功信息,打印“success”,否則輸出“error”。例如:輸入begina:=9;x:=2*3;b:=a+xend#輸出success!輸入x:=a+b*cend#輸出error2.3程序的C語言程序源代碼: #include<stdio.h>
#include<string.h>
charprog[100],token[8],ch;
char*rwtab[6]={"begin","if","then","while","do","end"};
intsyn,p,m,n,sum;
intkk;
factor();
expression();
yucu();
term();
statement();
lrparser();
scaner();
main()
{
p=kk=0;
printf("\npleaseinputastring(endwith'#'):\n");
do
{scanf("%c",&ch);
prog[p++]=ch;
}while(ch!='#');
p=0;
scaner();
lrparser();
getch();
}
lrparser()
{
if(syn==1)
{scaner();/*讀下一個單詞符號*/
yucu();/*調(diào)用yucu()函數(shù);*/
if(syn==6)
{scaner();
if((syn==0)&&(kk==0))printf("success!\n");
}
else{if(kk!=1)printf("thestringhaven'tgota'end'!\n");
kk=1;
}
}
else{printf("haven'tgota'begin'!\n");
kk=1;
}
return;
}
yucu()
{statement();/*調(diào)用函數(shù)statement();*/
while(syn==26)
{scaner();/*讀下一個單詞符號*/
if(syn!=6)statement();/*調(diào)用函數(shù)statement();*/
}
return;
}
statement()
{if(syn==10)
{scaner();/*讀下一個單詞符號*/
if(syn==18)
{scaner();/*讀下一個單詞符號*/
expression();/*調(diào)用函數(shù)statement();*/
}
else{printf("thesing':='iswrong!\n");
kk=1;
}
}
else{printf("wrongsentence!\n");
kk=1;
}
return;
}
expression()
{term();
while((syn==13)||(syn==14))
{scaner();/*讀下一個單詞符號*/
term();/*調(diào)用函數(shù)term();*/
}
return;
}
term()
{factor();
while((syn==15)||(syn==16))
{scaner();/*讀下一個單詞符號*/
factor();/*調(diào)用函數(shù)factor();*/
}
return;
}
factor()
{if((syn==10)||(syn==11))scaner();
elseif(syn==27)
{scaner();/*讀下一個單詞符號*/
expression();/*調(diào)用函數(shù)statement();*/
if(syn==28)scaner();/*讀下一個單詞符號*/
else{printf("theerroron'('\n");
kk=1;
}
}
else{printf("theexpressionerror!\n");
kk=1;
}
return;
}
scaner()
{
sum=0;
for(m=0;m<8;m++)token[m++]=NULL;
m=0;
ch=prog[p++];
while(ch=='')ch=prog[p++];
if(((ch<='z')&&(ch>='a'))||((ch<='Z')&&(ch>='A')))
{while(((ch<='z')&&(ch>='a'))||((ch<='Z')&&(ch>='A'))||((ch>='0')&&(ch<='9')))
{token[m++]=ch;
ch=prog[p++];
}
p--;
syn=10;
token[m++]='\0';
for(n=0;n<6;n++)
if(strcmp(token,rwtab[n])==0)
{syn=n+1;
break;
}
}
elseif((ch>='0')&&(ch<='9'))
{while((ch>='0')&&(ch<='9'))
{sum=sum*10+ch-'0';
ch=prog[p++];
}
p--;
syn=11;
}
elseswitch(ch)
{case'<':m=0;
ch=prog[p++];
if(ch=='>')
{
syn=21;
}
elseif(ch=='=')
{
syn=22;
}
else
{
syn=20;
p--;
}
break;
case'>':m=0;
ch=prog[p++];
if(ch=='=')
{syn=24;
}
else
{syn=23;
p--;
}
break;
case':':m=0;
ch=prog[p++];
if(ch=='=')
{syn=18;
}
else
{syn=17;
p--;
}
break;
case'+':syn=13;break;
case'-':syn=14;break;
case'*':syn=15;break;
case'/':syn=16;break;
case'(':syn=27;break;
case')':syn=28;break;
case'=':syn=25;break;
case';':syn=26;break;
case'#':syn=0;break;
default:syn=-1;break;
}
}結(jié)果分析:輸入begina:=9;x:=2*3;b:=a+xend#后輸出success!如圖1-1所示:圖1-1輸入x:=a+b*cend#后輸出error如圖1-2所示:圖1-2三、總結(jié):通過本次試驗,了解了語法分析的運(yùn)行過程,主程序大致流程為:“置初值”調(diào)用scaner函數(shù)讀下一個單詞符號調(diào)用IrParse結(jié)束。遞歸下降分析的大致流程為:“先判斷是否為begin”不是則“出錯處理”,若是則“調(diào)用scaner函數(shù)”調(diào)用語句串分析函數(shù)“判斷是否為end”不是則“出錯處理”,若是則調(diào)用scaner函數(shù)“判斷syn=0&&kk=0是否成立”成立則說明分析成功打印出來。不成立則“出錯處理”。實(shí)驗四語法分析器實(shí)驗?zāi)康?.掌握LL(1)分析法的基本原理2.掌握LL(1)分析表的構(gòu)造方法3.掌握LL(1)驅(qū)動程序的構(gòu)造方法實(shí)驗內(nèi)容及要求根據(jù)某一文法編制調(diào)試LL(1)分析程序,以便對任意輸入的符號串進(jìn)行分析。本次實(shí)驗的目的主要是加深對預(yù)測分析LL(1)分析法的理解。例:對下列文法,用LL(1)分析法對任意輸入的符號串進(jìn)行分析:(1)E->TG(2)G->+TG|—TG(3)G->ε(4)T->FS(5)S->*FS|/FS(6)S->ε(7)F->(E)(8)F->i輸出的格式如下:(1)LL(1)分析程序(2)輸入一以#結(jié)束的符號串(包括+—*/()i#):在此位置輸入符號串(3)輸出過程如下:步驟分析棧剩余輸入串所用產(chǎn)生式1Ei+i*i#E->TG(4)輸入符號串為非法符號串(或者為合法符號串)實(shí)驗源程序代碼如下:#include<stdio.h>#include<stdlib.h>#include<string.h>#include<dos.h>charA[20];/*分析棧*/charB[20];/*剩余串*/charv1[20]={'i','+','*','(',')','#'};/*終結(jié)符*/charv2[20]={'E','G','T','S','F'};/*非終結(jié)符*/intj=0,b=0,top=0,L;/*L為輸入串長度*/typedefstructtype/*產(chǎn)生式類型定義*/{ charorigin;/*大寫字符*/ chararray[5];/*產(chǎn)生式右邊字符*/ intlength;/*字符個數(shù)*/}type;typee,t,g,g1,s,s1,f,f1;/*結(jié)構(gòu)體變量*/typeC[10][10];/*預(yù)測分析表*/voidprint()/*輸出分析棧*/{ inta;/*指針*/ for(a=0;a<=top+1;a++) printf("%c",A[a]); printf("\t\t");}/*print*/voidprint1()/*輸出剩余串*/{ intj; for(j=0;j<b;j++)/*輸出對齊符*/ printf(""); for(j=b;j<=L;j++) printf("%c",B[j]); printf("\t\t\t");}/*print1*/voidmain(){ intm,n,k=0,flag=0,finish=0; charch,x; typecha;/*用來接受C[m][n]*/ /*把文法產(chǎn)生式賦值結(jié)構(gòu)體*/ e.origin='E'; strcpy(e.array,"TG");/*E->TG*/ e.length=2; t.origin='T'; strcpy(t.array,"FS");//T->FS// t.length=2; g.origin='G'; strcpy(g.array,"+TG"); g.length=3; g1.origin='G'; g1.array[0]='^';//''^''表示為空串// g1.length=1;s.origin='S'; strcpy(s.array,"*FS"); s.length=3; s1.origin='S'; s1.array[0]='^'; s1.length=1; f.origin='F'; strcpy(f.array,"(E)"); f.length=3; f1.origin='F'; f1.array[0]='i'; f1.length=1;for(m=0;m<=4;m++)/*初始化分析表*/ for(n=0;n<=5;n++) C[m][n].origin='N';/*全部賦為空*//*填充分析表*/C[0][0]=e;C[0][3]=e;C[1][1]=g;C[1][4]=g1;C[1][5]=g1;C[2][0]=t;C[2][3]=t;C[3][1]=s1;C[3][2]=s;C[3][4]=C[3][5]=s1;C[4][0]=f1;C[4][3]=f;printf("提示:本程序只能對由'i','+','*','(',')'構(gòu)成的以'#'結(jié)束的字符串進(jìn)行分析,\n");printf("請輸入要分析的字符串:");do/*讀入分析串*/{ scanf("%c",&ch); if((ch!='i')&&(ch!='+')&&(ch!='*')&&(ch!='(')&&(ch!=')')&&(ch!='#')) { printf("輸入串中有非法字符\n"); exit(1); } B[j]=ch; j++;}while(ch!='#');L=j;/*分析串長度*/ch=B[0];/*當(dāng)前分析字符*/A[top]='#';A[++top]='E';/*'#','E'進(jìn)棧*/printf("步驟\t\t分析棧\t\t剩余字符\t\t所用產(chǎn)生式\n");do{ x=A[top--];/*x為當(dāng)前棧頂字符*
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度標(biāo)準(zhǔn)房屋無償使用協(xié)議書(文化創(chuàng)意產(chǎn)業(yè)孵化)
- 二零二五年度商鋪買賣合同分期付款及租賃管理服務(wù)
- 二零二五年度合同管理制流程圖編制與實(shí)施協(xié)議
- 二零二五年度橋梁工程監(jiān)理服務(wù)合同
- 二零二五年度汽車行業(yè)簡易勞動合同范本
- 二零二五年度農(nóng)村房屋及附屬設(shè)施整體轉(zhuǎn)讓合同
- 二零二五年度電力施工進(jìn)度管理及協(xié)調(diào)協(xié)議
- 二零二五年度賓館布草洗滌、熨燙及配送一體化服務(wù)合同
- 2025年杭州道路貨物運(yùn)輸駕駛員考試
- 發(fā)言稿不考慮格式
- 《CRISPR-Cas9及基因技術(shù)》課件
- 《急性冠狀動脈綜合征》課件
- 【博觀研究院】2025年跨境進(jìn)口保健品市場分析報告
- 游戲直播平臺推廣合作協(xié)議
- 《高科技服裝與面料》課件
- 《馬克思生平故事》課件
- 2024-2025學(xué)年四川省成都市高一上學(xué)期期末教學(xué)質(zhì)量監(jiān)測英語試題(解析版)
- HRBP工作總結(jié)與計劃
- 八大危險作業(yè)安全培訓(xùn)考試試題及答案
- 2025中國船舶集團(tuán)限公司招聘高頻重點(diǎn)模擬試卷提升(共500題附帶答案詳解)
- 土壤侵蝕與碳匯-深度研究
評論
0/150
提交評論