gpt4 book ai didi

c++ - 质数函数 C++

转载 作者:行者123 更新时间:2023-11-28 05:10:06 25 4
gpt4 key购买 nike

我正在使用文件流,将整数读入一个输入文件,然后将那些正数读入一个指向输出文件的数组。我对数组进行冒泡排序,需要找到平均值、方差、标准差和质数。我的质数函数有问题,它根本没有将任何内容流式传输到我的文件中。 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;
}

最佳答案

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 目前仅检查单个数字的素数,但这并未反射(reflect)在调用代码中。

prime = isPrime(posnumbers, n);

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

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

这意味着该行将只输出所有 0 或 1 的数字,具体取决于素数的值。您应该为 posnumbers 的每个元素调用 isPrime 并在它返回 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;
}

关于c++ - 质数函数 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43699214/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com