if else语法
**什么是语句: C语言中由一个分号;隔开的就是一条语句。比如: printf(“hehe”); 1+2; ** **啥是表达式: C语言中,用各种操作符把变量连起来,形成有意义的式子,就叫做表达式。 操作符:+,-,*,/,%,>,<,=,==… ** **基本语法: 语法结构: 1 if(表达式) 语句;
2 if(表达式) 语句1; else 语句2;
- 多分支
if(表达式1) 语句1; else if(表达式2) 语句2; else 语句3; ** if 语句的细节!!!
int ret(){
printf("这样也行因为if语句先执行()里面的 \n");
return 1;
}
int main()
{
int flag = 1;
if (ret()){
printf("yes\n");
}
return 0;
}
bool与0比较
C语言有没有bool类型? c99之前,主要是c90是没有的,目前大部分书,都是认为没有的。因为书,一般都要落后于行业。
但是c99引入了_Bool类型(你没有看错,_Bool就是一个类型,不过在新增头文件stdbool.h中,被重新用宏写成了 bool,为了保证C/C++兼容性)。
#include<stdbool.h>
int main(){
bool k = false;
if (k){
printf("假\n");
}
return 0;
}
bool定义的变量占几个字节呢 还有一种微软的定义方法,强烈不推荐
总结:bool在c90,c89中没有,按照整形的 0为假,非零为真,在c99中用bool,大家用整型比较就行 整型比较注意:
#include<stdio.h>
#include<float.h>
#include<stdbool.h>
int main(){
int a = 0;
if (a == 0){
;
}
if (a != false){
;
}
if (a){
;
}
return 0;
}
结论:bool类型,直接判定,不用操作符进行和特定值比较。
float与0比较
我们可以看到浮点数再内存存在精度的丢失 我们看到i是1.0 减 0.9应该等于0.1呀,但是啥也没打印这就是精度丢失的问题 所以浮点数不能直接用==比较 这可咋办呢 两个浮点数相比较可以用一个函数fabs,来比较两个浮点数相等不相等 fabs是求绝对值的函数,因为i-0.9-j不能等于纯零,所以C语言就规定两个数相减,要是结果小于这个误差就说这两个数相等 说明一下这个合法误差:因为浮点数再存储的时候是存在精度丢失的,俩个数不能直接比较相等,所以引用了这个误差,我画个图就明白了 图中是结果不为0,但在这个范围之内 这个精度我们还是可以自己自定义的 言归正传浮点数和零比较 如果和0比较,直接判断这个浮点数在不在这个精度之间
那这个等于号要不要加能,分析一下,这个EPS是规定的最小误差,一个浮点数加上这个误差,就不等于原始的浮点数了,所以在我看来就不能加等号 根据上面证明,不应该加等号,应该是个开区间!!!
指针与0比较!!!
所以经上面所述,定义变量必须初始化,但是初始化,表达式两边的类型必须是相同的,比如说,一个double赋給int,不就发生截断了嘛 接下来,我们看一下,C语言中的三个0 看打印出来是一样的,这说明在数据层面是一样的,在类型层面是不一样的,解释一下 在C语言的内部只是把0强制准换为了void*类型的指针,在底层内存中存放的还是0值,内存中的数据没有发生任何变化,这我们详细解说一下强制类型转换;
如何理解强制类型准换呢?
else的配对,与if爱出现的问题
int main(){
int i = 0;
int j = 10;
if (10==i)
if (11 == j)
printf("我喜欢你\n");
else printf("想多了吧\n");
return 0;
}
为啥啥也没输出?
因为else之和最近的if配对 这样就很好啦,强烈建议加大括号,阅读性好 if语句爱出错误点 if不加大括号只对后面一条语句执行,C语言以分号结尾就是一条语句呀 如果有什莫错误,尽管指出,必虚心学习,如果感觉还行,期望三连关注哦,感谢您的支持!!!
|