请教高手一道c语言的题目!!!!万分感谢!!!!!

题目:输入一个数,求出在0至该数之间所有的质数。要求:1:一一列出该范围内的所有质数。2:求该范围内质数的个数。3:每5个数换行。我的代码:#include<stdio.... 题目:
输入一个数,求出在0至该数之间所有的质数。
要求:
1:一一列出该范围内的所有质数。
2:求该范围内质数的个数。
3:每5个数换行。
我的代码:
#include<stdio.h>
int main()
{
int a,b,n=0,i; //n表示记录数,a为起始数,b为范围数,i为参变量。
printf("请输入要查询的范围!\n");
scanf("%d",&b);
if(b<0)
printf("输入错误,请输入正整数!\n");
if(b>=0 && b<2)
printf("该范围内质数的个数=%d\n",n);
if(b=2)
{
n=1;
printf("该范围内质数的个数=%d\n",n);
}
if(b>2)
{
for(a=2;a<=b;a++)
for(i=2;i<=a-1;i++)
{
if(a%i==0)
if(i<a)
printf("%d",a);
break;
else
printf("%d",a);
n=n+1;
if(n%5==0)
{
printf("\n");
}
printf("\n");
printf("该范围内质数的个数=%d\n",n);
}
return 0;
}
编译时是不正确的,请问高人哪里出错了,还有要怎么编写呢?谢谢了。。。。
展开
 我来答
wang06998
2012-07-29 · TA获得超过5658个赞
知道大有可为答主
回答量:3755
采纳率:83%
帮助的人:2426万
展开全部
直接发程序不直观,我截图后,在图上给你标注。我现在就开始改,百度审核图片比较慢,别着急

我太阳的,为什么发的图到现在还没审核通过?

再发一次吧
你的程序里有很多习惯不好,看看我的是怎么写的。

/*使用函数版程序*/
#include<stdio.h>
int isprime(int a)
{int i;
for(i=2;i<a;i++)//都是整数,i<a和i<=a-1难道不一样吗?你干嘛要多打几个字符才舒服?
if(a%i==0)
break;
if(i>=a) //因为你下面的主函数中,只有针对大于等于2的数值才加以判断,所以这里只需要这么写,全部情况下完善条件你自己想
return 1;
else
return 0;
}

main()
{int a,b,n=0; //n表示记录数,a为起始数,b为范围数。
printf("请输入要查询的范围!\n");
scanf("%d",&b);
if(b<0)
printf("输入错误,请输入正整数!\n");
if(b>=0&&b<2) //c代码中,乱加空格不是好习惯,我把空格给你删了
printf("该范围内质数的个数=%d\n",n);
/*if(b==2)
printf("该范围内质数的个数=1\n"); //你都知道个数是1了,还瞎折腾什么?赋值很好玩吗?
而且这段根本就不需要,因为正确的质数判定算法能搞定这个。你单独写出来了,那么完善“5个一行”就会麻烦很多 */
if(b>=2)
{
for(a=2;a<=b;a++)
if(isprime(a)) //for只控制了一条if语句,不需要加{}
{ printf("%-6d ",a);//这里不加空格或逗号,所有的数值会连在一起,11和13会显示成1113。-6如果你没学过可以当没看见。
n++;//你原来的写法对,但是c中++和--是很重要的东西,就当是我逼着你掌握这个吧
if(n%5==0) //只有在n发生变化的时候(此时a肯定是质数),才是需要判断要不要换行
printf("\n");//这个if只控制一条语句,有必要加{}吗?
}
printf("\n");
printf("该范围内质数的个数=%d\n",n);
}
}
====================================================================

/*不用函数版程序*/
#include<stdio.h>
main()
{int a,b,n=0,i;
printf("请输入要查询的范围!\n");
scanf("%d",&b);
if(b<0)
printf("输入错误,请输入正整数!\n");
if(b>=0&&b<2)
printf("该范围内质数的个数=%d\n",n);
/*if(b==2)
printf("该范围内质数的个数=1\n"); //你都知道个数是1了,还瞎折腾什么?赋值很好玩吗?
而且这段根本就不需要,因为正确的质数判定算法能搞定这个。你单独写出来了,那么完善“5个一行”就会麻烦很多 */
if(b>=2)
{
for(a=2;a<=b;a++)//这里的for控制了不止一条语句,要加{}
{ for(i=2;i<a;i++)//都是整数,i<a和i<=a-1难道不一样吗?你干嘛要多打几个字符才舒服?
if(a%i==0)
break;
if(i>=a) //因为只有针对大于等于2的数值才加以判断,所以这里只需要这么写,全部情况下完善条件你自己想
{ printf("%-6d ",a);//这里不加空格或逗号,所有的数值会连在一起,11和13会显示成1113。-6如果你没学过可以当没看见。
n++;//你原来的写法对,但是c中++和--是很重要的东西,就当是我逼着你掌握这个吧
if(n%5==0) //只有在n发生变化的时候(此时a肯定是质数),才是需要判断要不要换行
printf("\n");//这个if只控制一条语句,有必要加{}吗?
}
}
printf("\n");
printf("该范围内质数的个数=%d\n",n);
}
}

先发程序,然后我再发那个图。

还有,楼上推荐的答案是错的。程序结构不对
巢水悦p
2012-07-29
知道答主
回答量:22
采纳率:0%
帮助的人:11.5万
展开全部
#include<stdio.h>
#include <iostream>
int main()
{
int a,b,n=0,i; //n表示记录数,a为起始数,b为范围数,i为参变量。
printf("请输入要查询的范围!\n");
scanf("%d",&b);
if(b<0)
printf("输入错误,请输入正整数!\n");
if(b>=0 && b<2)
printf("该范围内质数的个数=%d\n",n);
if(b==2)
{
n=1;
printf("该范围内质数的个数=%d\n",n);
}
if(b>2)
{
for(a=2;a<=b;a++)
{
for(i=2;i<=a-1;i++) if(a%i==0) break;
if (i != a) continue;
printf("%d ",a);
n=n+1;
if(n%5==0) printf("\n");
}
}
printf("\n");
printf("该范围内质数的个数=%d\n",n);
system("pause");
return 0;
}

改好了,调试过,应该是行的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友b452582
2012-07-29 · TA获得超过2581个赞
知道小有建树答主
回答量:953
采纳率:100%
帮助的人:318万
展开全部
#include<stdio.h>
#include<stdlib.h>
int main()
{
int a,b,n=0,i; //n表示记录数,a为起始数,b为范围数,i为参变量。
printf("请输入要查询的范围!\n");
scanf("%d",&b);
if(b<0)
{ printf("输入错误,请输入正整数!\n"); system("pause"); exit(0); }
if(b>=0 && b<2)
{ printf("该范围内质数的个数=%d\n",n); system("pause"); exit(0); }
if(b==2) //逻辑相等条件表达用两个==
{
n=1;
printf("该范围内质数的个数=%d\n",n);
system("pause");
exit(0);
}

printf("%4d",2);
for(a=2,n=1;a<=b;a++) //2也得计数吧!
for(i=2;i<=a-1;i++)
{ //这一段逻辑关系错了,你看看现在是不是你的意思
if(a%i==0) break;
if(i==a-1)
{ printf("%4d",a);
n++;
if(n%5==0) printf("\n");
break;
}
}

printf("\n");
printf("该范围内质数的个数=%d\n",n);
system("pause");
}
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友60dcc3d
2012-07-29 · 超过18用户采纳过TA的回答
知道答主
回答量:86
采纳率:0%
帮助的人:44.6万
展开全部
注意大括号的严格使用,大括号决定变量与语句的作用域以及整个代码的逻辑表达。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式