白白胖胖真好 发表于 2021-9-13 20:46:34

[萌新求助】PTA乙级1001提问do...while和while的差别

害死人不偿命的(3n+1)猜想如题
#include<stdio.h>
int main()
{
        int i,n;
        i=0;
        n=0;
        scanf("%d",&n);
    while(n!=1)
    {
    if(n%2==0)
    {
       n=n/2;
       i++;
}
if(n%2!=0&&n!=1)
{
n=(3*n+1)/2;
i++;
}
}
        printf("%d",i);
        return 0;
}//代码1正确
#include<stdio.h>
int main()
{
        int i,n;
        i=0;
        n=0;
        scanf("%d",&n);
    while(n!=1)
    {
    if(n%2==0)
    {
       n=n/2;
       i++;
}
else//这里改写为else依然正确
{
n=(3*n+1)/2;
i++;
}
}
        printf("%d",i);
        return 0;
}
但是当改写为do...while后使用else就会导致一个答案报错
而使用if(%n!=0&&n!=1)却是正确答案。


为什么do...while和while会有这样的差别呢?


大马强 发表于 2021-9-13 20:51:37

do...while 就是不管怎样,先循环一次,再去判断
while 要先判断,条件满足再去循环

大马强 发表于 2021-9-13 20:58:07

你在两个代码结果都一样呀
你输入哪个数字导致不一样的

白白胖胖真好 发表于 2021-9-14 09:08:36

提交答案导致的报错
我想大概就是do...while要先跑一次的问题

白白胖胖真好 发表于 2021-9-14 09:12:54

大马强 发表于 2021-9-13 20:58
你在两个代码结果都一样呀
你输入哪个数字导致不一样的

大佬你好
就是在使用while时两个代码都是正确的
我想知道的是仅仅只改变循环体
把while改成do...while为啥就只有if(n%2!=0&&n!=1)正确而else不正确了。
不是说while和do...while可以互换吗?
谢谢

大马强 发表于 2021-9-14 09:41:43

白白胖胖真好 发表于 2021-9-14 09:12
大佬你好
就是在使用while时两个代码都是正确的
我想知道的是仅仅只改变循环体


我还是有点听不懂你说的是啥
配套 if 和 else 只能执行一个,不能够两个都执行
要不你把do while代码发出来

白白胖胖真好 发表于 2021-9-14 10:41:47

大马强 发表于 2021-9-14 09:41
我还是有点听不懂你说的是啥
配套 if 和 else 只能执行一个,不能够两个都执行
要不你把do while代码发 ...

#include<stdio.h>
int main()
{
      int i,n;
      i=0;
      n=0;
      scanf("%d",&n);
    do
    {
    if(n%2==0)
    {
       n=n/2;
       i++;
}
if(n%2!=0&&n!=1)
{
n=(3*n+1)/2;
i++;
}
}
while(n!=0);
      printf("%d",i);
      return 0;
}//这个答案正确
#include<stdio.h>
int main()
{
      int i,n;
      i=0;
      n=0;
      scanf("%d",&n);
    do
    {
    if(n%2==0)
    {
       n=n/2;
       i++;
}
else
{
n=(3*n+1)/2;
i++;
}
}
while(n!=0);
      printf("%d",i);
      return 0;
}//这个答案错误
我想问的就是比较与while循环
为啥do...while就有一个else的写法会报错

大马强 发表于 2021-9-14 10:48:28

你这两个程序我都运行不出来结果
while(n!=0);
你这里的是中文分号

大马强 发表于 2021-9-14 10:49:13

改完后哪一个输出都没有结果打印

白白胖胖真好 发表于 2021-9-14 11:08:55

大马强 发表于 2021-9-14 10:48
你这两个程序我都运行不出来结果

你这里的是中文分号

哦哦抱歉
手机打的
大概意思就是这样打
do...while只有在那个if下才能正确
while在if和else下却都正确
想问的就是这个

大马强 发表于 2021-9-14 12:03:32

我还是有点懵
我将你开头的代码改成 do while
#include<stdio.h>
int main()
{
    int i,n;
    i=0;
    n=0;
    scanf("%d",&n);
    do
    {
    if(n%2==0)
    {
       n=n/2;
       i++;
        }
        else//这里改写为else依然正确
        {
          n=(3*n+1)/2;
          i++;
        }
}while(n!=1);
      printf("%d",i);
      return 0;
}
现在与 while语句的区别是:当输入为 1 while直接跳出,结果打印0,而do while 却不会最后打印 2
所以这两者还是有点区别的
页: [1]
查看完整版本: [萌新求助】PTA乙级1001提问do...while和while的差别