思维导图
小练习:
定义一个数组,用来存放从终端输入的5个学生的信息【学生的信息包含学生的姓名、年纪、性别、成绩】
1>封装函数 录入5个学生信息
2>封装函数 显示学生信息
3>封装函数 删除第几个学生信息,删除后调用显示学生信息函数 显示
4> 封装函数 按照学生的成绩 进行降序,降序后调用显示学生信息函数 显示
要求:多文件编译完成。
头文件、源文件、测试文件(mian)
源文件:5.c
#include <stdio.h>
#include <string.h>
#include "5.h"//头文件
void sca(struct student stu[],int a)//输入数据
{
for(int i=0;i<a;i++)
{
printf("请输入第%d个学生的姓名,性别,年龄,成绩\n",i+1);
scanf("%s%s%d%f",stu[i].name,stu[i].sex,&stu[i].age,&stu[i].grdae);
}
}
void put(struct student *p,int a)//输出成绩
{
for(int j=0;j<a;j++)
{
printf("第%d位学生的姓名为:%s 性别为:%s 年龄为:%d 成绩为:%.1f\n",j+1,(p+j)->name,(p+j)->sex,(p+j)->age,(p+j)->grdae);
}
}
void del(struct student stu[],int a,int n)//删除(把需要删除的放到最后,再打印前面的数据)
{
for(int i=n-1;i<a-1;i++)
{
stu[i]=stu[i+1];
}
put(stu,a-1);
}
void swap(struct student stu[],int a)//降序排序
{
struct student temp;
for(int i=0;i<a;i++)
{
for(int j=0;j<a-1-i;j++)
{
if(stu[j].grdae<stu[j+1].grdae)//冒泡排序
{
temp=stu[j];
stu[j]=stu[j+1];
stu[j+1]=temp;
}
}
}
printf("排序后的结果为:\n");
put(stu,a-1);
}
头文件:5.h
#ifndef __5__//防止重引用
#define __5__
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#endif
struct student// 结构体
{
char name[30];
char sex[10];
int age;
float grdae;
};
void sca(struct student stu[],int a);//输入
void put(struct student *p,int a);//输出
void del(struct student stu[],int a,int n);//删除
void swap(struct student stu[],int a);//排序
测试文件(mian):6.c
#include <stdio.h>
#include <string.h>
#include"5.h"//引用头文件
int main(int argc, const char *argv[])
{
printf("请输入学生数量:\n");
int a;
scanf("%d",&a);
struct student stu[a];
sca(stu,a);//输入
put(stu,a);//输出
printf("请输入删除第几位学生 :");
int n;
scanf("%d",&n);
del(stu,a,n);//删除
swap(stu,a);//排序
return 0;
}
运行截图: