c语言编程,编译无错,运行出错 c语言编译无错为什么运行不了

你的程序有3个问题:

1 你所谓的运行时问题,即栈溢出(stack overflow), 解决方法是使用c语言的malloc函数(相当于C++的new操作符)在堆上分配内存(当然最后根据输出文件的答案来看,你确实数据给大了)

2 逻辑问题,如楼上各楼所说:
s[i]=s[i-1]+A[i];而不是s[i]=s[i-1]+s[i];
你中学数学知识都忘了。。。

3 还是逻辑问题,不改会让你的文件始终输出0 0 0
if(s[i]<100&&s[i+1]>=100)
b[0]=i;
这种类型的应改为:
if(s[i-1]<100&&s[i]>=100)
b[0]=i-1;

这是因为你的逻辑里,每次刚给s[i]赋值,此时s[i+1]还没赋值呢,不能使用

总的改好的如下,我也加了简单的中文注释:

#include<stdio.h>
#include <stdlib.h> // malloc和free函数需要这个头文件
int b[3];
void writeDat();
void jsValue( )
{
int i;
//int a[1000000],s[100000];
//数据太大,避免栈溢出,在堆上分配内存
int* a = (int*)malloc(sizeof(int) * 1000000 );
int* s = (int*)malloc(sizeof(int) * 100000 );

a[0]=1;
a[1]=1;

for(i=2;i<100000;i++)
a[i]=a[i-2]+2*a[i-1];

s[0] = a[0];
for(i=1;i<100000;i++)
{
s[i]=s[i-1]+a[i];
if(s[i-1]<100&&s[i]>=100)
b[0]=i-1;
if(s[i-1]<1000&&s[i]>=1000)
b[1]=i-1;
if(s[i-1]<10000&&s[i]>=10000)
{
b[2]=i-1;
break; //已经找到所有数了,跳出循环,不然会得到错误答案
}
}

//释放malloc 分配的内存
free(a);
free(s);
}

void main()
{
jsValue( );
printf("M=100,n=%d\nM=1000,n=%d\nM=10000,n=%d\n",b[0],b[1],b[2]);
writeDat();
}

void writeDat()
{
FILE *fp;
fp=fopen("out.dat","w");
fprintf(fp,"%d\n%d\n%d\n",b[0],b[1],b[2]);
fclose(fp);
}

你这里有几个问题:
1。你的数组定得这么大,计算机根本不可能接受;
2。因为只是对M值进行比较判断,所以不应用for 循环而用do while 较好

试改写如下:

a[0]=1;
a[1]=1;
n=3;
s=2;

do while s<100
{ a[n]=....;
s=s+a[n];
n=n+1;}

然后写入b 数组。
再重置a数组,重做二次,将循环判别值改为1000,10000即可。

你的第二个循环中当i=0时s[i-1]为s[-1],所以就会出错,
帮你改了一点点
void jsValue( )
{
int i;
int a[1000000],s[100000];
a[0]=1;
a[1]=1;
s[0]=1;
s[1]=2;
for(i=2;i<100000;i++)
{
a[i]=a[i-2]+2*a[i-1];
s[i]=s[i-1]+a[i];
if(s[i]<100&&s[i+1]>=100)
b[0]=i;
if(s[i]<1000&&s[i+1]>=1000)
b[1]=i;
if(s[i]<10000&&s[i+1]>=10000)
b[2]=i;
}
}

