|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
用函数编程实现输出 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>
复制代码
|
|