初学C语言,有个素数问题求教,代码如下,请尽量不要使用一些初学者不熟悉的函数什么的。。。谢谢

何日成熟 2014-03-04 08:55:15
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语言还只上了一节课,都是自己边看书边搜索边试的,请不要笑话。。。不过还请前辈们笑过之后不吝赐教,谢谢啦。
...全文
184 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
何日成熟 2014-03-05
  • 打赏
  • 举报
回复
谢谢大家谢谢大家 写明白了 修改后如下: #include "stdio.h" #include "stdlib.h" #include "math.h" int main(void) { int i=0,m=0,j=0,a=0; //注意初始化 int grade[10]; double k; printf("请输入一个数字:\n"); scanf("%d",&i); for(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++; } } for(i=0; i<m; i++) { a +=grade[i]; printf("第%d个素数为%d\n", i+1,grade[i]); } printf("sum is %d\n", a); system("pause"); }
何日成熟 2014-03-05
  • 打赏
  • 举报
回复
引用 5 楼 martenyong 的回复:
最后多输出了两个%d。 另外“2.试了很多次找不到将1,0,负数那些去掉;” 这句话是什么意思啊,是说如果你输入0.1.负数这些的话,系统还是会继续按照条件查找“质数”而不是停止吗? 这个问题的话,你可以限制一下判断条件。 如果在2到你输入的值之间,素数没有那么多的话,那么最小判断到二,然后停止判断,提示系统不够10个,然后能输出几个输出几个。
那个,其他的问题都解决了,就是那个你说的第二个,我的意思是在判断素数的时候不把1,0,负数也算作素数然后输出,就像输入30以下数字的话,就没有十个素数,程序显示结果还是十个数,就会显示1,0,-1。。。那些,这个希望您能够解答
martenyong 2014-03-05
  • 打赏
  • 举报
回复
最后多输出了两个%d。 另外“2.试了很多次找不到将1,0,负数那些去掉;” 这句话是什么意思啊,是说如果你输入0.1.负数这些的话,系统还是会继续按照条件查找“质数”而不是停止吗? 这个问题的话,你可以限制一下判断条件。 如果在2到你输入的值之间,素数没有那么多的话,那么最小判断到二,然后停止判断,提示系统不够10个,然后能输出几个输出几个。
buyong 2014-03-04
  • 打赏
  • 举报
回复
printf("%d %d %d %d %d %d %d %d %d %d %d %d" 有12个
zxvivian 2014-03-04
  • 打赏
  • 举报
回复
利用循环才可以发挥数组的作用,不然要数组这样的连续内存干嘛。输出数组时用for循环即可一次性输出
你怎么了熊吉 2014-03-04
  • 打赏
  • 举报
回复
而且,不要用这种一长串的相加,一长串的printf 你看你会用for循环 写个for(int i=0;i<10;i++) {printf("%d ",grade[i]);} 不就好了么
你怎么了熊吉 2014-03-04
  • 打赏
  • 举报
回复
很简单,你数数你printf了几个%d

70,020

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