鱼C论坛

 找回密码
 立即注册
查看: 1091|回复: 10

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

[复制链接]
发表于 2021-9-13 20:46:34 | 显示全部楼层 |阅读模式

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

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

x
害死人不偿命的(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-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
所以这两者还是有点区别的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-9-13 20:51:37 | 显示全部楼层
do...while 就是不管怎样,先循环一次,再去判断
while 要先判断,条件满足再去循环
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-9-13 20:58:07 | 显示全部楼层
你在两个代码结果都一样呀
你输入哪个数字导致不一样的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-9-14 09:08:36 From FishC Mobile | 显示全部楼层
提交答案导致的报错
我想大概就是do...while要先跑一次的问题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-9-14 09:12:54 From FishC Mobile | 显示全部楼层
大马强 发表于 2021-9-13 20:58
你在两个代码结果都一样呀
你输入哪个数字导致不一样的

大佬你好
就是在使用while时两个代码都是正确的
我想知道的是仅仅只改变循环体
把while改成do...while为啥就只有if(n%2!=0&&n!=1)正确而else不正确了。
不是说while和do...while可以互换吗?
谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

我还是有点听不懂你说的是啥
配套 if 和 else 只能执行一个,不能够两个都执行
要不你把do while代码发出来
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-9-14 10:41:47 From FishC Mobile | 显示全部楼层
大马强 发表于 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的写法会报错
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-9-14 10:48:28 | 显示全部楼层
你这两个程序我都运行不出来结果
while(n!=0);
你这里的是中文分号
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-9-14 10:49:13 | 显示全部楼层
改完后哪一个输出都没有结果打印
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-9-14 11:08:55 From FishC Mobile | 显示全部楼层
大马强 发表于 2021-9-14 10:48
你这两个程序我都运行不出来结果

你这里的是中文分号

哦哦抱歉
手机打的
大概意思就是这样打
do...while只有在那个if下才能正确
while在if和else下却都正确
想问的就是这个
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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
所以这两者还是有点区别的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-22 07:09

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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