全部问题 > 当前问题

看不懂这个程序,能详细解释一下吗?我的信心都快没了。呜呜呜

blob.png

做我_女朋友 2016-2-24 21:07:54

共 10 个回答

水根 2016-2-24 21:11:11

应该等于21,但是我发现这个程序应该是一个改错题吧,它到底想干什么?

做我_女朋友 2016-2-24 21:12:35

回复 水根blob.png



能不能具体解释一下啊,呜呜呜。。。

这是3+5但这不是8 2016-2-24 21:16:45

这个我做过,改法就不记得了,好像两个if旁边的括号都要改。

做我_女朋友 2016-2-24 21:17:52

谁能帮我看看这个程序啊,具体点的,好让我对做这种题目有些具体的概念理解,我快崩溃了!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

水根 2016-2-24 21:20:26

第一个错在if(i%k!=0)上,那个循环是判断是否是素数的,所以应该改成if(i%k==0)

水根 2016-2-24 21:21:53

它是if(i%k==0) break;意思就是如果它能被整除,那么就不是素数,就直接跳出了。

匿名课官 2016-2-24 21:40:16

应该是23


匿名课官 2016-2-24 21:46:07

k是除数,是被i除的,i得保证只能被1和它本身整除,所以得除以2~k-1,所以i肯定不能大于k了。
改正:
1:if (i % k == 0)
2:if(k==i-1) 或if(k>=i-1)或if(k>i-2)

水根 2016-2-24 21:48:12

嵌套循环你知道吧?它跳出了一个循环以后还有一个循环。外循环是一个死循环,内循环是一个判断它是否是素数,如果不是,就跳出本次(内)循环,重新来次外循环,当然,先要+1,如果是,就直接往下执行。然后最后的那个错是if(k<=i)应该改成if(k<i),因为如果k=i,那就有可能不是素数了

最佳答案

嘿嘿大人 2016-2-25 11:20:05

#include <stdio.h>


int fun(int m)

{  int i, k ;  //定义局部变量i和k

   for (i = m + 1 ; ; i++) //这个是在遍历所有大于形参m的数

   {

      for (k = 2 ; k < i ; k++) //这个循环是在循环所有小于i的数,目的是查找i是不是有其他因数

/**************found**************/

         if (i % k == 0)  //如果i能被k整除,说明i不是一个素数;如果i在循环执行完直到k=i跳出循环之前依然不能被k整除就说明i是一个素数

            break ;   //i 不是素数就执行中途跳出循环,这个时候k是满足k<i的

/**************found**************/

         if (k == i) //当k等于i说明是自然循环完毕的,说明i是一个素数,所以返回i的值,如果i不等于k,那么说明是中途跳出循环的,就不能返回,而是跳出内循环继续外循环

           return(i);

   }

}


void main()

{

  int n ; //定义一个变量n

  n = fun(20) ; //调用函数fun,实参为20

  printf("n=%d\n", n) ;

}


问题来自: 改错题真题