吾爱姚吕婧妍 发表于 2018-11-23 21:13

11.23 每日一c

本帖最后由 吾爱姚吕婧妍 于 2018-12-2 17:14 编辑

/*通信录排序:建立一个通讯录,通讯录的结构记录包括:
姓名 生日 电话号码;期中生日又包括三项:年 月 日。
编写程序,定义一个嵌套的结构类型,输入n(n<10)个联系人的信息,
在按他们的的年龄从大到小的顺序依次输出其信息。试编写相应程序。
*/
//仅限年大小
#include<stdio.h>
struct birthday
{
    int year;
    int month;
    int day;
} ;
struct Maillist
{
    char name;
    struct birthday date;
    double Phonenumber;
} s,max;

int main()
{
    int i,n,min;// i表示for循环的自变量,n表示输入多少个数据
    printf("Enter you want to how much n ");
    scanf("%d",&n);
    for(i=0;i<n;i++)
    {
      printf("name %d :",i+1);
      scanf("%s",&s.name);
      printf("Tel: ");
      scanf("%lf",&s.Phonenumber);
      printf("date of birth :");
      scanf("%d%d%d" ,&s.date.year,&s.date.month,&s.date.day);
    }
    int j,m;
// j为for的第二个自变量循环
// m为记录记录最大的那个同学的序号
    for(i=0;i<n;i++)
    {
      min=s.date.year;
      m=i;
      for(j=i+1;j<n;j++)
      {
            if(s.date.year<min)
            {
                min=s.date.year;
                m=j;   
            }
//比较大小后的交换
            max=s;
            s=s;
            s=max;
      }
         
    }
//打印
    for(i=0;i<n;i++)
    {
      printf("%s %0.f %d %d %d \n" ,s.name,s.Phonenumber,s.date.year,s.date.month,s.date.day);
    }
    return 0;
}






// 此题的参考答案
#include<stdio.h>
structstudent
{
    char name;
    int birthday;//一开始我用char 发现不能比较(⊙o⊙)…
    char Tel;
};
void studentsort(struct student s[],int t)
{
    struct student map;//先再定义一个结构 方便判断语句的双值转换
    int i,j;
    for(i=1;i<t;i++)// i=1是只需要循环n-1次就可以排列整齐
    {
      for(j=0;j<t-1;j++)
      {
            //判断大的数字年龄越小放在后面
            if(s.birthday>s.birthday)
            {
                map=s;
                s=s;
                s=map;
             }
      }
    }
}
int main()
{
    int i,n;
    printf("Enter your want to input how much information : ");
    scanf("%d",&n);
    //定义一个结构
    struct student pop;
    for(i=0;i<n;i++)
    {
      printf("Please input name birthday Tel ");
      scanf("%s %d %s",&pop.name,&pop.birthday,&pop.Tel);
   }
   studentsort(pop,n);
   //打印
   for(i=0;i<n;i++)
   {
      printf("name:%s birthday:%d Tel:%s\n",pop.name,pop.birthday,pop.Tel);
   }
   return 0;
}

嘤樱怪 发表于 2018-11-23 21:35

可以的 兄弟{:1_921:}

wow999 发表于 2018-11-23 22:51

可以的,兄弟!!这段语句写得非常的简洁完美!表达也是通俗易懂

wangqiustc 发表于 2018-11-23 23:14

代码简洁,不看注释竟然懂了

congratulation 发表于 2018-11-24 11:10

可以的,挺厉害的,贵在坚持

iamshy520 发表于 2018-11-24 20:55

建议楼主看点代码规范的书,对你的学习会有好处的

520523526 发表于 2018-11-28 09:39

可以的!

106lby9574972 发表于 2018-11-29 21:39

如果把下面的比较排序换成冒泡排序的方法会更简洁,另外代码写得不是很规范,影响不大

吾爱姚吕婧妍 发表于 2018-11-29 21:44

106lby9574972 发表于 2018-11-29 21:39
如果把下面的比较排序换成冒泡排序的方法会更简洁,另外代码写得不是很规范,影响不大

谢谢 提醒
虽然重新打过一遍答案
却还是该去拿着答案和自己比较一下了
页: [1]
查看完整版本: 11.23 每日一c