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

下載本文檔

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

文檔簡介

1、<p><b>  一、課程設(shè)計概述:</b></p><p>  本次數(shù)據(jù)結(jié)構(gòu)課程設(shè)計共完成二個題:a.教學(xué)計劃編制問題b.內(nèi)部排序算法的性能分析</p><p><b>  使用語言:C</b></p><p>  編譯環(huán)境:TC3.0 / VC6.0</p><p><b>

2、;  二、課程設(shè)計題目一</b></p><p><b>  [實驗內(nèi)容]</b></p><p><b>  教學(xué)計劃編制問題</b></p><p><b>  [問題描述]</b></p><p>  答學(xué)的每個專業(yè)都要制定教學(xué)計劃。假設(shè)任何專業(yè)都有固定的學(xué)習(xí)

3、年限,每學(xué)年含兩學(xué)期,每學(xué)期的時間長度和學(xué)分上限值均相等。每個專業(yè)開設(shè)的課程都是確定的,而且課程在開設(shè)時間的安排必須滿足先修關(guān)系。每門課程有哪些先修課程是確定的,可以有任意多門,也可以沒有。每門課恰好占一個學(xué)期。試在這樣的前提下設(shè)計一個教學(xué)計劃編制程序</p><p><b>  [需求分析] </b></p><p>  輸入?yún)?shù)包括:學(xué)期總數(shù),一學(xué)期的學(xué)分上限,每

4、門課的課程號(固定占3位的字母數(shù)字串)、學(xué)分和直接先修課的課程號。</p><p>  允許用戶指定下列兩種編排策略之一:一是使學(xué)生在各學(xué)期中的學(xué)習(xí)負擔盡量均勻;二是使課程盡可能地集中在前幾個學(xué)期中。</p><p>  若根據(jù)給定的條件問題無解,則報告適當?shù)男畔?;否則將教學(xué)計劃輸出到用戶指定的文件中。計劃的表格格式自行設(shè)計。</p><p><b>  

5、[概要設(shè)計]</b></p><p>  md init() /*初始化教學(xué)計劃*/</p><p>  void select (int quee[],int i,int j,md a) /*使課程集中在前面*/</p><p>  void arrage(md a) /*教學(xué)計劃函數(shù)*/</p><p><b

6、>  [流程圖]</b></p><p><b>  [詳細設(shè)計]</b></p><p>  #include<stdio.h></p><p>  #include <stdlib.h></p><p>  #define NULL 0</p><p>

7、;  #define maxsize 100</p><p>  typedef struct stu</p><p><b>  {</b></p><p>  int number;</p><p>  int score;</p><p>  struct stu *next;</p

8、><p><b>  }node;</b></p><p>  typedef struct</p><p><b>  {</b></p><p>  int vex_num;</p><p>  int vex_sco;</p><p><b&g

9、t;  int have;</b></p><p>  node *first;</p><p><b>  }sd;</b></p><p>  typedef struct</p><p><b>  {</b></p><p>  sd arry[maxsi

10、ze];</p><p>  int max_class;</p><p>  int max_term;</p><p>  int score_limit;</p><p><b>  }md;</b></p><p><b>  md init()</b></p&

