当前位置 博文首页 > xiexiexiexieqing的博客: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;
}
今天这个题很有意思 按生日从大到小排列 一般会想到 先比较年在是月,日 这样循环太多
所以在通讯录这个结构体里面在定义一个 值它的作用就是把生日全部加起来(360*年+30*月+日)
然后通过比较这个值就ok了呀 越小越大
电话号码乱敲的哈哈哈
cs