鱼C论坛

 找回密码
 立即注册
查看: 1965|回复: 1

[已解决]作业求助

[复制链接]
发表于 2021-3-17 19:42:19 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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
最佳答案
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>
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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>
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-22 04:12

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表