40-C语言-比较结构体生日大小,从而由大到小输出

问题:
班里有50个学生,每个学生需要填写姓名和生日,生日用yyyy/xx/xx形式输入,最后输出按照年龄由大到小输出。

思路:

  1. 学生为一个结构体,里面包含姓名和生日——struct  room{ char name[6];char birth[12] };
  2. 这个结构体,类似于 int char,当成类型即可,我们用它去定义变量, struct room a[50],结构体数组,有50个学生,所以定义50个,每一个a【i】,存一个该学生的信息;
  3. 进行输入,for循环,给a【i】赋值,赋值的时候需要给结构体内每一个内容进行赋值,如a[i].name,a[i].birth,对应它的输入类型,%s,字符串
  4. 由于需要进行排序输出,所以我们使用冒泡排序,来实现结构体的交换。
  5. 中间变量temp也应为结构体 room,比较生日,从而由大到小排序,又因为生日为字符类型为字符串,直接进行生日比较,可能会出错,最好使用专门的字符串比较函数strcmp(a,b),进行比较;
  6. 最后弄个for循环,输出即可。
#include 
#include 
int main()
{
	struct room
	{
		char name[6];
		char birth[12];
	};
	struct room a[50];
	int i;
	for(i=0;i<4;i++)
	{
		scanf("%s %s",&a[i].name,&a[i].birth);
		
	}
	struct room temp;
	int m,n;
    //进行冒泡排序,比较的时候时结构体比较,因此中间变量temp也应为结构体类型
    //结构体比较,比较其中一项,然后内容交换时,直接交换结构体明,即可全部交换
    //因为这里生日为字符类型,所以应用strcmp进行字符比较
	for(m=0;m<4-1;m++)
	{//	printf("******a[%d]=%s %s***\n",m,a[m].name,a[m].birth);
		for(n=0;n<4-1-m;n++)
		{
		//	printf("a[%d]=%s %s ***\n",n,a[n].name,a[n].birth);
			if(strcmp(a[n].birth,a[n+1].birth)<0)  //strcmp(a,b)为比较字符的函数,ab则为整数 
			{
				temp = a[n+1];
				a[n+1] =a[n];
				a[n]= temp;
			}
			else
				continue;
		
		//	printf("a[%d]=%s %s\n",n,a[n].name,a[n].birth);
		}
	
	}
	int p;
	for(p=0;p<4;p++)  //输出测试
	{
		printf("a[%d]:%s %s ",p,a[p].name,a[p].birth);
	}
	
	
	return 0;
 } 

你可能感兴趣的:(C语言学习笔记,c语言,算法,开发语言)