数据结构的一第节课老师给的作业,对于疫情期间上课划水的人来说,C语言还没会一点,数据结构就来了,同情你们和…哈哈。
数据结构-结构体作业1
题目稍后奉上,先上源码
#include<stdio.h>
#include<string.h>
int n; //记录实际人数
void Print();//遍历打印
int SeekByi();//下标查找
int SeekByx();//内容查找
void Insert();//插入信息
int DeleteByNumber();//删除信息
void Tip();//提示菜单
//定义存储学生信息的结构体
struct STUDENT
{
int number;
char name[40];
}studentInformation[40];
int main()
{
int j; //计数器
int opt; //记录选择
printf("请输入实际学生人数:");
scanf("%d",&n);
printf("请输入学生信息:(学号+ +姓名)\n");
for (j = 0;j < n;j++)
{
scanf("%d %s", &studentInformation[j].number, studentInformation[j].name); //读取学生信息
}
while (1)
{
int s1, s2, s3; //用于记录各项操作结果
//提示菜单
Tip();
scanf("%d", &opt);
switch (opt)
{
case 1:Print();
break;
case 2:
s1 = SeekByi();
if (s1 == -1)
{
printf("位置无效!\n");
}
else
{
printf("对应处元素为%d %s\n", studentInformation[s1].number, studentInformation[s1].name);
}
break;
case 3:
s2 = SeekByx();
if (s2 == -1)
{
printf("查找失败!\n");
}
else
{
printf("对应处元素下标为%d\n", s2);
}
break;
case 4:Insert();break;
case 5:
s3 = DeleteByNumber();
if (s3 == -1)
{
printf("未查找到该学生,删除失败!\n");
}
else
{
printf("已成功删除,对应处元素下标为%d\n", s3);
}
break;
}
}
return ;
}
void Tip(){
printf("请选择您所需要的操作:\n");
printf("1->遍历输出 2->根据下标查找 3->根据数据项查找\n4->插入新的数据元素 5->删除数据元素\n");
}
void Print()
{
int j; //计数器
printf("遍历输出所有学生信息结果为:\n");
printf("--学号------姓名----\n");
for (j = 0;j < n;j++)
{
printf("%d %s\n", studentInformation[j].number, studentInformation[j].name);
printf("\n");
}
}
int SeekByi()
{
int i; //记录下标
printf("请输入待查找的下标值:");
scanf("%d", &i);
if (i<n)
{
return i;
}
else
{
return -1;
}
}
int SeekByx()
{
int i; //记录下标
int seek_num; //待查找学号
char seek_name[20]; //待查找姓名
int ch = -1; //记录查找内容 0-学号 1-姓名
printf("请输入查找内容:0-学号 1-姓名\n");
scanf("%d", &ch);
if (ch == 0)
{
printf("请输入待查找学号:");
scanf("%d", &seek_num);
for (i = 0;i < n;i++)
{
if (seek_num == studentInformation[i].number)
{
break; //如果查找到就记录对应的下标
}
}
}
else if (ch == 1)
{
printf("请输入待查找姓名:");
scanf("%s", seek_name);
for (i = 0;i < n;i++)
{
if (strcmp(seek_name, studentInformation[i].name) == 0)
{
break;
}
}
}
else
{
printf("请输入正确数据!\n");
i = -1;
}
if (i < n)
{
return i;
}
else
{
return -1;
}
}
void Insert()
{
//记录下标
int i;
//计数器
int j;
//新增信息
struct STUDENT addNew;
printf("请输入待插入信息的下标:");
scanf("%d", &i);
printf("请输入待插入内容:\n");
scanf("%d %s", &addNew.number, addNew.name);
n = n + 1;
for (j = n - 1;j >= i;j--)
{
studentInformation[j + 1].number = studentInformation[j].number;
strcpy(studentInformation[j + 1].name, studentInformation[j].name);
}
studentInformation[i].number = addNew.number;
strcpy(studentInformation[i].name, addNew.name);
printf("添加后,遍历元素:\n");
printf("--学号----姓名----\n");
for (j = 0;j < n;j++)
{
printf("%d %s\n", studentInformation[j].number, studentInformation[j].name);
}
}
int DeleteByNumber()
{
//记录下标
int i;
//计数器
int j;
int delete_num;
printf("请输入待删除学生学号:\n");
scanf("%d", &delete_num);
for (i = 0;i < n;i++)
{
if (studentInformation[i].number == delete_num)
{
break;
}
}
for (j = i;j < n;j++)
{
studentInformation[j].number = studentInformation[j + 1].number;
strcpy(studentInformation[j].name, studentInformation[j + 1].name);
}
if (i < n)
{
return i;
}
else
{
return -1;
}
}
功能已经实现,运行结果如图,图片还在路上,debug环节未出现任何问题,新手上路,难免疏漏,大家评论区讨论和指正