本帖最后由 吾爱姚吕婧妍 于 2018-12-2 17:14 编辑
[Asm] 纯文本查看 复制代码 /*通信录排序:建立一个通讯录,通讯录的结构记录包括:
姓名 生日 电话号码;期中生日又包括三项:年 月 日。
编写程序,定义一个嵌套的结构类型,输入n(n<10)个联系人的信息,
在按他们的的年龄从大到小的顺序依次输出其信息。试编写相应程序。
*/
//仅限年大小
#include<stdio.h>
struct birthday
{
int year;
int month;
int day;
} ;
struct Maillist
{
char name[10];
struct birthday date;
double Phonenumber;
} s[10],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[i].name);
printf("Tel: ");
scanf("%lf",&s[i].Phonenumber);
printf("date of birth :");
scanf("%d%d%d" ,&s[i].date.year,&s[i].date.month,&s[i].date.day);
}
int j,m;
// j为for的第二个自变量循环
// m为记录记录最大的那个同学的序号
for(i=0;i<n;i++)
{
min=s[i].date.year;
m=i;
for(j=i+1;j<n;j++)
{
if(s[j].date.year<min)
{
min=s[j].date.year;
m=j;
}
//比较大小后的交换
max=s[i];
s[i]=s[m];
s[m]=max;
}
}
//打印
for(i=0;i<n;i++)
{
printf("%s %0.f %d %d %d \n" ,s[i].name,s[1].Phonenumber,s[i].date.year,s[i].date.month,s[i].date.day);
}
return 0;
}
[Asm] 纯文本查看 复制代码
// 此题的参考答案
#include<stdio.h>
struct student
{
char name[10];
int birthday;//一开始我用char 发现不能比较(⊙o⊙)…
char Tel[30];
};
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[j].birthday>s[j+1].birthday)
{
map=s[j+1];
s[j+1]=s[j];
s[j]=map;
}
}
}
}
int main()
{
int i,n;
printf("Enter your want to input how much information : ");
scanf("%d",&n);
//定义一个结构
struct student pop[n];
for(i=0;i<n;i++)
{
printf("Please input name birthday Tel ");
scanf("%s %d %s",&pop[i].name,&pop[i].birthday,&pop[i].Tel);
}
studentsort(pop,n);
//打印
for(i=0;i<n;i++)
{
printf("name:%s birthday:%d Tel:%s\n",pop[i].name,pop[i].birthday,pop[i].Tel);
}
return 0;
}
|