zoukankan      html  css  js  c++  java
  • 11.5C语言程序设计作业

    参考实验5-2,设计一个菜单,在屏幕显示一个任务提示的选择菜单,用户通过输入1-6进入其中一个任务,任务完成后继续显示任务提示界面,若用户输入0,则退出系统。
    注意,任务1有两种方法,所以输入选项1后,还需要再次提示用户选用break语句还是设置标志标量的方法来判断m是否是素数。
    任务1:
    用试商法判断某个数是否是素数。要求:采用试商法,分别用break语句和采用设置标志变量并加强循环测试(即在for循环的表达式中判断标志的值,若检测到标志为非素数,终止循环)这两种方法,分别编写函数isPrime1()和isPrime2(),从键盘任意输入一个整数m,判断m是否为素数,如果m是素数,按照”%d is a prime number ”的格式打印,否则按”%d is not a prime number ”格式打印。然后思考分析那种方法的可读性好。
    任务2:
    用数学的方法可以证明,不能被2~sqrt(m)(取整)之间的数整除的数,一定不能被1和它本身之外的任何整数整除。根据素数的这个性质,通过编写新的素数判断函数isPrime3(),完成素数的判断。
    任务3:
    从键盘任意输入一个整数n,编程计算并输出1~n之间的所有素数之和。
    任务4:
    从键盘任意输入一个整数m,若m不是素数,这计算并输出其所有因子(不包括1),例如对于16,输出2,4,8;否则输出”No divisor , It is a prime number”。
    任务5:
    如果一个正整数m的所有小于m的不同因子(包括1)加起来正好等于m本身,那么就称它为完全数,例如,6就是一个完全数,是因为6=1+2+3。请编写一个判断完全数的函数,isPerfect(),然后判断从键盘输入的整数是否是完全数。
    任务6:
    从键盘任意输入一个整数m,若m不是素数,则对m进行质因数分解(质因数:其既是质数(即素数),也是m的因子数。质因数分解,就是分解出来的因数也是质数),并将m以质因数从小到大顺序排列的乘积形式输出,否则输出“It is a prime number”。例如用户输入90,程序输出90=233*5;用户输入17时,程序输出“It is a prime number”。

    分析:确实跟上周的实验课作业很像,不论是题目还是代码。为了完全满足题意(也为了少动脑子想怎么压行、美化代码),要求定义多个函数的地方尽管有很大重复度也还是分开写了,没有要求写函数的地方就写在了main函数里面弄成一坨

    #include <stdlib.h>
    #include <stdio.h>
    #include <math.h>
    
    int isPrime1(int m)
    {
        int i;
        for(i=2;i<m;++i)
            if(m%i==0)
                return 0;
        return 1;
    }
    int isPrime2(int m)
    {
        int i,flag=1;
        for(i=2;i<m;++i)
            if(m%i==0)
                flag=0;
        return flag;
    }
    int isPrime3(int m)
    {
        if(m==2 || m==3)return 1;
        int i,emp=sqrt(m);
        for(i=2;i<=emp;++i)
            if(m%i==0)
                return 0;
        return 1;
    }
    int op(int in,int m)
    {
        if(m==1)return 0;
        if(in==1)return isPrime1(m);
        else    return isPrime2(m);
    }
    int isPerfect(int m)
    {
        int i,sum=1;
        for(i=2;i<m;++i)
            if(m%i==0)
                sum+=i;
        return sum==m;
    }
    
    int main()
    {
    	int m,i,in,sum,flag,emp;
    	do
    	{
            printf("任务1: 试商法判断某个数是否是素数
    ");
            printf("任务2: 根号法判断某个数是否是素数
    ");
            printf("任务3: 计算并输出1~n之间的所有素数之和
    ");
            printf("任务4: 输出非素数所有因子
    ");
            printf("任务5: 判断完全数
    ");
            printf("任务6: 非素数的质因数分解
    ");
            printf("请通过输入1-6选择所执行的任务,输入0退出:
    ");
    		scanf("%d",&in);
    		switch(in)
    		{
    			case 0:break;
    			case 1:
    			    printf("方法1break语句;方法2设置标志标量
    请输入1或2选择所用方法");
    			    scanf("%d",&in);
    			    while(in!=1 && in!=2){puts("Inputs error! Please input again: ");scanf("%d",&in);}
    			    printf("please input the number ");
    			    scanf("%d",&m);
    			    printf("%d is ",m);
    			    if(!op(in,m))
                        printf("not ");
                    puts("a prime number");
    				break;
    			case 2:
    			    printf("please input the number ");
    			    scanf("%d",&m);
    			    printf("%d is ",m);
    			    if(!isPrime3(m))
                        printf("not ");
                    puts("a prime number");
    				break;
    			case 3:
    			    sum=0;
    			    printf("please input the number ");
    			    scanf("%d",&m);
    			    for(i=2;i<m;++i)
                        if(isPrime3(i))
                            sum+=i;
                    printf("%d
    ",sum);
    				break;
    			case 4:
    			    printf("please input the number ");
    			    scanf("%d",&m);
    			    flag=1;
    			    for(i=2;i<m;++i)
                        if(m%i==0)
                        {
                            printf("%d ",i);
                            flag=0;
                        }
                    if(flag)printf("No divisor , It is a prime number");
                    puts("");
    				break;
    			case 5:
    			    printf("please input the number ");
                    scanf("%d",&m);
                    printf("%d is ",m);
                    if(!isPerfect(m))printf("not ");
                    puts("a perfect number");
    				break;
    			case 6:
    			    printf("please input the number ");
    			    scanf("%d",&m);
    			    if(isPrime3(m))
                    {
                        puts("It is a prime number");
                        break;
                    }
                    printf("%d=",m);
    			    emp=sqrt(m);
    			    for(i=2;i<=emp;++i)
                        while(m%i==0)
                        {
                            printf("%d",i);
                            if((m/=i)!=1)
                                printf("*");
                        }
                    puts("");
    				break;
    			default:puts("Input error!");
    		}
    	}while(in);
    	return 0;
    }
    
  • 相关阅读:
    mysql——查看存储过程和存储函数——概念
    mysql——视图——示例
    mysql——定义——存储过程和函数——概念
    mysql——索引——概念
    mysql——视图——概念
    mysql——触发器——前期整理笔记00
    mysql——使用——存储过程——示例
    mysql——触发器、视图、索引——前期整理笔记00
    mysql——使用——存储函数——示例
    IT职场人生系列之十七:入职(高手篇)
  • 原文地址:https://www.cnblogs.com/kuaileyongheng/p/13930684.html
Copyright © 2011-2022 走看看