| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1755 人关注过本帖
标题:代码是栈溢出问题(用循环也溢出了),求教。
只看楼主 加入收藏
宁缺T
Rank: 1
等 级:新手上路
帖 子:21
专家分:8
注 册:2019-9-12
结帖率:87.5%
收藏
已结贴  问题点数:20 回复次数:4 
代码是栈溢出问题(用循环也溢出了),求教。
程序代码:
#include<stdio.h>
float f(float *a1,float *c1,int n1){
    int k=0;
    int j=n1;
    if(j==1)
      return a1[1]=(a1[0]+a1[2])/2-c1[1];
    else
        a1[j]=(a1[j-1]+a1[j+1])/2-c1[j];
        f(a1,c1,n1-1);
   

}
int main(){
    int n,i;
    float d;
    float c[1000]={0.0};
    float a[1000]={0.0};
    scanf("%d",&n);
    scanf("%f%f",a,a+n);
    for(i=0;i<n;i++)
        scanf("%f",c[i]);
    d=f(a,c,n);
    printf("%f",d);
    return 0;
}
这是递归的
---------------
程序代码:
#include<stdio.h>
float f(float *a1,float *c1,int n1){
    int k=0;
    int j=n1-1;
    while(j>=1)
    {
        a1[j]=(a1[j-1]+a1[j+1])/2-c1[j];
        j--;
    }
    return a1[1];
}
int main(){
    int n,i;
    float d;
    float c[100]={0.0};
    float a[100]={0.0};
    scanf("%d",&n);
    scanf("%f%f",a,a+n+1);
    for(i=0;i<n;i++)
        scanf("%f",c[i]);
    d=f(a,c,n+1);
    printf("%f",d);
    return 0;
}
这是循环的
-------------
以下是问题
图片附件: 游客没有浏览图片的权限,请 登录注册
图片附件: 游客没有浏览图片的权限,请 登录注册

搜索更多相关主题的帖子: scanf return int float 溢出 
2019-10-19 20:50
纯蓝之刃
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:76
帖 子:570
专家分:3727
注 册:2019-7-29
收藏
得分:20 
#include<stdio.h>

float f(float *a1,float *c1,int n1);

float f(float *a1,float *c1,int n1)
{
    //int k=0;
    int j=n1;
    if(j==1)
      return a1[1]=(a1[j-1]+a1[j+1])/2-c1[j];
    else
    {
        a1[j]=(a1[j-1]+a1[j+1])/2-c1[j];
        f(a1,c1,n1);
    }

    return 0.0;
}
int main()
{
    int n,i;
    float d;
    float c[100]={0.0};
    float a[100]={0.0};
    printf("请输入个数:");
    scanf("%d",&n);
    printf("请输入A0,An+1:");
    scanf("%f%f",a,a+n+1);
    for(i=1;i<=n;i++)
    {
        printf("请输入C:");
        scanf("%f",&c[i]);
    }
    d=f(a,c,n);
    printf("%f",d);
    return 0;
}

scanf("%f",&c[i]);你要取c[i]的地址。
这个如果输入n=1是可以的,但是如果n>1时,每次递归的未知数是2个,这个算法就是不成立的,需要进一步处理。

一沙一世界,一花一天堂。无限掌中置,刹那成永恒。
2019-10-20 16:34
宁缺T
Rank: 1
等 级:新手上路
帖 子:21
专家分:8
注 册:2019-9-12
收藏
得分:0 
回复 2楼 纯蓝之刃
感谢大佬抽空来看我的代码,但是我有点问题想请教一下大佬
1.你的代码中的f(a1,c1,n1)他是如何递归到能使j==1的?

2.scanf('%f',c[i]),编译器为什么不报错呢?
希望大佬的不吝赐教。


Stay hungry,Stay foolish.
2019-10-20 20:36
纯蓝之刃
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:76
帖 子:570
专家分:3727
注 册:2019-7-29
收藏
得分:0 
#include<stdio.h>

void f(float *a,float *c,int n);

void f(float *a,float *c,int n)
{
    float an1=a[n+1];
    a[1]=0;
    for(int i=2;i<=n+1;i++)
        a[i]=2*a[i-1]-a[i-2]+2*c[i-1];

    printf("%.2f\n",(an1-a[n+1])/(n+1));
}
int main()
{
    int n,i;
    float c[100]={0.0};
    float a[100]={0.0};
    printf("请输入个数:");
    scanf("%d",&n);
    printf("请输入A0,An+1:");
    scanf("%f%f",a,a+n+1);
    for(i=1;i<=n;i++)
    {
        printf("请输入C:");
        scanf("%f",&c[i]);
    }

    f(a,c,n);

    return 0;
}
下午没空,只是解决了你的那个明显错误,用这个再试试。

一沙一世界,一花一天堂。无限掌中置,刹那成永恒。
2019-10-20 21:53
纯蓝之刃
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:76
帖 子:570
专家分:3727
注 册:2019-7-29
收藏
得分:0 
这个可以使用“反证法”,就是你先假设要求的a[1]=0,然后根据公式,可以递归循环求出a[n+1]的值,根据计算此时求得的a[n+1]=(n+1)*a[1]+输入的a[n+1]。
你先把公式两边同时乘以二,C[n]先不管他,可以求得
a[2]=2*a[1]-a[0];
a[3]=2*a[2]-a[1]=3a[1]-2*a[0];
a[4]=2*a[3]-a[2]=4*a[1]-3*a[0];
递归完可求得
an1=a[n+1]=(n+1)*a[1]+(a[0],a[n+1],c[...]等等常量)

一沙一世界,一花一天堂。无限掌中置,刹那成永恒。
2019-10-20 22:05
快速回复:代码是栈溢出问题(用循环也溢出了),求教。
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.039297 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved