| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1586 人关注过本帖
标题:杨辉三角的问题,在给数组赋值与不赋值时,前几个数据完美运行但是5以后的程 ...
只看楼主 加入收藏
七夜天泪
Rank: 2
等 级:论坛游民
帖 子:23
专家分:16
注 册:2016-8-16
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:9 
杨辉三角的问题,在给数组赋值与不赋值时,前几个数据完美运行但是5以后的程序就会出现垃圾数据,求解这是怎么回事,是赋初值的重要性吗??
#include <stdio.h>
int main() {
    int n;
    int i,j;
    int a[30][30]={0};//为什么这里给数组付初值0与a[30][30]不赋值代码答案不一样呢
    scanf("%d",&n);
    for(i=1; i<=n; i++) {
        for(j=1; j<=n; j++) {
            if(i==j||j==0)
                a[i][j]=1;
            else if  (i>j)
                a[i][j]=a[i-1][j]+a[i-1][j-1];
        }
    }
    for(i=1; i<=n; i++) {
        for(j=1; j<=n; j++) {
            if(i>=j)
                printf("%d ",a[i][j]);
        }
        printf("\n");
    }
    return 0;
}
搜索更多相关主题的帖子: 杨辉三角 include 
2016-08-23 19:00
ehszt
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:40
帖 子:1744
专家分:3216
注 册:2015-12-2
收藏
得分:7 
不赋初值,数组元素的值就是不确定值,运算结果当然也就不确定。
2016-08-23 19:11
linlulu001
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:20
帖 子:944
专家分:4047
注 册:2016-4-13
收藏
得分:7 
  if(i==j||j==0)        //你的代码不存在j==0
  a[i][j]=a[i-1][j]+a[i-1][j-1];    //j-1有可能是0,如果没有初始化,例如a[1][0],它就是个垃圾值,所以造成有初始化和没初始化的差别那么大。

下面的代码是在你代码基础上进行修改的,数组那里我并没有赋值。但最后结果是一样的。
#include <stdio.h>
int main() {
    int n;
    int i,j;
    int a[30][30];
    scanf("%d",&n);
    for(i=0; i<n; i++) {
        for(j=0; j<n; j++) {
            if(i==j||j==0)
                a[i][j]=1;
            else if  (i>j&&i>=1&&j>=1)
                a[i][j]=a[i-1][j]+a[i-1][j-1];
        }
    }
    for(i=0; i<n; i++) {
        for(j=0; j<n; j++) {
            if(i>=j)
                printf("%d ",a[i][j]);
        }
        printf("\n");
    }
    return 0;
}
2016-08-23 20:23
ehszt
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:40
帖 子:1744
专家分:3216
注 册:2015-12-2
收藏
得分:0 
没仔细看,主要是楼主的下标有问题。
2016-08-23 20:57
小心飞刀hbw
Rank: 2
等 级:论坛游民
帖 子:47
专家分:24
注 册:2016-3-21
收藏
得分:7 
#include<stdio.h>
int main() {
    int i,j,n,k;
    int a[30][30];
    while(scanf("%d",&n)!=EOF) {
        for(i=0; i<n; i++) {
            for(j=0; j<n; j++) {
                if(i==j||j==0)
                    a[i][j]=1;
                else if(i>j&&i>=1&&j>=1)
                    a[i][j]=a[i-1][j]+a[i-1][j-1];
            }
        }
        for(i=0; i<n; i++) {
            for(j=0; j<n; j++) {
                if(i>=j)
                    printf("%d ",a[i][j]);
            }
                printf("\n");
        }
    }
    return 0;
}
看看这个对吗?东软
2016-08-23 23:44
linlulu001
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:20
帖 子:944
专家分:4047
注 册:2016-4-13
收藏
得分:0 
回复 5楼 小心飞刀hbw
while(scanf("%d",&n)!=EOF)容易变成死循环或者数据溢出(赋值失败就n就是垃圾值,这大小就不好说了)
改成while(scanf("%d",&n)==1)
2016-08-24 09:05
小心飞刀hbw
Rank: 2
等 级:论坛游民
帖 子:47
专家分:24
注 册:2016-3-21
收藏
得分:0 
回复 6楼 linlulu001
这个题还有一个要求就是要进行多组数据的测试,,,,
2016-08-24 09:09
linlulu001
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:20
帖 子:944
专家分:4047
注 册:2016-4-13
收藏
得分:0 
回复 7楼 小心飞刀hbw
改成while(scanf("%d",&n)==1)就好了
想结束随便输入一个非数字字符就结束循环
2016-08-24 09:14
七夜天泪
Rank: 2
等 级:论坛游民
帖 子:23
专家分:16
注 册:2016-8-16
收藏
得分:0 
回复 5楼 小心飞刀hbw
对的   东软但是我的问题是赋初值与不赋初值的问题,不是这题怎么写得问题
2016-08-24 10:12
ehszt
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:40
帖 子:1744
专家分:3216
注 册:2015-12-2
收藏
得分:0 
回复 9楼 七夜天泪
#include <stdio.h>
 int main() {
     int n;
     int i,j;
     int a[30][30];//为什么这里给数组付初值0与a[30][30]不赋值代码答案不一样呢
    scanf("%d",&n);
     for(i=1; i<=n; i++) {
         for(j=1; j<=n; j++) {
             if(i==j||j==1)     //这里改成j==1,因为根据你的下标第一项是1不是0
                 a[i][j]=1;
             else if  (i>j)
                 a[i][j]=a[i-1][j]+a[i-1][j-1];
         }
     }
     for(i=1; i<=n; i++) {
         for(j=1; j<=n; j++) {
             if(i>=j)
                 printf("%d ",a[i][j]);
         }
         printf("\n");
     }
     return 0;
 }
2016-08-24 10:30
快速回复:杨辉三角的问题,在给数组赋值与不赋值时,前几个数据完美运行但是5以 ...
数据加载中...
 
   



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

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