給定學(xué)生成績(jī)登記表如表9.1所示,。
將表9.1劃分成三個(gè)子表,,其中子表1登記的是成績(jī)?cè)?SPAN>90~100之間的學(xué)生情況,子表2登記的是成績(jī)?cè)?SPAN>80~89之間的學(xué)生情況,,子表3登記的是70~79之間的學(xué)生情況,。 具體要求如下: (1)用結(jié)構(gòu)體數(shù)組存放表9.1中的學(xué)生成績(jī)情況。其結(jié)構(gòu)體類型為 struct student {int num,; char name[10],; int grade: } (2)劃分成的三個(gè)子表均采用鏈表結(jié)構(gòu),鏈表中各結(jié)點(diǎn)的數(shù)據(jù)域存放學(xué)生成績(jī)情況在原表中的存儲(chǔ)地址,,而不是直接存放學(xué)生成績(jī)情況,。結(jié)點(diǎn)的結(jié)構(gòu)為 struct node {struct student *data; struct node *next,; } (3)要求最后輸出原學(xué)生成績(jī)情況表以及劃分成的三個(gè)子表,。輸出格式如表9.1所示(但不要表中的框線)。 方法說(shuō)明: 劃分的方法如下: 掃描表9.1中各學(xué)生的成績(jī)grade,,計(jì)算 K=10-int(grade/10) 其中int()表示取整,。根據(jù)k值將該學(xué)生情況歸并到相應(yīng)的子表中: 若k=0或1,則歸并到子表1中,; 若k=2,,則歸并到子表2中; 若k=3,,則歸并到子表3中,。 在需要將學(xué)生情況加入到子表時(shí),首先動(dòng)態(tài)分配一個(gè)結(jié)點(diǎn)(struct node類型),,將該學(xué)生情況在原表中的存儲(chǔ)地址存入結(jié)點(diǎn)的數(shù)據(jù)域中,,然后將該結(jié)點(diǎn)鏈接到相應(yīng)鏈表的頭部。 為了動(dòng)態(tài)分配一個(gè)結(jié)點(diǎn)p,,可以用如下語(yǔ)句: p=(struet node*)malloc(sizeof(struct node)),; 其中p為結(jié)構(gòu)體類型struct node的指針。 而為了使用函數(shù)malloc(),,要求包含頭文件”stdlib.h”,。 #include<stdio.h>
#include<stdlib.h> #include<conio.h> #define N 13 typedef struct student { int num; char name[10]; int grade; }Stu; Stu stu[N]={{2,"Lin",92},{3,"Zhang",87},{4,"Zhao",72},{5,"Ma",91},{9,"Zhen",85},{11,"Wang",100},{12,"Li",86},{13,"Xu",83},{16,"Mao",78},{17,"Hao",95},{20,"Lu",82},{21,"Song",76},{22,"Wu",88}}; typedef struct node { struct student *data; struct node *next; }Node; void show(Node *h) { Node *p; p=h; while(p->next!=NULL) { printf("%d\t%s\t%d\n",p->data->num,p->data->name,p->data->grade); p=p->next; } } Node *create(Node *h,Stu *p) { Node *s; s=(Node *)malloc(sizeof(Node)); h=s; s->data=p; s->next=NULL; return h; } void save(Node *h,Stu *p) { Node *s,*t; s=(Node *)malloc(sizeof(Node)); t=h; while(t->next!=NULL)t=t->next; s->data=p; s->next=NULL; t->next=s; } void main() { int i,j,k,flag[4]={0}; Node *h[4]={NULL},*p; for(i=0;i<N;i++) for(j=1;j<4;j++) { k=10-int(stu[i].grade/10); if(k==0) k++; if(k==j) if(flag[j]==0) { flag[j]=1; h[j]=create(h[j],&stu[i]); } else save(h[j],&stu[i]); } for(i=1;i<4;i++) { printf("The NO.%d table:\n",i); show(h[i]); } getch(); } |
|