鱼C论坛

 找回密码
 立即注册
查看: 1986|回复: 15

[已解决]大家帮我看一下第7行什么意思

[复制链接]
发表于 2017-7-28 17:58:38 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include <stdio.h>

int main()
{
        int ch;

        while (scanf("%d", &ch) == 1 && ch >= 0)
                ;

        return 0;
}
最佳答案
2017-7-28 18:39:41
本帖最后由 人之初 于 2017-7-28 18:41 编辑
lizhiyong_11 发表于 2017-7-28 18:04
我的天啊,这是什么意思啊,我学的过程中也没有跳课啊,为什么我看不懂呢?

double result = 1.0;            //定义双精度浮点型变量result并初始化为1.0
result += 2.6;                                 //+=实际上就是result=result+2.6
result ++;                                       //++是自增运算符,表示该变量的值+1
result * 5;                                       //这个说实话我也没看懂,应该是乘号
result = (int)(result + 0.5)           //这个int是类型强制转换,将result+0.5结果转换成整型

《带你学c带你飞》的视频中没讲到,但是可以在其他资料中找到,扩展阅读中也有介绍
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2017-7-28 17:59:16 | 显示全部楼层
被这几个运算符整蒙了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-7-28 18:01:11 | 显示全部楼层
double i;

for (i = 10; i > 0; i /= 2)
{
        printf("%.2f\n", i);
}
还有麻烦问一下这个定义为浮点型,答案怎么就不是4了呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-7-28 18:04:19 | 显示全部楼层
double result = 1.0;
result += 2.6;
result ++;
result * 5;
result = (int)(result + 0.5)
我的天啊,这是什么意思啊,我学的过程中也没有跳课啊,为什么我看不懂呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-7-28 18:09:10 | 显示全部楼层
第七行是whlie循环,ch接受一个整数,当ch等于1并且ch大于等于0的时候条件成立,执行whlie中的语句。比较运算符的优先级大于逻辑运算符,所以先比较然后进行逻辑与运算。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-7-28 18:15:44 | 显示全部楼层
人之初 发表于 2017-7-28 18:09
第七行是whlie循环,ch接受一个整数,当ch等于1并且ch大于等于0的时候条件成立,执行whlie中的语句。比较运 ...

ch等于1并且大于等于0,那岂不是只有ch等于1的时候才会使条件成立,才会执行while中的语句,你如果输入的只要不是1就不会执行while中的语句,不知道你说的是不是这个意思
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-7-28 18:21:08 | 显示全部楼层
本帖最后由 人之初 于 2017-7-28 18:22 编辑
lizhiyong_11 发表于 2017-7-28 18:01
还有麻烦问一下这个定义为浮点型,答案怎么就不是4了呢?


浮点型说白了就是有小数位的,例如double i=10.0;你的代码中第一次循环的时候,i=10.0,条件成立,执行打印,然后i=i/2=5.0,条件成立继续for循环,i=i/2=2.5;条件i>0,继续执行循环语句,i=i/2=1.25;
但是当i是整型的时候,1/2的结果是0,结果只保留整数位,而且不是四舍五入,是直接舍去小数部分,这时条件不成立,结束循环。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-7-28 18:28:46 | 显示全部楼层
lizhiyong_11 发表于 2017-7-28 18:15
ch等于1并且大于等于0,那岂不是只有ch等于1的时候才会使条件成立,才会执行while中的语句,你如果输入的 ...

对 就是这个意思。你是不是不太懂==  >=  &&这三个运算符?==表示等于,c语言中一个等号表示赋值运算符,>=大于等于,&&逻辑与,表示连接的两个表达式的结果都为真时条件才成立,他们的运算优先级不同的,&&没有==和>=的等级高,这个你可以看看这个表,运算符优先级及结合性
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-7-28 18:34:18 | 显示全部楼层
人之初 发表于 2017-7-28 18:21
浮点型说白了就是有小数位的,例如double i=10.0;你的代码中第一次循环的时候,i=10.0,条件成立,执行 ...

