C语言。。编的有问题,请帮我更正下,不要用调用函数!

输入整数m,将所有大于1小于整数m的素数存入所指定的数组中(数组最多只存放100个素数,超过则提示“overflow”),输出素数的个数n及各素数——素数的输出格式为每个素数5列宽、右对齐、每行显示15个。若输入的m≤0,则提示“error”,程序终止。

#include<stdio.h>

int main (void)

{
int i, n = 0, m, j, k, a[100];

printf("input a number:");
scanf("%d", &m);

k = i / 2;
if (m <= 0)
{
printf("error\n");
}
else
{
for (i = 1; i <= m; i++)
{
for (j = 2; j <= m; j++)
{
if (i % j == 0)
{
n++;
a[i] = i;
}
}
}
if (n > 100)
{
printf("overflow\n");
}
else if (n >= 1 && n <= 100)
{
printf("%d\n", n);
}

for(j = 0; j <= 100; j++)
{
if (n % 15 == 0)
{
printf("%5d\n", a[i]);
}
else
{
printf("%5d", a[i]);
}
}
}
return 0;
}

额。。同学你变聪明了哎,连函数都不让用了。。。(调用函数可是写程序的精髓之一啊。。= =)所以我还是忍不住小小用了一下,exit(0);这句话就是让整个程序结束,在判断到n>100以后,我就打印出overflow,然后就直接用exit(0);结束整个程序~不过这次我没有自己写,直接在你的基础上改了,以下一一说明:

1. k = i / 2;没有用,所以k这个变量在这个程序中也没有用,我把他用在了另外的地方
2. 对质数的判断不对。判断某个数n是否是质数,应该是用2到n-1之间的数除他,如果其中任何一个能整除n,那就说明n不是质数。注意,判断的上届是到n-1,如果包括n的话,那么n必定能整除自己,也就达不到判断的效果了(其实一般的做法是算到根号n即可,因为你不让用函数,于是就不改了,当然还是可以改成n/2)
在你的程序中i是现在用判断的数,所以判断的循环应该是:
for (j = 2; j < i; j++)
然后,所有数除不尽才是质数,所以判断到if (i % j == 0)的话说明i是一个合数,不是质数。所以这里把k设置为1,然后立马break掉循环。
循环结束后判断k时候为0,如果是0,则说明i % j == 0从来没有成功,所以i是质数。否则,i就是合数。
3. 在把质数写入数组的时候,也不对,你写的是a[i] = i;i是要判断的数,所以等号右边没错,但是左边呢?左边应该是数组的下标,应该是一个个增长的,而你的i会是2,3,5,7这样一个序列,所以i不是数组下标,下标应该和n有关,因为n才是记录着当前质数个数的变量。所以写成a[n++] = i;
4. 在打印的时候,数组只有100的长度,所以条件怎么说也是j<100,而不是<=100,而且,大多数情况下,100个元素不会被用满,因为不一定正好有100个质数,而n才是质数的个数,所以应该是j<n
5. 还是在打印的时候,你也真够粗心的。。。循环的变量是j,打印的时候却用了i【printf("%5d\n", a[i]);】所以换成j。
6. 继续打印的时候,循环的初始条件是j=0,那么j%15==0为真,所以一上来打印第一个质数后就会马上换行。所以我改的是把循环条件改成j=1和j<=n,然后下面要改成a[j-1]

#include<stdio.h>
#include <stdlib.h>

int main (void)

{
int i, n = 0, m, j, k, a[100];

printf("input a number:");
scanf("%d", &m);

//k = i / 2;
if (m <= 0) {
printf("error\n");
} else {
for (i = 2; i <= m; i++) {
k = 0;
for (j = 2; j < i; j++) {
if (i % j == 0) {
k = 1;
break;
}
}

if (k == 0) {
a[n++] = i;
}
if (n > 100) {
printf("overflow\n");
exit(0);
}
}

printf("n=%d\n", n);
for(j = 1; j <= n; j++) {
if (j % 15 == 0) {
printf("%5d\n", a[j-1]);
} else {
printf("%5d", a[j-1]);
}
}
}
return 0;
}
温馨提示:答案为网友推荐,仅供参考
大家正在搜