用函数编程实现输出 m~n之间所有素数,并求和,m和n由键盘输入。素数是只能被1和自身整除的大于1的正整数。 要求程序能对用户输入的数据进行正确性检查,满足条件:m和n都是大于1的正整数,并且m<=n。 1. 要求编写函数inputnumber 实现用户输入一个正整数,并对数的合法性进行检查,如果读入不成功(例如:输入字符串),或者数不合法即不是大于1的正整数,则重新输入,直到输入正确为止。 函数原型: unsigned int inputnumber(char ch); 形式参数:ch,用于生成输入提示
时间: 2023-05-31 15:18:06 浏览: 179
输入整数n,输出1~n的素数
### 回答1:
此题要求编写一个函数实现输出m~n之间所有素数,并求和,m和n由键盘输入。素数是只能被1和自身整除的大于1的整数。要求程序能对用户输入的数据进行正确性检查,满足条件:m和n都是大于1的正整数,并且m<=n。
1. 要求编写函数inputnumber实现用户输入一个正整数,并对数的合法性进行检查,如果读入不成功(例如:输入字符串)或者数不合法即不是大于1的正整数,则重新输入,直到输入正确为止。
函数原型: unsigned int inputnumber(char ch); 形式参数:ch,用于生成输入提示。
# 例如,以下代码:
unsigned a;
a = inputnumber(‘A’);
其中 ‘A’ 是输入提示字符。
注意:不允许使用库函数,例如:atoi等。
2. 要求编写主函数实现m~n之间素数的输出(输出格式:每行显示10个素数),并输出素数的和。
要求:程序能对用户输入的数据进行正确性检查。满足条件:m和n都是大于1的正整数,并且m<=n。
函数原型: void outputprime(unsigned int m, unsigned int n); 实现从m到n之间的素数输出,并完成素数的求和工作。
注意:结果只需保留到整数部分即可(舍弃小数部分)。
请编写函数inputnumber和函数outputprime。
### 回答2:
函数返回值:合法的正整数。
2. 要求编写函数isprime 实现判断一个正整数是否为素数。 函数原型: bool isprime(int num); 形式参数:num,待判断的正整数。函数返回值:如果num为素数返回true,否则返回false。
3. 要求编写函数printprime 实现输出m~n之间所有素数,并返回它们的和。函数原型: int printprime(int m, int n); 形式参数:m,n,m和n分别为输出素数的起始点和终止点。 函数返回值:返回m~n之间素数的和。
解题思路:
1. 首先调用inputnumber函数验证用户输入的m、n是否合法,直至输入合法。
2. 接着,利用for循环依次遍历m~n之间的每一个数,并调用isprime函数判断该数是否是素数,如果是素数则输出并把它累加到和中。
3. 最后返回素数和。
下面是详细的代码实现:
#include <iostream>
#include <string>
#include <sstream>
using namespace std;
//函数声明
unsigned int inputnumber(char ch);
bool isprime(int num);
int printprime(int m, int n);
//主函数
int main()
{
cout << "请输入m和n,要求m<=n,且m和n都是大于1的正整数:" << endl;
int m = inputnumber('m');
int n = inputnumber('n');
int sum = 0;
cout << "m到n之间的素数有:";
sum = printprime(m, n);
cout << endl << "它们的和为:" << sum << endl;
return 0;
}
//函数定义
unsigned int inputnumber(char ch)
{
unsigned int num;
string str;
cout << "请输入" << ch << ":";
while (getline(cin, str))
{
stringstream ss(str);
if (ss >> num && ss.eof() && num > 1)
{
return num;
}
cout << "输入不合法,请重新输入" << ch << ":";
}
}
bool isprime(int num)
{
if (num == 2)
{
return true;
}
else if (num % 2 == 0 || num < 2)
{
return false;
}
for (int i = 3; i * i <= num; i += 2)
{
if (num % i == 0)
{
return false;
}
}
return true;
}
int printprime(int m, int n)
{
int sum = 0;
for (int i = m; i <= n; i++)
{
if (isprime(i))
{
cout << i << " ";
sum += i;
}
}
return sum;
}
### 回答3:
题目描述:
输入两个正整数 m 和 n,实现输出 m~n 之间所有素数,并求和。
素数是只能被 1 和自身整除的大于1的正整数。
要求程序能对用户输入的数据进行正确性检查,满足条件:m 和 n 都是大于 1 的正整数,并且 m <= n。
解题思路:
首先需要编写一个函数 inputnumber 来对用户输入的正整数进行检查,如果读入不成功(例如:输入字符串),或者数不合法即不是大于1的正整数,则重新输入,直到输入正确为止。
其次,利用函数 is_prime 判断一个数是否为素数。
最后,编写 main 函数,实现对用户输入数据的检查和输出 m~n 之间的素数并求和。具体流程如下:
- 调用 inputnumber 函数输入 m 和 n。
- 判断 m 和 n 是否满足条件,即是否是大于 1 的正整数,并且 m <= n。
- 将 m~n 之间的每个数n传入 is_prime 函数,判断是否为素数,如果是则输出该数,并将其累加到变量 sum 中。
- 输出累加的结果 sum。
需要注意的是,在编写 inputnumber 函数时,要考虑到用户输入不合法的情况,需要使用 while 循环进行检测。同时,is_prime 函数可以使用 2~sqrt(n) 的数进行判断。
代码实现及注释如下:
阅读全文