作业求助
用函数编程实现输出 m~n之间所有素数,并求和,m和n由键盘输入。素数是只能被1和自身整除的大于1的正整数。 要求程序能对用户输入的数据进行正确性检查,满足条件:m和n都是大于1的正整数,并且m<=n。1. 要求编写函数InputNumber 实现用户输入一个正整数,并对数的合法性进行检查,如果读入不成功(例如:输入字符串),或者数不合法即不是大于1的正整数,则重新输入,直到输入正确为止。
函数原型:
unsigned int InputNumber(char ch);
形式参数:ch,用于生成输入提示信息。
返回值:返回正确的输入值。
输入提示信息:printf("Please input the number %c(>1):",ch);
输入格式:"%d"
输入错误提示信息:"The input must be an integer larger than 1!\n"
提示:测试scanf的返回值来判断是否成功读入数据。
2. 要求编写函数IsPrime判断自然数x是否为素数,如果x是素数则返回1,不是素数返回0。
函数原型:
int IsPrime(unsigned int n);
返回值:如果x是素数则返回1,不是素数返回0。
3. 要求编写函数PrimeSum 输出m到n之间所有素数并返回它们的和。
函数原型:
int PrimeSum(unsigned int m, unsigned int n);
返回值:m到n之间所有素数的和。
每个素数的输出格式:"%d\n"
主函数定义如下:
int main()
{
int m = 0,n = 0,sum = 0,i = 0;
do
{
m = InputNumber('m');
n = InputNumber('n');
}while(m > n && printf("n must be not smaller than m! Input again!\n")); //保证m<=n
sum = PrimeSum(m,n);
printf("sum of prime numbers:%d",sum);
return 0;
}
运行实例:
Please input the number m(>1):abc
The input must be an integer larger than 1!
Please input the number m(>1):-34
The input must be an integer larger than 1!
Please input the number m(>1):56
Please input the number n(>1):23
n must be not smaller than m! Input again!
Please input the number m(>1):23
Please input the number n(>1):57
23
29
31
37
41
43
47
53
sum of prime numbers:304
Process returned 0 (0x0) execution time : 30.690 s
Press any key to continue.
大佬们,InputNumber函数怎么写呀?(纠结了好久都没想出来)o(╥﹏╥)o
本帖最后由 jackz007 于 2021-3-17 20:40 编辑
#include <stdio.h>
int IsPrime(unsigned int n)
{
unsigned int i ;
int r = 0 ;
if(n > 1) {
if(n % 2 && n % 3 && n % 5 && n % 7) {
for(r ++ , i = 3 ; i * i < n + 1 ; i ++) {
if(!(n % i)) {
r -- ;
break ;
}
}
} else if(n == 2 || n == 3 || n == 5 || n == 7) {
r ++ ;
}
}
return r ;
}
unsigned int InputNumber(char ch)
{
unsigned int d , r ;
for(;;) {
printf("Please input the number %c(>1) : " , ch) ;
if(scanf("%d" , & r) == 1 && r > 1) break ;
else printf("\n\n") ;
}
return r ;
}
int main(void)
{
unsigned int d , i , m , n, s ;
for(;;) {
m = InputNumber('1') ;
n = InputNumber('2') ;
if(n >= m) break ;
else printf("n must greater than m\n\n") ;
}
printf("\n") ;
for(d = s = 0 , i = m ; i < n + 1 ; i ++) {
if(IsPrime(i)) {
if(d) printf("\t") ;
printf("%u" , i) ;
s += i ;
d ++ ;
}
}
printf("\n") ;
printf("sum = %u\n" , s) ;
printf("\n") ;
}
编译、运行情况
D:\00.Excise\C>g++ -o x x.c
D:\00.Excise\C>x
Please input the number 1(>1) : 234
Please input the number 2(>1) : 789
239 241 251 257 263 269 271 277 281 283
293 307 311 313 317 331 337 347 349 353
359 367 373 379 383 389 397 401 409 419
421 431 433 439 443 449 457 461 463 467
479 487 491 499 503 509 521 523 541 547
557 563 569 571 577 587 593 599 601 607
613 617 619 631 641 643 647 653 659 661
673 677 683 691 701 709 719 727 733 739
743 751 757 761 769 773 787
sum = 43931
D:\00.Excise\C>
页:
[1]