ybyc 发表于 2015-2-1 17:24:49

continue语句的问题

                                                                                                        #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语句了,这是什么原因

aswyamato1989 发表于 2015-2-1 20:44:08

continue语句的作用是跳过本轮循环,直接进行下一轮循环,你注意看一下area的值。

ybyc 发表于 2015-2-1 20:57:29

aswyamato1989 发表于 2015-2-1 20:44
continue语句的作用是跳过本轮循环,直接进行下一轮循环,你注意看一下area的值。

压根没比较,值也是没有比较的结果

ybyc 发表于 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时,程序直接退出了

曾经的肆无忌惮 发表于 2015-2-1 21:45:01

你程序的意图应该是area>100.0时终止循环吧?continue的作用是跳过本次循环进入下一个循环,所以你的if语句相当于是没用的,改成break;就行了,实际上if语句是有在进行的

曾经的肆无忌惮 发表于 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 isa zhishu.\n");
system("pause");
return 0;
}


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

ybyc 发表于 2015-2-1 21:53:24

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

但是他会先判断if(area>100)是吧,现在的问题,没有进行if的判断

曾经的肆无忌惮 发表于 2015-2-1 21:58:32

ybyc 发表于 2015-2-1 21:53
但是他会先判断if(area>100)是吧,现在的问题,没有进行if的判断

有、你单步调试的时候指针指在if语句的时候就是在判断了

ybyc 发表于 2015-2-1 22:01:41

你的编译器的结果和我的一样吗?
我的是r=11,area=314.159

曾经的肆无忌惮 发表于 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开根号就行

曾经的肆无忌惮 发表于 2015-2-1 22:09:53

ybyc 发表于 2015-2-1 22:01
你的编译器的结果和我的一样吗?
我的是r=11,area=314.159

vc6.0 ,本来我没改之前和你是一样的答案,你的循环里面if语句写错了,不是没进行判断、要记得continue是结束本次循环进入下一次循环,break;才是跳出循环

曾经的肆无忌惮 发表于 2015-2-1 22:12:53

你看一下当area = 113.09723999999999就已经进入if语句内了

ybyc 发表于 2015-2-1 23:07:34

曾经的肆无忌惮 发表于 2015-2-1 22:12
你看一下当area = 113.09723999999999就已经进入if语句内了

可能是编译器的原因吧,还是谢谢
页: [1]
查看完整版本: continue语句的问题