C 查看有关循环的帮助
因为是时候准备期末考试了,所以我必须介绍一些关于循环的详细信息。我现在被这个问题困住了C 查看有关循环的帮助,c,loops,C,Loops,因为是时候准备期末考试了,所以我必须介绍一些关于循环的详细信息。我现在被这个问题困住了 int main(void) { int x = 0; int y = 0; while (y < 10) { x = 0; while (x != y) {// x = x + 3; // how many times will we do this statement? } printf(“x is %d\n”, x);
int main(void) {
int x = 0;
int y = 0;
while (y < 10) {
x = 0;
while (x != y) {//
x = x + 3; // how many times will we do this statement?
}
printf(“x is %d\n”, x);
y = y + 1;
}
}
int main(无效){
int x=0;
int y=0;
而(y<10){
x=0;
而(x!=y){//
x=x+3;//这个语句我们要执行多少次?
}
printf(“x是%d\n”,x);
y=y+1;
}
}
基本上,我希望看到输出是什么,以及我们提到的语句运行了多少次。换句话说,printf输出是什么样子的
我希望你能帮我做这件事
非常感谢。这不是一个技巧性的问题,就是一个考虑不周的问题(或者可能是一个比最初看起来更高级的问题) 答案是不确定的,因为它取决于整数溢出的属性。 我会让你明白为什么会这样。如果你一开始看不到,试着用笔和纸进行几次迭代。如果这引起了更多问题,请随时提问。:)
while(x!=y){
可能会使while循环无限大,而且永远不会中断
例如
- 第一个循环x=0,y=0
- 第二个while不执行
- 第二次迭代x=0,y=1
- 在第二个while循环中
- 迭代1,x=3
- 迭代2,x=6
- 它继续下去,因为x永远不会是1
x = 0;
while (x != y) {//
x = x + 3; // how many times will we do this statement?
}
当
y=1
时,因为x
将继续增加,直到它达到最大整数值(除非发生溢出包装,否则它不能等于y,这将导致无限循环)。我认为你的内部,而无限循环是因为:
x=0,y=1,那么x=x+3(x=3)总是!=1,因此它首先会导致无限循环,因为问题的性质,而且没有官方(据我所知)的溢出包装标准不依赖于实现,答案在形式上是*不确定的* 也就是说,非正式地说,让我们来计算一些数字吧。我将计算32位的
int
,尽管64位的数字更令人印象深刻。选择3
作为增量是非常有利的,(也许是出于设计?)因为2^32和2^64都不能被它平均整除,因此它非常适合溢出连续性
让事情变得更简单的一些关键数字:
2147483646 := (715827882 * 3)
-2147483647 := (2147483646 + 3) with overflow
Y=0,X=0,因此不执行迭代语句
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <stdint.h>
#include <inttypes.h>
int main(void)
{
int32_t x = 0;
int32_t y = 0;
uint64_t sum = 0;
while (y < 10)
{
x = 0;
while (x != y)
{
x = x + 3; ++sum;
}
printf("x is %d; sum=%" PRId64 "\n", x, sum);
y = y + 1;
}
return 0;
}
代码本身提到了它…该语句将运行多少次使用调试器,你很快就会发现我会给你一个线索--这是一个技巧性的问题。看看你是否能找出原因。谢谢你,但不,谢谢你…我正在试着弄清楚这里的逻辑,而不是使用调试器到底要做什么。我希望向你学习你需要的逻辑使用而不是找到确切的答案。一个好主意是拿支笔和纸,写下x和y的初始值,然后完成每个步骤,根据需要修改x和y,并在出现printf时写下。当你使用while语句时,看看你的x和y值,看看应该发生什么。
x is 0; sum=0
x is 1; sum=2863311531
x is 2; sum=4294967297
x is 3; sum=4294967298
x is 4; sum=7158278830
x is 5; sum=8589934597
x is 6; sum=8589934599
x is 7; sum=11453246132
x is 8; sum=12884901900
x is 9; sum=12884901903