求做一道C++编程题

2025-01-18 20:59:16
推荐回答(1个)
回答1:

#include
#include
#define MAX_MAT_SIZE 100

using namespace std;

class A
{
private:
int* m_data;
int len;
public:
A();
int GetLen();

void Input();
int F();
int R();
int G();
void Output();

bool IsPrime(int data);
};

//构造函数
A::A()
{
len = 0;
m_data = new int [MAX_MAT_SIZE];
}

//取数组长度
int A::GetLen()
{
return len;
}

//输入数据
void A::Input()
{
int data, i = 0;
while(1)
{
scanf("%d", &data);
if(data == 0 || i > 10) break;
m_data[i++] = data;
len = i;
}
}

//非素数之和
int A::F()
{
int sum = 0;
for (int i = 0; i < len; i++)
{
if (!IsPrime(m_data[i]))
{
sum += m_data[i];
}
}
return sum;
}

//这组数据中的最小值
int A::R()
{
int min = m_data[0];
for (int i = 1; i < len; i++)
if(m_data[i] < min) min = m_data[i];
return min;
}

//不包括最小值所有整数累加和
int A::G()
{
int sum = 0;
for (int i = 0; i < len; i++)
sum += m_data[i];
return sum - R();
}

//输出结果
void A::Output()
{
printf("非素数之和:%d\n", F());
printf("这组数据中的最小值:%d\n", R());
printf("不包括最小值所有整数累加和:%d\n", G());
}

//检查data是否是素数
bool A::IsPrime(int data)
{
for(int i = 2; i < data; i++)
if(data % i ==0)break;
return (i == data) ? true : false;
}

//主函数
void main()
{
A a;
a.Input();
a.Output();
}