【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

相关文章

Nginx 配置跨域的实现及常见问题解决

《Nginx配置跨域的实现及常见问题解决》本文主要介绍了Nginx配置跨域的实现及常见问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来... 目录1. 跨域1.1 同源策略1.2 跨域资源共享(CORS)2. Nginx 配置跨域的场景2.1

qt5cored.dll报错怎么解决? 电脑qt5cored.dll文件丢失修复技巧

《qt5cored.dll报错怎么解决?电脑qt5cored.dll文件丢失修复技巧》在进行软件安装或运行程序时,有时会遇到由于找不到qt5core.dll,无法继续执行代码,这个问题可能是由于该文... 遇到qt5cored.dll文件错误时,可能会导致基于 Qt 开发的应用程序无法正常运行或启动。这种错

电脑提示xlstat4.dll丢失怎么修复? xlstat4.dll文件丢失处理办法

《电脑提示xlstat4.dll丢失怎么修复?xlstat4.dll文件丢失处理办法》长时间使用电脑,大家多少都会遇到类似dll文件丢失的情况,不过,解决这一问题其实并不复杂,下面我们就来看看xls... 在Windows操作系统中,xlstat4.dll是一个重要的动态链接库文件,通常用于支持各种应用程序

SpringBoot排查和解决JSON解析错误(400 Bad Request)的方法

《SpringBoot排查和解决JSON解析错误(400BadRequest)的方法》在开发SpringBootRESTfulAPI时,客户端与服务端的数据交互通常使用JSON格式,然而,JSON... 目录问题背景1. 问题描述2. 错误分析解决方案1. 手动重新输入jsON2. 使用工具清理JSON3.

MySQL 设置AUTO_INCREMENT 无效的问题解决

《MySQL设置AUTO_INCREMENT无效的问题解决》本文主要介绍了MySQL设置AUTO_INCREMENT无效的问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参... 目录快速设置mysql的auto_increment参数一、修改 AUTO_INCREMENT 的值。

关于跨域无效的问题及解决(java后端方案)

《关于跨域无效的问题及解决(java后端方案)》:本文主要介绍关于跨域无效的问题及解决(java后端方案),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录通用后端跨域方法1、@CrossOrigin 注解2、springboot2.0 实现WebMvcConfig

Go语言中泄漏缓冲区的问题解决

《Go语言中泄漏缓冲区的问题解决》缓冲区是一种常见的数据结构,常被用于在不同的并发单元之间传递数据,然而,若缓冲区使用不当,就可能引发泄漏缓冲区问题,本文就来介绍一下问题的解决,感兴趣的可以了解一下... 目录引言泄漏缓冲区的基本概念代码示例:泄漏缓冲区的产生项目场景:Web 服务器中的请求缓冲场景描述代码

Java死锁问题解决方案及示例详解

《Java死锁问题解决方案及示例详解》死锁是指两个或多个线程因争夺资源而相互等待,导致所有线程都无法继续执行的一种状态,本文给大家详细介绍了Java死锁问题解决方案详解及实践样例,需要的朋友可以参考下... 目录1、简述死锁的四个必要条件:2、死锁示例代码3、如何检测死锁?3.1 使用 jstack3.2

解决JSONField、JsonProperty不生效的问题

《解决JSONField、JsonProperty不生效的问题》:本文主要介绍解决JSONField、JsonProperty不生效的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑... 目录jsONField、JsonProperty不生效javascript问题排查总结JSONField

github打不开的问题分析及解决

《github打不开的问题分析及解决》:本文主要介绍github打不开的问题分析及解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、找到github.com域名解析的ip地址二、找到github.global.ssl.fastly.net网址解析的ip地址三