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

下載本文檔

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

文檔簡介

1、<p><b>  C語言課程設計報告</b></p><p>  ——學生成績簡單管理程序</p><p><b>  一、程序的主要功能</b></p><p>  用單向鏈表結構實現(xiàn)簡單的學生成績管理功能,要求具有鏈表建立、鏈表輸出、結點有序插入、節(jié)電刪除、數據查詢等功能。</p><p

2、><b>  各項菜單功能:</b></p><p> ?。?)Creat List(建立有序單向鏈表)</p><p>  從鍵盤上一次輸入一個學生的姓名和成績,以姓名為序建立有序鏈表。插入一條記錄后,顯示提示信息:確認是否輸入下一條記錄,如確認,繼續(xù)輸入,否著推出輸入功能。</p><p> ?。?)Display All Recor

3、d(顯示所有結點記錄)</p><p>  按順序顯示鏈表中所有記錄,每屏顯示10條記錄。每顯示10條,按<Enter>鍵繼續(xù)顯示下一屏。</p><p> ?。?)Insert a Record(插入一條結點記錄)</p><p>  在以姓名為序排列的鏈表中插入一條記錄,插入后,鏈表仍然有序。輸出成功信息。</p><p> 

4、 (4)Delete a Record(按姓名查找,刪除一條結點記錄)</p><p>  輸入待刪除記錄的姓名,顯示提示信息,讓用戶再次確認是否要刪除。確認后,將該姓名的記錄刪除。</p><p>  ` (5) Query(查找并顯示一個結點記錄)</p><p>  輸入姓名,查找該記錄,并顯示該學生成績。</p><p>  (6)A

5、dd Records from a Text File (從正文文件添加數據到鏈表中)</p><p>  用戶可提前建立一個正文文件data.txt,存放多個帶加入的記錄。提示輸入正文的文件名,然后從該文件中一次性加入多條學生記錄。文件data.txt格式如下:</p><p>  2 /*表示帶添加的記錄數*/</p><p>  WangXiao 95

6、 /*下面每行為姓名和成績*/</p><p>  LiuLin 87</p><p> ?。?)Write to a Text File</p><p>  將鏈表中的全部記錄寫入文件records.txt,要求文件格式和data.txt相同。</p><p><b>  新增菜單功能:</b></p

7、><p> ?。?)Reverse List</p><p>  將鏈表中的所有結點逆序存放。</p><p>  (9) Delete the Same Record</p><p>  刪除相同姓名的記錄。</p><p><b>  (0)Quit</b></p><p&g

8、t;  退出系統(tǒng)并釋放鏈表存儲空間。</p><p>  二、主要問題及解決方法:</p><p>  在寫程序中遇到的問題是:開始時無法正確完成“確認后再繼續(xù)”的問題再后來寫附加程序對鏈表逆序有些疑惑。面對遇到的問題我先自己認真耐心的修改,嚴格按照老師說的各個功能分步測試方法,解決了其中的大多數問題,對遺留下來的以和同學交流探討與問老師相結合的方式來達到徹底的解決。</p>

9、<p><b>  心得體會:</b></p><p>  完成之后程序運行到一半會停止,不得不對300多行的程序進行單步調試,解決了很多問題之后,發(fā)現(xiàn)編程需要非常嚴謹的態(tài)度和足夠的耐心,否則就會因為一些問題而卡住甚至放棄。當然在整個過程中,同學幫助解決了許多自己沒有意識到得錯誤,換一個角度,才能發(fā)現(xiàn)問題吧。</p><p><b>  三、源程

10、序及注釋:</b></p><p>  #include <stdio.h> /*庫函數調用*/</p><p>  #include <stdlib.h></p><p>  #include <ctype.h></p><p>  #include <string.h><

11、/p><p>  #include <malloc.h></p><p>  struct stud /*定義一個結構體類型struct stud*/</p><p><b>  {</b></p><p>  char name[20];</p><p>  float s

12、core;</p><p>  struct stud *next;</p><p><b>  };</b></p><p>  typedef struct stud Student; /*用Student替代struct stud*/</p><p>  int menu_select(); /*全

13、體函數的外部申明*/</p><p>  Student *Create();</p><p>  void Display(Student *);</p><p>  Student *Insert(Student *,Student *);</p><p>  Student *Insert_a_Record(Student *);<

14、;/p><p>  Student *Delete(Student *,char *);</p><p>  Student *Delete_a_Record(Student *);</p><p>  Student *Query(Student *,char *);</p><p>  void Query_a_record(Student

15、*);</p><p>  Student *AddfromText(Student *,char *);</p><p>  void WritetoText(Student *,char *);</p><p>  void Quit(Student *);</p><p>  Student *Reverse(Student *);&l

16、t;/p><p>  Student *DeleteSame(Student*);</p><p>  int n; /*定義一個全局變量*/</p><p><b>  main()</b></p><p><b>  {</b></p><p>  Student *

17、head=NULL ;</p><p>  char filename[20]; /*定義一個字符數組*/</p><p><b>  while (1)</b></p><p><b>  {</b></p><p>  switch (menu_select()) /*調用menu

18、select函數輸出菜單*/</p><p><b>  {</b></p><p><b>  case 1:</b></p><p>  printf("Execution of Create List\n");</p><p>  head=Create(); /*

19、輸入1調用Creat List函數*/</p><p>  system("pause");</p><p><b>  break;</b></p><p><b>  case 2:</b></p><p>  printf("Execution of Displa

20、y All Record\n");</p><p>  Display(head); /* 輸入2調用Display All Record函數*/</p><p>  system("pause");</p><p><b>  break;</b></p><p><b>

21、  case 3:</b></p><p>  printf("Execution of Insert a Record\n");</p><p>  head=Insert_a_Record(head); /*輸入3調用Insert a Record函數*/</p><p>  system("pause");

22、</p><p><b>  break;</b></p><p><b>  case 4:</b></p><p>  printf("Execution of Delete a Record\n");</p><p>  head=Delete_a_Record(head)

23、; /*輸入4調用Delete a Record函數*/</p><p>  system("pause");</p><p><b>  break;</b></p><p><b>  case 5:</b></p><p>  printf("Execution

24、 of Query\n"); /*輸入5調用Query函數*/</p><p>  Query_a_record(head);</p><p>  system("pause");</p><p><b>  break;</b></p><p><b>  case 6:<

25、/b></p><p>  printf("Execution of Add Records from a Texl File\n");</p><p>  head=AddfromText(head,filename); /*輸入6調用Add Record from a</p><p>  system("pause"

26、;); Texl File函數*/</p><p><b>  break;</b></p><p><b>  case 7:</b></p><p>  printf("Execution of Write to a Texl File\n");</p>&

27、lt;p>  WritetoText(head,filename); /*輸入7調用TexlFile函數*/</p><p>  system("pause");</p><p><b>  break;</b></p><p><b>  case 8:</b></p><

28、p>  printf("Reverse List\n"); /*輸入8調用Reverse函數*/</p><p>  head=Reverse(head);</p><p>  system("pause");</p><p><b>  break;</b></p><p&g

29、t;<b>  case 9:</b></p><p>  printf("Delete The Same Record\n");</p><p>  head=DeleteSame(head); /*輸入9調用Delete The Same Record函數</p><p>  system("pause&q

30、uot;); */</p><p><b>  break;</b></p><p><b>  case 0:</b></p><p>  printf("Execution of Quit\n"); /*輸入0調用Quit函數*/</p><p>  Qui

31、t(head);</p><p>  system("pause");</p><p><b>  exit(0);</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b&

32、gt;  }</b></p><p>  int menu_select()</p><p><b>  {</b></p><p><b>  int c;</b></p><p><b>  do</b></p><p><b>

33、;  {</b></p><p>  system("cls"); /*顯示主菜單*/</p><p>  printf("1.Create List\n");</p><p>  printf("2.Display All Record\n");</p><p

34、>  printf("3.Insert a Record\n");</p><p>  printf("4.Delete a Record\n");</p><p>  printf("5.Query\n");</p><p>  printf("6.Add Records from a T

35、exl File\n");</p><p>  printf("7.Write to a Texl File\n");</p><p>  printf("8.Reverse list\n");</p><p>  printf("9.Delete the same record\n");<

36、/p><p>  printf("0.Quit\n");</p><p>  printf("Input 0-9:\n");</p><p>  scanf("%d",&c);</p><p><b>  }</b></p><p>

37、  while (c<0||c>9);</p><p>  return(c);</p><p><b>  }</b></p><p>  Student *Create() /*創(chuàng)建有序鏈表*/</p><p><b>  {</b></p><p> 

38、 Student *p,*head=NULL; /*定義結構體指針*/</p><p>  char b='y'; /* 定義一個字符數組*/</p><p>  printf("Create an inceaing list----\n");</p><p>  /*如果輸入的是No結束*/</p>&l

39、t;p>  while (b!='n'&&b!='N') /*如果不是No執(zhí)行循環(huán)*/</p><p><b>  {</b></p><p>  p=(Student*)malloc(sizeof(Student)); /*申請存儲空間*/</p><p>  pri

40、ntf("please input the name and the score:");</p><p>  scanf("%s%f",p->name,&p->score); /*將姓名和成績存入結點*/</p><p>  head=Insert(head,p);</p><p>  printf

41、("Please input a record(if(N or n) exit):");/*輸入下一組數據*/</p><p>  getchar();</p><p>  scanf("%c",&b);</p><p><b>  }</b></p><p>  retu

42、rn(head); /*返回鏈表頭指針*/</p><p><b>  }</b></p><p>  void Display(Student *head) /*顯示所有結點記錄*/</p><p><b>  {</b></p><p&

43、gt;  Student *p; /*定義結構體指針*/</p><p><b>  int n=0;</b></p><p>  p=head; /*令p為頭結點*/</p><p>  printf("Output list:\n&quo

44、t;);</p><p>  while (p!=NULL) /*p非空執(zhí)行*/</p><p><b>  {</b></p><p><b>  n++;</b></p><p>  printf("%s:%f\n",p->name,p

45、->score);/*輸出結點*/</p><p>  p=p->next; /*指向下一個結點*/</p><p>  if (n%10==0&&n>=10)</p><p><b>  {</b></p><p>  system("

46、;cls");</p><p>  system("pause");</p><p>  } /*每輸出10個暫停一次*/</p><p><b>  }</b></p><p><b>  }</b></p><p>  Studen

47、t *Insert(Student *head,Student *p0)/*結點有序插入*/</p><p><b>  {</b></p><p>  Student *p1,*p2; /*定義結構體指針*/</p><p>  if (head==NULL) /*如果原

48、鏈表為空鏈表*/</p><p><b>  {</b></p><p><b>  head=p0;</b></p><p>  p0->next=NULL;</p><p>  return(head); /*返回鏈表頭指針*/</p>

49、<p><b>  }</b></p><p>  p2=p1=head;</p><p>  while (strcmp(p0->name,p1->name)>0&&p1->next!=NULL)/*尋找待差位置*/</p><p><b>  {</b></p&

50、gt;<p><b>  p2=p1;</b></p><p>  p1=p1->next;/*指向后一個結點,p2指向的結點在p1指向的結點之前*/</p><p><b>  }</b></p><p>  if (strcmp(p0->name,p1->name)<=0) /*插

51、在1之前*/</p><p><b>  {</b></p><p>  p0->next=p1;</p><p>  if (head==p1) head=p0; /*插在鏈表首部*/</p><p>  else p2->next=p0; /*插在鏈表中間*/

52、</p><p><b>  }</b></p><p>  else /*插在鏈表尾結點之后*/</p><p>  {p1->next=p0;</p><p>  p0->next=NULL;</p><p><b> 

53、 }</b></p><p>  return(head); /*返回鏈表頭指針*/</p><p><b>  }</b></p><p>  Student *Insert_a_Record(Student *head) /*插入一條結點記錄*/</p><p><b>

54、  {</b></p><p>  Student *p;</p><p>  char a[20];</p><p><b>  float c;</b></p><p>  printf("Please input a record:");</p><p>  

55、scanf("%s",a); /*輸入待插結點數據*/</p><p>  scanf("%f",&c);</p><p>  p=(Student*)malloc(sizeof(Student)); /*申請存儲空間*/</p><p>  strcpy(p->name,a);<

56、/p><p>  p->score=c;</p><p>  head=Insert(head,p); /*調用Insert函數*/</p><p>  printf("Succeed insert a record!");</p><p>  return(head); /*返回鏈表

57、首地址*/</p><p><b>  }</b></p><p>  Student *Delete(Student *head,char *name) /*刪除結點*/</p><p><b>  {</b></p><p>  Student*p1,*p2;</p><p&

58、gt;  if (head==NULL) /*如果鏈表為空鏈表*/</p><p><b>  {</b></p><p>  printf("The list is NULL.\n");</p><p>  return(NULL);</p><p><b>  }<

59、/b></p><p><b>  p1=head;</b></p><p>  while (strcmp(p1->name,name)!=0&&p1->next!=NULL) /*循環(huán)查找待刪結點*/</p><p><b>  {</b></p><p>&l

60、t;b>  p2=p1;</b></p><p>  p1=p1->next; /*p1向后挪動一個結點,p2指向的結點在p1指向的結點之前*/</p><p><b>  }</b></p><p>  if (strcmp(p1->name,name)==0) /*找到待刪結點,由p1指向*/</p&g

61、t;<p><b>  {</b></p><p>  if (p1==head) /*找到的結點是首結點*/</p><p>  head=p1->next;</p><p><b>  else</b></p><p>  p2->next=

62、p1->next; /*找到的結點不是首結點*/</p><p>  printf("The first node %s is deleted.\n",p1->name);</p><p><b>  free(p1);</b></p><p><b>  }</b></p>

63、<p>  else /*未找到待刪結點*/</p><p>  printf("Node %s is not finded.\n",name);</p><p>  return(head); /*返回鏈表頭指針*/</p><p><b>  }</b></

64、p><p>  Student *Delete_a_Record(Student *head) /*刪除一個結點*/</p><p><b>  {</b></p><p>  char a,b[20];</p><p>  printf("Please input the name:");</p

65、><p>  scanf("%s",b); /*輸入待刪結點姓名*/</p><p>  printf("Are you sure ?(Y/N): "); /*確認是否刪除,Y表示確定 */</p><p>  getchar(); /*讀取空格*/</p><p>

66、;  a=getchar();</p><p>  if (a=='Y')</p><p><b>  {</b></p><p>  head=Delete(head,b); /*調用Delete函數*/</p><p>  return(head);</p><p>

67、<b>  }</b></p><p><b>  else</b></p><p><b>  exit(1);</b></p><p><b>  }</b></p><p>  Student *Query(Student *head,char *n

68、ame)/*結點數據查詢*/</p><p><b>  {</b></p><p>  Student *p;</p><p><b>  p=head ;</b></p><p>  printf("please input the name");</p>&l

69、t;p>  while (p!=NULL)</p><p><b>  {</b></p><p>  if (strcmp(p->name,name)==0)</p><p>  return(p);</p><p>  /*若找到著返回該結點指針*/</p><p><b&g

70、t;  }</b></p><p>  return NULL; /*若找不到著返回空指針*/</p><p><b>  }</b></p><p>  void Query_a_record(Student *head)/*查找并顯示一個記錄*/</p><p><

71、b>  {</b></p><p>  char name[20];</p><p>  scanf("%s",name); /*輸入待查找的姓名*/</p><p>  head=Query(head,name); /*函數調用*/</p><p>  if (he

72、ad!=NULL)</p><p><b>  {</b></p><p>  printf("Success!\n");</p><p>  printf("%s:%f\n",name,head->score);/*輸出結點記錄*/</p><p><b>  }

73、</b></p><p><b>  else</b></p><p>  printf("There is no %s!\n",name); /*查找不到*/</p><p><b>  }</b></p><p>  Student *AddfromText(S

74、tudent *head,char *filename)/*從文件中輸入數據*/</p><p><b>  {</b></p><p>  FILE *fp1;</p><p>  Student *p;</p><p><b>  int i ,n;</b></p><p&g

75、t;  printf("please enter an filename: ");</p><p>  scanf("%s",filename); /*輸入文件名*/</p><p>  if ((fp1=fopen(filename,"r"))==NULL) /*打開輸入數據文件*/</p>&

76、lt;p><b>  {</b></p><p>  printf("Can't open the file!");</p><p><b>  exit(1);</b></p><p><b>  }</b></p><p>  fscanf

77、(fp1,"%d",&n); /*從文件讀入數據個數*/</p><p>  for (i=0;i<n;i++) /*循環(huán)讀入數據*/</p><p><b>  {</b></p><p>  p=(Student*)malloc(sizeof(Student));</p&g

78、t;<p>  fscanf(fp1,"%s%f",p->name,&p->score);</p><p>  head=Insert(head,p);</p><p><b>  }</b></p><p>  fclose(fp1); /*關閉文件*/</p&

79、gt;<p>  return(head); /*返回鏈表頭指針*/</p><p><b>  }</b></p><p>  void WritetoText(Student *head,char *filename) /*將結點寫入文件*/</p><p><b>  {</b>&l

80、t;/p><p>  FILE *fp2;</p><p>  Student *p,*p1;</p><p>  int num=0;</p><p><b>  p1=head;</b></p><p>  while(p1!=NULL)</p><p>  {p1=p1-

81、>next;num++;}</p><p>  /*printf("Please enter an output file name:");</p><p>  scanf("%s",filename); */ /*輸入寫數據文件名*/</p><p>  if ((fp2=fopen("re

82、cords.txt","w"))==NULL) /*打開輸出文件*/</p><p><b>  {</b></p><p>  printf("Can't open the file!\n") ; /*無法打開*/</p><p><b>  exit(1);<

83、;/b></p><p><b>  }</b></p><p><b>  p=head;</b></p><p>  fprintf(fp2,"%d\n",num);</p><p>  while (p!=NULL)</p><p><b

84、>  {</b></p><p>  fprintf(fp2,"%s:%d\n",p->name,(int)p->score); /*將數據寫入文件*/</p><p>  p=p->next;</p><p><b>  }</b></p><p>  fclos

85、e(fp2); /*關閉文件*/</p><p><b>  }</b></p><p>  void Quit(Student *head) /*釋放存儲空間*/</p><p><b>  {</b></p><p>  Student*p;</p

86、><p>  while (head!=NULL) /*循環(huán)釋放個結點空間*/</p><p><b>  {</b></p><p><b>  p=head;</b></p><p>  head=head->next;</p><p><b>

87、  free(p);</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  Student *Reverse(Student *head) /*將鏈表逆序*/</p><p><b>  {</b></p

88、><p>  Student *p,*p1;</p><p>  if (head==NULL) /*鏈表為空*/</p><p><b>  {</b></p><p>  printf("It's a NULL\n");</p><p><b

89、>  exit(1);</b></p><p><b>  }</b></p><p>  for (p1=head;p1->next!=NULL;) /*循環(huán)逆序*/</p><p><b>  {</b></p><p>  p=p1->next;</p&

90、gt;<p>  p1->next=p->next;</p><p>  p->next=head;</p><p><b>  head=p;</b></p><p><b>  }</b></p><p>  printf("The node has b

91、een reversed\n");</p><p>  return(head);</p><p><b>  }</b></p><p>  Student *DeleteSame(Student *head) /*刪除相同姓名的結點*/</p><p><b>  {</b><

92、/p><p>  Student *p,*p1,*p2;</p><p>  for (p=head;p!=NULL;p=p->next) /*循環(huán)查找并刪除相同的記錄*/</p><p><b>  {</b></p><p>  for (p2=p,p1=p->next;p1!=NULL;)</p&

93、gt;<p><b>  {</b></p><p>  if (strcmp(p1->name,p->name)==0)</p><p>  p2->next=p1->next; /*刪除相同姓名結點*/</p><p>  p1=p1->next;</p><p&

94、gt;  p2=p2->next;</p><p><b>  }</b></p><p><b>  }</b></p><p>  printf("The node of same name has been deleted\n");/*相同結點被刪除*/</p><p&g

95、t;  return(head); /*返回鏈表頭指針*/</p><p><b>  }</b></p><p><b>  四、函數調用關系圖</b></p><p>  鏈表的逆序存放算法描述:</p><p>  先將1和2結點交換head指向2,再將3放在2

96、前head指向3,將4放在3前head指向4, -----多次循環(huán),最終實現(xiàn)逆序存放,返回新鏈表的頭節(jié)點;</p><p>  刪除同名記錄算法描述:</p><p>  從頭節(jié)點開始掃描直到鏈表尾結點,若有相同結點刪除,再從下一結點開始循環(huán),直到鏈表的尾結點,最終將所有的同名記錄刪除,只保留一個。</p><p>  五、測試流程及典型數據</p>

97、<p>  1、通過按F9對各個函數編譯,修改錯誤 ; 按Ctrl+F9運行程序,對各個函數分步調試。</p><p>  2、輸入1,按回車鍵,根據提示輸入下列記錄:</p><p><b>  a 23</b></p><p><b>  b 24</b></p><p><b&

98、gt;  c 25</b></p><p><b>  d 26 </b></p><p>  按No結束輸入,按任意鍵退出</p><p>  3、輸入2,按回車,屏幕上顯示下列記錄</p><p>  a=23.000000</p><p>  b=24.000000</

99、p><p>  c=25.000000</p><p>  d=26.000000</p><p>  a=27.000000</p><p><b>  按任意鍵退出輸入</b></p><p>  4、輸入3,按<回車>輸入</p><p><b> 

100、 e 99<回車></b></p><p>  輸出:Succeed insert a record!</p><p><b>  按任意鍵退出輸入</b></p><p><b>  5、輸入4,按回車</b></p><p><b>  輸入c<回車>

101、;</b></p><p>  輸出:Are you sure ?(Y/N):</p><p><b>  輸入:Y<回車></b></p><p>  輸出:The first node baby is deleted.</p><p><b>  按任意鍵退出輸入</b>

102、</p><p><b>  6、輸入5,按回車</b></p><p><b>  輸入b<回車></b></p><p>  屏幕上顯示:Success!</p><p>  b=24.000000 </p><p>  7、先在D盤中建立一個記事本文件命名為

103、data.txt</p><p><b>  文件內存放如下信息</b></p><p><b>  2</b></p><p><b>  m 31</b></p><p><b>  n 32</b></p><p><b

104、>  輸入6,按回車</b></p><p>  輸入data..txt<回車></p><p>  (將以上兩個同學的信息按順序插入鏈表中)</p><p>  8、先在D盤中建立一個記事本文件命名為records.txt</p><p><b>  文件內無信息</b></p>

105、;<p><b>  輸入7,按回車</b></p><p>  輸入recordstxt<回車></p><p><b>  按任意鍵退出輸入</b></p><p>  將鏈表中的信息輸入到records.txt中, </p><p>  9、輸入8,按<回車&g

106、t;</p><p>  輸出:The node has been reversed</p><p><b>  按任意鍵退出輸入</b></p><p>  10、輸入9,按<回車></p><p>  輸出:The node of same name has been deleted</p>

溫馨提示

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

評論

0/150

提交評論