第二段代码问的是,该循环执行了几次,答案是1078次,你的回答我也懂,但是我就是不懂为什么执行了1078词而不是4次?在此先谢谢你耐心码字了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-7-28 18:39:41 | 显示全部楼层    本楼为最佳答案   
本帖最后由 人之初 于 2017-7-28 18:41 编辑
lizhiyong_11 发表于 2017-7-28 18:04
我的天啊,这是什么意思啊,我学的过程中也没有跳课啊,为什么我看不懂呢?

double result = 1.0;            //定义双精度浮点型变量result并初始化为1.0
result += 2.6;                                 //+=实际上就是result=result+2.6
result ++;                                       //++是自增运算符,表示该变量的值+1
result * 5;                                       //这个说实话我也没看懂,应该是乘号
result = (int)(result + 0.5)           //这个int是类型强制转换,将result+0.5结果转换成整型

《带你学c带你飞》的视频中没讲到,但是可以在其他资料中找到,扩展阅读中也有介绍

评分

参与人数 1荣誉 +1 鱼币 +1 收起 理由
lizhiyong_11 + 1 + 1 超级给力

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-7-28 18:43:35 | 显示全部楼层
人之初 发表于 2017-7-28 18:28
对 就是这个意思。你是不是不太懂==  >=  &&这三个运算符?==表示等于,c语言中一个等号表示赋值运算符, ...

第一段代码的问题是,输入什么值才能正常退出,按照你的思路是不是只要输入的数不是1就可以正常退出了,(ps:这是带你学习带你飞s1e15的课后题,答案是输入的值只要不是自然数,程序就能正常退出。明显咱们俩分析的和答案不一样)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-7-28 18:49:28 | 显示全部楼层
lizhiyong_11 发表于 2017-7-28 18:34
第二段代码问的是,该循环执行了几次,答案是1078次,你的回答我也懂,但是我就是不懂为什么执行了1078词 ...

循环条件是i>0,整型i=10,10除以2=5,5/2=2,这里能明白不?2/2=1,1/2=0,因为是整型小数部分自动舍去,当i=0时条件不满足,结束循环。
而double类型是小数,1/2=0.5,0.5>0,所以能继续循环

能明白么?0.0001他也是大于0的,满足条件,整型没有小数,1/2的结果是0
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-7-28 18:57:53 | 显示全部楼层
lizhiyong_11 发表于 2017-7-28 18:43
第一段代码的问题是,输入什么值才能正常退出,按照你的思路是不是只要输入的数不是1就可以正常退出了, ...

那就是我理解错了,scanf(“%d”,&ch)==1,应该是scanf函数执行的返回值,意思是函数调用成功并且输入的数字大于等于0,看看scanf函数返回值的介绍,这一点我也学的不是太扎实,得补习补习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-7-28 18:58:48 | 显示全部楼层
人之初 发表于 2017-7-28 18:49
循环条件是i>0,整型i=10,10除以2=5,5/2=2,这里能明白不?2/2=1,1/2=0,因为是整型小数部分自动舍去, ...

我了个去,误会误会!看错了!真心感谢你码字!看成i>1了,已经将你上一个回答设置成最佳了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-7-28 19:01:36 | 显示全部楼层
人之初 发表于 2017-7-28 18:57
那就是我理解错了,scanf(“%d”,&ch)==1,应该是scanf函数执行的返回值,意思是函数调用成功并且输入 ...

你这么一说我也有点懂了,希望下次交流,谢谢你耐心码字!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-7-28 19:02:18 | 显示全部楼层
lizhiyong_11 发表于 2017-7-28 18:58
我了个去,误会误会!看错了!真心感谢你码字!看成i>1了,已经将你上一个回答设置成最佳了

嗯嗯   没事   我也是刚开始学习c语言,大家一起交流学习,帮你的过程中我也能检测一下我那些知识没掌握住
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-28 12:47

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表