先看源代码
#include<stdio.h>
struct student //结构
{
int hao; //学号
char ming[25]; //姓名
float cheng; //三门成绩
double ave; //平均成绩
}stu[55];
int count=0;
struct student luru(); // 输入
void xianshi(struct student stu[]); //显示函数信息
void paixu(struct student stu[]); //冒泡排序
void charu(struct student stu[]); //插入函数
void shanchu(struct student stu[]); //删除函数
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~主函数~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
int main()
{
char ch,cj,ck,cl,cv;
// 输入学员信息
printf("\t\t++++++++++++++请输入学员信息+++++++++++++\n");
do{
stu[count]=luru();
printf("是否继续 (y/n)");
fflush(stdin);
ch=getchar();
count++;
}while(ch=='y'||ch=='Y');
printf("排序前的成绩为\n");
xianshi(stu);
printf("排序后的成绩为\n");
paixu(stu);
xianshi(stu);
// 插入学员信息
printf("\n是否要插入新学员?Y or N\n");
fflush(stdin);
cj=getchar();
while(cj=='Y'||cj=='y')
{
charu(stu);
printf("是否继续插入\n");
fflush(stdin);
cj=getchar();
}
// 删除学员信息
printf("是否要删除某个学员?(y/n)\n");
fflush(stdin);
ck=getchar();
while(ck=='y'||ck=='Y')
{
shanchu(stu);
printf("是否继续删除\n");
fflush(stdin);
ck=getchar();
}
// 继续操作!!!!
printf("是否需要继续操作\n");
fflush(stdin);
cl=getchar();
while(cl=='Y'||cl=='y')
{
printf("\t\t\t请选择\n~~~a~~~~插入学员信息\t\t~~~~b~~~删除学员信息\n");
fflush(stdin);
cv=getchar();
switch(cv)
{
case 'a':
charu(stu);
break;
case 'b':
shanchu(stu);
break;
default:
printf("输入错误\n");
}
printf("是否继续\n");
fflush(stdin);
cl=getchar();
}
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~输入~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
struct student luru()
{
int i;
float sum=0;
printf("学号:");
fflush(stdin);
scanf("%d",&stu[count].hao);
printf("姓名:");
fflush(stdin);
gets(stu[count].ming);
printf("三门成绩:");
for(i=0;i<3;i++)
{
printf("\n成绩%d:",i+1);
scanf("%f",&stu[count].cheng);
sum+=stu[count].cheng; //总成绩
}
stu[count].ave=sum/3; //求平均成绩
return stu[count]; //把平均成绩返回 因为求的是平均成绩
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~显示信息~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
void xianshi(struct student stu[])
{
int i;
printf("学号\t\t姓名\t\t平均成绩\n");
for(i=0;i<count;i++)
{
printf("%d",stu[i].hao);
printf("\t\t%s\t\t",stu[i].ming);
printf("%.0lf",stu[i].ave);
printf("\n");
}
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~排序~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
void paixu(struct student stu[])
{
int i,j;
struct student temp;
for(i=0;i<count;i++)
{
for(j=0;j<count-1-i;j++)
{
if(stu[j].ave<stu[j+1].ave)
{
temp=stu[j];
stu[j]=stu[j+1];
stu[j+1]=temp;
}
}
}
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~插入~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
void charu(struct student stu[])
{
int i,j;
struct student temp;
printf("请输入要插入的学员信息:\n");
temp=luru();
for(i=0;i<count;i++)
{
if(stu[i].ave>temp.ave)
break;
}
for(j=count;j>i;j--)
{
stu[j]=stu[j-1];
}
stu[i]=temp;
count++;
printf("\n插入新学员后的信息如下:\n");
paixu(stu);
xianshi(stu);
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~删除学员信息~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
void shanchu(struct student stu[])
{
int i,j;
int x;
printf("请输入要删除的学号:");
scanf("%d",&x);
for(i=0;i<count;i++)
{
if(stu[i].hao==x)
break;
}
for(j=i;j<count;j++)
{
stu[j]=stu[j+1];
}
count--;
printf("\n删除后学员的信息如下:\n");
paixu(stu);
xianshi(stu);
}
我是一个自学C的业余者 ,这是一个学生成绩管理系统 虽然勉强做玩了 但是有两个地方不懂 希望有心人能帮我说明下,别怪我问题多,只是真的有点不理解 那位有心人帮忙 解决下把 万分感激呀!
问题1 为什么 中间要写 (struct student stu[]) 返回参数 这段参数的意义是什么 干什么用的 以及为什么要这么写 写的好处什么,如果不写能否完成以上代码效果。。
还有第一段输入函数 为什么前面加 结构类型struct student?
struct student luru(); // 输入
void xianshi(struct student stu[]); //显示函数信息
void paixu(struct student stu[]); //冒泡排序
void charu(struct student stu[]); //插入函数
void shanchu(struct student stu[]); //删除函数
问题2
int count=0;
为什么要加这个 计数器?
能否解释下这段代码的意义 和作用 在其他地方 怎么用 最好举例一个代码
如果不加是否也能做出以上代码效果?
一开始我没写这个 写到后面就郁闷了写不出。。后来参考别的代码才勉强写完的!
如果可以能否个相关文章 让我理解下 函数和结构!!!!!!!!!!!!!!!!!!!!!!!
[此贴子已经被作者于2007-10-27 16:10:25编辑过]