#include <stdio.h>
#include <string.h>
#include <stdlib.h>
//定义学生结构体
struct student
{
char* name[100];//姓名
int id;//学号
int cj; //成绩
};
int n=0; //记录数据组中当前有多少个学生
//设计初始化学生信息接口
void init_stu(struct student *p,char *name,int id,short cj)
{
p=(struct student*)malloc(n*sizeof(struct student));
strcpy(p->name,name);
p->id=id;
p->cj=cj;
}
//显示所有学生信息
void show_all(struct student *p,int len)
{
printf("姓名\t学号\t成绩\n");
for (int i=0;i<len;i++)
printf("%s\t%d\t%f\n",p[i].name,p[i].id,p[i].cj);
}
//删除学生成绩
void del_stu(struct student *p,char *name)
{
p->cj=0;
}
//修改学生成绩
void up_stu(struct student *p,char *name)
{
int i=0;
printf("请输入修改后的学生成绩");
scanf("%d",&i);
p->cj=i;
}
//查找某个成绩的学生
void find_stu(struct student *p,int cj)
{
printf("姓名:%s\n",p->name);
printf("学号:%d\n",p->id);
printf("成绩:%d\n",p->cj);
}
//求学生的平均成绩
int all_stu(struct student *p)
{
int j=0;
j=p->cj;
}
//根据成绩显示从 大 到 小显示所成绩
void show_sort(struct student *p,int Counts)
{
for(int i=0;i<Counts-1;i++)
{
for(int j=0;i<Counts-i;j++)
{
if(p[j].cj>p[j+1].cj)
{
struct student temp;
temp.cj=p[j+1].cj;
temp.id=p[j+1].id;
temp.name=p[j+1].name;
p[j+1].cj=p[j],cj;
p[j+1].id=p[j],id;
p[j+1].name=p[j],name;
p[j].cj=temp.cj;
p[j].id=temp.id;
p[j].name=temp.name;
}
}
for (int i=0;i<Counts-1;i++)
{
printf("%d %d %s",p[j].cj,p[j].id,p[j].name);
}
}
}
int main()
{
//学生结构体数组
struct student people[100]; //一共可以保存 100 个学生成绩
while (1)
{
printf("1.插入学生 2.显示所有学生 3.删除学生 4.修改学生 5.查找学生 6.显示平均成绩 7.成绩排序\n");
int a=0;
scanf("%d",&a);
while (getchar() != '\n'); //清空输入缓存区
switch (a)
{
case 1:
{ char a[100];
int b;
float c;
printf("插入学生的姓名,学号,成绩\n");
scanf("%s %d %d",a,&b,&c);
n++;
printf("n=%d\n",n);
for("int i=0;i<n;i++")
{
init_stu(&people[i],a,b,c);
}
break;
}
case 2:
{
printf("显示所有学生\n");
show_all(p,n);
}
break;
case 3:
{
int i,j;
printf("请输入你要删除成绩的学生学号:");
scanf("%d",&j);
for(i=0;i<n;i++)
{
if(j==people[i].id)
{
del_stu(&people[i]);
}
break;
case 4:
{
int i,j;
printf("请输入要修改成绩学生的学号:\n");
scanf("%d",&i);
for(j=0;j<n;j++)
{
if(i==people[j].id)
{
up_stu(&people[j]);
}
}
break;
}
case 5:
{
int i,j;
printf("请输入要查找的学生成绩:\n");
scanf("%d",&i);
for(j=0;j<n;j++)
{
if(i==people[j].id)
{
find_stu(&people[j]);
}
}
break;
}
case 6:
{
int i,j;
int sum=0;
for(i=0,i<n;i++)
{
j=all_stu(&people[i])
sum+=j;
}
printf("学生的平均成绩是%d\n",sum);
}
break;
case 7:
{
int counts;
scanf("%d",counts);
show_sort(people,counts);
break;
}
default:
{
}
printf("输入错误\n");
break;
}
}
}
}
具体错误是什么?
修改如下,供参考:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<malloc.h>
//定义学生结构体
struct student
{
char name[100];//姓名
int id;//学号
float cj; //成绩
};
int n = 0; //记录数据组中当前有多少个学生
//设计初始化学生信息接口
void init_stu(struct student* p, char* name, int id, float cj)
{
//p = (struct student*)malloc(n * sizeof(struct student));
strcpy(p->name, name);
p->id = id;
p->cj = cj;
}
//显示所有学生信息
void show_all(struct student* p, int len)
{
printf("姓名\t学号\t成绩\n");
for (int i = 0; i < len; i++)
printf("%s\t%d\t%f\n", p[i].name, p[i].id, p[i].cj);
}
//删除学生成绩
void del_stu(struct student* p)
{
p->cj = 0;
}
//修改学生成绩
void up_stu(struct student* p)
{
float i = 0;
printf("请输入修改后的学生成绩");
scanf("%f", &i);
p->cj = i;
}
//查找某个成绩的学生
void find_stu(struct student* p)
{
printf("姓名:%s\n", p->name);
printf("学号:%d\n", p->id);
printf("成绩:%f\n", p->cj);
}
//求学生的平均成绩
float all_stu(struct student* p)
{
float j = 0;
j = p->cj;
return j;
}
//根据成绩显示从 大 到 小显示所成绩
void show_sort(struct student* p, int Counts)
{
for (int i = 0; i < Counts - 1; i++)
{
for (int j = 0; j < Counts - i-1; j++)
{
if (p[j].cj > p[j + 1].cj)
{
struct student temp;
temp = p[j];
p[j] = p[j + 1];
p[j + 1] = temp;
//temp.cj = p[j + 1].cj;
//temp.id = p[j + 1].id;
//temp.name = p[j + 1].name;
//p[j + 1].cj = p[j].cj;
//p[j + 1].id = p[j].id;
//p[j + 1].name = p[j], name;
//p[j].cj = temp.cj;
//p[j].id = temp.id;
//p[j].name = temp.name;
}
}
}
for (int i = 0; i < Counts ; i++)
printf("%f %d %s\n", p[i].cj, p[i].id, p[i].name);
}
int main()
{
//学生结构体数组
struct student people[100]; //一共可以保存 100 个学生成绩
while (1)
{
printf("1.插入学生 2.显示所有学生 3.删除学生 4.修改学生 5.查找学生 6.显示平均成绩 7.成绩排序\n");
int a = 0;
scanf("%d", &a);
while (getchar() != '\n'); //清空输入缓存区
switch (a)
{
case 1:
{ char a[100];
int b;
float c;
printf("插入学生的姓名,学号,成绩\n");
scanf("%s %d %f", a, &b, &c);
printf("n=%d\n", n);
init_stu(&people[n], a, b, c);
n++;
break;
}
case 2:
{
printf("显示所有学生\n");
show_all(people, n);
break;
}
case 3:
{
int i, j;
printf("请输入你要删除成绩的学生学号:");
scanf("%d", &j);
for (i = 0; i < n; i++)
{
if (j == people[i].id)
{
del_stu(&people[i]);
}
}
break;
}
case 4:
{
int i, j;
printf("请输入要修改成绩学生的学号:\n");
scanf("%d", &i);
for (j = 0; j < n; j++)
{
if (i == people[j].id)
{
up_stu(&people[j]);
}
}
break;
}
case 5:
{
int i, j;
printf("请输入要查找成绩学生的学号:\n");
scanf("%d", &i);
for (j = 0; j < n; j++)
{
if (i == people[j].id)
{
find_stu(&people[j]);
}
}
break;
}
case 6:
{
int i;
float sum = 0,j;
for (i = 0; i < n; i++)
{
j = all_stu(&people[i]);
sum += j;
}
printf("学生的平均成绩是%f\n", sum/n);
break;
}
case 7:
{
int counts;
scanf("%d", &counts);
show_sort(people,counts);
break;
}
default:
printf("输入错误\n");
break;
}
}
}