两个简单问题,请各位帮忙。

summerYe 2010-04-07 08:26:01
问题1:找出100到200间的素数。代码:
#include<iostream>
#include<cmath>
#include<iomanip>
using namespace std;
int main()
{
int m,k,i,n = 0;
bool prime;
for(m = 101; m< 201; m+=2)
{
prime = true;
k = (int) sqrt(m);
for(i = 2; i< k; i++)
if(m%i== 0)//这个if语句是否省略了else continue?如果是那么成立则返回到内层for?
{
prime = false;
break;
}

if(prime)//如果是省略了else continue那么返回外层for?
{
cout<<setw(5)<<m;
n++;
}
if(n%10==0)//是则返回外层for?
cout<<'\n';
}
return 0;
}

主要问题是我不是很清楚只有单独的if而没有else语句,让我感觉就象是case语句一样直接下来,我想问下如果当m=105时,第一个if显然不成立那么再接着下来还是有continue?显然不是直接下来。否则105也成了素数。

问题2:编写函数int factor(int m, int fac[]),该函数的返回正整数m(m>2)的除自身外的所有不同的因子的个数,并把因子放在数组fac中;如m = 16,因子1,2,4,8,因子个数为4.
这个题目不会...不知如何将一个函数返回多个值。
希望各位帮忙。。



...全文
145 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
a198911ab 2010-04-08
  • 打赏
  • 举报
回复
第一道题中显然有问题!明显11的平方、13的平方、17、19都算进去了!为了另这些单平方数也算进去!k的数据类型改了float!然后不需要将sqrt(m)强制转换!再把i<k改成i<=k!就行了!
走好每一步 2010-04-08
  • 打赏
  • 举报
回复
一个函数返回多个值
你能用把一个数组传进函数中,那么也可以把一个数组传出来啊。

fun(int a[], int an, int b[], int bn);
a数组传进去, b数组传出去。
走好每一步 2010-04-08
  • 打赏
  • 举报
回复
k = (int) sqrt(m);
for(i = 2; i< k; i++)


令m=9;
k = 3;
那么for(i=2; i<3; i++)
9 % 2 != 0
Oh, 9是素数?
i<k应该改成 i<=k

还有这道题可以考虑筛子筛素数。
走好每一步 2010-04-08
  • 打赏
  • 举报
回复
赞下:楼主书写格式不错,而且疑问都很有想法。

不过,楼主没很好理解for循环,continue意思就是说continue下面的程序不执行,结束掉这回,然后更新i++;

for (赋初值;判断表达式;更新表达式)

do something;

赋初值就一次,然后判断(满足条件),进入{}do something,顺序执行完do something后,更新表达式,判断表达式.......

for ()
{
do something1;
if (xx)
continue;
do something2;
}

if(xx)为真,执行continue,那么就不do something2,直接跳到更新表达式,然后判断......
huangbo0603 2010-04-07
  • 打赏
  • 举报
回复
支持楼上!!!
selooloo 2010-04-07
  • 打赏
  • 举报
回复
错误较多,LZ对函数理解还不太清楚啊


#include<iostream>
using namespace std;

int *fac;//Õâ¸öÊ×ÏÈÔõô³õʼ»¯£¿ÎÒ²»»á¡£
int j;
int* factor(int m,int fac[])//ÎÒ¾õµÃfacÊÇÒ»¸öÖ¸Õ룬µ«·µ»ØÀàÐÍÊÇint¡£²»»á½â¾ö£¿
{
int i;
for(i = 1;i<m; i++)
{
if(m%i == 0)
{
fac[j] = i;
j++;
}
else
continue;
}
return fac;
}
int main()
{
int m;
cout<<"ÇëÊäÈëm: ";
cin>>m;
fac=new int[m];
factor(m,fac);
for(int i=0;i<j;i++)
cout<<fac[i]<<" ";
cout<<endl;
free(fac);
system("pause");
return 0;
}
summerYe 2010-04-07
  • 打赏
  • 举报
回复
第二题的代码我写在7楼,各位看看帮忙修正一下。
flyyyri 2010-04-07
  • 打赏
  • 举报
回复
顶一个先
summerYe 2010-04-07
  • 打赏
  • 举报
回复
我是说第二题的代码我写了出来帮忙改下好吗?
lirg8405 2010-04-07
  • 打赏
  • 举报
回复
for(i = 2; i< k; i++)
if(m%i== 0)//这个if语句是否省略了else continue?如果是那么成立则返回到内层for?
{
prime = false;
break;
}
上面的代码修改成这样你是否明白?
for(i = 2; i< k; i++)
{
if(m%i== 0)//这个if语句是否省略了else continue?如果是那么成立则返回到内层for?
{
prime = false;
break;
}
}
summerYe 2010-04-07
  • 打赏
  • 举报
回复
刚想了一下,代码还不完整,各位大哥看看怎么改正....
#include<iostream>
using namespace std;
int main()
{
int factor (int m,int fac[])
cout<<"请输入m";
cin>>m;
int fac[];//这个首先怎么初始化?我不会。
factor(m,fac);
int factor(int m,int fac[])//我觉得fac是一个指针,但返回类型是int。不会解决?
{
j = 0;
for(i = 1;i<m; i++)
{
if(m%i == 0)
{
fac[j] = m;
j++;
}
else
continue;
}
return fac;
return 0;
}

返回的因子都在fac里面了。。。。但这不能运行。

Wang_Zhi_Lin 2010-04-07
  • 打赏
  • 举报
回复
可以考虑使用引用和指针作为参数传递,例如:int factor(int &m, int *fac),(指针指向数组)
summerYe 2010-04-07
  • 打赏
  • 举报
回复
4楼大哥是说,直到找到这个数除以变量i中的的数除尽为止,那么不是找不到就else continue的意思吗? 第二题我想象,逻辑思维不佳,呵呵。
selooloo 2010-04-07
  • 打赏
  • 举报
回复
别忘了if上面有个for循环,对105,105%2!=0,并不会跳出循环,而是执行105%3,直到105%5==0满足if条件,执行break,跳出循环。你可以加上 else continue;不过并没必要

第二个,因子是什么??
summerYe 2010-04-07
  • 打赏
  • 举报
回复
二楼大哥照你说的那样else就执行下面那么105%2除不尽那么岂不是105是素数了?
linyongzuo 2010-04-07
  • 打赏
  • 举报
回复

#include<iostream>
#include<cmath>
#include<iomanip>
using namespace std;
int main()
{
int m,k,i,n = 0;
bool prime;
for(m = 101; m< 201; m+=2)
{
prime = true;
k = (int) sqrt(m);
for(i = 2; i< k; i++)
if(m%i== 0)//else的话就执行下面的语句。。。 {
prime = false;
break;
}

if(prime)//同理。。。 {
cout<<setw(5)<<m;
n++;
}
if(n%10==0)//是则返回外层for?
cout<<'\n';
}
return 0;
}


第二个问题,为什么一定要返回多个值?int i = 0 ;fac[i] = 因子;i++ 这样不就好了?f
summerYe 2010-04-07
  • 打赏
  • 举报
回复
第二个问题可以给提示,如果有代码那更好了.....

64,646

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