zoukankan      html  css  js  c++  java
  • 结构体应用分类与索引

     

    给定学生成绩登记表如表91所示。

    学号(num

    姓名(name

    成绩(grade

    02

    Lin

    92

    03

    Zhang

    87

    04

    Zhao

    72

    05

    Ma

    91

    09

    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

    将表91划分成三个子表,其中子表1登记的是成绩在90100之间的学生情况,子表2登记的是成绩在8089之间的学生情况,子表3登记的是7079之间的学生情况。

    具体要求如下:

    (1)用结构体数组存放表91中的学生成绩情况。其结构体类型为

     struct student

        {int num

        char name[10]

         int grade

        }

    (2)划分成的三个子表均采用链表结构,链表中各结点的数据域存放学生成绩情况在原表中的存储地址,而不是直接存放学生成绩情况。结点的结构为

        struct node

        {struct student *data

         struct node *next

        }

    (3)要求最后输出原学生成绩情况表以及划分成的三个子表。输出格式如表91所示(但不要表中的框线)

        方法说明:

        划分的方法如下:

        扫描表91中各学生的成绩grade,计算

        K=10-int(grade10)

    其中int()表示取整。根据k值将该学生情况归并到相应的子表中:

        k=01,则归并到子表1中;

        k=2,则归并到子表2中;

        k=3,则归并到子表3中。

        在需要将学生情况加入到子表时,首先动态分配一个结点(struct node类型),将该学生情况在原表中的存储地址存入结点的数据域中,然后将该结点链接到相应链表的头部。

        为了动态分配一个结点p,可以用如下语句:

        p=(struet node*)malloc(sizeof(struct node))

    其中p为结构体类型struct node的指针。

        而为了使用函数malloc(),要求包含头文件”stdlibh”。


    #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();
    }

  • 相关阅读:
    【UOJ 53】线段树区间修改
    【洛谷 1057】传球游戏
    【洛谷 2430】严酷的训练
    【UOJ 51】最接近神的人
    【洛谷 1908】逆序对
    【UOJ 50】树状数组2
    Kafka单机安装
    Linux查看磁盘使用情况命令
    CentOS7查看和关闭防火墙
    Kafka学习(三)——Java工具类、Springboot集成批量消费、SparkStreaming集成
  • 原文地址:https://www.cnblogs.com/qixin622/p/629267.html
Copyright © 2011-2022 走看看