心态决定高度,细节决定成败
本文由@睡觉待开机原创,转载请注明出处。
本内容在csdn网站首发
欢迎各位点赞—评论—收藏
如果存在不足之处请评论留言,共同进步!
前言:
本节博客继续前篇C进阶深度解剖来分析关键字相关内容。
#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咯。
#include <stdio.h>
#include <windows.h>
int main()
{
int i = -20;
unsigned int j = 10;
printf("%d\n", i + j);
}
答案:-10
解析:
int main()
{
unsigned int i;
for (i = 9; i >= 0; i--)
{
printf("%u\n", i);
}
return 0;
}
答案:死循环
解析:
一般来说,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语句也可以用作注释使用。
#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写法,推荐使用第一个
#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>。