c语言通讯录排序按年龄从小到大输出

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c语言通讯录排序按年龄从小到大输出相关的知识,希望对你有一定的参考价值。

#include"stdio.h"
#define N 10
struct Date
int year;
int month;
int day;
;
struct Mate
char name[10];

long birthday;

char tel[12];
;
struct Mate classmate[N];
int Datecomp(struct Date d1,struct Date d2);//d1年龄比d2大返回1,相等返回0,小则返回-1
int main()
int i,j,k,n;
struct Mate m;
scanf("%d",&n);
for(i=0;i<n;i++) //输入n个同学的信息
scanf("%s",classmate[i].name);
scanf("%d-%d-%d",&classmate[i].birthday.year,&classmate[i].birthday.month,&classmate[i].birthday.day);
scanf("%s",classmate[i].tel);

for(i=0;i<n-1;i++) //按照年龄降序排列
k=i;//下面到对应大括号是我自己填的,不知道有没有问题

for(j=i+1;j<n;j++)
if(classmate[j].birthday<classmate[k].birthday)
m=classmate[j];
classmate[j]=classmate[i];
classmate[i]=m;



if(k!=i)
m=classmate[i];
classmate[i]=classmate[k];
classmate[k]=m;


for(i=0;i<n;i++)
printf("name:%10s,%d-%d-%d,%12s\n",classmate[i].name,classmate[i].birthday.year,classmate[i].birthday.month,classmate[i].birthday.day,classmate[i].tel);
return 0;


int Datecomp(struct Date d1,struct Date d2)

//完全不知道填什么……

void sort(struct Man *p,int n)//p是数组第一元素指针,n是数组长度
int i,j,k;
struct Man t;
for(i=0;i<n;i++)
for(k=i,j=k+1;j<n;j++)
if(strcmp(p[k].Name,p[j].Name)>0)
k=j;
if(k!=i)//这里是k与i的关系而非j
t=p[k];//这里交换整个数组元素,不能只交换成员Name
p[k]=p[i];
p[i]=t;


参考技术A void
sort(struct
Man
*p,int
n)//p是数组第一元素指针,n是数组长度
int
i,j,k;
struct
Man
t;
for(i=0;i
0)
k=j;
if(k!=i)//这里是k与i的关系而非j
t=p[k];//这里交换整个数组元素,不能只交换成员Name
p[k]=p[i];
p[i]=t;


c语言姓名首字母排序问题

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct Student
char nam[30];
char sex[7];
int num;;

void Sort(struct Student *stu)

int i,j;
struct Student temp;
//开始进行冒泡排序
for(i=0;i<4;i++)
for(j=0;j<4-1;j++)

if(strcmp(stu[j].nam[0],stu[j+1].nam[0])<0) //比较首字符的ASCII

temp=stu[j]; //互换
stu[j]=stu[j+1];
stu[j+1]=temp;



main ()

struct Student stu[4];
int i;
printf("NOW INPUT\n");
for(i=0;i<4;i++) //

printf("Input name\n"); //输入姓名
gets(stu[i].nam);
printf("Input sex"); //输入性别
gets(stu[i].sex);
printf("Input number\n"); //输入学号
scanf("%d", &stu[i].num);

Sort(stu); //Sort函数


各位大哥,这是小弟自己想的,不知道对不对。主要目的是。按学生姓名的首字母排序
比如:Ann Bobby Daive ..... Tina ....

参考技术A 按照C语言语法,main函数须为void类型;另外,你所编辑的程序段没有输入。就排序方式来讲你所用的是函数的址传递及字符串比较大小的函数,这点没有错误;就理解而言strcmp函数的确可以实现你所需的功能,其大小的比较式按ASCⅡ码值进行的比较,不知道你有没有意识到。追问

你的回答挺有意思!
gets不是输入?scanf不是输入?

参考技术B 既然你学生姓名是保存在char nam[30];中,用其搜字幕排序就是相当于对nam[0]字符排序,很简单的一件事情,类似于你对整数数组排序一样 参考技术C
#include <stdio.h>
#include <string.h>
int main()

char name[100][15];
char tmp[15];
int n,i,j;
scanf("%d",&n);//名字数
for ( i=0;i<n;i++)

scanf("%s",name[i]);

for (i=0;i<n;i++)

for (j=0;j<n-i-1;j++)

if (strcmp(name[j],name[j+1])>0)

strcpy(tmp,name[j]);
strcpy(name[j],name[j+1]);
strcpy(name[j+1],tmp);



for (i=0;i<n;i++)

printf("%s\n",name[i]);


return 0;
本回答被提问者采纳

以上是关于c语言通讯录排序按年龄从小到大输出的主要内容,如果未能解决你的问题,请参考以下文章

C语言程序设计:通讯录程序设计

c语言用数组做通讯录 怎样将联系人的姓名首字母排序 并且输出 求大侠

C语言制作通讯录怎么将联系人的名字按26个字母的顺序排序

C语言实现通讯录(文件操作)

C语言 写一个通讯录

用c语言实现通讯录(含文件操作)