当前位置 博文首页 > xiexiexiexieqing的博客:c程序写通讯录(生日 姓名 电话号码)

    xiexiexiexieqing的博客:c程序写通讯录(生日 姓名 电话号码)

    作者:[db:作者] 时间:2021-07-17 19:17

    #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;
    }

    今天这个题很有意思 按生日从大到小排列 一般会想到 先比较年在是月,日 这样循环太多

    所以在通讯录这个结构体里面在定义一个 值它的作用就是把生日全部加起来(360*年+30*月+日)

    然后通过比较这个值就ok了呀 越小越大

    电话号码乱敲的哈哈哈

    cs