Poedu_C语言提升_Lesson03_20161117_数据类型3

本文探讨了数据类型的合理选择及其对程序效率的影响,并详细解释了if与switch语句的区别及适用场景,同时介绍了不同循环语句的特点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • 选择合适的数据类型

    数据类型的选择需要考虑两个条件:

    (1)运行速度

    优先考虑和CPU等宽的数据类型

    比如32位下,操作int是最快的,一个寄存器刚好能处理一个int型数据

    系统默认类型

    比如浮点数默认的会用double,会比float更快

    因为现在的浮点数处理器是64位的,(32位时默认的是float)

    示例

    如果要表示1,可以用:int类型、”1”、’1’、1.000。毫无疑问的,用字符串和字符是最慢的

    (2)使用场景
    无符号(unsigned)

    意味着里面都是正整数

    比如我们定义一个学生个数的变量,int当然也可以做,但是如果我们用unsigned int会更好。一方面,学生的个数不可能是负数的;另一方面,又增大了可表示的数量

    表现类型
    活用typedef

    比如,翻页的时候,我们可以用int来表示页数,但是,用pageNum,会使我们要表达的意思更加的清楚,便于代码的阅读

    接近原生的数据类型的操作速度会更快,根据使用场景来选择合适的数据类型

if和switch的使用场景

if

(1)语句过多的时候,会导致难以阅读;

(2)判断浮点数时要注意精度

switch

(1)分支(if)超过3个并且能够用switch的时候,尽量使用switch;

(2)case中的值只能是数值

如case strcmp(str1,str2)这样是不行的,如case 0可行。如果你使用的是0,1,2等等一些难以理解的数值(魔数),应该加注释。或者,可以使用前面说过的enum进行定义,代替这些魔数。(所以说enum常与switch搭配使用)

(3)必须有break,故意不写时要加注释

(4)default用于处理特殊情况,不要省略

区别

if可以替代switch,在if中可以嵌套,但是不建议在switch中进行嵌套,会导致难以阅读

if判断浮点数

(1)对于真假,除了0以外都是真(包括负数)
(2)判断一个浮点数时,不能用相等来判断,而应该是通过区间来判断

因为浮点数在进行存储的时候,它是散失了一定精度的,而在进行”==”比较时,是拿着二进制来相对比,因为无法整除等各种各样的原因,可能导致每次所存储的值不相同,以0.0为例,应该以0~0.0000001区间来判断,至于再后面的位数,会被抛掉,至于是精确第几位,由我们自己定义

代码示例:

这里写图片描述
如果你进行了如下实验:


从下面监视可以发现,其实内存中存储的值和我们所定义的是有稍微偏差的。虽然在这个程序中运行是没问题的,但是因为浮点数的存储方式,指不定啥时候就不能完全相同了,那么if就进去了,到时候找bug就麻烦了。所以,在用if判断浮点数的时候,建议用区间

循环语句

三种循环

for

先判断后循环,内含3个语句

示例:
for(int i=0;i<10;i++)
{
}

while
先判断再执行

示例

while(1)
{
}

do…while

执行一次再判断

do
{
}while(1);

注意:此种while后面有分号

联系

三者之间可以互相转换

区别
(1)for将循环变量的初始化在循环体内完成,会更简洁

(2)不知循环次数的,循环条件在不停改变的,考虑用while

do while可以保证至少执行一次do..while(false)用于统一出口的结构设计

break,continue,goto

作用

用于控制(破坏)循环流程

break

跳出当前语句块

continue

只能用于循环体内,用于跳出本次循环,跳转回循环头进行下一次循环

goto

不要用goto,会使得程序的流程变得难以捉摸

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值