回覆列表
  • 1 # 愛逗的小夥伴

    #include <malloc.h>

    #include <stdio.h>

    #include <stdlib.h>

    #define LEN sizeof(struct scorenode)

    #define DEBUG

    #include <string.h>

    struct scorenode

    {int number;/*學號*/

    char name[10];/*姓名*/

    float yuwen;/*語文成績*/

    float yingyu;/*英語成績*/

    float shuxue;/*數學成績 */

    struct scorenode *next;

    };

    typedef struct scorenode score;

    int n,k;/*n,k為全域性變數,本程式中的函式均可以使用它*/

    /*==============================================================================================*/

    score *creat2311(void)

    /*函式creat2311,功能:建立連結串列,此函式帶回一個指向連結串列頭的指標*/

    {

    score*head;

    score *p1,*p2,*p3,*max;

    int i,j;

    float fen;

    char t[10];

    n=0;

    p1=p2=p3=(score *)malloc(LEN);head=p3; /*開闢一個新單元*/

    printf("請輸入學生資料,輸0退出!\n");

    repeat1: printf("請輸入學生學號(學號應大於0):");/*輸入學號,學號應大於0*/

    scanf("%d",&p1->number);

    while(p1->number<0)

    {getchar();

    printf("輸入錯誤,請重新輸入學生學號:");

    scanf("%d",&p1->number);}

    /*輸入學號為字元或小於0時,程式報錯,提示重新輸入學號*/

    if(p1->number==0)

    goto end;/*當輸入的學號為0時,轉到末尾,結束建立連結串列*/

    else

    {

    p3=head;

    if(n>0)

    {for(i=0;i<n;i++)

    {if(p1->number!=p3->number)

    p3=p3->next;

    else

    {printf("學號重複,請重輸!\n");

    goto repeat1;

    /*當輸入的學號已經存在,程式報錯,返回前面重新輸入*/

    }

    }

    }

    }

    printf("請輸入學生姓名:");

    scanf("%s",&p1->name);/*輸入學生姓名*/

    printf("請輸入語文成績(0~100):");/*輸入語文成績,成績應在0-100*/

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

    while(p1->yuwen<0||p1->yuwen>100)

    {getchar();

    printf("輸入錯誤,請重新輸入語文成績");/*輸入錯誤,重新輸入語文成績直到正確為止*/

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

    printf("請輸入英語成績(0~100):");/*輸入英語成績,成績應在0-100*/

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

    while(p1->yingyu<0||p1->yingyu>100)

    {getchar();

    printf("輸入錯誤,請重新輸入英語成績");/*輸入錯誤,重新輸入英語成績直到正確為止*/

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

    printf("請輸入數學成績(0~100):");/*輸入數學成績,成績應在0-100*/

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

    while(p1->shuxue<0||p1->shuxue>100)

    {getchar();

    printf("輸入錯誤,請重新輸入數學成績");

    scanf("%f",&p1->shuxue);}/*輸入錯誤,重新輸入數學成績直到正確為止*/

    p1=head;

    p0=stu;

    if(head==NULL)

    {head=p0;p0->next=NULL;}/*當原來連結串列為空時,從首結點開始存放資料*/

    else/*原來連結串列不為空*/

    {

    if(p1->next==NULL)/*找到原來連結串列的末尾*/

    {

    p1->next=p0;

    p0->next=NULL;/*將它與新開單元相連線*/

    }

    else

    {

    while(p1->next!=NULL)/*還沒找到末尾,繼續找*/

    {

    p2=p1;p1=p1->next;

    }

    p1->next=p0;

    p0->next=NULL;

    }

    }

    n=n+1;

    p1=head;

    p0=stu;

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

    {

    for(j=i+1;j<=n;j++)

    {

    max=p1;

    p1=p1->next;

    if(max->number>p1->number)

    {

    k=max->number;

    max->number=p1->number;

    p1->number=k;

    /*交換前後結點中的學號值,使得學號大者移到後面的結點中*/

    strcpy(t,max->name);

    strcpy(max->name,p1->name);

    strcpy(p1->name,t);

    /*交換前後結點中的姓名,使之與學號相匹配*/

    fen=max->yuwen;

    max->yuwen=p1->yuwen;

    p1->yuwen=fen;

    /*交換前後結點中的語文成績,使之與學號相匹配*/

    fen=max->yingyu;

    max->yingyu=p1->yingyu;

    p1->yingyu=fen;

    /*交換前後結點中的英語成績,使之與學號相匹配*/

    fen=max->shuxue;

    max->shuxue=p1->shuxue;

    p1->shuxue=fen;

    /*交換前後結點中的數學成績,使之與學號相匹配*/

    }

    }

    max=head;p1=head;/*重新使max,p指向連結串列頭*/

    } end2:

    printf("現在的學生數為:%d個!\n",n);

    return(head);

    }

    /*==============================================================================================*/

    /*==============================================================================================*/

    score *search2311(score *head)

    /*函式search2311,功能:查詢學生成績*/

    {int number;

    score *p1,*p2;

    printf("輸入要查詢的學生的學號,");

    scanf("%d",&number);

    while(number!=0)

    {

    if(head==NULL)

    {printf("\n沒有任何學生資料!\n");return(head);}

    printf("-----------------------------------------\n");

    printf("|學號\t|姓名\t|語文\t|英語\t|數學\t|\n");

    printf("-----------------------------------------\n");/*打印表格域*/

    p1=head;

    while(number!=p1->number&&p1->next!=NULL)

    {p2=p1;p1=p1->next;}

    if(number==p1->number)

    {printf("|%d\t|%s\t|%.1f\t|%.1f\t|%.1f\t|\n",p1->number,p1->name,p1->yuwen,p1->yingyu,p1->shuxue);

    printf("-----------------------------------------\n");}/*打印表格域*/

    else

    printf("%d不存在此學生!\n",number);

    printf("輸入要查詢的學生的學號,");

    scanf("%d",&number);

    }

    printf("已經退出了!\n");

    return(head);}

  • 中秋節和大豐收的關聯?
  • 黃門燜羊肉的做法?