C小程序的简单题 不好想。

来源:百度知道 编辑:UC知道 时间:2024/06/01 10:18:53
运行下列程序,分别输入11和20,写出输出结果。
#include <stdio.h>
int fun(m) int m;
{ int i,k; for(i=m+1;;i++)
{ for(k=2;k<i;k++) if(i%k==0) break;
if(k>m) return i;} }
main()
{ int n;
printf("n Please Enter n:");
scanf("%d",&n);
printf("%d\n",fun(n)); }
结果=13 23 为什么呢?

第一个 i=m+1,即i=12,内循环k++,当k=2时能整除,跳出内循环,再来外循环,因为这时k<m所以,再来一次外和内,因为这时i=13,直到k=13时才能被整除,跳出内循环,而此时的k>m也成立,所以返回i=13

第二个同理,i=20时k=2就跳出,i++为21,k循环到3时跳出,i++为22,k=2时跳出,i++为23,k要到23才能跳出,这时满足k>m,返回23

你的那个第三行int fun(m) int m; 定义是不是写错了~!
int fun(m)后的int m你是()没有放好~!

应写成 int fun(int m)才对~!
{ int i,k;
for(i=m+1;;i++)
{ for(k=2;k<i;k++)
{
if(i%k==0)
break;
if(k>m) return i;
}
}
}
你上面说的输入13 得出结果是 23是因为你在第二个for的循环里面的两个
if(i%k==0) break;
if(k>m) return i;只有第一个得以合你那个第二个for 条件
但是第二个if 就没有去合条件运行~!
所以你的结果有问题~!

楼上的真逗,13能被2整除?!
怕了你了,真想不明白。呵呵,期待答案。

调试一下就知道了