| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 262 人关注过本帖
标题:各位大侠帮看一下这个程序的数组!
只看楼主 加入收藏
zzzmx
该用户已被删除
收藏
已结贴  问题点数:8 回复次数:5 
各位大侠帮看一下这个程序的数组!
提示: 作者被禁止或删除 内容自动屏蔽
搜索更多相关主题的帖子: include 
2012-11-09 23:31
菜鸟一支
Rank: 6Rank: 6
来 自:何美杭
等 级:侠之大者
威 望:1
帖 子:121
专家分:456
注 册:2012-10-10
收藏
得分:0 
把程序改了下
#include <stdio.h>
#include<time.h>
#include<stdlib.h>
void main()
{
    int a[100],x[10],i,p;
    srand((unsigned)time(NULL));//如果不加这一句的话,产生的随机数并不是随机的。楼主可以试一下
    for(i=0;i<=10;i++)  
        x[i]=0;

    for(i=0;i<=99;i++)      
    {
        a[i]=rand() % 100;
        printf("%6d",a[i]);
        if((i+1)%10==0)
            printf("\n");
    }

    for(i=1;i<=100;i++)      {
        p=a[i]%10;

        x[p]=x[p]+1;
    }

    for(i=0;i<=9;i++)      {

        printf("%d,%d\n",i,x[i]);
    }

    printf("\n");
}

小弟何美杭,所发表的都仅代表个人观点,欢迎批评指正。
2012-11-09 23:50
菜鸟一支
Rank: 6Rank: 6
来 自:何美杭
等 级:侠之大者
威 望:1
帖 子:121
专家分:456
注 册:2012-10-10
收藏
得分:3 
把程序改了下
#include <stdio.h>
#include<time.h>
#include<stdlib.h>
void main()
{
    int a[100],x[10],i,p;
    srand((unsigned)time(NULL));//如果不加这一句的话,产生的随机数并不是随机的。楼主可以试一下
    for(i=0;i<=10;i++)  
        x[i]=0;

    for(i=0;i<=99;i++)      
    {
        a[i]=rand() % 100;
        printf("%6d",a[i]);
        if((i+1)%10==0)
            printf("\n");
    }

    for(i=1;i<=100;i++)      {
        p=a[i]%10;

        x[p]=x[p]+1;
    }

    for(i=0;i<=9;i++)      {

        printf("%d,%d\n",i,x[i]);
    }

    printf("\n");
}

小弟何美杭,所发表的都仅代表个人观点,欢迎批评指正。
2012-11-09 23:51
菜鸟一支
Rank: 6Rank: 6
来 自:何美杭
等 级:侠之大者
威 望:1
帖 子:121
专家分:456
注 册:2012-10-10
收藏
得分:0 
不好意思,操作失误,回了两个帖。。
a[100]其中包含了100个元素,分别是a[0]到a[99]。而不是a[1]到a[100]
如果定义a[101],则包含了a[0]到a[100]共101个元素,
所以你用a[101]时, for(i=1;i<=100;i++) 相当于只用了从a[1]到a[100]的元素,
而当你改成a[100]时,仍然用for(i=1;i<=100;i++),但此时a[100]已经不存在了。

小弟何美杭,所发表的都仅代表个人观点,欢迎批评指正。
2012-11-09 23:56
小小战士
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:1
帖 子:569
专家分:1313
注 册:2012-11-3
收藏
得分:0 
很明显,数组越界
for(i=0;i<=10;i++)//越界,也应该用x[11],这样你的数组中x[0]就没用了
    x[i]=0;
for(i=1;i<=100;i++) //要想不越界,所以用a[101],这样你的数组中a[0]就没用了
{
    a[i]=rand() % 100;
    printf("%6d",a[i]);
    if(i%10==0)
        printf("\n");
}
之后的for中都是数组越界

如果要用a[100]和x[10],程序如下:
#include <stdio.h>
int main()
{
    int a[100],x[10],i,p;
    for(i=0;i<10;i++)  
        x[i]=0;
    for(i=0;i<100;i++)  
    {
        a[i]=rand() % 100;
        printf("%6d",a[i]);
        if((i+1)%10==0)
            printf("\n");
    }
    for(i=0;i<100;i++)      
    {
        p=a[i]%10;
        if(p==0)
        p=10;
        x[p-1]=x[p-1]+1;
    }
    for(i=0;i<10;i++)      
    {
        p=i+1;
        if(i==9)
        p=0;
        printf("%d,%d\n",p,x[i]);
    }
    printf("\n");
    return 0;
}
执行结果如下:

    83    86    77    15    93    35    86    92    49    21
    62    27    90    59    63    26    40    26    72    36
    11    68    67    29    82    30    62    23    67    35
    29     2    22    58    69    67    93    56    11    42
    29    73    21    19    84    37    98    24    15    70
    13    26    91    80    56    73    62    70    96    81
     5    25    84    27    36     5    46    29    13    57
    24    95    82    45    14    67    34    64    43    50
    87     8    76    78    88    84     3    51    54    99
    32    60    76    68    39    12    26    86    94    39
1,7
2,12
3,11
4,10
5,9
6,15
7,10
8,7
9,11
0,8

[ 本帖最后由 小小战士 于 2012-11-10 00:42 编辑 ]

小小战士,战士中的战斗机!
2012-11-10 00:09
小小战士
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:1
帖 子:569
专家分:1313
注 册:2012-11-3
收藏
得分:5 
数组越界是很可怕的,会产生不可预料的结果,不但程序会崩溃,你的人也会跟着崩溃!

数组a[100]中的元素是从a[0]到a[99]这100个元素,绝非a[1]到a[100],先把这些搞清
如果定义了数组a[100],但要给元素a[100]赋值或者要读取a[100]的值,这就是数组越界
如果给越界数组元素a[100]赋值,就会产生段错误或者其他崩溃信息,因为数组名a是个地址常量,如果int在你机子上占4字节的话,a指向你分配好的那段4*100字节的内存块,并没有分配到这段内存块的后面块区,如果向a[100]赋值,可能就会给别的程序造成麻烦甚至致命破坏,甚至如果越界内存块刚好就是系统程序代码或者系统的变量占据的内存块,那就有大麻烦了,因此系统就会保护这段没有被申请的内存块,会自动报错,使程序崩溃。
如果读取越界数组元素a[100]的值,系统会让你读取,这不会伤害别的程序的进行,只是读取的这个值是没有意义的,是垃圾值

所以说,不要越界访问,系统很生气,后果很严重!

小小战士,战士中的战斗机!
2012-11-10 00:41
快速回复:各位大侠帮看一下这个程序的数组!
数据加载中...
 
   



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

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