| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 763 人关注过本帖
标题:while (m)为何要用m
只看楼主 加入收藏
ws112233ws
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2015-7-16
结帖率:75%
收藏
已结贴  问题点数:20 回复次数:11 
while (m)为何要用m
本人刚学郝斌老师的C语言,小白一个勿喷。我的问题是下面C代码中while(m),如果m只是表达真的意思,为何不能换成1或者不是0的数字,或者其它为真的表达式?
下面是回文字的判断代码:
# include <stdio.h>

int main(void)
{
    int val; //存放待判断的数字
    int m;
    int sum = 0;

    printf("请输入您需要判断的数字:  ");
    scanf("%d", &val);
   
    m = val;
    while (m)
    {
        sum = sum * 10 + m%10;
        m /= 10;
    }

    if (sum == val)
        printf("Yes!\n");
    else
        printf("No!\n");

    return 0;
}
搜索更多相关主题的帖子: include 表达式 C语言 
2015-07-16 22:04
erty1001
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:4
帖 子:331
专家分:1433
注 册:2014-8-31
收藏
得分:5 
简单说说:
  这里M不是一个常量,有的时候有一定的算法可能性 会让m为0 或者非零 这两种情况都可能会出现
  如果换成了while(1) 或者while(0)
  就是和这个意思完全不同了
2015-07-16 22:07
hjx1120
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:李掌柜
等 级:贵宾
威 望:41
帖 子:1314
专家分:6927
注 册:2008-1-3
收藏
得分:2 

为什么是m,可以看这句代码m = val;
2015-07-16 22:15
ws112233ws
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2015-7-16
收藏
得分:0 
回复 2楼 erty1001
我还是不明白你所说的,可能我太笨了。你看代码while(m)的意思是如果m成立就运行下面大括号中的语句sum = sum * 10 + m%10; m /= 10;那么m成立什么?这个m是把一个表达式简写了还是就是一个m?
2015-07-16 22:19
erty1001
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:4
帖 子:331
专家分:1433
注 册:2014-8-31
收藏
得分:0 
简单说说:
 while(m) 等价于 while(m!=0)
2015-07-16 22:24
hjx1120
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:李掌柜
等 级:贵宾
威 望:41
帖 子:1314
专家分:6927
注 册:2008-1-3
收藏
得分:0 

用断点还是观察代码,分别输入0,正数n,负数n,
观察代码的变化,及sum的值
int main(void)
{
    int val; //存放待判断的数字
    int m;
    int sum = 0;

    printf("请输入您需要判断的数字:  ");
    scanf("%d", &val);
   
    m = val;
    while (m)
    {
        sum = sum * 10 + m%10;
        printf("%d\n",sum);
        m /= 10;
    }

    if (sum == val)
        printf("Yes!\n");
    else
        printf("No!\n");

    return 0;
}
2015-07-16 22:28
ws112233ws
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2015-7-16
收藏
得分:0 
明白了,谢谢两位。感觉看郝斌视频教学是不错,但就是问不了他,可想而知要自学,不懂得更多了。再次谢谢两位大神解惑之苦!!
2015-07-16 22:38
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:11 
上面都没回答你原先的问题,这就“懂了”。

授人以渔,不授人以鱼。
2015-07-17 11:16
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
C的if()语句,判断表达式是逻辑结果,那句话的人类语义,是while(m!=0),本该这样写,但写那个代码的人,用了C的特有语法,稍有突兀,但却是C程序员的惯用法(在C++和别的语言中通常不鼓励这种写法,那是判别C程序员的识别特点)。

以下解释,本来在书中有,楼主不认真看书,要拿出来问:

在C中,没有逻辑数据类型,它是以数值零为假,非零为真。注意:真是任何非零值,並非一定要是1,不管是整型的,还是浮点的,只要非零,就可被认为是逻辑真;值零是唯一的,不管是整型,还是浮点,不用管长度,所有位都是0。因此,在C中定义逻辑宏的写法如下:
#define FALSE 0
#define TRUE  !FALSE     && 千万不要写#define TRUE 1


对if(m!=0),因为非零为真,所以可以写成if(m)。

我再说一遍:我不鼓励你学写成这样!代码是给人看的,不是给机器看的,你要表达的就是while(m!=0),就应该写直接代码while(m!=0),那么本来就不存在这种问题,这叫天下本无事庸人自扰之。也不是你少写了!=0三个符号,程序执行就快点。在C#和Java中,这种写法是编译器不允许的,要养成不管写什么语言的代码都阻碍最少的习惯才好。

[ 本帖最后由 TonyDeng 于 2015-7-17 12:27 编辑 ]

授人以渔,不授人以鱼。
2015-07-17 12:20
q215236213
Rank: 4
等 级:业余侠客
威 望:1
帖 子:148
专家分:276
注 册:2012-7-24
收藏
得分:0 
版主说的太好了,大神啊,膜拜
2015-07-17 17:05
快速回复:while (m)为何要用m
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.025470 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved