输入一个m行n列的二维数组输出矩阵矩阵,要求输出边缘数字的和,为什么我的程序输出是0?求解?

当前位置: >>
日 10:09:02&&分类: VB程序设计教程第4版答案刘炳文&&参与: 人&&
编写程序,把下面的数据输入一个二维数组中:
25 36 78 13
12 26 88 93
75 18 22 32
56 44 36 58
然后执行以下操作。
1.输出矩阵两个对角线上的数。
2.分别输出各行和各列的和。
3.交换第一行和第三行的位置。
4.交换第二列和第四列的位置。
5.输出处理后的数组。
以下是此题的【VB源代码】
Private Sub Form_Click()
&&& Dim mat(4, 4) As Integer
&&& Dim n, m As Integer
&&& '输入矩阵
&&& For i = 1 To n
&&&&&&& For j = 1 To m
&&&&&&&&&&& mat(i, j) = InputBox("请输入数组第 " & i & " 行第 " & j & " 列元素值")
&&&&&&&&&&& Val (mat(i, j))
&&&&&&& Next j
&&& Next i
&&& '输出原始矩阵
&&& Print "初始矩阵为:"
&&& For i = 1 To n
&&&&&&& For j = 1 To m
&&&&&&&&&&& Print Tab(6 * j); mat(i, j);
&&&&&&& Next j
&&&&&&& Print
&&& Next i
&&& '输出矩阵对角线上的数
&&& Print "矩阵对角线上的数为:"
&&& For i = 1 To n
&&&&&&& For j = 1 To m
&&&&&&&&&&& If i = j Then
&&&&&&&&&&&&&&& Print Tab(6 * j); mat(i, j);
&&&&&&&&&&& End If
&&&&&&& Next j
&&& Next i
&&& For i = 1 To n
&&&&&&& For j = 1 To m
&&&&&&&&&&& If i + j = 5 Then
&&&&&&&&&&&&&&& Print Tab(6 * i); mat(i, j);
&&&&&&&&&&& End If
&&&&&&& Next j
&&& Next i
&'交换第一行和第三行
For i = 1 To n
For j = 1 To m
If i = 1 Then
t = mat(1, j)
mat(1, j) = mat(3, j)
mat(3, j) = t
Print "交换第一行和第三行后的矩阵:"
For i = 1 To n
For j = 1 To m
Print Tab(6 * j); mat(i, j);
'交换第二列和第四列
For i = 1 To n
For j = 1 To m
If j = 2 Then
t = mat(i, 2)
mat(i, 2) = mat(i, 4)
mat(i, 4) = t
Print "交换第二列和第四列后的矩阵:"
For i = 1 To n
For j = 1 To m
Print Tab(6 * j); mat(i, j);
运行此VB源码后,鼠标点击窗体,输入初始矩阵数据,结果情况如下图所示:
visual basic 程序设计教程第四版 课后 答案 刘炳文 编著
本文链接:
本文标签:&&&&
相关文章 8:23:57 22:1:45 13:2:43 10:45:46 10:24:29 8:18:9 8:5:13 12:47:20
关于我们:
VB程序设计爱好者,编程新手。
网站内容:
VB程序源码,下载,VB程序算法,经验。
联系方式:怎样输入一个二维数组,然后得到它的维数。。。。_c语言吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:506,015贴子:
怎样输入一个二维数组,然后得到它的维数。。。。收藏
输入:1110000100111111100000100输出:5本人初学c语言,这个问题是我的一个程序中的以部分,希望大神帮帮忙。。。。
食人骨,吸人精 东方魔幻「大青云」神话鼻祖,巅峰巨制!
拒绝回答一切IP党的问题
不好意思,在百度匿名习惯了。。。。我的问题是离散数学的一个编程题。。。要求是输入一个关系矩阵,输出它的传递闭包。。。现在我知道算法,程序也写了,只是这一步不知道该怎么写,我用了一下strlen函数,但是这个函数是不是遇到0就会停止,我测试的是比如110,输出2;111输出3;001输出0.。。。
可以把算法列出来吗?没大看懂楼主的意思现在
strlen函数遇到NULL,也就是'\0'会结束0和'\0'是有区别的0的ascll码是48'\0'的ascll码是0这个函数应该可以解决楼主问题的
好的,既然是函数没有问题,可能是我的程序哪里有问题,我再去自己改一下,谢谢回答。。。
sprintf之类的先转成字符然后不就好了么,。。。。
楼主的意思不是遇到0结束,而是最后一个0的时候才会结束吧
我是想问:随便输入一个只有0和1组成的方阵,然后怎么判断它的维数,我想用函数实现,只是用了strlen一直得不到想要的结果。。。
女神的诱惑 天下由我掌控!
只有0和1组成的方阵不就是二维的吗,还是你怎么表示才能区分不同的维度(另外如果是矩阵方面的问题Matlab解决比较方便,但是Matlab安装起来比较大)
我的程序,是求一个关系矩阵的传递闭包,很基础的warshall算法。。。。但是前提是只能输入关系矩阵,维数不能直接输入,必须通过程序判断,这是我的程序的一部分,中间那部分空白我想用来实现矩阵的输入和维数的判断。。。。我试过,如果直接在程序中代入一个矩阵和它的维数的话能够得到正确结果,但是要是随机输入的话不知道这一部分该怎么写(我想用把他的维数赋值给n)#include&stdio.h&int main(){
int a[20][20]; int i, j, k,n;
for(i = 0; i & i++)
for(j = 0; j & j++)
if( a[j][i] == 1 )
for(k = 0; k & k++)
a[j][k] = a[j][k] || a[i][k];
for(i = 0; i & i++)
for(j = 0; j & j++)
printf("%2d", a[i][j]);
printf("\n");
return 0;}
我说的维数是指有多少行多少列。。。。难道不能这么表达吗,不好意思,我一直是这么表达
好吧,前面理解错了,以为你说的维数是二维数组三维数组之类的。算法什么的一窍不通,说说我知道的吧,二维数组可以这么定义:int a[][5] = {1,0,0,1,0,0,0,1,0,0};然后编译器会自动判断在第二个维度上的长度是2(每行5个数,总共10个数,问有几行)然后看你的意思是输入数组内容在前,定义数组在后你得先保证你每行的列数是一样的然后用小吧的方法先输入一行数据用sprintf转化为字符串,然后strlen()求出字符串的长度k然后定义:const int
a[][n];这里注意你得用C++去写代码,否则用C语言来写代码的话编译器会报错(C和C++的区别之一,昨天翻书的时候看到的)然后把全部数据导入a数组里面
dimension么。这类静态类型信息在运行时就丢了,所以还是在要用的地方用参数自己传进去吧。没当参数前也可以sizeof什么的。(要是C++倒可以用模板偷懒。)
然后用10L的方法使用sizeof()运算符求出数组的总长度(sizeof(a)),除以数组每一列的长度(k*sizeof(int)),然后就可以得到你输入数据的总行数了不知道这个方法行不行
那得要求每个元素的位数相同吧
这个算法是不是前提条件太多了
如果每行的元素个数不相同的话还真不好办的说。。。。。不过目测楼主的二进制数据应该是接收数字电路产生的的脉冲信号,满足这些条件应该不是问题吧
登录百度帐号推荐应用
为兴趣而生,贴吧更懂你。或一个numpy的二维数组,或者如何切我提取的N×N数组的MXM子矩阵(N& M)-python,numpy,slicing-CodeGo.net
一个numpy的二维数组,或者如何切我提取的N×N数组的MXM子矩阵(N& M)
我想一个切片numpy的n×n的数组。我想提取任意选择的m行和数组(即没有行/列数的任何模式)的列,使其成为一个新的,MXM数组。在这个例子说的数组是4x4的,我想从中提取一个2x2的数组。
下面是我们的数组:
from numpy import *
x = range(16)
x = reshape(x,(4,4))
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]
[12 13 14 15]]
行和列的删除是最简单的情况是,当我想提取一个2x2子矩阵是开头或结尾,也就是:
In [33]: x[0:2,0:2]
array([[0, 1],
In [34]: x[2:,2:]
array([[10, 11],
[14, 15]])
但是,如果我需要删除的行/列的另一种混合物?如果我需要删除优先行和第三行/列 CodeGo.net,提取子矩阵[[5,7],[13,15]?有可以是列/行。我读,我只需要指数行和列的索引数组我/清单,但似乎并没有工作:
In [35]: x[[1,3],[1,3]]
Out[35]: array([ 5, 15])
我找到了一个办法,那就是:
In [61]: x[[1,3]][:,[1,3]]
array([[ 5, 7],
[13, 15]])
这优先个问题是,它是很难读,但我可以忍受的。如果有一个更好的解决方案,我当然喜欢听到这种说法。
另一件事是我读的一个论坛,索引数组与数组力量大阵,这可能有问题时,处理numpy的,以进行所需的数组的副本。原因是什么呢/怎么工作的?
本文地址 :CodeGo.net/222559/
-------------------------------------------------------------------------------------------------------------------------
1. 要回答这个问题,我们来看看如何在numpy的一个索引数组的作品。让我们先说你有数组x从你的问题。分配给该缓冲x将含有16升的整数从0到15。如果你访问一个语音权x[i,j],的NumPy必须找出这种相对的位置到缓冲区的开始。这是通过计算有效完成i*x.shape[1]+j(与int的大小相乘得到一个偏移量)。
如果通过基本的切片状提取子数组y = x[0:2,0:2],得到的对象将与共享基础缓冲区x。但是,如果你存取权限会发生什么y[i,j]? NumPy的可以'i*y.shape[1]+j计算偏移到数组中,该数据属于y是不连续的
的NumPy通过引入进步解决了这个问题。当计算偏移量来访问x[i,j],什么是真正的计算i*x.strides[0]+j*x.strides[1](这已经包括了一个int大小的factor):
何时y提取就像上面的NumPy不会创建一个新的缓冲区 CodeGo.net,但它并创建引用该缓冲区的新数组对象(否则y也只是等于x。)新的数组对象都会有不同的形状,然后x也许不同的起始偏移到缓冲区,但会与共享的步伐x(在这种情况下,至少):
这样一来,计算偏移y[i,j]将产生正确的结果。
但是,你应该做的NumPy像z=x[[1,3]]?该不会允许正确的索引,如果对原来的缓冲区z。 NumPy的理论上可以添加更多的比的进步,但是这将使接入相对昂贵,不畏数组的整体思路。此外,视图不会再一个真正轻量级的对象。
这是覆盖在深度在NumPy的分度。
哦,差点忘了你的实际问题:这里是如何使多个列表按预期工作索引:
x[[[1],[3]],[1,3]]
这是索引数组被广播成形。
当然,对于这个特殊的例子,还可以凑合着用基本的切片:
x[1::2, 1::2]
如x[[[0],[2]],[1,3]]会给背部匹配与1和3列,而0和2排x[[0,2],[1,3]]将返回值X [0,1]和X [2,3],在一个数组中。
有一个有用的函数做了我的优先个例子,numpy.ix_。你可以做的事情我与优先个例子x[numpy.ix_([0,2],[1,3])]。这可以保存您不必在所有这些额外的括号进入。
我不认为X [[1,3]] [:,[1,3]]几乎没有可读性。如果你想在你的意图更加清晰,你可以这样做:
a[[1,3],:][:,[1,3]]
我不是切片,但通常一个专家,如果您尝试切到一个数组,值是你回来那里的步幅值被改变了看法。
例如在您输入33和34,虽然你得到一个2x2的数组,跨距为4。当你索引的下一行,鼠标指针移动到正确的位置
显然,不进行顺利进入索引的数组的情况下。因此,numpy的将不得不作出的副本。毕竟,很多其他的矩阵数学函数依赖于尺寸,步幅和分配。
如果你想跳过每隔一行和每隔一列,那么你可以用基本的切片做到这一点:
In [49]: x=np.arange(16).reshape((4,4))
In [50]: x[1:4:2,1:4:2]
array([[ 5, 7],
[13, 15]])
这将返回一个视图,而不是你数组的一个副本。
In [51]: y=x[1:4:2,1:4:2]
In [52]: y[0,0]=100
In [53]: x # &---- Notice x[1,1] has changed
array([[ 0, 1, 2, 3],
[ 4, 100, 6, 7],
[ 8, 9, 10, 11],
[ 12, 13, 14, 15]])
而z=x[(1,3),:][:,(1,3)]采用先进的索引和返回一个副本:
In [58]: x=np.arange(16).reshape((4,4))
In [59]: z=x[(1,3),:][:,(1,3)]
In [60]: z
array([[ 5, 7],
[13, 15]])
In [61]: z[0,0]=0
需要注意的是x是不变的:
In [62]: x
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11],
[12, 13, 14, 15]])
如果您想选择任意的行和列,然后就可以基本切片。你有先进的索引,使用像x[rows,:][:,columns],其中rows和columns是序列。这当然是要给你一个副本数组,而不是一个视图。这是因为人都不应指望,因为numpy的(恒定步),并且就没有办法产生任意行和列(因为这将要求非恒定步)的视图。
与numpy的,你可以传递一个切片索引-所以,你x[0:2,0:2]〔实施例上述作品。
如果您只是想跳过均匀的列或行,你可以通过与切片
(即启动,停止,步骤)。
同样,对于上面的例子:
&&& x[1:4:2, 1:4:2]
array([[ 5, 7],
[13, 15]])
这基本上是:切片先用启动索引1,停止当指数等于或大于4,并添加2到索引中的每个通行证。在第二个还是那句话:这仅适用于恒定的步骤。
你要做的很diffent内部的语法-什么x[[1,3]][:,[1,3]]实际上做的是创建一个新的数组,只需从原始数组的线路1和3,然后,(用做x[[1,3]]部分),然后重新切片表示-创建第三个数组-这新的数组的唯一的列1和3。
本文标题 :一个numpy的二维数组,或者如何切我提取的N×N数组的MXM子矩阵(N& M)
本文地址 :CodeGo.net/222559/
Copyright (C) 2014 CodeGo.netC语言程序设计-矩阵乘法[数组应用]
10042 矩阵乘法 【问题描述】已知矩阵A(m*n)和B(n*p),求C=A*B。 【输入形式】第一行三个整数为m,n,p(m,n,p均小于10),从第二行开始为m行n列A矩阵,然后为n行p列的B矩阵。 所有数据之间均由一个空格分隔。 【输出形式】输出m行p列的C矩阵,所有数据之间均由一个空格分隔,输出的每一个数据后面跟一个空格。 【样例输入】2 3 4
2 3 4 5 2 1 1 5 【样例输出】7 3 5 16 11 12 22 23 【样例说明】最后得到的2行4列的矩阵如上图所示。 【评分标准】本题共2个测试点,每个测试点0.5分,全部通过得1.0分。#include int m1[12][12], m2[12][12], m3[12][12];int m,pattern_len,p;int main() { scanf("%d%d%d", &m, &pattern_len, &p); for(int i=0; i<m; i++)
for(int j=0; j<pattern_ j++)
scanf("%d", &m1[i][j]); for(int i=0; i<pattern_ i++)
for(int j=0; j<p; j++)
scanf("%d", &m2[i][j]); for(int i=0; i<m; i++){
for(int j=0; j<p; j++){
m3[i][j] = 0;
for(int k=0; k<pattern_ k++){
m3[i][j] += m1[i][k] * m2[k][j];
printf("%d ", m3[i][j]);
puts(""); } return 0;}
最新教程周点击榜
微信扫一扫

我要回帖

更多关于 最小二乘法 矩阵求解 的文章

 

随机推荐