用C语言代码实现对一份成绩单的排序(成绩单包过姓名,成绩,年龄,学号4个内容)要求能根据用户的需要(选择),提供4种排序模式:
1,成绩由大到小。
2,姓名首字母由A到Z
3,年龄由小到大
4,学号由小到大
下面是我写的程序,出错了的
#include <stdio.h>#include <stdlib.h>struct student{ char name[20]; float score; int age; int num;}; void mode1( struct student stu[],int n)//参考书上307页(比较模式一){ struct student temp;//定义变量temp,排序时交换以便使用 int i,j,k; for(i=0;i<n-1;i++) { k=i; for(j=i+1;j<n;j++ ) if(stu[j].score>stu[k].score)//两两比较成绩,由高到低排列 k=j; temp=stu[k];stu[k]=stu[i];stu[i]=temp;//进行交换比较 }} void mode2(struct student stu[],int n)//(比较模式二){ struct student temp;//定义变量temp,排序时交换以便使用 int i,j,k; for(i=0;i<n-1;i++) { k=i; for(j=i+1;j<n;j++ ) if(stu[j].name<stu[k].name)//两两比较姓名首字母,由A到Z排列 k=j; temp=stu[k];stu[k]=stu[i];stu[i]=temp;//进行交换比较 }} void mode3(struct student stu[],int n)//(比较模式三){ struct student temp;//定义变量temp,排序时交换以便使用 int i,j,k; for(i=0;i<n-1;i++) { k=i; for(j=i+1;j<n;j++ ) if(stu[j].age<stu[k].age)//两两比较年龄,由小到大排列 k=j; temp=stu[k];stu[k]=stu[i];stu[i]=temp;//进行交换比较 }} void mode4(struct student stu[],int n)//(比较模式四), int n=4;//定义变量n为学生人数4{ struct student temp;//定义变量temp,排序时交换以便使用 int i,j,k; for(i=0;i<n-1;i++) { k=i; for(j=i+1;j<n;j++ ) if(stu[j].num<stu[k].num)//两两比较学号数字大小,由小到大排列 k=j; temp=stu[k];stu[k]=stu[i];stu[i]=temp;//进行交换比较 }} int main(){ struct student stu[4]={{"zhangsan",65,18,211301}, {"qiqi",89.5,17,211302}, {"wanger",75.3,15,211303}, {"mazi",93.7,19,211304}};//定义结构体数组,我理解为填写学生信息 int m,i,n; scanf("%d",&m); for(i=0;i<n;i++) {printf("%8s %6.2f %d %d\n",stu[i].name,stu[i].score,stu[i].age,stu[i].num);} printf("\n"); if(m==1) mode1; else if(m==2) mode2; else if(m==3) mode3; else if(m==4) mode4; for(i=0;i<n;i++) {printf("%8s %6.2f %d %d\n",stu[i].name,stu[i].score,stu[i].age,stu[i].num);} return 0;}
你题目的解答代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct student
{
char name[20];
float score;
int age;
int num;
};
void mode1(struct student stu[], int n) //参考书上307页(比较模式一)
{
struct student temp; //定义变量temp,排序时交换以便使用
int i, j, k;
for (i = 0; i < n - 1; i++)
{
k = i;
for (j = i + 1; j < n; j++)
if (stu[j].score > stu[k].score) //两两比较成绩,由高到低排列
k = j;
temp = stu[k];
stu[k] = stu[i];
stu[i] = temp; //进行交换比较
}
}
void mode2(struct student stu[], int n) //(比较模式二)
{
struct student temp; //定义变量temp,排序时交换以便使用
int i, j, k;
for (i = 0; i < n - 1; i++)
{
k = i;
for (j = i + 1; j < n; j++)
if (strcmp(stu[j].name , stu[k].name) < 0) //字符串比较要用strcmp
k = j;
temp = stu[k];
stu[k] = stu[i];
stu[i] = temp; //进行交换比较
}
}
void mode3(struct student stu[], int n) //(比较模式三)
{
struct student temp; //定义变量temp,排序时交换以便使用
int i, j, k;
for (i = 0; i < n - 1; i++)
{
k = i;
for (j = i + 1; j < n; j++)
if (stu[j].age < stu[k].age) //两两比较年龄,由小到大排列
k = j;
temp = stu[k];
stu[k] = stu[i];
stu[i] = temp; //进行交换比较
}
}
void mode4(struct student stu[], int n) //(比较模式四),
{
struct student temp; //定义变量temp,排序时交换以便使用
int i, j, k;
for (i = 0; i < n - 1; i++)
{
k = i;
for (j = i + 1; j < n; j++)
if (stu[j].num < stu[k].num) //两两比较学号数字大小,由小到大排列
k = j;
temp = stu[k];
stu[k] = stu[i];
stu[i] = temp; //进行交换比较
}
}
int main()
{
struct student stu[4] = {{"zhangsan", 65, 18, 211301}, {"qiqi", 89.5, 17, 211302}, {"wanger", 75.3, 15, 211303}, {"mazi", 93.7, 19, 211304}}; //定义结构体数组,我理解为填写学生信息
int m, i, n;
n = 4; // 定义变量n为学生人数4 这行放这里
scanf("%d", &m);
for (i = 0; i < n; i++)
{
printf("%8s %6.2f %d %d\n", stu[i].name, stu[i].score, stu[i].age, stu[i].num);
}
printf("\n");
if (m == 1)
mode1(stu,n);//函数要用()调用
else if (m == 2)
mode2(stu,n);
else if (m == 3)
mode3(stu,n);
else if (m == 4)
mode4(stu,n);
for (i = 0; i < n; i++)
{
printf("%8s %6.2f %d %d\n", stu[i].name, stu[i].score, stu[i].age, stu[i].num);
}
return 0;
}
如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!
#include <stdio.h>
#include <stdlib.h>
struct student
{
char name[20];
float score;
int age;
int num;
};
void mode1( struct student stu[],int n)//参考书上307页(比较模式一)
{ struct student temp;//定义变量temp,排序时交换以便使用
int i,j,k;
for(i=0; i<n-1; i++)
{ k=i;
for(j=i; j<n-1-i; j++ )
if(stu[j].score>stu[j+1].score) //两两比较成绩,由高到低排列
{
k=j;
temp=stu[j];
stu[j]=stu[j+1];
stu[j+1]=temp;//进行交换比较
}
}
}
void mode2(struct student stu[],int n)//(比较模式二)
{ struct student temp;//定义变量temp,排序时交换以便使用
int i,j,k;
for(i=0; i<n-1; i++)
{ k=i;
for(j=i+1; j<n; j++ )
if(stu[j].name<stu[k].name)
//两两比较姓名首字母,由A到Z排列
{
k=j;
temp=stu[j];
stu[j]=stu[j+1];
stu[j+1]=temp;
//进行交换比较
}
}
}
void mode3(struct student stu[],int n)//(比较模式三)
{ struct student temp;//定义变量temp,排序时交换以便使用
int i,j,k;
for(i=0; i<n-1; i++)
{ k=i;
for(j=i; j<n-1-i; j++ )
if(stu[j].age<stu[k].age)//两两比较年龄,由小到大排列
{
k=j;
temp=stu[k];
stu[k]=stu[i];
stu[i]=temp;//进行交换比较
}
}
}
void mode4(struct student stu[],int n)//(比较模式四),
//int n=4;//定义变量n为学生人数4
{ struct student temp;
//定义变量temp,排序时交换以便使用
int i,j,k;
for(i=0; i<n-1; i++)
{ k=i;
for(j=i; j<n-1-i; j++ )
if(stu[j].num<stu[j+1].num)//两两比较学号数字大小,由小到大排列
{
k=j;
temp=stu[j];
stu[j]=stu[j+1];
stu[j+1]=temp;
}
//进行交换比较
}
}
int main()
{
struct student stu[4]= {
{"zhangsan",65,18,211301},
{"lihaha",89.5,17,211302},
{"wanger",75.3,15,211303},
{"mazi",93.7,19,211304}
};
//定义结构体数组,我理解为填写学生信息
int m,i,n=4;
for(i=0; i<n; i++)
{
printf("%8s %6.2f %d %d\n",stu[i].name,stu[i].score,stu[i].age,stu[i].num);
}
printf("\n");
scanf("%d",&m);
if(m==1) mode1(stu,4);
else if(m==2) mode2(stu,4);
else if(m==3) mode3(stu,4);
else if(m==4) mode4(stu,4);
for(i=0; i<n; i++)
{
printf("%8s %6.2f %d %d\n",stu[i].name,stu[i].score,stu[i].age,stu[i].num);
}
return 0;
}