C++语言的程序搞不懂

来源:百度知道 编辑:UC知道 时间:2024/06/02 00:21:13
#include<iostream.h>
#include<math.h>

void main()
{
int b,a;
cout<<"任意输入一个数字:"<<endl;
cin>>b;
for(a=1;a<=sqrt(b);a++);
if(b%a==0) cout<<b<<"不是素数";
else cout<<"是素数";
}

#include<iostream.h>
#include<math.h>

void main()
{
int b,a;
for(a=1;a<=sqrt(b);a++);
cout<<"任意输入一个数字:"<<endl;
cin>>b;
if(b%a==0) cout<<b<<"不是素数";
else cout<<"是素数";
}

两段程序都能运行但是结果都不一样(和我要的结果也不一样)到底是哪出了问题,请高手解答下,能详细点更好!在此谢谢了。。。
第1段程序运行以后输入出的数字计算以后是错误的。。比如输入一个10,也会显示是素数。。不知道什么原因! (我的题目要求是任意输入一个数字,判断是不是为素数)

第二段程序的想法不对,第一段的问题在于,不是每次循环都要输出一次结果,而是每次判断,若有因子,则不是素数,不必再向下判断,退出循环;若直到sqrt(b),都没有因子,则是素数。循环结束后再作判断。
#include <iostream>
#include <cmath>
using namespace std;
void main()
{
int i,n;
cout<<"输入一个不为1的正整数:";
cin>>n;
for(i=2;i<=sqrt(n);i++)
if(n%i==0) //若有因子,退出循环
break;
if(i>sqrt(n)) //如果一直没有因子,则i会大于sqrt(n)
cout<<n<<"是素数"<<endl;
else
cout<<n<<"不是素数"<<endl;
}

第二段

int b,a;
for(a=1;a<=sqrt(b);a++); //b没初始化就应用了

同学 你的for 循环是不能这样写得 “for(a=1;a<=sqrt(b);a++);”

你在后面加了分号 于是两个循环都变成空循环了,也就是说没有执行有效的语句,另外第二个循环时b没有初始化 循环会有问题的 你先改了再说