新手请教问题
输入学生的学号、姓名、成绩,统计不及格人数、按成绩排序、按学号检索学生信息。其中排序用自定义函数完成。
各种不会,同学们帮忙改一下啊。
#include<stdio.h>
#define N 10
struct k
struct q
struct student//定义结构体类型
{
long number;
char xingming[3];
float chengji;
};
/*void paixu (struct a[N], int i,int j,struct k) 这里是排序的函数,但是函数学的很烂,完全不对,求修改。
{
for(i=0;i<=N-2;i++)
for(j=0;j<=N-2-i;j++)
if(a[j].chengji>=a[j+1].chengji)
{k=a[j];a[j]=a[j+1];a[j+1]=k;}
}*/
void main()
{
int s,t=-1,m=0,n,r;
long xuehao;
struct student stu[N];//定义结构体数组
printf("请按以下格式输入 %d 个学生的信息\n",N);
printf("number xingming chengji\n");
for(s=0;s<N;s++)//为结构体元素赋值
{
printf("请输入第 %d 个学生的信息:\n",s+1);
scanf("%ld%s%f",&stu[s].number,&stu[s].xingming,&stu[s].chengji);
}
for(n=1;n<=N;n++)//统计不及格人数 这里也有问题,统计出的人数总是比实际多一个,不知道什么情况。
if(stu[n].chengji<60)m++;//这里有问题,为什么总是多一个?
printf("不及格人数为:%d人\n",m);
printf("请输入要检索的学生的学号:\n");
scanf("%ld",&xuehao);
for(s=0;s<N;s++)//检索所需数据
if(xuehao==stu[s].number)
{t=s;
break;
}
if(t!=-1)//输出检索结果
printf("%ld %s %f\n",stu[t].number,stu[t].xingming,stu[t].chengji);
else
printf("检索的学生不存在!\n");
/*paixu(struct stu,int r,int p,struct q) 按成绩排序的函数调用,应该完全不对吧,需要修改。。。
printf("%ld %s %f\n",stu[r].number,stu[r].xingming,stu[r].chengji);*/
}
[解决办法]
#include<stdio.h>#define N 5 struct student//定义结构体类型 { long number; char xingming[10]; float chengji; }; void paixu (struct student a[N])// 这里是排序的函数,但是函数学的很烂,完全不对,求修改。 { struct student k; int i,j; for(i=0;i<=N-2;i++) for(j=0;j<=N-2-i;j++) if(a[j].chengji>=a[j+1].chengji) { k=a[j];a[j]=a[j+1];a[j+1]=k; } } void main() { int s,t=-1,m=0,n,r; long xuehao; struct student stu[N];//定义结构体数组 printf("请按以下格式输入 %d 个学生的信息\n",N); printf("number xingming chengji\n"); for(s=0;s<N;s++)//为结构体元素赋值 { printf("请输入第 %d 个学生的信息:\n",s+1); scanf("%ld%s%f",&stu[s].number,&stu[s].xingming,&stu[s].chengji); } for(n=0;n<N;n++)//统计不及格人数 这里也有问题,统计出的人数总是比实际多一个,不知道什么情况。 if(stu[n].chengji<60)m++;//这里有问题,为什么总是多一个? printf("不及格人数为:%d人\n",m); printf("请输入要检索的学生的学号:\n"); scanf("%ld",&xuehao); for(s=0;s<N;s++)//检索所需数据 if(xuehao==stu[s].number) { t=s; break; } if(t!=-1)//输出检索结果 printf("%ld %s %f\n",stu[t].number,stu[t].xingming,stu[t].chengji); else printf("检索的学生不存在!\n"); paixu(stu); //按成绩排序的函数调用,应该完全不对吧,需要修改。。。 for(s=0;s<N;s++) printf("%ld %s %f\n",stu[s].number,stu[s].xingming,stu[s].chengji); }