2023年全國(guó)碩士研究生考試考研英語(yǔ)一試題真題(含答案詳解+作文范文)_第1頁(yè)
已閱讀1頁(yè),還剩10頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、<p><b>  拓?fù)渑判?lt;/b></p><p><b>  一 目的</b></p><p>  通過(guò)課程設(shè)計(jì),加深對(duì)《程序設(shè)計(jì)語(yǔ)言》和《軟件技術(shù)基礎(chǔ)》課程所學(xué)知識(shí)的理解,熟練掌握和鞏固C語(yǔ)言的基本知識(shí)和語(yǔ)法規(guī)范,包括:數(shù)據(jù)類型(整形、實(shí)型、字符型、指針、數(shù)組、結(jié)構(gòu)等);運(yùn)算類型(算術(shù)運(yùn)算、邏輯運(yùn)算、自增自減運(yùn)算、賦值運(yùn)算等)

2、;程序結(jié)構(gòu)(順序結(jié)構(gòu)、判斷選擇結(jié)構(gòu)、循環(huán)結(jié)構(gòu));庫(kù)函數(shù)應(yīng)用等;復(fù)雜任務(wù)功能分解方法(自頂向下逐步求精、模塊化設(shè)計(jì)、信息隱藏等),熟練掌握和鞏固三種基本圖形結(jié)構(gòu)的邏輯結(jié)構(gòu)、存儲(chǔ)結(jié)構(gòu)以及相關(guān)運(yùn)算和應(yīng)用。</p><p>  學(xué)會(huì)編制結(jié)構(gòu)清晰、風(fēng)格良好、數(shù)據(jù)結(jié)構(gòu)適當(dāng)?shù)腃語(yǔ)言程序,從而具備利用計(jì)算機(jī)編程分析解決綜合性實(shí)際問(wèn)題的初步能力。</p><p><b>  二 需求分析<

3、;/b></p><p>  題目描述:判斷一個(gè)有向圖是否存在回路,并求出有向無(wú)環(huán)圖的拓?fù)湫蛄小?lt;/p><p><b>  1、輸入數(shù)據(jù)</b></p><p>  在工程文件中保存輸入2個(gè)字符串?dāng)?shù)TXT文件。第一個(gè)為圖按次序排列的所有邊的前頂點(diǎn),第二個(gè)為相對(duì)應(yīng)的第二個(gè)頂點(diǎn)。</p><p><b> 

4、 2、輸出數(shù)據(jù)</b></p><p>  圖的定點(diǎn)數(shù),邊數(shù),每個(gè)頂點(diǎn)的信息及入度,構(gòu)造的鄰接表,圖的拓?fù)渑判颉?lt;/p><p><b>  3、程序功能</b></p><p>  已將AOV網(wǎng)存入文件中,運(yùn)行時(shí)從文件讀取數(shù)據(jù);對(duì)一個(gè)AOV網(wǎng),應(yīng)判斷其是否是有向無(wú)環(huán)圖,若是則輸出其任意一個(gè)拓?fù)渑判蛐蛄?,不是則進(jìn)行相關(guān)的說(shuō)明;構(gòu)造圖

5、的鄰接表;輸出所有頂點(diǎn)的入度。</p><p><b>  三 概要設(shè)計(jì)</b></p><p>  1、全局變量或類型說(shuō)明</p><p>  //********結(jié)構(gòu)體定義***********//</p><p>  typedef struct A_Node //定義表結(jié)點(diǎn)結(jié)構(gòu)</p><p

