| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2232 人关注过本帖
标题:为什么输出矩阵的时候。出现一堆-858993460?
只看楼主 加入收藏
勋章
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2019-10-29
结帖率:0
收藏
已结贴  问题点数:20 回复次数:2 
为什么输出矩阵的时候。出现一堆-858993460?
程序代码:
#include<stdio.h>
#include<stdlib.h>
#define MAXSIZE 12500//非0元的最大个数    
#define random() rand()%10+0//a=rand()%(d-t)+t:生成一个[t,d)区间内的整数                                             
#define m 10                           
#define n 10
#define C 4
#define OK 1
#define ERROR 0
typedef int ElemType;
typedef int Status;
typedef struct
{
    int i,j;
    ElemType e;
}Triple;//三元组
typedef struct
{
    Triple data[MAXSIZE+1];
    int mu;
    int nu;
    int tu;//矩阵行数,列数,非0元个数
}TSMatrix;//稀疏矩阵:sparse matrix


Status RandomSparseMatrix(int (&Arr)[m][n]) //随机生成一个m行n列,并且含有C个非0元的稀疏矩阵                        
{                                      
    int i=0,j=0,k=1,p=1;                  
    int data[C];
    for(i=0;i<C;i++)//随机生成非0元的值,存到数组a[C]里面
    {
        srand(i);//随机数种子在变化
        data[i]=rand()%100;
    }
    while(p<=C)
    {
        for(i=0;i<C;i++)
        {
            srand(p);
            Arr[random()][random()]=data[i];//随机生成一个位置,该位置放置非0元
            p++;
        }
    }
    for(i=0;i<m;++i)
    {
        for(j=0;j<n;++j)
        {
            if(Arr[i][j]==NULL)//如果该位置值为空,则将该位置的值赋值为0
                Arr[i][j]=0;
        }
    } 
    printf("Array[%d][%d] is: \n",m,n);
    for(i=0;i<m;++i)            
    {                                  
        for(j=0;j<n;++j)        
        {                              
            printf("%d\t", Arr[i][j]); //   '\t'表示横向制表符
        }                              
        printf("\n");                  
    }
    return 0;
}
void main()
{
    int Arr[m][n];
    RandomSparseMatrix(Arr);
}

运行结果.zip (62.85 KB)
搜索更多相关主题的帖子: 位置 矩阵 for int define 
2019-10-29 19:52
forever74
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:CC
等 级:版主
威 望:58
帖 子:1701
专家分:4334
注 册:2007-12-27
收藏
得分:10 
数组元素为空是什么鬼?哪儿有这种概念?

[此贴子已经被作者于2019-10-29 21:03编辑过]


对宇宙最严谨的描述应该就是宇宙其实是不严谨的
2019-10-29 21:01
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9029
专家分:54050
注 册:2011-1-18
收藏
得分:10 
你的 srand 用法错误。当然,最大的错误就是 forever74 在2楼说的问题,这表明你对C/C++的基本理解都没有呀。
另外,int (&Arr)[m][n] 应该是C++代码吧,但整体看起来却有浓郁的C风格。

既然你用C++,那我写个示例给你参考一下:
程序代码:
#include <iostream>
#include <random>
#include <algorithm>

template<typename T,size_t ROW, size_t COL>
void RandomSparseMatrix( T (&arr)[ROW][COL], size_t C ) // 随机生成C个[1,99]区间的元素,其它使用0填充
{
    std::random_device rd; // 非确定随机数发生器
    std::mt19937 g( rd() ); // 梅森旋转随机数发生器
    std::uniform_int_distribution<> dis( 1, 99 ); // 均匀随机分布

    T (&buf)[ROW*COL] = (T (&)[ROW*COL])arr; // 转换为一维数组
    std::generate_n( buf, std::min(C,ROW*COL), [&]{return dis(g);} ); // arr前C个元素赋[1,99]之间的随机值
    std::fill( std::begin(buf)+std::min(C,ROW*COL), std::end(buf), 0 ); // 其余元素赋0
    std::shuffle( std::begin(buf), std::end(buf), g ); // 随机重排序arr内的元素
}

template<typename T,size_t ROW, size_t COL>
void DumpMatrix( const T (&arr)[ROW][COL], std::ostream& out=std::cout )
{
    for( size_t r=0; r!=ROW; ++r )
    {
        for( size_t c=0; c!=COL; ++c )
            out << arr[r][c] << "\t\n"[c+1==COL];
    }
}

int main( void )
{
    int arr[10][10];
    RandomSparseMatrix( arr, 4 );
    DumpMatrix( arr );
}

一种可能的输出是:
0    0    0    0    0    0    0    0    0    0
0    0    0    0    0    0    0    0    0    0
0    0    0    0    0    0    0    0    0    0
0    0    0    0    0    34   0    70   0    0
0    0    0    0    61   0    0    0    0    0
0    0    0    0    0    0    0    0    0    0
0    15   0    0    0    0    0    0    0    0
0    0    0    0    0    0    0    0    0    0
0    0    0    0    0    0    0    0    0    0
0    0    0    0    0    0    0    0    0    0


2019-10-30 09:32
快速回复:为什么输出矩阵的时候。出现一堆-858993460?
数据加载中...
 
   



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

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