我正在使用文件流,将整数读入一个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;
}
答案 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
返回bool
,prime
现在为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;
}