6-3 学生信息结构体数组的学生删除【武汉理工大学】

定义一个结构体类型,其成员包括:学号、姓名、性别(char型)、年龄、籍贯、入学年份、所在学院。要求编写函数del()根据用户输入删除的位置将学生从学生信息数组中删除并显示删除后所有学生信息。

函数接口定义:

void del(student *p,int *m,int index);//在指定位置删除一个学生并显示所有学生信息

其中p, m,index都是用户传入的参数。 p是指向要操作的学生数组的指针; m是指向学生的总人数的指针;index是删除的位置。

裁判测试程序样例:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define N 1000  //学生可能达到的最大长度
typedef struct student
{     
    int num;      //学号
    char name[20]; //姓名
    char sex;   //性别(char型,f表示女,m表示男)
    int age;    //年龄
    char province[20];//籍贯
    int year;//入学年份
    char depart[20];//所在学院
}student;
void input(student stu[],int n);/*细节在此不表*/
void output(student stu[],int n);/*细节在此不表*/
void del(student *p,int *m,int index);//在指定位置删除一个学生并显示所有学生信息

int main()
{     
    student stu[N];
    int n;
    scanf("%d",&n);//输入学生人数
    if (n>N) {printf("overflow!");return 0;}
    input(stu,n); 
    int k;
    scanf("%d",&k);//输入删除位置
    del(stu,&n,k);//在指定位置删除一个学生并显示所有学生信息
    return 0;
}
/* 请在这里填写答案 */

输入样例1:
第一行输入学生的个数n的值,后续输入n行学生的信息(学号、姓名、性别、年龄、籍贯、入学年份、所在学院),每个学生信息占一行,学号、姓名、性别、年龄、籍贯、入学年份、所在学院用空格分隔,所在学院之后没有空格。最后一行输入学生删除的位置(表示第几个学生)。

5
1001 Jack f 20 湖北 2019 理学院
1002 Sam m 19 江西 2019 信息学院
1003 Marry f 21 湖南 2019 外语学院
1004 David m 20 安徽 2019 资环学院
1005 Susan f 21 广西 2019 计算机学院
4

输出样例1:
显示删除后的学生的信息(学号、姓名、性别、年龄、籍贯、入学年份、所在学院),用空格分隔。

1001 Jack f 20 湖北 2019 理学院
1002 Sam m 19 江西 2019 信息学院
1003 Marry f 21 湖南 2019 外语学院
1005 Susan f 21 广西 2019 计算机学院

输入样例2:
若删除失败:
只输出以下一行提示:Sorry,the position to be deleted is invalid!

5
1001 Jack f 20 湖北 2019 理学院
1002 Sam m 19 江西 2019 信息学院
1003 Marry f 21 湖南 2019 外语学院
1004 David m 20 安徽 2019 资环学院
1005 Susan f 21 广西 2019 计算机学院
6

输出样例2:

Sorry,the position to be deleted is invalid!
void del(student *p, int *m, int index)
{
    if (index < 1 || index > *m)
    {
        printf("Sorry,the position to be deleted is invalid!");
        return;
    }

    // 将删除位置之后的学生信息向前移动
    for (int i = index; i < *m; i++)
    {
        p[i - 1] = p[i];
    }

    (*m)--; // 学生总数减一

    // 显示删除后的所有学生信息
    output(p, *m);
}
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值