6、><b>  {</b></p><p>  int adjvex; //與vi相鄰接的頂點(diǎn)編號(hào)</p><p>  struct A_Node *nextarc; //指向下一條弧(邊)的指針</p><p><b>  } A_Node;</b></p><p>  typedef str

7、uct V_Node //定義表頭結(jié)點(diǎn)結(jié)構(gòu)</p><p><b>  {</b></p><p><b>  int data;</b></p><p>  A_Node *firstarc; //指向第一條弧(邊)的指針</p><p>  } V_Node, AdjList[MAX_NUM];

8、</p><p>  typedef struct //定義鄰接表結(jié)構(gòu)</p><p><b>  {</b></p><p>  AdjList vertices; //表頭結(jié)點(diǎn)數(shù)組</p><p>  int vex_num, arc_num; //頂點(diǎn)和?。ㄟ叄┑膫€(gè)數(shù)</p><p>  }

9、 ALGraph;</p><p>  typedef struct //構(gòu)件棧</p><p><b>  {</b></p><p>  Elem_T *base;</p><p>  Elem_T *top;</p><p>  int stacksize;</p><p

10、><b>  } Sq;</b></p><p><b>  2、模塊功能</b></p><p>  1) void Init(Sq *S); </p><p>  功能:初始化棧。構(gòu)造一個(gè)空棧S</p><p>  參數(shù):*S 待初始化的棧</p><p>  2)

11、 int Stack(Sq *S)</p><p><b>  功能:判斷空棧</b></p><p>  參數(shù):S 待判斷的棧</p><p>  返回值:棧為空返回 1;棧非空返回 0</p><p>  3) Void Int(Sq *S, Elem_T e)</p><p><b&g

12、t;  功能:元素入棧</b></p><p>  參數(shù):*S 待操作的棧;插入元素e為新的棧頂元素</p><p>  4) void Out(Sq *S, Elem_T e);</p><p><b>  功能:元素出棧</b></p><p>  參數(shù):*S 待操作的棧;若棧不空,則刪除S的棧頂元素,用

13、e返回其值,并返回1;否則返回0</p><p>  5) void Creat_Graph(ALGraph *G)</p><p>  功能:建立圖。函數(shù)內(nèi)包含了由用戶輸入頂點(diǎn)數(shù)、弧數(shù)、頂點(diǎn)以及弧的操作</p><p>  參數(shù):*G 待操作的圖</p><p>  返回值:圖建立成功返回1;圖建立失敗返回0</p><

14、p>  6) void Find_InDegree(ALGraph G, int indegree[])</p><p><b>  功能:求頂點(diǎn)的入度</b></p><p>  參數(shù):G 待操作的圖,indegree[]儲(chǔ)存每個(gè)頂點(diǎn)的入度的數(shù)組</p><p>  7) void TuoPu(ALGraph G);</p>

15、<p>  功能:實(shí)現(xiàn)拓?fù)渑判?,并在圖形界面上演示排序過(guò)程</p><p>  參數(shù):G 待進(jìn)行拓?fù)渑判虻膱D</p><p>  錯(cuò)誤判斷:包含有向圖是否有環(huán)的判斷</p><p><b>  四 詳細(xì)設(shè)計(jì)</b></p><p><b>  源代碼詳情如下:</b></p&g

16、t;<p>  //*****拓?fù)渑判?********//</p><p>  //******張雪濤*********//</p><p>  //*****2013.12.27******//</p><p>  //*****函數(shù)頭文件、宏定義、變量聲明*******//</p><p>  #include<ST

17、DIO.H></p><p>  #include<STDLIB.H></p><p>  #define MAX_NUM 15 </p><p>  #define STACK_SIZE 100</p><p>  #define STACK_MENT 10</p><p>  #define

18、OK 1</p><p>  #define M 20</p><p>  #define ERROR 0</p><p>  #define NUM 15</p><p>  typedef int Elem_T;</p><p>  char number1[NUM];</p><p>  

19、char number2[NUM];</p><p>  //********結(jié)構(gòu)體定義***********//</p><p>  typedef struct A_Node //定義表結(jié)點(diǎn)結(jié)構(gòu)</p><p><b>  {</b></p><p>  int adjvex; //與vi相鄰接的頂點(diǎn)編號(hào)</p

