當前位置:編程學習大全網 - 編程語言 - C語言 用指針編程,輸入N個學生的成績,對成績進行排序,並統計及格和不及格率

C語言 用指針編程,輸入N個學生的成績,對成績進行排序,並統計及格和不及格率

#include <stdio.h>

#include <stdlib.h>

#include <malloc.h>

#define N 10

struct Student

{

float score;

struct Student *next;

};

//創建單向鍵表,返回鏈表表頭head

struct Student *CreatLink(struct Student *head ,int n)

{

int i;

struct Student *p1,*p2;

head=p1=(struct Student *)malloc(sizeof(struct Student));

if(p1 == NULL)

{

printf("Not enough memory to allocate buffer\n");

system("PAUSE");

exit(1); /* terminate program if out of memory */

}

scanf("%f",&(p1->score));

p1->next=NULL;

for(i=2;i<=n;i++)

{

p2=p1;

p1=(struct Student *)malloc(sizeof(struct Student));

if(p1 == NULL)

{

printf("Not enough memory to allocate buffer\n");

system("PAUSE");

exit(1); /* terminate program if out of memory */

}

scanf("%f",&(p1->score));

p1->next=NULL;//最近產生的節點下壹節點指向空

p2->next=p1;

}

return head;

}

//顯示循環鏈表的成員

void DisplayLink(struct Student *head)

{

struct Student *p;

p=head;

do

{

printf("%.1f ", p->score);

p=p->next;

}while(p!=NULL); //p再次與head相等時,即所有成員都遍歷完成

printf("\n\n");

}

//選擇排序法排序鏈表

struct Student *SortLink(struct Student *head)

{

struct Student *head2=NULL,*p1,*p2,*p1lst,*p2lst,*q;

float MaxScore;

while(head!=NULL)

{

p2=p1=head;

MaxScore=head->score;

while(p1!=NULL)

{

if(p1->score > MaxScore)

{

MaxScore=p1->score;

p2lst=p1lst;

p2=p1;

}

p1lst=p1;

p1=p1->next;

}

if(p2==head)

{

head=head->next;

}

else

{

p2lst->next=p2->next;

}

if(head2==NULL)

{

head2=q=p2;

}

else

{

q->next=p2;

q=q->next;

}

}

q->next=NULL;

return head2;

}

//計算通過比率

float CalculatePassRatio(struct Student *head)

{

int i=0;

struct Student *p;

p=head;

while(p!=NULL)

{

if(p->score > 60) i++;

p=p->next;

}

return((float)i/N);

}

int main(int argc, char *argv[])

{

int n;

struct Student *head;

printf("Please input %d sorces:\n",N);

head=CreatLink(head,N);

printf("The sorces you input:\n");

DisplayLink(head);

head=SortLink(head);

printf("After Sort The sorces are follows:\n");

DisplayLink(head);

printf("The pass ratio is %.2f\%%\n\n",CalculatePassRatio(head)*100);

free(head);

system("PAUSE");

return 0;

}

雖然看起來長了點,但是妳可以學習用鏈表是怎麽做。我自己編的,也不是什麽標準答案。

  • 上一篇:新加坡商學院學費多少?新加坡的商科專業推薦有哪些?
  • 下一篇:有木有關於Java虛擬機的書籍推薦?感激不盡?
  • copyright 2024編程學習大全網