谁帮忙解释一下该C语言的算法思想

发布网友 发布时间:2022-04-27 00:32

我来回答

3个回答

热心网友 时间:2022-06-21 18:28

这是一个学生信息管理系统,可以做添加学生信息,显示所有学生信息,查找学生信息,删除学生信息,对学生信息排序,退出学生信息这些操作。

用一个结构类型student来表示每个学生的信息:
struct student
{
int id; //学号
char name[10]; //名字
int age; //年龄
char sex[5]; //性别
}stu[50];

每个学生信息有学号,名字,年龄,性别,共定义了50个学生。

int menu_1() //定义菜单1
{
int c;
system("cls"); //清屏
printf("\t___________________学生信息管理系统___________________\n");
printf("\t\t\t1: 添加学生信息\n");
printf("\t\t\t2: 显示所有学生信息\n");
printf("\t\t\t3: 查找学生信息\n");
printf("\t\t\t4: 删除学生信息\n");
printf("\t\t\t5: 对学生信息排序\n");
printf("\t\t\t6: 退出学生信息\n");
printf("\t======================================================\n");
printf("\t\t\t请输入您的选择:");
scanf("%d",&c); //接收定量C
return(c); //返还C
}
运行这一段程序会显示一个菜单如下:

___________________学生信息管理系统___________________
1: 添加学生信息
2: 显示所有学生信息
3: 查找学生信息
4: 删除学生信息
5: 对学生信息排序
6: 退出学生信息
======================================================
请输入您的选择:

有6个选项你可以选择,在你输入你的选择之后,就进行相应的操作。
如果你输入1,则进行添加学生信息的操作,转到程序
void tianjia() //添加信息
{
printf("请输入要添加的学生信息:\n\n");
printf("请输入学号\n"); //学号
scanf("%d",&stu[n].id);
printf("请输入名字\n"); //姓名
scanf("%s",stu[n].name);
printf("请输入年龄(1-99)\n"); //年龄
scanf("%d",&stu[n].age);
getchar();
printf("请输入性别(W或者M)\n");//性别
scanf("%s",stu[n].sex);
n++;
}

一个个学生的输入他们的学号,姓名,年龄和性别,存到数组stu[]中。
如果你选择2、显示所有学生信息,则转到程序:

void xianshi() //显示所有信息
{
printf("显示所有学生信息:\n\n");
int j;
printf("\t学号\t姓名\t年龄\t性别\n");
for(j=0;j<n;j++)
printf("\t%d\t%s\t%d\t%s\n",stu[j].id,stu[j].name,stu[j].age,stu[j].sex);
}
这个程序将刚才添加的学生信息全部显示到屏幕上。

如果你输入3,则选择3、查找学生信息,开始查找学生信息,转到程序:

void chazhao() // 查找学生信息
{
int m;
char name[20],b;
do
{
printf("请输入想查找的学生姓名:\n\n");
fflush(stdin);
gets(name);
for(m=0;m<n;m++)
{
if(strcmp(name,stu[m].name)==0)
{
printf("\n\t已找到您要查找的信息\n",m+1);
break;
}
}
if(m>=20)
printf("\n\n没有查找到该信息,请确定是否有误\n");
else
{
printf("\t学号\t姓名\t年龄\t性别\n");
printf("\t%d\t%s\t%d\t%s\t",
stu[m].id,stu[m].name,stu[m].age,stu[m].sex);
}
printf("\n是否查找另一个学生的信息?(y/n)");
fflush(stdin);
b=getchar();

}while(b=='y');
}
这段程序把你想要找的学生的信息显示出来。

如果你选择4、删除学生信息,则进行删除指定学生的信息,转到程序:

void shanchu() // 删除学生信息
{
char name[20],c;
int a,b;
do
{
printf("请输入要删除的学生姓名:\n\n");
fflush(stdin);
gets(name);
for(a=0;a<n;a++)
{
if(strcmp(name,stu[a].name)==0)
break;
}
for(b=a;b<n;b++)
stu[b]=stu[b+1];
if(a>n)
printf("\t没有找到这个学生!!!\n");
else
{
n--;
xianshi();
}

printf("\n是否继续删除另一个学生信息?(y/n) ");
fflush(stdin);
c=getchar();
}while(c=='y');
}

函数的名字用拼音写得很清楚是做什么操作的,再仔细看看每一个函数是怎么实现的,就可以掌握这个程序主要实现的功能了。

热心网友 时间:2022-06-21 18:29

void paixu(student stu3[]) //按学号从大到小排序函数
{
printf("对所存学生信息排序情况如下:\n");
int j,k;
int o;
char name[10];int age;char sex[5];
for(j=0;j<n;j++) //外循环说明要循环n次
for(k=0;k<n-1-j;k++) //内循环其实就是每次把大的往后移
if(stu[k].age<stu[k+1].age) //这个if就是如果前面这个比后面这个大就把他们交换,这样第一次循环就是把最大的弄最后去了
//第二次内循环就只需要比较前n-1个,把第二大的换到倒数第二个,以此类推
{
//if语句里就是把k和k+1各个学生里的成员都进行交换
{o=stu[k].id;stu[k].id=stu[k+1].id; stu[k+1].id=o;}
{strcpy(name,stu[k].name);strcpy(stu[k].name,stu[k+1].name);strcpy(stu[k+1].name,name);}
{age=stu[k].age;stu[k].age=stu[k+1].age;stu[k+1].age=age;}
{strcpy(sex,stu[k].sex);strcpy(stu[k].sex,stu[k+1].sex);strcpy(stu[k+1].sex,sex);}
}

void shanchu() // 删除学生信息
{
char name[20],c;
int a,b;
do
{
printf("请输入要删除的学生姓名:\n\n");
fflush(stdin);
gets(name); //得到要删除的名字
for(a=0;a<n;a++)
{
if(strcmp(name,stu[a].name)==0) //找到是哪个人了,记下位置a
break;
}
for(b=a;b<n;b++) //把数组里位置a+1到最后的这些元素都往前移动一个,就把位置a这里的给删了
stu[b]=stu[b+1];
if(a>n) //要不就是没找到这个人
printf("\t没有找到这个学生!!!\n");
else
{
n--;
xianshi();
}

printf("\n是否继续删除另一个学生信息?(y/n) ");
fflush(stdin);
c=getchar();
}while(c=='y');
}

热心网友 时间:2022-06-21 18:29

已经有很多注释了啊,不懂你的问题了,你到底想弄明白什么呢?是代码的意思?

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com