20、><p>  struct A_Node *nextarc; //指向下一條弧(邊)的指針</p><p><b>  } A_Node;</b></p><p>  typedef struct V_Node //定義表頭結(jié)點(diǎn)結(jié)構(gòu)</p><p><b>  {</b></p><

21、p><b>  int data;</b></p><p>  A_Node *firstarc; //指向第一條弧(邊)的指針</p><p>  } V_Node, AdjList[MAX_NUM];</p><p>  typedef struct //定義鄰接表結(jié)構(gòu)</p><p><b>  {

22、</b></p><p>  AdjList vertices; //表頭結(jié)點(diǎn)數(shù)組</p><p>  int vex_num, arc_num; //頂點(diǎn)和弧(邊)的個(gè)數(shù)</p><p>  } ALGraph;</p><p>  typedef struct //構(gòu)件棧</p><p><b&g

23、t;  {</b></p><p>  Elem_T *base;</p><p>  Elem_T *top;</p><p>  int stacksize;</p><p><b>  } Sq;</b></p><p>  //********函數(shù)聲明***********//

24、</p><p>  void Init(Sq *);</p><p>  int Stack(Sq *); </p><p>  void TuoPu(ALGraph);</p><p>  int Out(Sq *, Elem_T);</p><p>  int Int(Sq *, Elem_T *);</p

25、><p>  void Creat_Graph(ALGraph *);</p><p>  void Find_InDegree(ALGraph, int *);</p><p>  //********主函數(shù)***********//</p><p>  int main(void) </p><p><b>

26、  {</b></p><p>  char num='Y';FILE *fp;</p><p>  fp=fopen("num1.txt","r"); //打開(kāi)num1文件</p><p>  if(fp!=NULL)</p><p><b>

27、;  {</b></p><p>  for(int i=1;i<=NUM;i++){</p><p>  fscanf(fp,"%d",&number1[i]);//將文件的內(nèi)容讀入number1數(shù)組中</p><p><b>  }</b></p><p>  fclos

28、e(fp); //關(guān)閉文件</p><p><b>  }</b></p><p>  fp=fopen("num2.txt","r"); //打開(kāi)文件num2</p><p>  if(fp!=NULL)</p><

29、p><b>  {</b></p><p>  for(int i=1;i<=NUM;i++){</p><p>  fscanf(fp,"%d",&number2[i]);//讀取文件的內(nèi)容到number2中</p><p><b>  }</b></p><p

30、>  fclose(fp); //關(guān)閉文件</p><p><b>  }</b></p><p><b>  while(1)</b></p><p><b>  {</b></p><p>  printf("

31、\n歡迎您繼續(xù)使用,請(qǐng)選擇 Y or N :"); //判斷是否為Y,若是則繼續(xù)運(yùn)行,若是N則退出</p><p>  scanf("%c",&num);</p><p>  if(num=='N')</p><p><b>  exit(0);</b></p><p&g

32、t;  ALGraph G;</p><p>  Creat_Graph(&G); //調(diào)用函數(shù)創(chuàng)建有向圖</p><p>  TuoPu(G); //進(jìn)行拓?fù)渑判?lt;/p><p><b>  }</b></p><p>

33、<b>  return 0;</b></p><p><b>  }</b></p><p>  void Init(Sq *S) //初始化棧</p><p><b>  {</b></p><p>  S->base

34、 = (Elem_T *) malloc(STACK_SIZE * sizeof (Elem_T));//構(gòu)建空指針</p><p>  if (!S->base) {</p><p>  printf("memory allocation failed, goodbye");//判斷是否建立成功</p><p><b>  ex

35、it(1);</b></p><p><b>  }</b></p><p>  S->top = S->base;</p><p>  S->stacksize = STACK_SIZE;</p><p><b>  }</b></p><p>

36、;  int Out(Sq *S, Elem_T *e)//出棧操作</p><p><b>  {</b></p><p>  if (S->top == S->base) {</p><p>  return ERROR;</p><p><b>  }</b></p>

37、<p>  *e = *--S->top;</p><p><b>  return 0;</b></p><p><b>  }</b></p><p>  void Int(Sq *S, Elem_T e)//進(jìn)棧操作</p><p><b>  {</b>

38、;</p><p>  if (S->top - S->base >= S->stacksize) {</p><p>  S->base = (Elem_T *) realloc(S->base, (S->stacksize + STACK_MENT) * sizeof (Elem_T));</p><p>  if (!

39、S->base) {</p><p>  printf("memory allocation failed, goodbye");</p><p><b>  exit(1);</b></p><p><b>  }</b></p><p>  S->top = S-

40、>base + S->stacksize;</p><p>  S->stacksize += STACK_MENT;</p><p><b>  }</b></p><p>  *S->top++ = e;</p><p><b>  }</b></p>&l

