作者kobala (悠闲)
看板C_and_CPP
标题Re: [问题] c++ while指令
时间Thu Apr 9 02:02:52 2009
: 不超过10000的最大次方
: 对於每个小於10000的正整数A 一定有一个正整数N
: 使得A的N次方小於或等於10000 而A的N+1次方则超过10000
: 现在要写一个程式 输入一个整数A 印出对应的N以及A的N次方的值
: int a,b=1,n=0;/*宣告3个变数 并且给定初始值*/
: cout<<"请输入一个数字"<<endl;
: cin>>a;
: while(a*b<=10000)/*当条件a*b<=10000成立时 跳进去loop执行里面动作*/
: {
: b=a*b;
: n++;
: }
: cout<<n<<" "<<b<<endl;
: system("PASUE");
: return 0;
: }
: 我的疑问:
: 1.第一行的b=1还有n=0是什麽意思?
: 我没打指令说n代表次方的次数 为什麽程式知道那是次方的次数?
b=1 n=0都只是为了要达到任何数的1次方都等於本身
还有很多种表示法 可以写出次方
举例 a=10时则b=10*1 ->b=10
这样下次进入loop之前就会变成a*b就变成a的二次方 10*10来判断是否小於10000
依序变成a的三次方 四次方
电脑 不会知道你的变数是什麽意义 只有人才知道
对他而言 他只是做运算而已 管他是什麽
我们所做的只不过是把人类简化思考的数学计算方式
变成单纯的加减乘除
: 2.while条件为什麽是a*b 不是a*a?
如果你直接a*a就会变成a的两次方为开头
你a的一次方就会没有考虑到(第一次要进入loop就是用a*a来看是否小於10000
可是你a的一次方 还是要算
编译会过 因为没有语法错误 但是 会有逻辑上的错误 也就是答案会有错
也许不是全错 但是当某些情况下 你的输出就会是错的
: 3.while那边的大括号里面的n++为什麽不能打n+1?
至於这点 我不知道推文的那位大大 为什麽说有语法错误
因为在逻辑上n++的确等於n+1
那n=n+1也是正确的语法使用
我自己实际测试也没发现输出不一样的地方
有待推文的大大详细说明
: 我是c++的初学者 昨天从刚开始一直看到switch 到还看的懂
: 就今天看到while 我卡住了 感觉差很多 都不知道为什麽要打那些码
loop是否执行 都取决於附加条件 条件符合才会进入loop
因此 如何订定loop条件就是看个人功力
没有为什麽要打 因为这就是loop的使用语法
: 拜托 c++的大大们替我解说一下 谢谢...
另外 你的解答写的不是很好
因为光输出就不知道你输出什麽东西
光看你输入一个数字
跑出两个数字 你知道程式是干麻用的吗?
说实在 没题目 还真不知道是再写什麽
程式不要只求过 要写的完善 让看的人也知道 你再写什麽
思考上 也要全方面的考虑 不要只局限於某个条件下会拿到题目要的答案
的圈圈里 因为这种程式 没意义
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 218.164.120.194
1F:推 VictorTom:把n++;这行换成n+1;没有语法错误??那就是我误解原po的意 04/09 02:23
2F:→ VictorTom:思了, 我的意思是要写也是 n+=1; 或n=n+1; 这样....Orz 04/09 02:23
3F:→ VictorTom:不过我以为我有描述到 n+1 vs n++ => n=n+1 这边了. 04/09 02:25
4F:推 VictorTom:对不起我错了, 真的没有error, 只是单写 n+1 不会有 04/09 02:27
5F:→ VictorTom:n = n+1的效果; 原本来以为会需要一个lvalue的Orz 04/09 02:28
6F:推 VictorTom:对了, 他贴的code是练习题的答案吧?? 初学阶段先求语法 04/09 02:34
7F:→ VictorTom:了解会用, 对於看到的问题先求有再求好, 处理完程式核 04/09 02:35
8F:→ VictorTom:心再来处理程式介面; 不是要求初学者就写的很完善吧Orz 04/09 02:36
9F:→ VictorTom:不过好习惯/观念的养成, 能从一开始就培养倒是最好的:) 04/09 02:37