11、gt;<p><b>  {</b></p><p>  int i,x,c;</p><p><b>  md a;</b></p><p><b>  node *p;</b></p><p>  printf("enter class total:

12、");</p><p>  scanf("%d",&a.max_class);</p><p>  printf("enter term total:");</p><p>  scanf("%d",&a.max_term);</p><p>  print

13、f("enter score limit:");</p><p>  scanf("%d",&a.score_limit);</p><p>  printf("enter class arrange \n");</p><p>  for (i=1;i<=a.max_class;i++)&l

14、t;/p><p>  a.arry[i].first=NULL;</p><p>  for(i=1;i<=a.max_class;i++)</p><p><b>  {</b></p><p>  printf("enter %i class number and score:",i);<

15、/p><p>  scanf("%d %d",&a.arry[i].vex_num,&a.arry[i].vex_sco);</p><p>  printf("enter %i prior class:",i);</p><p><b>  c=0;</b></p><p

16、><b>  do</b></p><p><b>  {</b></p><p>  scanf("%d",&x);</p><p><b>  if (x>0)</b></p><p><b>  {</b>&l

17、t;/p><p>  p=(node *)malloc(sizeof(node));</p><p>  p->number=a.arry[i].vex_num;</p><p>  p->next=a.arry[x].first;</p><p>  a.arry[x].first=p;</p><p>&l

18、t;b>  c++;</b></p><p><b>  }</b></p><p>  }while(x>0);</p><p>  a.arry[i].have=c;</p><p><b>  }</b></p><p><b>  r

19、eturn a;</b></p><p><b>  }</b></p><p>  /*void disp(md a)</p><p><b>  {</b></p><p><b>  node *p;</b></p><p><b

20、>  int i;</b></p><p>  for (i=1;i<=a.max_class;i++)</p><p><b>  {</b></p><p>  printf("%d",a.arry[i].vex_num);</p><p>  p=a.arry[i].fi

21、rst;</p><p>  while(p!=NULL)</p><p><b>  {</b></p><p>  printf("%d",a.arry[p->number].vex_num);</p><p>  p=p->next;</p><p><

22、b>  }</b></p><p>  printf("\n");</p><p><b>  }</b></p><p><b>  } */</b></p><p>  void select (int quee[],int i,int j,md a)<

23、;/p><p><b>  {</b></p><p>  int k,temp,min;</p><p><b>  min=i;</b></p><p>  for(k=i+1;k<=j;k++)</p><p>  if (a.arry[quee[k]].vex_sc

24、o<a.arry[quee[min]].vex_sco)</p><p><b>  min=k;</b></p><p>  if(min!=i)</p><p><b>  {</b></p><p>  temp=quee[i];</p><p>  quee[i

25、]=quee[min];</p><p>  quee[min]=temp;</p><p><b>  }</b></p><p><b>  }</b></p><p>  void arrage(md a)</p><p><b>  {</b>&

26、lt;/p><p>  int quee[maxsize],front,bare,i,j,total_score;</p><p><b>  node *p;</b></p><p>  front=bare=0;</p><p><b>  j=1;</b></p><p>

27、  for(i=1;i<=a.max_class;i++)</p><p>  if (a.arry[i].vex_num!=0&&a.arry[i].have==0)</p><p>  quee[++bare]=a.arry[i].vex_num;</p><p>  printf("\n %d term study:"

28、,j++);</p><p>  total_score=0;</p><p>  while(front!=bare)</p><p><b>  {</b></p><p>  select(quee,front+1,bare,a);</p><p>  if (total_score+a.a

29、rry[quee[front+1]].vex_sco<=a.score_limit)</p><p><b>  {</b></p><p>  printf("%d",a.arry[quee[front]].vex_num);</p><p>  a.arry[quee[front]].vex_num=0;</

30、p><p>  total_score+=a.arry[quee[front]].vex_sco;</p><p>  p=a.arry[quee[front]].first;</p><p>  while(p!=NULL)</p><p><b>  {</b></p><p>  a.arry[

31、p->number].have--;</p><p>  if (a.arry[p->number].have==0)</p><p>  quee[++bare]=a.arry[p->number].vex_num;</p><p>  p=p->next;</p><p><b>  }</b>

32、;</p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  total_score=0;</p><p>  printf(" \n%d term stu

33、dy:",j++);</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  main()</b></p><p><b&g

34、t;  {</b></p><p><b>  md h;</b></p><p><b>  h=init();</b></p><p>  arrage(h);</p><p><b>  }</b></p><p><b> 

35、 [調(diào)試分析]</b></p><p><b>  問題:</b></p><p>  現(xiàn)象:最后結(jié)果存在問題,無法提供內(nèi)存</p><p>  原因:函數(shù)的參數(shù)沒有寫正確</p><p> ?。?[運行結(jié)果及分析]</p><p><b>  課程設(shè)計題目二</b&g

36、t;</p><p><b>  [實驗內(nèi)容]</b></p><p>  內(nèi)部排序算法的性能分析</p><p><b>  [問題描述]</b></p><p>  。設(shè)計一個測試程序比較幾種內(nèi)部排序算法的關(guān)鍵字比較次數(shù)和移動次數(shù)以取得直觀感受</p><p><b

37、>  [需求分析] </b></p><p>  (1)對起泡排序、直接排序、簡單選擇排序、快速排序、希爾排序、堆排序算法進行比較;</p><p>  (2)待排序表的表長不小于100,表中數(shù)據(jù)隨機產(chǎn)生,至少用5組不同數(shù)據(jù)作比較,比較指標有:關(guān)鍵字參加比較次數(shù)和關(guān)鍵字的移動次數(shù)(關(guān)鍵字交換記為3次移動);</p><p>  (3)輸出比較結(jié)

38、果。</p><p><b>  [概要設(shè)計]</b></p><p><b>  main()</b></p><p><b>  SqList L;</b></p><p>  addlist(L);</p><p><b>  qipao

39、(L);</b></p><p>  InsertSort(L);</p><p>  SelectSort(L);</p><p>  QuickSort(L);</p><p>  addlist(L); </p><p>  MergeSort(L);</p><p><

40、b>  [流程圖]</b></p><p><b>  [詳細設(shè)計]</b></p><p>  #include<stdio.h> </p><p>  #include<stdlib.h></p><p>  #include<string.h></p>

41、;<p>  #include<time.h></p><p>  #define LIST_INIT_SIZE 50000</p><p>  int bj1,yd1,n;</p><p>  clock_t start_t,end_t;</p><p>  typedef struct </p>&

42、lt;p><b>  {</b></p><p><b>  int key; </b></p><p>  }ElemType;</p><p>  typedef struct </p><p><b>  {</b></p><p>  El

43、emType *elem;</p><p>  int length;</p><p><b>  }SqList;</b></p><p>  void addlist(SqList &L)</p><p><b>  {</b></p><p><b>

44、  int i;</b></p><p>  a: printf("請輸入你要輸入的個數(shù):");</p><p>  scanf("%d",&n);</p><p>  if(n>50000)</p><p><b>  {</b></p>

45、<p>  printf("超出范圍重新輸入!!!\n");</p><p><b>  goto a;</b></p><p><b>  }</b></p><p>  L.elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType));&l

46、t;/p><p>  if(!L.elem)exit(0);</p><p>  L.length=0;</p><p>  for(i=1;i<n+1;i++)</p><p><b>  {</b></p><p>  b: L.elem[i].key=rand();</p>

47、<p>  if(L.elem[i].key>30000)goto b;</p><p>  ++L.length;</p><p><b>  }</b></p><p><b>  }</b></p><p>  void SelectSort(SqList &L)//

48、選擇</p><p><b>  {</b></p><p>  start_t=clock();</p><p>  int i,j,k,bj=0,yd=0;</p><p>  for(i=1;i<L.length;i++)</p><p><b>  {</b>&

49、lt;/p><p><b>  k=i;</b></p><p>  for(j=i+1;j<L.length;j++)</p><p><b>  {</b></p><p><b>  bj++;</b></p><p>  if(L.elem[j

50、].key<L.elem[k].key)k=j;</p><p><b>  }</b></p><p><b>  if(i!=k)</b></p><p><b>  {</b></p><p>  L.elem[0].key=L.elem[i].key;</p

51、><p>  L.elem[i].key=L.elem[k].key;</p><p>  L.elem[k].key=L.elem[0].key;</p><p><b>  yd+=3;</b></p><p><b>  }</b></p><p><b>  }

52、</b></p><p>  end_t=clock();</p><p>  printf("比較次數(shù)為 %d移動次數(shù)為 %d\n",bj,yd);</p><p>  printf("排序用時為 %f\n",float(end_t-start_t)/CLK_TCK);<

53、/p><p><b>  }</b></p><p>  void qipao(SqList &L)//起泡</p><p><b>  {</b></p><p>  start_t=clock();</p><p>  int i=1,j,bj=0,yd=0;<

54、/p><p>  while(i<L.length)</p><p><b>  {</b></p><p>  for(j=1;j<L.length;j++)</p><p><b>  {</b></p><p><b>  bj++;</b>

55、;</p><p>  if(L.elem[j].key>L.elem[j+1].key)</p><p><b>  {</b></p><p>  L.elem[0].key=L.elem[j].key;</p><p>  L.elem[j].key=L.elem[j+1].key;</p>&

56、lt;p>  L.elem[j+1].key=L.elem[0].key;</p><p><b>  yd+=3;</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  i++;</b>

57、</p><p><b>  }</b></p><p>  end_t=clock();</p><p>  printf("比較次數(shù)為 %d移動次數(shù)為 %d\n",bj,yd);</p><p>  printf("排序用時為 %f\n",f

58、loat(end_t-start_t)/CLK_TCK);</p><p><b>  }</b></p><p>  void InsertSort(SqList &L)//直接插入</p><p><b>  {</b></p><p>  start_t=clock();</p&

59、gt;<p>  int i,j,yd=0,bj=0;</p><p>  for(i=2;i<=L.length;i++)</p><p><b>  {</b></p><p>  if(L.elem[i].key<L.elem[i-1].key)</p><p><b>  {&

60、lt;/b></p><p>  L.elem[0].key=L.elem[i].key;</p><p><b>  yd++;</b></p><p><b>  j=i-1;</b></p><p><b>  bj++;</b></p><p&

61、gt;  while(L.elem[0].key<L.elem[j].key)</p><p><b>  {</b></p><p>  L.elem[j+1].key=L.elem[j].key;</p><p><b>  j--;</b></p><p><b>  yd++

62、;</b></p><p><b>  bj++;</b></p><p><b>  }</b></p><p>  L.elem[j+1].key=L.elem[0].key;</p><p><b>  yd++;</b></p><p&g

63、t;<b>  }</b></p><p><b>  }</b></p><p>  end_t=clock();</p><p>  printf("比較次數(shù)為 %d移動次數(shù)為 %d\n",bj,yd);</p><p>  printf("

64、排序用時為 %f\n",float(end_t-start_t)/CLK_TCK);</p><p><b>  }</b></p><p>  void xier(SqList &L)//希爾</p><p><b>  {</b></p><p>  start_t

65、=clock();</p><p>  int i,d=L.length/2,j,w=0,k,yd=0,bj=0;</p><p>  while(w<d)</p><p><b>  {</b></p><p><b>  w=1;</b></p><p>  for

66、(i=w;i<L.length;i=i+d)</p><p><b>  {</b></p><p><b>  k=i;</b></p><p>  for(j=i+d;j<L.length;j=j+d)</p><p><b>  {</b></p>

67、<p>  if(L.elem[i].key>L.elem[j].key)</p><p><b>  {</b></p><p><b>  k=j;</b></p><p><b>  bj++;</b></p><p><b>  }<

68、/b></p><p><b>  }</b></p><p><b>  if(i!=k)</b></p><p><b>  {</b></p><p>  L.elem[0].key=L.elem[i].key;</p><p>  L.el

69、em[i].key=L.elem[k].key;</p><p>  L.elem[k].key=L.elem[0].key;</p><p><b>  yd+=3;</b></p><p><b>  }</b></p><p><b>  w++;</b></p&g

70、t;<p><b>  }</b></p><p><b>  d=d/2;</b></p><p><b>  w=1;</b></p><p><b>  }</b></p><p>  end_t=clock();</p>

71、<p>  printf("比較次數(shù)為 %d移動次數(shù)為 %d\n",bj,yd);</p><p>  printf("排序用時為 %f\n",float(end_t-start_t)/CLK_TCK);</p><p><b>  }</b></p><p&g

72、t;  void BeforeSort()</p><p><b>  {</b></p><p>  yd1=0,bj1=0;</p><p><b>  }</b></p><p>  void display(int m,int n)</p><p><b>

73、  {</b></p><p>  printf("比較次數(shù)為 %d移動次數(shù)為 %d\n",m,n);</p><p><b>  }</b></p><p>  int Partition(SqList &L,int low,int high)//快速排序 </p>

74、<p><b>  {</b></p><p>  int pivotkey;</p><p>  L.elem[0]=L.elem[low];</p><p><b>  yd1++;</b></p><p>  pivotkey=L.elem[low].key;</p>

75、<p>  while (low<high) </p><p><b>  {</b></p><p><b>  yd1++;</b></p><p>  while(low<high&&L.elem[high].key>=pivotkey)</p><p

76、><b>  --high;</b></p><p>  L.elem[low]=L.elem[high];</p><p><b>  bj1++;</b></p><p><b>  yd1++;</b></p><p>  while (low<high&am

77、p;&L.elem[low].key<=pivotkey)</p><p><b>  ++low;</b></p><p>  L.elem[high]=L.elem[low];</p><p><b>  bj1++;</b></p><p><b>  yd1++;&l

78、t;/b></p><p><b>  }</b></p><p>  L.elem[low]=L.elem[0];</p><p><b>  yd1++;</b></p><p>  return low;</p><p><b>  }</b>

79、;</p><p>  void QSort(SqList &L,int low,int high)</p><p><b>  { </b></p><p>  int pivotloc;</p><p>  if(low<high)</p><p><b>  {&l

80、t;/b></p><p>  pivotloc=Partition(L,low,high);</p><p>  QSort(L,low,pivotloc-1);</p><p>  QSort(L,pivotloc+1,high);</p><p><b>  }</b></p><p>

81、;<b>  }</b></p><p>  void QuickSort(SqList &L)</p><p><b>  {</b></p><p>  start_t=clock();</p><p>  BeforeSort();</p><p>  QSor

82、t(L,1,L.length);</p><p>  display(yd1,bj1);</p><p>  end_t=clock();</p><p>  printf("排序用時為 %f\n",float(end_t-start_t)/CLK_TCK);</p><p><b>  }</

83、b></p><p>  void Merge(ElemType R[],ElemType R1[],int low,int m,int high)//歸并</p><p><b>  {</b></p><p>  int i=low, j=m+1, k=low;</p><p>  while(i<=m&

84、amp;&j<=high)</p><p><b>  {</b></p><p>  if(R[i].key<=R[j].key)</p><p><b>  {</b></p><p><b>  bj1++;</b></p><p&

85、gt;  R1[k]=R[i];</p><p><b>  yd1++;</b></p><p><b>  i++;</b></p><p><b>  k++;</b></p><p><b>  }</b></p><p>

86、<b>  else</b></p><p><b>  {</b></p><p><b>  bj1++;</b></p><p>  R1[k]=R[j];</p><p><b>  yd1++;</b></p><p>&

87、lt;b>  j++;</b></p><p><b>  k++;</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  while(i<=m)</p><p><b&

88、gt;  {</b></p><p>  R1[k]=R[i];</p><p><b>  yd1++;</b></p><p><b>  i++;</b></p><p><b>  k++;</b></p><p><b>

89、  }</b></p><p>  while(j<=high)</p><p><b>  {</b></p><p>  R1[k]=R[j];</p><p><b>  yd1++;</b></p><p><b>  j++;</b

90、></p><p><b>  k++;</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  void MergePass(ElemType R[],ElemType R1[],int length, int n)&

91、lt;/p><p><b>  { </b></p><p>  int i=0,j;</p><p>  while(i+2*length-1<n)</p><p><b>  { </b></p><p>  Merge(R,R1,i,i+length-1,i+2*

92、length-1);</p><p>  i=i+2*length;</p><p><b>  }</b></p><p>  if(i+length-1<n-1)</p><p>  Merge(R,R1,i,i+length-1,n-1);</p><p><b>  els

93、e</b></p><p>  for(j=i;j<n;j++)</p><p>  R1[j]=R[j];</p><p><b>  }</b></p><p>  void MSort(ElemType R[],ElemType R1[],int n)</p><p>&l

94、t;b>  { </b></p><p>  int length=1;</p><p>  while (length<n)</p><p><b>  {</b></p><p>  MergePass(R,R1,length,n);</p><p>  length=

95、2*length;</p><p>  MergePass(R1,R,length,n);</p><p>  length=2*length;</p><p><b>  }</b></p><p><b>  }</b></p><p>  void MergeSort(

96、SqList &L)</p><p><b>  {</b></p><p>  start_t=clock();</p><p>  BeforeSort();</p><p>  MSort(L.elem,L.elem,L.length);</p><p>  display(yd1,

97、bj1);</p><p>  end_t=clock();</p><p>  printf("排序用時為 %f\n",float(end_t-start_t)/CLK_TCK);</p><p><b>  }</b></p><p>  void main()</p>

98、<p><b>  {</b></p><p><b>  SqList L;</b></p><p>  addlist(L);</p><p>  printf("起泡排序: \n");</p><p><b>  qipao(L);</

99、b></p><p>  addlist(L);</p><p>  printf("直插排序: \n");</p><p>  InsertSort(L);</p><p>  addlist(L);</p><p>  printf("選擇排序: \n&q

100、uot;);</p><p>  SelectSort(L);</p><p>  addlist(L);</p><p>  printf("希爾排序: \n");</p><p><b>  xier(L);</b></p><p>  addlist(L);&

101、lt;/p><p>  printf("快速排續(xù): \n");</p><p>  QuickSort(L);</p><p>  addlist(L); </p><p>  printf("歸并排序: \n");</p><p>  MergeSort(L

102、);</p><p><b>  }</b></p><p><b>  [運行結(jié)果及分析]</b></p><p><b>  四、課程設(shè)計心得 </b></p><p>  一周的課程設(shè)計結(jié)束了,從課程設(shè)計的學(xué)習(xí)過程結(jié)束了,一開始,我并不知道要學(xué)這門課,我一直打算復(fù)習(xí)好考試

103、的科目的,所以說是實話,我剛開始的時候,真的是很懊惱,很糾結(jié)??墒亲屑毾胂氩还芪以敢饣蛘卟辉敢?,我都必須學(xué)習(xí),這是我的責(zé)任,我不可推卸。我唯一可以做的就是好好學(xué)習(xí),更好的安排好我的學(xué)習(xí)時間,更加有計劃的利用好我的時間。有句話說的好,時間是擠出來的。而且漸漸地我明白了一個道理,環(huán)境一直在改變,沒有人知道未來的自己會遭遇什么樣的事情,惟有發(fā)展好自己才是最根本的,最有效的辦法。還有就是,課程設(shè)計這門課,讓我體會到會編寫有用的程序是多么的充實,

溫馨提示

  • 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論