用C语言编写的程序,运行到一半,自动关闭。

这是求素数和的程序,已经通过了编译,没有错误,但是就是在输入完成后,系统提示出错,自动关闭了,就是平时见到的“红叉”提示,下面是程序,希望大虾们帮忙看下吗,我的积分好像用... 这是求素数和的程序,已经通过了编译,没有错误,但是就是在输入完成后,系统提示出错,自动关闭了,就是平时见到的“红叉”提示,下面是程序,希望大虾们帮忙看下吗,我的积分好像用完了,所以没得悬赏了。#include<stdio.h>
#include<math.h>
int main()
{
int i,j,m=0,l;
int a[10],b[50];
int ss(int);
printf("Please input a number:\n");
scanf("%d",&i);
printf("\nPlease input %d group number:\n",i);
for(j=0;j<i;j++)
{
scanf("%d",&a[j]);
printf("\nPlease input %d number:\n",a[j]);
{
for(l=0;l<a[j];l++)
scanf("%d",&b[l]);}
}
for(j=0;j<i;j++)
{for(l=0;l<a[j];l++)
{if(ss(b[l]))
{m+=b[l];}
}
printf("\n%4d\n",m);}
return 0;
}
int ss(int i)
{
int j,flag;
for(flag=0,j=0;j<i;j++)
if(i%j==0)
{flag=1;
break;}
if(flag==0)
return 1;
else
return 0;
}
展开
 我来答
淡影疏秋
2011-03-02 · TA获得超过550个赞
知道小有建树答主
回答量:264
采纳率:0%
帮助的人:249万
展开全部
此程序极度混乱,逻辑严重错乱,建议重新编写,至少加上必要的注释。
下面指出期中几个严重的问题:
1.全局变量i的取值范围应当做一个限定,因为i是b数组的最大容量,应当使用前检验是否i<50;
2.不要在for括号内循环初始化flag;
3.也是程序最致命的一个错误,ss函数根本就是摆设,i%j==0,由于j是从0开始的,j取值为1时,任何的i都是满足条件的,也就是说你这个函数根本判断不了i是否是素数;再者你可以换一个形式变量,因为i本身是全局变量,并且是计数量,在这里让程序变得更难懂。

p.s.我运行了一下你的程序,输入数字没有出现崩溃的情况,但是得不到任何的结果;输入字符量时程序就崩溃了。建议将格式规范,并且变量命名也按照某种容易读懂的方式,这样一堆乱七八糟的代码,别说别人读懂,估计过两天自己都看不懂了。
更多追问追答
追问
感谢大侠指点,
我一定积极改正,
格式规范我会改正,
但是变量命名上什么事叫容易读懂的方式呢,
换个字母不还是一样吗?
是让命名带上其所指变量的特征吗?
我真的不是很明白,
能帮忙解释下吗?
追答
变量命名没有必须的规定,但是我比较推荐“匈牙利命名法。”这里有介绍:http://baike.baidu.com/view/419474.htm

入门级的语言书上的变量命名比较随意,误导许多人。这里有篇文档,总结的挺好,可以看看:http://wenku.baidu.com/view/924e5b1dfad6195f312ba6bc.html
百度网友38c8e98
2011-03-02 · TA获得超过2657个赞
知道小有建树答主
回答量:1131
采纳率:0%
帮助的人:586万
展开全部
你这个程序莫名其秒,那么多for做什么?程序结构如此混乱。
出现那个红叉提示说明存在错误,只不过不是语句错误,编译器发现不了。
操作系统有个保护机制,不会允许你的程序造成破坏,终止了你的程序。
常见错误原因是:1.数组越界,试图操作不可访问的内存
2.指针变量没有初始化,如int *p; *p=5;//错误,p没有初始化,指向的地址不确定。
追问
多谢回答。程序中确实写的乱了,开始的for主要是要多重的输入数据,造成了现在的后果,我会改正的。另外程序中我没有使用指针,那就可能是数组除了错,我想可能是我在函数调用的时候参数的传递出了错误,我还不太会用函数调用,大虾给小弟解释下,不胜感激。
追答
i%j==0这里错了,j的初值要改为1,0不能作为除数。

#include
#include

int ss(int);
int main()
{
int n,i,sum=0;
int b[50];

printf("Please input a number(小于50):\n");
scanf("%d",&n);
printf("\nPlease input b 数组:\n",i);
for(i=0;i<n;i++)
{
scanf("%d",&b[i]);
}

for(i=0;i<n;i++)
{
if(ss(b[i]))
{
sum+=b[i];
}
}
printf("\n%4d\n",sum);
return 0;
}

int ss(int i)
{
int j,flag;
for(flag=0,j=1;j<i;j++)
{//括号能省,但是不能省
if(i%j==0)
{
flag=1;
break;
}
else
{
flag=0;//这句要写,不然第一个非素数后的所有数都是非素数,因为flag已经等于1了。
}
}
if(flag==0)
return 1;
else
return 0;
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式