【C语言深度剖析——第五节(关键字5)】《C语言深度解剖》+蛋哥分析+个人理解

发布时间:2024年01月19日

心态决定高度,细节决定成败
本文由@睡觉待开机原创,转载请注明出处。
本内容在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>。

文章来源:https://blog.csdn.net/2302_79031646/article/details/135691223
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。