C语言-对一个结构体中的字段进行排序

Posted cynchanpin

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言-对一个结构体中的字段进行排序相关的知识,希望对你有一定的参考价值。

这是帮别人做的一个题目,好久没有接触过C语言了。有点发怵,只是似乎找回点当时学C语言,做课程设计的感觉。

题目:定义一个数组(学生结构体数组),里面包括学号、姓名、身份证和三科学生成绩。要求写一个函数,依据学生不论什么一个字段(如学号、姓名、身份证),进行排序。


源代码:

//// stu.cpp : Defines the entry point for the console application.
////
//
#include "stdafx.h"
//------------------------------------------指针排序-------------------------------------------------------------------------------

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

#define N 3

//学生结构体
struct student{
	long stuNum; //学号
	char name[20];//姓名
	char idCard[18];//身份证
	float score[3];//三门成绩
};

//依据学生姓名排序
void name_sort(student *stu,int n)
{
	student temp;
	for(int i=0;i<n-1;i++)
	{
		for(int j=0;j<n-1-i;j++)
		{
			if(strcmp(stu[j].name,stu[j+1].name)>0)
			{
				temp =stu[j+1];
				stu[j+1]=stu[j];
				stu[j]=temp;

			}
		}
	}

	printf("\n");
	printf("*依据学生姓名排序后的学生情况:\n\n");

	for(int i=0;i<N;i++)
	{
		printf("第 %d 个学生信息:\n学号:%ld\t姓名:%s\t身份证:%s\t语文:%.2f\t数学:%.2f\t英语:%.2f\n\n",i+1,stu[i].stuNum,stu[i].name,stu[i].idCard,stu[i].score[0],stu[i].score[1],stu[i].score[2]);

	}
}
//依据身份证进行排序
void idCard_sort(student *stu,int n)
{
	student temp;
	for(int i=0;i<n-1;i++)
	{
		for(int j=0;j<n-1-i;j++)
		{
			if(strcmp(stu[j].idCard,stu[j+1].idCard)>0)
			{
				temp =stu[j+1];
				stu[j+1]=stu[j];
				stu[j]=temp;

			}
		}
	}


	printf("\n");
	printf("*依据学生身份证排序后的学生情况:\n\n");

	for(int i=0;i<N;i++)
	{
		printf("第 %d 个学生信息:\n学号:%ld\t姓名:%s\t身份证:%s\t语文:%.2f\t数学:%.2f\t英语:%.2f\n\n",i+1,stu[i].stuNum,stu[i].name,stu[i].idCard,stu[i].score[0],stu[i].score[1],stu[i].score[2]);

	}


}

//依据学号进行排序

void stuNum_sort(student *stu,int n)
{
	
	student temp;
	for(int i=0;i<n-1;i++)
	{
		for(int j=0;j<n-1-i;j++)
		{
			if(stu[j].stuNum>stu[j+1].stuNum)
			{
				temp =stu[j+1];
				stu[j+1]=stu[j];
				stu[j]=temp;

			}
		}
	}


	printf("\n");
	printf("*依据学生学号排序后的学生情况:\n\n");

	for(int i=0;i<N;i++)
	{
		printf("第 %d 个学生信息:\n学号:%ld\t姓名:%s\t身份证:%s\t语文:%.2f\t数学:%.2f\t英语:%.2f\n\n",i+1,stu[i].stuNum,stu[i].name,stu[i].idCard,stu[i].score[0],stu[i].score[1],stu[i].score[2]);
		
	}


}

//main函数

int main()
{

	struct student stu[N],*pStu;

	//控制台屏幕变为蓝色背景
	system("color 1f");

	printf("请依次输入学生的学号,姓名,身份证,三门成绩(空格分开)\n");
	for(int i=0;i<N;i++)
	{
		printf("输入第 %d 个学生的信息\n",i+1);
		scanf("%ld%s%s%f%f%f",&stu[i].stuNum,stu[i].name,stu[i].idCard,&stu[i].score[0],&stu[i].score[1],&stu[i].score[2]);
		
	}
	
	pStu=stu;



	//清屏
	system("cls");


	printf("\n*** 输入1 依照学生学号排序 ***\n*** 输入2 依照学生姓名排序 ***\n*** 输入3 依照学生身份证排序 ***\n*** 输入0 退出 ***\n\n");

	printf("请输入:");
	int t;
	scanf("%d",&t);

	//循环
	do{
		//依据用户输入的值选择排序的字段
		switch (t)
		{
		case 1:
			stuNum_sort(pStu,N);//学号排序
			break;
		case 2:
			name_sort(pStu,N);//姓名排序
			break;

		case 3:
			idCard_sort(pStu,N);//身份证排序
			break;

		default:
			name_sort(pStu,N);
		}


		printf("\n请输入:");
		scanf("%d",&t);

	}while(t!=0);

	return 1;
}






//------------------没有指针--------------------------------------------------------------------------------------------------