41、t;p>  int Stack(Sq *S)//判斷棧是否為空</p><p><b>  {</b></p><p>  if (S->top == S->base)</p><p>  return OK;</p><p><b>  else</b></p>&

42、lt;p>  return ERROR;</p><p><b>  }</b></p><p>  void Creat_Graph(ALGraph *G)//構(gòu)建圖</p><p><b>  {</b></p><p>  int m, n, i,j;</p><p&

43、gt;  A_Node *p;</p><p>  printf("\n***************************************************\n");</p><p>  printf("********* 歡迎您使用拓?fù)渑判?***********\n");</p><p&

44、gt;  printf("********* 制作者:張雪濤 ***********\n");</p><p>  printf("********* 學(xué)號(hào):10056041 ***********\n");</p><p>  printf("********************

45、*******************************\n");</p><p>  printf("請(qǐng)輸入頂點(diǎn)數(shù)和邊數(shù):10 15");</p><p>  G->vex_num=10 ;//要構(gòu)建的頂點(diǎn)個(gè)數(shù)</p><p>  G->arc_num=15;//要構(gòu)建的邊數(shù)</p><p>

46、  for (i = 1; i <= G->vex_num; i++) {</p><p>  G->vertices[i].data = i;//構(gòu)建頂點(diǎn)</p><p>  G->vertices[i].firstarc = NULL;</p><p><b>  }</b></p><p>

47、<b>  j=1;</b></p><p>  for (i = 1; i <= G->arc_num; i++) //輸入存在邊的點(diǎn)集合</p><p><b>  {</b></p><p><b>  if(j>15)</b></p><p><

48、b>  { j=1;}</b></p><p>  n=number1[j];//起點(diǎn)數(shù)組</p><p>  m=number2[j];//終點(diǎn)數(shù)組</p><p>  printf("\n 第");</p><p>  printf("%d ",i);</p>&

49、lt;p><b>  if(i>=10)</b></p><p>  printf("條邊的兩頂點(diǎn)序號(hào)分別為為:");</p><p><b>  else</b></p><p>  printf(" 條邊的兩頂點(diǎn)序號(hào)分別為為:");</p><p&

50、gt;  printf("%d ",n);//打印構(gòu)建的邊</p><p>  printf("%d",m);</p><p><b>  j++;</b></p><p>  //scanf("%d%d", &n, &m);</p><p> 

51、 while (n < 0 || n > G->vex_num || m < 0 || m > G->vex_num) {</p><p>  printf("\n 輸入的頂點(diǎn)序號(hào)不正確 請(qǐng)重新輸入!");</p><p>  printf("\n 第");</p><p>  pr

52、intf("%d ",i);</p><p><b>  if(i>=10)</b></p><p>  printf("條邊的兩頂點(diǎn)序號(hào)分別為為:");</p><p><b>  else</b></p><p>  printf(" 條邊

53、的兩頂點(diǎn)序號(hào)分別為為:");</p><p>  scanf("%d%d", &n, &m);</p><p><b>  }</b></p><p>  p = (A_Node*) malloc(sizeof (A_Node));//構(gòu)建空鏈表</p><p>  if (

54、p == NULL) {</p><p>  printf("memory allocation failed,goodbey");</p><p><b>  exit(1);</b></p><p><b>  }</b></p><p>  p->adjvex = m

55、;//表頭指向終點(diǎn)</p><p>  p->nextarc = G->vertices[n].firstarc;</p><p>  G->vertices[n].firstarc = p;</p><p><b>  }</b></p><p><b>  }</b></

56、p><p>  void Find_InDegree(ALGraph G, int indegree[])//找入度為零的節(jié)點(diǎn)</p><p><b>  {</b></p><p><b>  int i;</b></p><p>  for (i = 1; i <= G.vex_num; i+

57、+) {</p><p>  indegree[i] = 0;</p><p><b>  }</b></p><p>  for (i = 1; i <= G.vex_num; i++) {</p><p>  while (G.vertices[i].firstarc) {</p><p&g

58、t;  indegree[G.vertices[i].firstarc->adjvex]++;</p><p>  G.vertices[i].firstarc = G.vertices[i].firstarc->nextarc;</p><p><b>  }</b></p><p><b>  }</b>&

59、lt;/p><p><b>  }</b></p><p>  void TuoPu(ALGraph G) //進(jìn)行拓?fù)渑判?lt;/p><p><b>  {</b></p><p>  int indegree[M];</p><p>  int i, k, n;</p&g

60、t;<p>  int count = 0; //用來(lái)統(tǒng)計(jì)頂點(diǎn)的個(gè)數(shù)</p><p>  A_Node *p; //定義一個(gè)棧,用來(lái)保存入度為0的頂點(diǎn)</p><p><b>  Sq S;</b></p><p>  Find_InDegree(G, indegree);//查找深度</p><p>  

61、Init(&S);//初始化棧</p><p>  for (i = 1; i <= G.vex_num; i++) {</p><p>  if (!indegree[i])//如果深度為0則入棧</p><p>  Int(&S, i);</p><p><b>  }</b></p>

62、;<p>  if (count < G.vex_num) {</p><p>  printf("\n\n該有向圖有回路!!!\n");</p><p><b>  }</b></p><p><b>  else{</b></p><p>  printf

63、("\n進(jìn)行拓?fù)渑判蜉敵鲰樞驗(yàn)?\n"); //輸出結(jié)果</p><p>  while (!Stack(&S)) {</p><p>  Out(&S, &n);//出棧</p><p>  printf("%4d", G.vertices[n].data);//打印結(jié)果</p><

64、;p><b>  count++;</b></p><p>  for (p = G.vertices[n].firstarc; p != NULL; p = p->nextarc) {</p><p>  k = p->adjvex;</p><p>  if (!(--indegree[k])) //自減若深度為0則入棧&

65、lt;/p><p>  Int(&S, k);//入棧</p><p><b>  }</b></p><p><b>  }</b></p><p>  printf("\n");</p><p>  printf("排序成功\n"

66、;);</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  五 調(diào)試分析</b></p><p><b>  1、測(cè)試數(shù)據(jù)</b></p><p><b>  圖的

67、拓?fù)渑判颍?lt;/b></p><p>  2、存在過(guò)的問(wèn)題以及分析解決</p><p>  (1)本課程設(shè)計(jì)采用先把主體結(jié)構(gòu)寫好后在網(wǎng)結(jié)構(gòu)中添加具體的分布功能。采用的是主分式的形式以保證一個(gè)功能不能實(shí)現(xiàn)并不影響其他的功能。</p><p> ?。?)課程設(shè)計(jì)有較好的容錯(cuò)能力,能夠讓一般用戶也不出錯(cuò),能正確的輸入信息和統(tǒng)計(jì),保證了正確性。</p>

