【Struct(结构体)杂谈之一】从女孩怎么选男朋友开始...Struct是为了解决什么问题?

2024-03-20 06:08

本文主要是介绍【Struct(结构体)杂谈之一】从女孩怎么选男朋友开始...Struct是为了解决什么问题?,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Struct是为了解决什么问题?

(作者:L.L  出处:http://blog.csdn.net/tcpipstack , 欢迎转载,也请保留这段声明。谢谢!)


“关关雎鸠,在河之洲。窈窕淑女,君子好逑”,《诗经》三百篇,开篇就是男女之间的恋情,可见几千年的古人也十分重视爱情。这也难怪,毕竟男女的婚姻是人伦之始,而且含有成家立业的意思。引用生物学的观点来解释,就是“求食求偶是关系到人类生存繁衍的大事”,能不重视么?


       在我们的老祖宗还住在山洞里的那个时代,野外看到一个漂亮的女野人,一棍子敲晕,拖进洞里…不过那个年代已经一去不复返了。随着人类的进步,具体到现在这个社会,现代的女人都要求男方高富帅,有车有房…当然按照进化心理学的观点来看,这些东西都代表着男性获取资源的能力,而智人(人类)的后代是很脆弱的,为了繁衍,所以女性是将男性所获取的资源和获取资源的能力置于第一位的。


       不过,由于拜国内的房地产所赐,身为一名D丝的话,想要追到一个女孩,也变得异常困难,一方面是硬件上的劣势,比如外表、车、房子、一份体面的工作灯;另外一方面又有软件上的劣势,比如幽默感,人品如何、性格等。付出的服务项目也越来越多,既要送花,要帮女孩做这个做那个表决心,还要送这个送那个表付出。


据说20年后国内将有3000w男性光棍,女孩也就成了卖方市场,眼前这么多追求者,高富帅各方面程度都不一样,应该把哪个放在第一位呢?该怎么选呢?

 

比如一位美女,就有3位男性追求者,比较来比较去,某天决定先按照“帅”的程度排个序,选一个最“帅”的:

/************************************************************************************
** File: - Z:\work\code\c\Struct\WhyUsingStuct.c
** 
** Copyright (C) Long.Luo, All Rights Reserved!
** 
** Description: 
**      WhyUsingStruct.c ---
** 
** Version: 1.1
** Date created: 22:25:44,20/12/2012
** Author: Long.Luo
** 
** --------------------------- Revision History: --------------------------------
** 	<author>	<data>			<desc>
** 
************************************************************************************/#include <stdio.h>/* Number of the boys */	
#define BOYS_NUM	(3)void main()
{int i, j;/* Name */		char name[BOYS_NUM][10];/* height */int height[BOYS_NUM];/* rich */int money[BOYS_NUM];/* handsome */int handsome[BOYS_NUM];/* pointer array of the boys' name */char *pName[BOYS_NUM];/* the temporary */int heightTemp, moneyTemp, handsomeTemp;char *nameTemp;for (i = 0; i < BOYS_NUM; i++){pName[i] = name[i];}for(i = 0; i < BOYS_NUM; i++){printf("Pls input the Name of the No. %d Boys:", i + 1);gets(pName[i]);if (*pName[i] == '\0'){gets(pName[i]);}printf("Pls input the Height of %s :", pName[i]);scanf("%d", &height[i]);printf("Pls input the Money of %s :", pName[i]);scanf("%d", &money[i]);printf("Pls input the Handsome of %s :", pName[i]);scanf("%d", &handsome[i]);}/* sort by Height *//* Only write one item. */ for (i = 0; i < BOYS_NUM - 1; i++){for (j = i + 1; j < BOYS_NUM; j++){if (handsome[i] < handsome[j]){nameTemp = pName[i];pName[i] = pName[j];pName[j] = nameTemp;handsomeTemp = handsome[i];handsome[i] = handsome[j];handsome[j] = handsomeTemp;}}}for (i = 0; i < BOYS_NUM; i++){printf("\nThe Boys's info: %s\t, height: %d\t, money: %d\t, handsome: %d\t");}getchar();
}	


       但是上面的代码有很明显缺点:

1.变量过多,同一追求者的各个数据无联系,没有整体概念,不便管理;

2. 操作不便,假如某天想把“富”作为第一考虑呢?或者根据不同面采取不同的加权来选择呢?

男人,不止一面(七匹狼广告)

一个事物往往有很多的特征,但是人们往往去表达事物的时候,不是说特征,而是讲整体。零碎的信息、有时候很难替代一个整体信息结构。显然,选用一种能把一个追求者的数据构造成一个整体的构造型数据结构更合适,但不能是数组。对于这种情况,可以将一个追求者的数据定义为一个"ExpectedBoyFriend"结构体类型:

struct ExpectedBoyFriend
{char name[10];int height;int money;int handsome;
};

有时需要将不同类型的数据组合成一个有机的整体,以供用户方便地使用,而这些组合在一个整体中的数据是互相联系的。C和C++允许用户自己指定这样一种数据类型,它称为结构体,在一个组合项中包含若干个类型不同(当然也可以相同)的数据项。

类似上例,我们就声明了一个新的结构体类型ExpectedBoyFriend,它向编译系统声明: 这是一种结构体类型,它包括name, height, money, handsome等不同类型的数据项。ExpectedBoyFriend是一个类型名,它和系统提供的标准类型(如int、char、float、double等)一样,都可以用来定义变量,只不过结构体类型需要事先由用户自己声明而已。

声明一个结构体类型的一般形式为

struct tag
{member-list
}
varible-list

结构体类型名用来作结构体类型的标志。上面的声明中ExpectedBoyFriend就是结构体类型名。大括号内是该结构体中的全部成员(member),由它们组成一个特定的结构体。上例中的name, height, money, handsome等都是结构体中的成员。在声明一个结构体类型时必须对各成员都进行类型声明:

	即类型名  成员名;

每一个成员也称为结构体中的一个域(field)。成员表列又称为域表。成员名的定名规则与变量名的定名规则相同。

我们再看看使用Struct之后的代码:

/************************************************************************************
** File: - Z:\work\code\c\Struct\UsingStruct.c
** 
** Copyright (C) Long.Luo, All Rights Reserved!
** 
** Description: 
**      UsingStruct.c ---
** 
** Version: 1.2
** Date created: 22:52:29,20/12/2012
** Author: Long.Luo
** 
** --------------------------- Revision History: --------------------------------
** 	<author>	<data>			<desc>
** 
************************************************************************************/#include <stdio.h>/* Number of the boys */	
#define BOYS_NUM	(3)struct ExpectedBoyFriend
{char name[10];int height;int money;int handsome;
};void main()
{struct ExpectedBoyFriend ebf[BOYS_NUM];struct ExpectedBoyFriend ebfTemp;int i, j;for (i = 0; i < BOYS_NUM; i++){printf("Pls input the Name of the No. %d Boys:", i + 1);gets(ebf[i].name);if (ebf[i].name[0] == '\0'){gets(ebf[i].name);}printf("Pls input the Height of %s :", ebf[i].name);scanf("%d", &ebf[i].height);printf("Pls input the Money of %s :", ebf[i].name);scanf("%d", &ebf[i].money);printf("Pls input the Handsome of %s :", ebf[i].name);scanf("%d", &ebf[i].handsome);}/* Sort by Height *//* Only write one item. */ for (i = 0; i < BOYS_NUM - 1; i++){for (j = i + 1; j < BOYS_NUM; j++){if (ebf[i].height < ebf[j].height){ebfTemp = ebf[i];ebf[i] = ebf[j];ebf[j] = ebfTemp;}}}for (i = 0; i < BOYS_NUM; i++){printf("%s: \tHeight:%d, \tMoney: %d, \tHandsome:%d\n", ebf[i].name, ebf[i].height, ebf[i].money, ebf[i].handsome);}getchar();
}		
代码是不是变得简洁多了呢?

以上

(作者:L.L  出处:http://blog.csdn.net/tcpipstack , 欢迎转载,也请保留这段声明。谢谢!)




这篇关于【Struct(结构体)杂谈之一】从女孩怎么选男朋友开始...Struct是为了解决什么问题?的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/828518

相关文章

Oracle查询表结构建表语句索引等方式

《Oracle查询表结构建表语句索引等方式》使用USER_TAB_COLUMNS查询表结构可避免系统隐藏字段(如LISTUSER的CLOB与VARCHAR2同名字段),这些字段可能为dbms_lob.... 目录oracle查询表结构建表语句索引1.用“USER_TAB_COLUMNS”查询表结构2.用“a

Springboot项目启动失败提示找不到dao类的解决

《Springboot项目启动失败提示找不到dao类的解决》SpringBoot启动失败,因ProductServiceImpl未正确注入ProductDao,原因:Dao未注册为Bean,解决:在启... 目录错误描述原因解决方法总结***************************APPLICA编

解决pandas无法读取csv文件数据的问题

《解决pandas无法读取csv文件数据的问题》本文讲述作者用Pandas读取CSV文件时因参数设置不当导致数据错位,通过调整delimiter和on_bad_lines参数最终解决问题,并强调正确参... 目录一、前言二、问题复现1. 问题2. 通过 on_bad_lines=‘warn’ 跳过异常数据3

解决RocketMQ的幂等性问题

《解决RocketMQ的幂等性问题》重复消费因调用链路长、消息发送超时或消费者故障导致,通过生产者消息查询、Redis缓存及消费者唯一主键可以确保幂等性,避免重复处理,本文主要介绍了解决RocketM... 目录造成重复消费的原因解决方法生产者端消费者端代码实现造成重复消费的原因当系统的调用链路比较长的时

深度解析Nginx日志分析与499状态码问题解决

《深度解析Nginx日志分析与499状态码问题解决》在Web服务器运维和性能优化过程中,Nginx日志是排查问题的重要依据,本文将围绕Nginx日志分析、499状态码的成因、排查方法及解决方案展开讨论... 目录前言1. Nginx日志基础1.1 Nginx日志存放位置1.2 Nginx日志格式2. 499

SpringBoot监控API请求耗时的6中解决解决方案

《SpringBoot监控API请求耗时的6中解决解决方案》本文介绍SpringBoot中记录API请求耗时的6种方案,包括手动埋点、AOP切面、拦截器、Filter、事件监听、Micrometer+... 目录1. 简介2.实战案例2.1 手动记录2.2 自定义AOP记录2.3 拦截器技术2.4 使用Fi

kkFileView启动报错:报错2003端口占用的问题及解决

《kkFileView启动报错:报错2003端口占用的问题及解决》kkFileView启动报错因office组件2003端口未关闭,解决:查杀占用端口的进程,终止Java进程,使用shutdown.s... 目录原因解决总结kkFileViewjavascript启动报错启动office组件失败,请检查of

SQL Server安装时候没有中文选项的解决方法

《SQLServer安装时候没有中文选项的解决方法》用户安装SQLServer时界面全英文,无中文选项,通过修改安装设置中的国家或地区为中文中国,重启安装程序后界面恢复中文,解决了问题,对SQLSe... 你是不是在安装SQL Server时候发现安装界面和别人不同,并且无论如何都没有中文选项?这个问题也

SpringBoot 异常处理/自定义格式校验的问题实例详解

《SpringBoot异常处理/自定义格式校验的问题实例详解》文章探讨SpringBoot中自定义注解校验问题,区分参数级与类级约束触发的异常类型,建议通过@RestControllerAdvice... 目录1. 问题简要描述2. 异常触发1) 参数级别约束2) 类级别约束3. 异常处理1) 字段级别约束

java内存泄漏排查过程及解决

《java内存泄漏排查过程及解决》公司某服务内存持续增长,疑似内存泄漏,未触发OOM,排查方法包括检查JVM配置、分析GC执行状态、导出堆内存快照并用IDEAProfiler工具定位大对象及代码... 目录内存泄漏内存问题排查1.查看JVM内存配置2.分析gc是否正常执行3.导出 dump 各种工具分析4.