初学C语言,有个素数有关问题求教,代码如下,请尽量不要使用一些菜鸟不熟悉的函数什么的。多谢
初学C语言,有个素数问题求教,代码如下,请尽量不要使用一些初学者不熟悉的函数什么的。。。谢谢
C语言
求素数
这个程序的目的是给电脑一个数字,然后电脑求出数值内最大的十个素数,然后显示它们和它们的和;
目前遇到的一些问题就是:
1.输出了以后总是会多出来两个0;
2.试了很多次找不到将1,0,负数那些去掉;
3.想找个办法一次性输出数组;
4.其实这个我还没写完,只是写到可以输出素数的地步;
#include "stdio.h"
#include "stdlib.h"
#include "math.h"
int main(void)
{
int i,m,j,a;
int grade[10];
double k;
printf("请输入一个数字:\n");
scanf("%d",&i);
for(i=i,m=0;i>=2,m<=10;i--)
{
k=sqrt(i);
for(j=2;j<=floor(k);j++)
if (i%j==0)
{
break;
}
if (j>floor(k))
{
grade[m]=i;
m++;
}
}
a=grade[0]+grade[1]+grade[2]+grade[3]+grade[4]+grade[5]+grade[6]+grade[7]+grade[8]+grade[9];
printf("%d %d %d %d %d %d %d %d %d %d %d %d"
,grade[0],grade[1],grade[2],grade[3],grade[4],grade[5]
,grade[6],grade[7],grade[8],grade[9]);
printf("")
}
我C语言还只上了一节课,都是自己边看书边搜索边试的,请不要笑话。。。不过还请前辈们笑过之后不吝赐教,谢谢啦。
------解决方案--------------------
很简单,你数数你printf了几个%d
------解决方案--------------------
而且,不要用这种一长串的相加,一长串的printf
你看你会用for循环
写个for(int i=0;i<10;i++) {printf("%d ",grade[i]);}
不就好了么
------解决方案--------------------
利用循环才可以发挥数组的作用,不然要数组这样的连续内存干嘛。输出数组时用for循环即可一次性输出
------解决方案--------------------
printf("%d %d %d %d %d %d %d %d %d %d %d %d"
有12个
------解决方案--------------------
最后多输出了两个%d。
另外“2.试了很多次找不到将1,0,负数那些去掉;”
这句话是什么意思啊,是说如果你输入0.1.负数这些的话,系统还是会继续按照条件查找“质数”而不是停止吗?
这个问题的话,你可以限制一下判断条件。
如果在2到你输入的值之间,素数没有那么多的话,那么最小判断到二,然后停止判断,提示系统不够10个,然后能输出几个输出几个。
C语言
求素数
这个程序的目的是给电脑一个数字,然后电脑求出数值内最大的十个素数,然后显示它们和它们的和;
目前遇到的一些问题就是:
1.输出了以后总是会多出来两个0;
2.试了很多次找不到将1,0,负数那些去掉;
3.想找个办法一次性输出数组;
4.其实这个我还没写完,只是写到可以输出素数的地步;
#include "stdio.h"
#include "stdlib.h"
#include "math.h"
int main(void)
{
int i,m,j,a;
int grade[10];
double k;
printf("请输入一个数字:\n");
scanf("%d",&i);
for(i=i,m=0;i>=2,m<=10;i--)
{
k=sqrt(i);
for(j=2;j<=floor(k);j++)
if (i%j==0)
{
break;
}
if (j>floor(k))
{
grade[m]=i;
m++;
}
}
a=grade[0]+grade[1]+grade[2]+grade[3]+grade[4]+grade[5]+grade[6]+grade[7]+grade[8]+grade[9];
printf("%d %d %d %d %d %d %d %d %d %d %d %d"
,grade[0],grade[1],grade[2],grade[3],grade[4],grade[5]
,grade[6],grade[7],grade[8],grade[9]);
printf("")
}
我C语言还只上了一节课,都是自己边看书边搜索边试的,请不要笑话。。。不过还请前辈们笑过之后不吝赐教,谢谢啦。
------解决方案--------------------
很简单,你数数你printf了几个%d
------解决方案--------------------
而且,不要用这种一长串的相加,一长串的printf
你看你会用for循环
写个for(int i=0;i<10;i++) {printf("%d ",grade[i]);}
不就好了么
------解决方案--------------------
利用循环才可以发挥数组的作用,不然要数组这样的连续内存干嘛。输出数组时用for循环即可一次性输出
------解决方案--------------------
printf("%d %d %d %d %d %d %d %d %d %d %d %d"
有12个
------解决方案--------------------
最后多输出了两个%d。
另外“2.试了很多次找不到将1,0,负数那些去掉;”
这句话是什么意思啊,是说如果你输入0.1.负数这些的话,系统还是会继续按照条件查找“质数”而不是停止吗?
这个问题的话,你可以限制一下判断条件。
如果在2到你输入的值之间,素数没有那么多的话,那么最小判断到二,然后停止判断,提示系统不够10个,然后能输出几个输出几个。