68、<p> ?。?)修改的時(shí)候采用一邊調(diào)試一邊修改,并不斷嘗試錯(cuò)誤輸入和驗(yàn)證。</p><p><b>  六 測(cè)試結(jié)果</b></p><p>  測(cè)試結(jié)果如下圖所示:</p><p><b>  正常使用:</b></p><p><b>  繼續(xù)選擇是否使用:</

69、b></p><p><b>  錯(cuò)誤的輸入如下:</b></p><p><b>  有回路的操作如下:</b></p><p><b>  七 用戶使用說(shuō)明</b></p><p>  運(yùn)行程序前在工程文件中輸入所構(gòu)造圖的邊頂點(diǎn)并保存,運(yùn)行后會(huì)輸出圖的頂點(diǎn)數(shù),邊數(shù),

70、頂點(diǎn)信息,圖的所有邊數(shù),構(gòu)造的連接表,每個(gè)頂點(diǎn)的入度和有向無(wú)環(huán)圖的拓?fù)渑判蚣皩?duì)有環(huán)圖進(jìn)行說(shuō)明。再按任意鍵,結(jié)束程序運(yùn)行,進(jìn)行對(duì)其他圖的拓?fù)渑判颉?lt;/p><p><b>  八 課程設(shè)計(jì)總結(jié)</b></p><p>  根據(jù)本課程設(shè)計(jì)的實(shí)驗(yàn),從中學(xué)到了編程其實(shí)也是一項(xiàng)很有考驗(yàn)性的活動(dòng),從很大程度上提高了我們對(duì)這門課程的了解和學(xué)習(xí),并學(xué)會(huì)從實(shí)踐中總結(jié)經(jīng)驗(yàn),從實(shí)驗(yàn)中找到