//
//#include<stdio.h>
//#include<stdlib.h>
//#include<string.h>
//
//#define N 5
//
////学生结构体
//struct student{
//	long stuNum; //学号
//	char name[20];//姓名
//	char idCard[18];//身份证
//	float score[3];//三门成绩
//};
//
//
////依据学生姓名排序
//void name_sort(student stu[],int n)
//{
//	student temp;
//	for(int i=0;i<n-1;i++)
//	{
//		for(int j=0;j<n-1-i;j++)
//		{
//			if(strcmp(stu[j].name,stu[j+1].name)>0)
//			{
//				temp =stu[j+1];
//				stu[j+1]=stu[j];
//				stu[j]=temp;
//
//			}
//		}
//	}
//
//
//	printf("\n");
//	printf("*依据学生姓名排序后的学生情况:\n\n");
//	
//	for(int i=0;i<N;i++)
//	{
//		printf("第 %d 个学生信息:\n学号:%ld\t姓名:%s\t身份证:%s\t语文:%.2f\t数学:%.2f\t英语:%.2f\n\n",i+1,stu[i].stuNum,stu[i].name,stu[i].idCard,stu[i].score[0],stu[i].score[1],stu[i].score[2]);
//		
//	}
//
//
//}
////依据身份证进行排序
//void idCard_sort(student stu[],int n)
//{
//	student temp;
//	for(int i=0;i<n-1;i++)
//	{
//		for(int j=0;j<n-1-i;j++)
//		{
//			if(strcmp(stu[j].idCard,stu[j+1].idCard)>0)
//			{
//				temp =stu[j+1];
//				stu[j+1]=stu[j];
//				stu[j]=temp;
//
//			}
//		}
//	}
//
//
//	printf("\n");
//	printf("*依据学生身份证排序后的学生情况:\n\n");
//
//	for(int i=0;i<N;i++)
//	{
//		printf("第 %d 个学生信息:\n学号:%ld\t姓名:%s\t身份证:%s\t语文:%.2f\t数学:%.2f\t英语:%.2f\n\n",i+1,stu[i].stuNum,stu[i].name,stu[i].idCard,stu[i].score[0],stu[i].score[1],stu[i].score[2]);
//
//	}
//
//
//}
//
////依据学号进行排序
//
//void stuNum_sort(student stu[],int n)
//{
//	student temp;
//
//	for(int i=0;i<n-1;i++)
//	{
//		for(int j=0;j<n-1-i;j++)
//		{
//			if(stu[j].stuNum>stu[j+1].stuNum)
//			{
//				temp =stu[j+1];
//				stu[j+1]=stu[j];
//				stu[j]=temp;
//
//			}
//		}
//	}
//
//
//	printf("\n");
//	printf("*依据学生学号排序后的学生情况:\n\n");
//
//	for(int i=0;i<N;i++)
//	{
//		printf("第 %d 个学生信息:\n学号:%ld\t姓名:%s\t身份证:%s\t语文:%.2f\t数学:%.2f\t英语:%.2f\n\n",i+1,stu[i].stuNum,stu[i].name,stu[i].idCard,stu[i].score[0],stu[i].score[1],stu[i].score[2]);
//
//	}
//
//
//}
//
////main函数
//
//int main()
//{
//
//	struct student stu[N];
//	
//	//控制台屏幕变为蓝色背景
//	system("color 1f");
//
//	printf("请依次输入学生的学号,姓名,身份证,三门成绩(空格分开)\n");
//	for(int i=0;i<N;i++)
//	{
//		printf("输入第 %d 个学生的信息\n",i+1);
//		scanf("%ld%s%s%f%f%f",&stu[i].stuNum,stu[i].name,stu[i].idCard,&stu[i].score[0],&stu[i].score[1],&stu[i].score[2]);
//
//	}
//
//	//清屏
//	system("cls");
//	
//	
//	//printf("*你所输入的学生信息情况:\n");
//	//for(i=0;i<N;i++)
//	//{
//	//	printf("第 %d 个学生信息:\n学号:%ld\t姓名:%s\t身份证:%s\t语文:%.2f\t数学:%.2f\t英语:%.2f\n",i+1,stu[i].stuNum,stu[i].name,stu[i].idCard,stu[i].score[0],stu[i].score[1],stu[i].score[2]);
//	//
//	//}
//	
//
//	printf("\n*** 输入1 依照学生学号排序 ***\n*** 输入2 依照学生姓名排序 ***\n*** 输入3 依照学生身份证排序 ***\n*** 输入0 退出 ***\n\n");
//	
//	printf("请输入:");
//	int t;
//	scanf("%d",&t);
//	
//	//循环
//	do{
//		//依据用户输入的值选择排序的字段
//		switch (t)
//		{
//		case 1:
//				stuNum_sort(stu,N);//学号排序
//				break;
//		case 2:
//				name_sort(stu,N);//姓名排序
//				break;
//				
//		case 3:
//				idCard_sort(stu,N);//身份证排序
//				break;
//			
//		default:
//			name_sort(stu,N);
//		}
//
//
//		printf("\n请输入:");
//		scanf("%d",&t);
//
//	}while(t!=0);
//
//
//	return 1;
//}
首页效果图:

技术分享

资源下载:

http://download.csdn.net/my/uploads



以上是关于C语言-对一个结构体中的字段进行排序的主要内容,如果未能解决你的问题,请参考以下文章

用lambda表达式按照结构体中的一个字段来排序一个结构体数组

c语言中如何将按结构体中的某个元素大小,将结构体排序输出

如何给C语言结构体中的成员赋默认值

求教一个问题,如何用sort对结构体数组排序

如何对结构体中的数组进行一次性全部赋值?谢谢,比如就是这个意思 b.a[]=,,,,;

C语言,请问如何将结构体中的结构体拷贝到内存