DaggerRoo 发表于 2021-3-17 19:42:19

作业求助

用函数编程实现输出 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:33:51

本帖最后由 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]
查看完整版本: 作业求助