第二层循环没有必要吧
你每次算出一个A[i],同事就可以算出来S[i]了
而且,s[i]=s[i-1]+A[i];而不是s[i]=s[i-1]+s[i];
以上两点,希望能有参考价值。

  • Keil鎴栨槸浼熺鐢C缂栧啓鐨勭▼搴,鍦缂栬瘧鏃舵樉绀鏃犻敊,浣嗘槸浠跨湡鐨勬椂鍊欏彂鐜版湁浜...
    绛旓細c璇█鐨缂栬瘧鍣ㄦ湁浼樺寲閫夐」锛宬eil濂借薄鏈変節绾э紝鍙缃紝浣犻偅娈典唬鐮佸彲鑳借浼樺寲浜嗭紝渚嬪浠g爜鏈夐噸澶嶏紝鎴栬呬唬鐮佸湪绋嬪簭杩愯杩囩▼涓笉鍙兘琚墽琛 浣犲彲浠ヨ鐪熷鏌ヤ綘鐨勪唬鐮侊紝鎴栬呮妸浼樺寲绛夌骇璁剧疆涓0锛屽鍥
  • c璇█缂栬瘧鏃犻敊涓轰粈涔杩愯涓嶄簡
    绛旓細搴旇鏄細#include <stdio.h> <stdio.h>鏄郴缁熷甫鐨勫ご鏂囦欢 鈥渟tdio.h鈥濇槸鑷繁瀹氫箟鐨勫ご鏂囦欢
  • 涓轰粈涔堟垜鐨C璇█绋嬪簭鏃犻敊浣嗘槸寰椾笉鍑虹粨鏋,姹傚ぇ绁炰滑鍒嗘瀽,闄勪笂杩囩▼:
    绛旓細while(a>=eps){pi+=a;i++;a=a*(2*i+1);}return 2*pi;}浣犻偅鏍疯緭鍏ヨ繖鍎挎槸姝诲惊鐜惂
  • 鍏ラ棬鐨C璇█绋嬪簭闂,缂栬瘧鏃犻敊銆
    绛旓細(1.0/2)*g*pow(t,2)(1/2)浼氳瑙嗕负int锛岃繖涓粨鏋滃氨鍙樻垚0浜嗭紝鎵浠ヤ綘搴旇绠楀嚭鏉ョ殑缁撴灉涓鐩翠负闆
  • 鏁版嵁缁撴瀯浜屽弶鏍戝厛搴忛亶鍘,缂栬瘧鏃犻敊,杩愯鍑洪敊
    绛旓細include"stdio.h"#include"stdlib.h"typedef struct node{ char data; struct node*lchild,*rchild;}BiNode,*BiTree;void CreatBT(BiTree* t){ char c; scanf("%c",&c); if(c==' ') {*t=NULL; return; } else{ *t=(BiTree)malloc(sizeof(BiNode));...
  • ...缁撴灉澶т簬鍘熸潵鐨勪簩鍊嶅皬浜庝笁鍊,杩欎釜绋嬪簭鎬庝箞杩愯涓嶄簡鍛,缂栬瘧鏃犻敊...
    绛旓細include<stdio.h> void main(){ int i,j,k,m,n;for(i=1;i<=2;i++)for(j=0;j<=9;j++)for(k=2;k<=9;k++){ n=100*i+10*j+k;m=100*k+10*j+i;if(m>=2*n&&m<3*n){ printf("鍚堥傜殑鏁颁负: %d\n", n);} }//澶ф嫭鍙峰簲璇ュ姞鍦ㄨ繖閲岋紝涓嶇劧锛屾暣涓笁涓惊鐜窇瀹屼簡...
  • c璇█瀛楃涓插鍒朵笉涓婂幓,妫娴鏃犻敊,杩愯鏃惰佹槸鎻愮ず鍐呭瓨涓嶈兘璇讳负read_鐧惧害...
    绛旓細杩欐for寰幆鐨勪唬鐮佹湁浜涢棶棰樸傘傘傛寰幆銆傘傘備腑闂村祵濂楃殑閭d釜for閲岄潰i++涓嶈鏀鹃噷闈紝涓嶈繃鎴戣寰楄繕鏄崲涓猭鏉ヤ唬鏇縤杩涜閲岄潰鐨勫垽鏂紝骞朵笖鏀句笂鍒ゆ柇鏄惁p1[k]=='\0'鍐嶅姞
  • c璇█,杩欐槸鍝効鍑洪敊浜,鍦ㄧ嚎绛!!!
    绛旓細浠g爜鏃犻敊灏卞簲璇ユ甯杩愯鍟婏紒璇峰仛濡備笅淇敼鈥斺旀妸printf("%d",c[i][j]);鏀规垚printf("%d ",c[i][j]);骞剁Щ鍒板墠涓涓獇鍓嶉潰銆傛妸for(k=0;k<4;k++)鏀规垚for(c[i][j]=k=0;k<4;k++)銆傜劧鍚庤瘯璇曗︹
  • c璇█ 缂栫▼,鍝噷閿欒浜?涓鐩存彁閱抏rror:can not use local funcations...
    绛旓細浠g爜鏃犻敊锛鍙槸鍑芥暟灏戜簡涓獇銆傛妸add鍐欐垚myadd璇曡瘯銆
  • c璇█涓婃満 濉┖ 鎬庢牱绠楄繃
    绛旓細缂栬瘧閫氳繃,鏃犻敊骞惰兘杩愯鍑烘纭粨鏋,绁濆悰濂借繍
  • 扩展阅读:学编程一年大概多少钱 ... 少儿编程课程免费自学 ... c人教程视频 ... c++编程适合几岁学 ... c十十编程要学多久 ... 编程一般要学多久 ... c++编程可以自学吗 ... 手机c++编程软件 ... 初学编程必背50个 ...

    本站交流只代表网友个人观点,与本站立场无关
    欢迎反馈与建议,请联系电邮
    2024© 车视网