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