关于排序那块部分,不知道因为什么,就是没用,可以运行但是不会排序
初学者
#include <stdio.h>
#include <string.h>
#define N 5
struct student
{
char id[12],name[20],class[25];
int sex,score;
}stu[5];
void inputstudent();
void querystudent();
void deletestudent();
void sortstudent();
int sex;
void inputstudent()
{
{int i=0;
while(i<5){
printf("请输入第%d个学生的信息:\n",i+1);
printf("学号:");
do {
scanf("%s",stu[i].id);
if(strlen(stu[i].id)!=1) {
printf("请重新输入学号共12位!\n");
}
}while(strlen(stu[i].id)!=1);
printf("姓名:");
do {
scanf("%s",stu[i].name);
if(strlen(stu[i].name)>20) {
printf("请重新输入姓名拼音不超过20位!\n");
}
}while(strlen(stu[i].name)>12);
printf("班级:");
do {
scanf("%s",stu[i].class);
if(strlen(stu[i].class)>25) {
printf("请重新输入班级拼音不超过25位!\n");
}
}while(strlen(stu[i].class)>25);
printf("性别(0:女,1:男):");
do {
scanf("%d", &stu[i].sex);
if(stu[i].sex != 0 && stu[i].sex != 1) {
printf("请重新输入性别只能输入0或1!\n");
}
} while(stu[i].sex != 0 && stu[i].sex != 1);
printf("分数:");
do {
scanf("%d",&stu[i].score);
if(stu[i].score<0||stu[i].score>100) {
printf("请重新输入分数应在0~100!\n");
}
}while(stu[i].score<0||stu[i].score>100);
printf("录入成功!\n");i++;}
}
}
void querystudent(){
int i,choice;
char num[12];
char mingzi[20];
printf("请选择你查询成绩方式:\n1.姓名\n2.学号");
scanf("%d",&choice);
if(choice==1){
printf("输入名字:");
scanf("%s",mingzi);{
for(i=0;i<5;i++){
if(strcmp(mingzi,stu[i].name)==0){
printf("姓名:%s\n",stu[i].name);
printf("学号:%s\n",stu[i].id);
printf("班级:%s\n",stu[i].class);
printf("性别:%d\n",stu[i].sex);
printf("C语音成绩:%d\n",stu[i].score);
break;
}
if(strcmp(mingzi,stu[0].name)!= 0&&strcmp(mingzi, stu[1].name) != 0&&strcmp(mingzi, stu[2].name) != 0&&strcmp(mingzi, stu[3].name) != 0&&strcmp(mingzi, stu[4].name) != 0)
{
printf("输入错误,请重新输入\n");}
}}
}
if(choice==2){
printf("输入学号:");
scanf("%s",num);{
for(i=0;i<5;i++){
if(strcmp(num,stu[i].id)==0){
printf("姓名:%s\n",stu[i].name);
printf("学号:%s\n",stu[i].id);
printf("班级:%s\n",stu[i].class);
printf("性别:%d\n",stu[i].sex);
printf("C语音成绩:%d\n",stu[i].score);
break;
}
if(strcmp(num,stu[0].id)!= 0&&strcmp(num, stu[1].id) != 0&&strcmp(num, stu[2].id) != 0&&strcmp(num, stu[3].id) != 0&&strcmp(num, stu[4].id) != 0)
{
printf("输入错误,请重新输入\n");}
}}
}
}
void deletestudent(){
char num[12];
int i=0,j;
printf("请输入你要删除的学生学号:");
scanf("%s",num);
for(i=0;i<5;i++){
if(strcmp(num,stu[i].id)==0){
for(;i<4;i++) {
stu[i]=stu[i+1];
}
i--;
printf("删除成功!\n");
return;
}
}
printf("没有找到该学生的信息!\n");
}
void sortstudent(){
struct student temp;
int i=0,j=0;
for(i=0;i<4;i++){
for(i=0;i<3;i++){
if(stu[i].score<stu[i].score)
{
temp=stu[i];
stu[i]=stu[i+1];
stu[i+1]=temp;
}
}
}
printf("成绩从高到低排序为:\n");
for(i=0;i<5;i++){
printf("%s %d\n",stu[i].name,stu[i].score);
}
}
int main()
{
while(1){
printf("欢迎来到学生成绩管理系统!\n");
printf("1.录入学生信息与成绩\n");
printf("2.查询学生信息与成绩\n");
printf("3.删除学生信息与成绩\n");
printf("4.排序学生信息与成绩\n");
printf("\n请选择您要进行的功能(1~4):\n");
int num=0;
scanf("%d",&num);
switch(num)
{
case 1:inputstudent();
break;
case 2:querystudent();
break;
case 3:deletestudent();
break;
case 4:sortstudent();
break;
} printf("是否还要继续操作?(yes=1/no=2)");
scanf("%d",&num);
if(num==2) {
break;}
}
return 0;
}
你 sort 函数里 两个循环都使用了 i, 应该是外循环用 i 内循环用 j 比较时用 i和j,你搜一搜冒泡排序
你循环内外两层变量全是i,i很快就溢出,然后for循环就结束了
再说stu[i].score<stu[i].score自己怎么可能小于自己呢
内层换成j
感谢
有序是指奇数的相对位置不变,偶数的相对位置也不变
void orderSort(int a[])
{
int i, j, k, x;
for (i = 0; ; i++)
{
while (a[i] % 2) i++; //找到从左到右第一个偶数
j = i + 1;
while (!(a[j] % 2)) j++; //找到该偶数右边第一个奇数
if(j > 9) break; //便利完退出循环
for (x = j; x > i; x--) //向左冒一次泡(大概这个意思)
{
k = a[x];
a[x] = a[x - 1];
a[x - 1] = k;
}
printfArray(a);
}
}