鱼C论坛

 找回密码
 立即注册
查看: 1536|回复: 12

continue语句的问题

[复制链接]
发表于 2015-2-1 17:24:49 | 显示全部楼层 |阅读模式

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

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

x
                                                                                                        #include "stdio.h"
#include <iostream>

int main(void)
{
    double pi=3.14159;
    int r;
    double area;
    for(r=1;r<=10;r++)
    {
        area=pi*r*r;
        if(area>100.0)
        {
            continue;
        }
    }
    printf("r=%d,area=%g\n",r,area);   
    system("pause");
    return 0;
}
这个程序我使用单步调试的时候,执行到 area=pi*r*r;之后就会跳转到for(r=1;r<=10;r++)了,不检查下面的if语句了,这是什么原因
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-2-1 20:44:08 | 显示全部楼层
continue语句的作用是跳过本轮循环,直接进行下一轮循环,你注意看一下area的值。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-2-1 20:57:29 | 显示全部楼层
aswyamato1989 发表于 2015-2-1 20:44
continue语句的作用是跳过本轮循环,直接进行下一轮循环,你注意看一下area的值。

压根没比较,值也是没有比较的结果
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-2-1 21:21:54 | 显示全部楼层
#include <stdio.h>
#include <iostream>

int main(void)
{
    int m,n;
    printf("please in put m:\n");
    scanf("%d",&m);
    for(n=2;n<=m-1;n++)
    {
        if(m%n==0)
        {
            printf("this is not a zhishu.\n");
            break;
        }
        else if(m%n!=0)
        {   
            continue;
        }
     }
     if(m%n!=0)
     {
       printf("this is a zhishu.\n");
     }
     system("pause");
     return 0;
}
这个程序也不能判断质数,当输入时质数如11时,程序直接退出了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-2-1 21:45:01 | 显示全部楼层
你程序的意图应该是area>100.0时终止循环吧?continue的作用是跳过本次循环进入下一个循环,所以你的if语句相当于是没用的,改成break;就行了,实际上if语句是有在进行的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-2-1 21:51:17 | 显示全部楼层
本帖最后由 曾经的肆无忌惮 于 2015-2-1 22:01 编辑

#include <stdio.h>
#include <iostream>
int main(void)
{
     int m,n;
     printf("please in put m:\n");
     scanf("%d",&m);
     for(n=2;n<=m-1;n++)
     {
         if(m%n==0)
         {
             printf("this is not a zhishu.\n");
             return 0;
         }
         
  }
printf("this is  a zhishu.\n");
  system("pause");
  return 0;
}


刚刚说错了,其实程序只要这样写就可以,判断出不是质数的时候直接结束这个程序,如果循环结束了,就代表这是个质数

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

使用道具 举报

 楼主| 发表于 2015-2-1 21:53:24 | 显示全部楼层
曾经的肆无忌惮 发表于 2015-2-1 21:45
你程序的意图应该是area>100.0时终止循环吧?continue的作用是跳过本次循环进入下一个循环,所以你的if语句 ...

但是他会先判断if(area>100)是吧,现在的问题,没有进行if的判断
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-2-1 21:58:32 | 显示全部楼层
ybyc 发表于 2015-2-1 21:53
但是他会先判断if(area>100)是吧,现在的问题,没有进行if的判断

有、你单步调试的时候指针指在if语句的时候就是在判断了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-2-1 22:01:41 | 显示全部楼层
你的编译器的结果和我的一样吗?
我的是r=11,area=314.159
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-2-1 22:04:24 | 显示全部楼层
本帖最后由 曾经的肆无忌惮 于 2015-2-1 22:07 编辑

你自己写的那个判断质数的方法因为n一直在累加,累加到m-1的时候结束循环,此时n的值为m,所以m%n!肯定等于0。循环的时候也不用循环到m-1,因为从m/2后面的数用来除m的时候肯定是有余数的了,最优的是直接判断到m开根号就行
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-2-1 22:09:53 | 显示全部楼层
ybyc 发表于 2015-2-1 22:01
你的编译器的结果和我的一样吗?
我的是r=11,area=314.159

vc6.0 ,本来我没改之前和你是一样的答案,你的循环里面if语句写错了,不是没进行判断、要记得continue是结束本次循环进入下一次循环,break;才是跳出循环
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-2-1 22:12:53 | 显示全部楼层
你看一下当area = 113.09723999999999就已经进入if语句内了
捕获.JPG
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2015-2-1 23:07:34 | 显示全部楼层
曾经的肆无忌惮 发表于 2015-2-1 22:12
你看一下当area = 113.09723999999999就已经进入if语句内了

可能是编译器的原因吧,还是谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-25 15:28

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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