c语言 把一个数分解成两个素数的和,判断素数精简算法,scanf("%c")读入的是回车符‘\n’

来源:互联网 发布:移动运营商数据分析 编辑:程序博客网 时间:2024/05/19 18:12
/**把一个数分解成两个素数的和*/#include<stdio.h>#include<math.h>void main(){    int n;    char doagain='n';    char temp;    do    {        printf("输入一个数:");        scanf("%d",&n);        int i;        int count=0;        for(i=1;i<n;i++)        {            if(isPrime(i)&&isPrime(n-i))//如果返回1表示 i是质数,如果两个数都是质数            {                printf("%d=%d+%d\n",n,i,n-i);                count++;            }        }        if(count==0)        {            printf("%d无法分解成两个质数的和式\n",n);        }        printf("继续[y/n]?:");//        scanf("%s",&doagain);//这样是可以的//        scanf("%c",&doagain);//这样无法循环,因为读入的字符其实是回车符,不满足循环条件,所以循环结束        scanf("%c%c",&temp,&doagain);//这样就可循环了,读入第一个的字符是回车,接着才读到控制字符[y|n]        printf("第一个字符是回车?%d\n",(temp=='\n'));//输出1:表示真的是回车符        printf("多余的字符:%c",temp);//打印了一个回车/*    这里总结:如果使用字符作为循环控制符,会多读入一个回车符‘\n’(使用%c%c),        第一个%c读入回车符,第二个%c读入的才是循环控制符    或者使用%s,就可以这个问题*/    }while((doagain=='y')||(doagain=='Y'));}int isPrime(int n)//判断一个数是不是质数{    int i;    if(n<2)        return 0;    for(i=2;i<=sqrt(n);i++)    {        if(n%i==0)//如果n被其他书整除            return 0;//那就不是质数,返回0表示不是质数    }    return 1;}

测试:

输入一个数:1212=5+712=7+5继续[y/n]?:y第一个字符是回车?1多余的字符:输入一个数:3434=3+3134=5+2934=11+2334=17+1734=23+1134=29+534=31+3继续[y/n]?:n第一个字符是回车?1多余的字符:


阅读全文
0 0
原创粉丝点击