71、方法,通過(guò)本次課程設(shè)計(jì)加深了對(duì)所學(xué)知識(shí)的理解。大家都知道,編程是一件很需要耐心的事。因?yàn)閹缀趺恳粋€(gè)程序的編寫,都需要學(xué)習(xí)新的知識(shí)才能進(jìn)行,同時(shí)程序調(diào)試過(guò)程很枯燥,有時(shí)候一點(diǎn)小錯(cuò)意味著長(zhǎng)時(shí)間的查錯(cuò)。如語(yǔ)法錯(cuò)誤中,“;”丟失、“{”與“}”不匹配等問(wèn)題最難定位到出錯(cuò)語(yǔ)句;邏輯錯(cuò)誤中,作為循環(huán)變量的“i”與“j”相互混淆、對(duì)未分配空間的節(jié)點(diǎn)進(jìn)行操作等,都會(huì)使程序運(yùn)行出錯(cuò)而難以找到原因。算法設(shè)計(jì)、程序調(diào)試的過(guò)程中,經(jīng)常遇到看似簡(jiǎn)單但又無(wú)法解決的

72、問(wèn)題,這時(shí)候很容易灰心喪氣,此時(shí)切不可煩躁,一定要冷靜的思考,認(rèn)真的分析;而解決問(wèn)題,完成程序后,那種興奮感與成就感也令人振奮??梢哉f(shuō)編寫程序既是一件艱苦的工作,又是一件愉快的事情。</p><p>  在完成課程設(shè)計(jì)的過(guò)程中,我加深了對(duì)程序結(jié)構(gòu)的了解程度,對(duì)各種語(yǔ)句理解也更透徹,學(xué)會(huì)了靈活運(yùn)用。同時(shí)體會(huì)到了團(tuán)隊(duì)合作的樂(lè)趣,一向慣于“獨(dú)立思考”的我們學(xué)會(huì)了積極地同團(tuán)隊(duì)成員交流,取長(zhǎng)補(bǔ)短,共同進(jìn)步,只有和同學(xué)多交流

溫馨提示

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

評(píng)論

0/150

提交評(píng)論