C語言-對一個結構體中的欄位進行排序

六月心悸發表於2015-07-12

這是幫別人做的一個題目,好久沒有接觸過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

相關文章