当前位置: 首页 > news >正文

C语言中if else组合

一 bool变量与“零值”进行比较

bool 变量与“零值”进行比较的 if 语句怎么写? bool bTestFlag = FALSE;//想想为什么一般初始化为 FALSE 比较好?

A), if(bTestFlag == 0); if(bTestFlag == 1);

B), if(bTestFlag == TRUE); if(bTestFlag == FLASE);

C), if(bTestFlag); if(!bTestFlag); 哪一组或是那些组正确呢?我们来分析分析:

A)写法:bTestFlag 是什么?整型变量?如果要不是这个名字遵照了前面的命名规范, 肯怕很容易让人误会成整型变量。

FLASE 的值大家都知道,在编译器里被定义为 0;但 TRUE 的值呢?都是 1 吗?很不幸,不都是 1。Visual C++定义为 1,而它的同胞兄弟 Visual Basic 就把 TRUE 定义 为-1.那很显然,这种写法不好。

 B,C写法我个人认为都对,最优的写法是C写法,代码简洁,易于理解。

大家都知道 if 语句是靠其后面的括号里的表达式的值来进行分支跳转的。表达式如果为真,则执行 if 语句后面紧跟的代码;否则不执行。那显然,C组的写法很好,既不会引起误会,也不会由于 TRUE 或 FLASE 的不同定义值而出错。

 float 变量与“零值”进行比

float 变量与“零值”进行比较的 if 语句怎么写?

float fTestVal = 0.0;

A), if(fTestVal == 0.0); if(fTestVal != 0.0);

B), if((fTestVal >= -EPSINON) && (fTestVal <= EPSINON)); //EPSINON 为定义好的 精度。 哪一组或是那些组正确呢?我们来分析分析:

float 和 double 类型的数据都是有精度限制的,这样直接拿来与 0.0 比,能正确吗?

明显 不能,看例子: Π的值四舍五入精确到小数点后 10 位为:3.1415926536,你拿它减去 0.00000000001 然后再四舍五入得到的结果是多少?你能说前后两个值一样吗? EPSINON 为定义好的精度,如果一个数落在[0.0-EPSINON,0.0+EPSINON] 这个闭区间 内,我们认为在某个精度内它的值与零值相等;否则不相等。扩展一下,把 0.0 替换为你想 比较的任何一个浮点数,那我们就可以比较任意两个浮点数的大小了,前提是在某个精度内比较。

注意选择一个适当的误差范围取决于你的具体需求和浮点数的精度要求。

float floatValue = 0.0; // 假设这是你的 float 变量
float epsilon = 0.0001; // 定义一个小的误差范围if (fabs(floatValue - 0.0) < epsilon) {// 执行当 floatValue 在误差范围内等于零时的逻辑printf("结果很精确");}else{printf("结果有误差");}

指针变量与“零值”进行比较 指针变量与“零值”进行比较的 if 语句怎么写?

int * p = NULL;//定义指针一定要同时初始化,指针与数组那章会详细讲解。

A), if(p == 0); if(p != 0);

B), if(p); if(!p);

C) , if(NULL == p); if(NULL != p);

哪一组或是那些组正确呢?我们来分析分析:

A)写法:p 是整型变量?容易引起误会,不好。尽管 NULL 的值和 0 一样,但意义不同。

B)写法:p 是 bool 型变量?容易引起误会,不好。

C)写法:这个写法才是正确的,但样子比较古怪。为什么要这么写呢?是怕漏写一个 “=”号:if(p = NULL),这个表达式编译器当然会认为是正确的,但却不是你要表达的意思。 所以,非常推荐这种写法。

 else 到底与哪个 if 配对呢?

else 常常与 if 语句配对,但要注意书写规范,看下面例子 

void test01()
{printf("hhh");
}
int main()
{int x, y;x = 0;y = 0;if (0 == x)/*{printf("world");}*/if (0 == y){test01();}else {printf("hello");}return 0;
}

 上面这段代码很容易造成误解,最终打印结果是hhh,因为先满足0==x第一个if语句条件才有下面的第二个if语句判断和else语句分支。若y==0则调用test01函数打印hhh,否则打印hello。

提倡的的风格不提倡的风格

void Function(int x)

{

//program code

}

void Function(int x){

//program code

}

if (condition)

{

//program code

}

else

{

//program code

}

if (condition){

//program code

}else{

//program code

}

或:

if (condition)

//program code

else //program code

或:

if (width < height) dosomething();

do

{

//program code

}

while (condition);

do{

//program code

}while (condition);

while (condition)

{

//program code

}

while (condition){

//program code

}

for (initialization; condition; update)

{

//program code

}

for (initialization;condition; update){

//program code

}


http://www.mrgr.cn/news/32831.html

相关文章:

  • Python数据分析NumPy和pandas(二十九、其他Python可视化工具)
  • 《实时流计算系统设计与实现》-Part 2-笔记
  • 【嵌入式】ESP32开发(一)ESP-IDF概述
  • 未来汽车新变革,智能表面浮出水面
  • 【蓝桥等考C++真题】蓝桥杯等级考试C++组第13级L13真题原题(含答案)-最大的数
  • 刷算法题(C++)
  • MyBatis-config.xml核心配置
  • ★pwn 更改pwn题libc保姆级教程★
  • 老程序员的数字游戏开发笔记(二) —— 直接开始一个Godot项目
  • vite 使用飞行器仪表示例
  • 1. stm32创建工程并下载
  • 初识模版!!
  • python - 子类为什么调用父类的方法
  • 【JavaEE】——线程的安全问题和解决方式
  • 如何使用IIC外设(硬件IIC)
  • Clip studio paint百度云下载:附安装包+教程
  • 最好的教育是言传身教,爸爸的一句话改变孩子的一生
  • 简单多状态dp第一弹 leetcode -面试题17.16.按摩师 -213.打家劫舍II
  • C++——初步认识C++和namespace的用法
  • 文本预处理_by《李沐:动手学深度学习v2》pytorch版
  • 技术周总结 09.16~09.22 周日
  • linux 基础(一)mkdir、ls、vi、ifconfig
  • OpenGL编程思想第九版环境搭建(Glfw+gl3w)-静态库方式
  • frp内网穿透部署
  • 网易雷火xx
  • Ubuntu实现SSH免密登录教程