【C深剖】三组典型C题+float在if中的比较

心态决定高度,细节决定成败
本文由@睡觉待开机原创,转载请注明出处。
本内容在csdn网站首发
欢迎各位点赞—评论—收藏
如果存在不足之处请评论留言,共同进步!

前言:
本节博客继续前篇C进阶深度解剖来分析关键字相关内容。

1.上节练习题分析

T1:

#include <stdio.h>
#include <windows.h>
int main()
{
	char a[1000];
	int i;
	for (i = 0; i < 1000; i++)
	{
		a[i] = -1 - i;
	}
	printf("%d", strlen(a)); //strlen介绍,字符串认识,\0的认识
	return 0;
}

答案:255
解析:在分析之前,请大家注意数组a的类型是char类型。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
所以char a里面存放的数值应该是-1、-2、-3、…-127、-128、127、126…3、2、10、-1、-2、-3、-4、-5…循环!
因为0是字符结束标志,也就自然答案是255咯。

T2:

#include <stdio.h>
#include <windows.h>
int main()
{
	int i = -20;
	unsigned int j = 10;
	printf("%d\n", i + j);
}

答案:-10
解析:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

T3:

int main()
{
	 unsigned int i;
	for (i = 9; i >= 0; i--) 
	{
		printf("%u\n", i);
	}
	return 0;
}

答案:死循环
解析:
在这里插入图片描述

2.if语句

if语句执行中的细则

一般来说,if语句执行分为三步:
1.先执行()中的表达式,得到真假结果(BOOL类型)
2.条件判定
3.进行分支功能

在这里插入图片描述

布尔类型介绍

布尔类型?这是C99中新增的一种类型,在C90中C标准并没有进行规定。
作用:只有0(false)或者1(true)两种情况,用来表示真假。
两套布尔类型规定:
1.C99标准(仅限于支持C99的编译器/平台):
bool类型,包含于头文件<stdbool.h>,真(true),假(false)
在这里插入图片描述
2.微软标准(仅限于微软产品系列):
不推荐使用,一是因为跨平台问题,二是因为实际上是微软规定的布尔类型是int类型。
BOOL类型,包含于头文件<windows.h>,真(TRUE),假(FALSE)
在这里插入图片描述

查看布尔类型所占内存大小:

#include<stdbool.h>
#include<windows.h>
int main()
{
	bool a = false;
	BOOL b = TRUE;
	printf("bool of the size if:%d\n", sizeof(a));
	printf("BOOL of the size if:%d\n", sizeof(b));
	return 0;
}

在这里插入图片描述

if新用法:注释(不推荐使用)

其实if语句也可以用作注释使用。

#include<stdbool.h>
#include<windows.h>
int main()
{

	bool a = false;
	BOOL b = TRUE;
	if (0)
	{
		printf("bool of the size if:%d\n", sizeof(a));

	}
	printf("BOOL of the size if:%d\n", sizeof(b));
	return 0;
}

这里不推荐使用,原因有两点:
1.虽然if(0)内的代码看似是注释了,但是计算机仍然要进行判断,参与反汇编转换,一直这样注释,其实一直没有注释掉,会降低计算机效率。
2.代码的可维护性比较差。

if的写法推荐

下面是三种if写法,推荐使用第一个

#include<stdbool.h>
int main()
{
	int flag = 1;
	if (flag)//鲜明方便
	{
		//...
	}
	if (flag == 0)//容易写成flag=0
	{
		//...
	}
	if (flag == false)//大部分编译器并不全面支持C99标准,大部分仍然是C89/C90为主
	{
		//...
	}
	return 0;
}

浮点数判断

我们都知道浮点数存到计算机中有可能会有精度问题。
所以,因为精度损失问题,两个浮点数绝对不能用==判断是否相等
比如:

int main()
{
	double d = 3.6;
	printf("%.50lf\n", d);
	return 0;
}

在这里插入图片描述
如果要拿来判断,可能会出现下面因为精度丢失问题而造成判断错误:
在这里插入图片描述
为了避免这种情况的发生,于是有一个办法,就是判断差不多相等,在误差范围内就可以判断为相等啦。

在C语言中,C标准规定最小的精度为DBL_EPSILON,这是一个宏定义,包含于头文件<float.h>。

所以上面代码,可以改成这样写:

#include<float.h>
#include<math.h>
int main()
{
	/*float d = 3.6;*/
	//printf("%.50lf\n", d);
	double x = 1.0;
	double y = 0.1;
	if (fabs(x - 0.9 - y) <= DBL_EPSILON)
	{
		printf("yes\n");
	}
	else
	{
		printf("oh,my god!\n");
	}
	return 0;
}

注:fabs是一个求绝对值库函数,包含头文件<math.h>。

  • 26
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问解决能力。此外,在求职或创业过程,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问解决能力。此外,在求职或创业过程,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值