C语言结构体 选择排序

 

#include <stdio.h>
#include <stdlib.h>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
 
//定义数据   通讯录 
struct data
{
	char name[20];         //名字 
	struct{int n;int y;int r;}time; //生日 
	double mun;   //把生日的年月日同一单位后相加 
	char num[20];  //电话号码 
 };
 
int createnode(int i)     // i是主函数里的参数  i代表又 i个同学 
{
    struct data a[i];    //建立结构体数组 
	int n;             //循环变量 
	
	for(n=0;n<i;n++)
	{
		//a[n]=malloc(sizeof(struct data));   在链表里面可以写这一句 
		printf("第%d个同学 :\n",n+1);
		printf("输入生日 年() 月() 日() 和 电话号码(12位):");
		scanf("%d%d%d%s",&a[n].time.n,&a[n].time.y,&a[n].time.r,&a[n].num);	
		printf("输入 姓名 "); 
		scanf("%s",&a[n].name);	
		printf("\n");
		a[n].mun=360*a[n].time.n+30*a[n].time.y+a[n].time.r;  //把生日的年月日同一单位后相加  
			
	}
	int e;    //循环变量 
	struct data x;   
	struct data t;    
	for(n=0;n<i-1;n++)    //选择排列 大-->小 
	{
		for(e=i-1;e>n;e--)
		{
			if(a[n].mun > a[e].mun)  //通过比较 总和越小年龄越大 
			{
				x=a[n];
				a[n]=a[e];
				a[e]=x;
			}
		}
	}
	


	for(n=0;n<i;n++)
	{
		printf("姓名:%s, 生日:%d--%d--%d, 电话号为:%s",a[n].name,a[n].time.n,a[n].time.y,a[n].time.r,a[n].num);
		printf("\n");
	}
}

int main(int argc, char *argv[]) 
{
     int m;
     printf("输入有m个同学: "); 
     scanf("%d",&m);
    createnode(m);
	return 0;
}

 

记得点赞支持一下  (电话号码乱写的 哈哈哈)