素数函数C ++

时间:2017-04-29 18:37:01

标签: c++

我正在使用文件流,将整数读入一个infile,然后将那些正数读入一个指向outfile的数组中。我对数组进行冒泡排序,我需要找到平均值,方差,标准偏差和素数。我的素数函数有问题,它根本不会将任何内容流入我的文件中。 Photo of my terminal here。这也错误估算了我的平均值。我已经取出了我的排序并获得了数据功能,因此它看起来并不凌乱。

#include <iostream>
#include <fstream>
#include <iomanip>
#include <string>
#include <cmath>
using namespace std;
const int MAX = 30;
void getVariance(int[], int);
bool isPrime(int[], int);
double average(int[], int);
int main()
{
  string inputfilename, outputfilename;
  ifstream infile;
  ofstream outfile;
  int prime, n, sum =0, posnumbers[MAX], countp=0, countn=0\
;
  double variance, stdv, avg=0;


  cout << "Please enter the name of the input file: ";
  cin >> inputfilename;
  infile.open(inputfilename.c_str());
  cout << "Please enter the name of the output file: ";
  cin >> outputfilename;

       ///////////////////////postive ////////////////////////////                            

  outfile.open(outputfilename.c_str());
  if(!infile)
    cout << "file not open for input" << endl;
  else
    {
     prime = isPrime(posnumbers, n);
     outfile << "=======================" << endl << endl;
     outfile << "Positive #'s in the File" << endl;
     for (int i=0; i<n; i++)
         {
           if (posnumbers[i]>=0)
             {
               countp++;
               sum = sum + posnumbers[i];
               outfile << posnumbers[i] << endl;
               if (posnumbers[i] == prime)
                 outfile << posnumbers[i] << endl;
             }
         } 



     outfile << "average " <<  sum/n << endl;
     outfile << "variance " << variance << endl;


///////////////////////// functions/////////////////////                                 



bool isPrime(int posnum[], int n)
 {
   for (int i=2; i<=posnum[n]/2; i++)
     if (posnum[n] % i ==0)
       return false;
     else
       return true;
 }

double average(int posnum[], int n)
{
  double sum = 0.0;
  for (int i=0; i<n; i++)
    {
      sum += posnum[n];
    }
  return sum / n;
}

1 个答案:

答案 0 :(得分:1)

bool isPrime(int posnum[], int n)
 {
   for (int i=2; i<=posnum[n]/2; i++)
     if (posnum[n] % i ==0)
       return false;
     else
       return true;
 }

这不起作用。原因是当数字不可分割时,您立即返回true。例如,如果posnum[n]是3,那么你的模数检查将失败,你将立即返回true,而不检查所有其他可能是除数的数字。

此外,isPrime目前只检查一个数字的素数,但这并未反映在调用代码中。

prime = isPrime(posnumbers, n);

由于isPrime返回boolprime现在为0或1。

if (posnumbers[i] == prime)
    outfile << posnumbers[i] << endl;

这意味着该行只会输出所有0或1的数字,具体取决于prime的值。您应该为isPrime的每个元素调用posnumbers,并在它返回true时打印它。

对于isPrime,请尝试以下操作:

bool isPrime(int posnum[], int n) {
    for (int i = 2; i <= posnum[n] / 2; ++i) {
        if (posnum[n] % i == 0) {
            return false;
        }
    }
    return true;
}