【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

相关文章

springboot循环依赖问题案例代码及解决办法

《springboot循环依赖问题案例代码及解决办法》在SpringBoot中,如果两个或多个Bean之间存在循环依赖(即BeanA依赖BeanB,而BeanB又依赖BeanA),会导致Spring的... 目录1. 什么是循环依赖?2. 循环依赖的场景案例3. 解决循环依赖的常见方法方法 1:使用 @La

Spring事务中@Transactional注解不生效的原因分析与解决

《Spring事务中@Transactional注解不生效的原因分析与解决》在Spring框架中,@Transactional注解是管理数据库事务的核心方式,本文将深入分析事务自调用的底层原理,解释为... 目录1. 引言2. 事务自调用问题重现2.1 示例代码2.2 问题现象3. 为什么事务自调用会失效3

mysql出现ERROR 2003 (HY000): Can‘t connect to MySQL server on ‘localhost‘ (10061)的解决方法

《mysql出现ERROR2003(HY000):Can‘tconnecttoMySQLserveron‘localhost‘(10061)的解决方法》本文主要介绍了mysql出现... 目录前言:第一步:第二步:第三步:总结:前言:当你想通过命令窗口想打开mysql时候发现提http://www.cpp

SpringBoot启动报错的11个高频问题排查与解决终极指南

《SpringBoot启动报错的11个高频问题排查与解决终极指南》这篇文章主要为大家详细介绍了SpringBoot启动报错的11个高频问题的排查与解决,文中的示例代码讲解详细,感兴趣的小伙伴可以了解一... 目录1. 依赖冲突:NoSuchMethodError 的终极解法2. Bean注入失败:No qu

使用Java实现通用树形结构构建工具类

《使用Java实现通用树形结构构建工具类》这篇文章主要为大家详细介绍了如何使用Java实现通用树形结构构建工具类,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录完整代码一、设计思想与核心功能二、核心实现原理1. 数据结构准备阶段2. 循环依赖检测算法3. 树形结构构建4. 搜索子

springboot报错Invalid bound statement (not found)的解决

《springboot报错Invalidboundstatement(notfound)的解决》本文主要介绍了springboot报错Invalidboundstatement(not... 目录一. 问题描述二.解决问题三. 添加配置项 四.其他的解决方案4.1 Mapper 接口与 XML 文件不匹配

MySQL新增字段后Java实体未更新的潜在问题与解决方案

《MySQL新增字段后Java实体未更新的潜在问题与解决方案》在Java+MySQL的开发中,我们通常使用ORM框架来映射数据库表与Java对象,但有时候,数据库表结构变更(如新增字段)后,开发人员可... 目录引言1. 问题背景:数据库与 Java 实体不同步1.1 常见场景1.2 示例代码2. 不同操作

利用Python开发Markdown表格结构转换为Excel工具

《利用Python开发Markdown表格结构转换为Excel工具》在数据管理和文档编写过程中,我们经常使用Markdown来记录表格数据,但它没有Excel使用方便,所以本文将使用Python编写一... 目录1.完整代码2. 项目概述3. 代码解析3.1 依赖库3.2 GUI 设计3.3 解析 Mark

Python中ModuleNotFoundError: No module named ‘timm’的错误解决

《Python中ModuleNotFoundError:Nomodulenamed‘timm’的错误解决》本文主要介绍了Python中ModuleNotFoundError:Nomodulen... 目录一、引言二、错误原因分析三、解决办法1.安装timm模块2. 检查python环境3. 解决安装路径问题

如何解决mysql出现Incorrect string value for column ‘表项‘ at row 1错误问题

《如何解决mysql出现Incorrectstringvalueforcolumn‘表项‘atrow1错误问题》:本文主要介绍如何解决mysql出现Incorrectstringv... 目录mysql出现Incorrect string value for column ‘表项‘ at row 1错误报错