搜档网
当前位置:搜档网 › C#二维数组(答案)

C#二维数组(答案)

C#二维数组(答案)
C#二维数组(答案)

c#程序设计基础必做习题集(5)

十三、二维数组

任务106:

编写程序定义一个二维数组arr,该数组一共有4行3列,如下表所示,请把下表中的所有对应数据利用赋值语句赋值到该二维数组arr中去:

第0行

第1行

第2行

第3行

参考代码:

using System;

using System.Collections.Generic;

using System.Text;

namespace ConsoleApplication2

{

class Program

{

static void Main(string[] args)

{

int[,] arr = new int[4, 3];

arr[0,0]=18;

arr[0,1]=25;

arr[0,2]=7;

arr[1,0]=9;

arr[1,1]=13;

arr[1,2]=118;

arr[2,0]=1119;

arr[2,1]=4327;

arr[2,2]=91;

arr[3,0]=8;

arr[3,1]=2576;

arr[3,2]=673;

Console.WriteLine("第2行第1列的元素是:{0}",arr[2, 1]);

Console.WriteLine("第0行第2列的元素是:{0}", arr[0, 2]);

Console.WriteLine("第3行第0列的元素是:{0}", arr[3, 0]);

Console.ReadKey();

}

}

}

任务107:

编写程序定义一个二维数组arr,该数组一共有4行3列,如下表所示,请把下表中的所有对应数据利用赋值语句赋值到该二维数组arr中去:

第0行

第1行

第2行

第3行

(1)利用循环显示第0行的所有元素。

(2)利用循环显示第1列的所有元素。

(3)利用循环求第2行所有元素的和。

参考代码:

using System;

using System.Collections.Generic;

using System.Text;

namespace ConsoleApplication2

{

class Program

{

static void Main(string[] args)

{

int[,] arr = new int[4, 3];

arr[0,0]=180;

arr[0,1]=2;

arr[0,2]=71;

arr[1,0]=91;

arr[1,1]=139;

arr[1,2]=114;

arr[2,0]=119;

arr[2,1]=437;

arr[2,2]=86;

arr[3,0]=9;

arr[3,1]=276;

arr[3,2]=73;

Console.Write("所有第0行的数据:");

for (int i = 0; i <= 2; i++)

{

Console.Write(arr[0,i]+" ");

}

Console.Write("\n所有第1列的数据:");

for (int i = 0; i <= 3; i++)

{

Console.Write(arr[i, 1] + " "); }

Console.Write("所有第2行的数据:");

for (int i = 0; i <= 2; i++)

{

Console.Write(arr[2, i] + " "); }

Console.ReadKey();

}

}

}

任务108:

编写程序定义一个二维数组arr,该数组一共有4行3列,如下表所示,请把下表中的所有对应数据利用赋值语句赋值到该二维数组arr中去:

arr 第0列第1列第2列

第0行

第1行

第2行

第3行

编写程序利用二重循环,把以上数组所有数组按照4行、3列的方式打印出来。

参考代码:

using System;

using System.Collections.Generic;

using System.Text;

namespace ConsoleApplication2

{

class Program

{

static void Main(string[] args)

{

int[,] arr = new int[4, 3];

arr[0,0]=180;

arr[0,1]=2;

arr[0,2]=71;

arr[1,0]=91;

arr[1,1]=139;

arr[1,2]=114;

arr[2,0]=119;

arr[2,1]=437;

arr[2,2]=86;

arr[3,0]=9;

arr[3,1]=276;

arr[3,2]=73;

for (int i = 0; i <= 3;i++ )

{

for (int j = 0; j <= 2; j++)

{

Console.Write(arr[i,j]+" ");

}

Console.Write("\n");

}

Console.ReadKey();

}

}

}

任务109:

编写程序,定义一个4行,4列的二维数组,随机产生16个10到99之间的整数,放入其中,并把这4行4列的数据显示出来;把该数组的对角线元素显示出来,所谓的对角线元素如下图所示:

注意:从左上到右下的称为正对角线元素,从左下到右上的称为斜对角线元素。

参考代码:

using System;

using System.Collections.Generic;

using System.Text;

namespace ConsoleApplication2

{

class Program

{

static void Main(string[] args)

{

int[,] arr = new int[4, 4];

Random rnd=new Random();

Console.WriteLine("二维数组的内容如下:");

for (int i = 0; i <= 3;i++ ) //产生随机数放入数组

{

for (int j = 0; j <= 3; j++)

{

arr[i, j] = rnd.Next(10,100);

Console.Write(arr[i,j]+" ");

}

Console.Write("\n");

}

Console.Write("正对角线的元素有:");

for (int i = 0; i <= 3; i++)

{

Console.Write(arr[i,i]+" ");

}

Console.Write("\n斜对角线的元素有:");

for (int i = 0; i <= 3; i++)

{

Console.Write(arr[3-i, i] + " ");

}

Console.ReadKey();

}

}

}

任务110:

编写程序,定义一个4*4的二维数组,随机产生16个100到999之间的整数放入其中,并把这4行4列的数据显示出来;编写程序,把该二维数组每行的和、每列的和求出来。

参考代码:

using System;

using System.Collections.Generic;

using System.Text;

namespace ConsoleApplication2

{

class Program

{

static void Main(string[] args)

{

int[,] arr = new int[4, 4];

Random rnd=new Random();

Console.WriteLine("二维数组的内容是:");

for (int i = 0; i <= 3; i++) //产生并显示二维数组的内容

{

for (int j = 0; j <= 3; j++)

{

arr[i, j] = rnd.Next(100,1000);

Console.Write(arr[i,j]+" ");

}

Console.Write("\n");

}

Console.Write("\n");

Console.WriteLine("每行的和如下:");

for (int i = 0; i <= 3;i++ ) //求每行的和

{

int sum = 0;

Console.Write("第{0}行的和=",i);

for (int j = 0; j <= 3; j++)

sum = sum + arr[i, j];

Console.WriteLine(sum);

}

Console.Write("\n");

Console.WriteLine("每列的和如下:");

for (int i = 0; i <= 3; i++) //求每列的和

{

int sum = 0;

Console.Write("第{0}列的和=",i);

for (int j = 0; j <= 3; j++)

sum = sum + arr[j, i];

Console.WriteLine(sum);

}

Console.ReadKey();

}

}

}

任务111:

编写程序,定义一个6*8的二维数组,随机产生48个10到99之间的整数,放入该二维数组中。把该数组的内容按照6行8列的形式显示出来。再求出该数组中的最大值和最小值。参考代码:

using System;

using System.Collections.Generic;

using System.Text;

namespace ConsoleApplication2

{

class Program

{

static void Main(string[] args)

{

int[,] arr = new int[6, 8];

Random rnd=new Random();

for (int i = 0; i <= 5; i++) //随机产生并显示数组的所有数据内容

{

for (int j = 0; j <= 7; j++)

{

arr[i,j]=rnd.Next(10,100);

Console.Write(arr[i,j]+" ");

}

Console.Write("\n");

}

int max=-100000;

int min=+100000;

for (int i = 0; i <= 5; i++)

{

for (int j = 0; j <= 7; j++)

{

if (arr[i, j] > max) //求最大

max = arr[i, j];

if (arr[i, j] < min) //求最小

min = arr[i, j];

}

}

Console.WriteLine("最大值={0}",max);

Console.WriteLine("最小值={0}",min);

Console.ReadKey();

}

}

}

任务112:

编写程序,定义一个5*5的二维数组,该数组中每个元素的值是行下标和列下标的平方和,把这个二维数组的内容全部显示出来。

参考代码:

using System;

using System.Collections.Generic;

using System.Text;

namespace ConsoleApplication2

{

class Program

{

static void Main(string[] args)

{

int[,] arr = new int[5, 5];

for(int i=0;i<=4;i++) //初始化数组内容

{

for (int j = 0; j <= 4;j++ )

arr[i,j]=i*i+j*j;

}

for (int i = 0; i <= 4; i++) //显示数组内容

{

for (int j = 0; j <= 4; j++)

Console.Write(arr[i,j]+" ");

Console.Write("\n");

}

Console.ReadKey();

}

}

}

任务113:

编写程序,定义一个10*10的二维数组,随机产生100个10到99之间的整数放入其中,请把该数组的内容全部显示出来。再编写程序,对这个二维数组的每行进行升序排序,把排序后的二维数组的内容显示出来。

参考代码:

using System;

using System.Collections.Generic;

using System.Text;

namespace ConsoleApplication2

{

class Program

{

static void Main(string[] args)

{

int[,] arr = new int[10, 10];

Random rnd = new Random();

Console.WriteLine("排序后的内容:");

for (int i = 0; i <= 9; i++) //产生并显示数组

{

for (int j = 0; j <= 9; j++)

{

arr[i, j] = rnd.Next(10,99);

Console.Write(arr[i, j] + " ");

}

Console.Write("\n");

}

for (int p = 0; p <= 9; p++) //对每行进行排序

{

for (int i = 0; i <= 8; i++)

{

for (int j = i + 1; j <= 9; j++)

{

if (arr[p, i] > arr[p, j])

{

int temp = arr[p, i];

arr[p, i] = arr[p, j];

arr[p, j] = temp;

}

}

}

}

Console.WriteLine("排序后的内容:");

for (int i = 0; i <= 9; i++) //显示排序数组 {

for (int j = 0; j <= 9; j++)

{

Console.Write(arr[i, j] + " ");

}

Console.Write("\n");

}

Console.ReadKey();

}

}

}

方法二:

using System;

using System.Collections.Generic;

using System.Text;

namespace ConsoleApplication2

{

class Program

{

static void Main(string[] args)

{

int[,] arr = new int[10, 10];

Random rnd = new Random();

Console.WriteLine("排序前的内容:");

for (int i = 0; i <= 9; i++) //产生并显示数组 {

for (int j = 0; j <= 9; j++)

{

arr[i, j] = rnd.Next(10,99);

Console.Write(arr[i, j] + " ");

}

Console.Write("\n");

}

for (int p = 0; p <= 9; p++) //对每行进行排序 {

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

for (int j = 0; j < 9 - i;j++ )

{

if (arr[p, j] > arr[p, j + 1])

{

int t = arr[p, j];

arr[p, j] = arr[p, j + 1];

arr[p, j + 1] = t;

}

}

}

Console.WriteLine("排序后的内容");

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

{

for(int j=0;j<=9;j++)

Console .Write (arr[i,j]+" ");

Console .WriteLine ();

}

Console.ReadLine();

}

}

}

任务114:

编写程序把以下值通过赋值语句赋值给一个二维数组:

12 65 34 12 35

45 18 23 56 38

71 90 18 33 92

23 31 63 34 87

95 83 37 22 91

请求出该二维数组每行的最大值和每列的最小值。

参考代码:

using System;

using System.Collections.Generic;

using System.Text;

namespace ConsoleApplication2

{

class Program

{

static void Main(string[] args)

{

int[,] arr = new int[5, 5] {

{12 , 65 , 34 , 12 , 35},

{45 , 18 , 23 , 56 , 38},

{71 , 90 , 18 , 33 , 92},

{23 , 31 , 63 , 34 , 87},

{95 , 83 , 37 , 22 , 91}

};

Console.WriteLine("数组内容如下:"); //显示数组内容

for (int i = 0; i <= 4; i++)

{

for (int j = 0; j <= 4; j++)

Console.Write(arr[i,j]+" ");

Console.Write("\n");

}

Console.WriteLine("每行的最大值如下:");

for(int i=0;i<=4;i++) //求每行最大值 {

int max=arr[i,0];

for (int j = 1; j <= 4; j++)

{

if (arr[i, j] > max)

max = arr[i, j];

}

Console.WriteLine("第{0}行的最大值={1}",i,max);

}

Console.WriteLine("每列的最小值如下:");

for (int i = 0; i <= 4; i++) //求每列的最小值 {

int min = arr[0, i];

for (int j = 1; j <= 4; j++)

{

if (arr[j, i] < min)

min = arr[i, j];

}

Console.WriteLine("第{0}列的最小值={1}",i,min);

}

Console.ReadKey();

}

}

}

任务115:

利用二维数组打如下的图形:

1

1 1

1 2 1

1 3 3 1

1 4 6 4 1

1 5 10 10 5 1

思路:可以先考虑打印如下图形:

1

1 1

1 2 1

1 3 3 1

1 4 6 4 1

1 5 10 10 5 1

参考代码:

using System;

using System.Collections.Generic;

using System.Text;

namespace ConsoleApplication2

{

class Program

{

static void Main(string[] args)

{

int[,] arr = new int[6, 6];

for (int i = 0; i <= 5;i++ ) //把第1列全部设为1 arr[i,0]=1;

for(int i=0;i<=5;i++) //把对角线设为1

arr[i,i]=1;

for (int i = 2; i <= 5;i++ ) //构造杨辉三角形

{

for (int j = 1; j <= i - 1;j++ )

arr[i,j]=arr[i-1,j]+arr[i-1,j-1];

}

int p = 30;

for (int i = 0; i <= 5; i++)

{ //显示出来

for (int j = 0; j < p;j++)

Console.Write(" ");

p = p - 1;

for (int j = 0; j <= i; j++)

Console.Write(arr[i,j]+" ");

Console.Write("\n");

}

Console.ReadKey();

}

}

}

C语言笔记(二维数组-函数)

二维数组 我们以前学过的数组叫一维数组(只有一行) 二维数组,有行有列 0 1 2 3 0 1 2 3 4 1 5 6 7 8 2 9 10 11 12 如何来定义二维数组 格式:类型标识符数组名[行的长度][列的长度]; Int a[3][4] 讨论一下究竟有多少元素?元素个数=行的长度*列的长度意义:定义了一个二维数组名为A含有12个元素,每个元素都是一个整形变量,他们是: a[0][1],a[0][2]…对于第一行而言,行的下标都是零。 规律:对于每一行而言,行的下标不会改变,列的下标改变。 给二维数组赋初值(实际上是给二维数组中的每个元素付出只)1)int a[3][4]={1,2,3,4, 5,6,7,8, 9,10,11,12} ; 必须要会认,最基本的,比如a[2][0],分组后是9 2)int a[3][4]={1,2,3,4},{5,6,7,8}{9,10,11,12}; 3)可以省略行,但不能省略列 A:iint a[][4]= {1,2,3,4, 5,6,7,8, 9,10,11,12} ; B:int a[][4] ={1,2,3,4},{5,6,7,8}{9,10,11,12}; 4) int a[3][4]={1,2,3,4, 5,6,7,8, 9,10,11} ;可以少赋值,自动填0 a[2][3]=0 5) int a[][4] ={1,3,4},{5,6,7,8}{9,10,11,12}; a[0][3]=0 注意: 1)二维数组的复制原则,是要优先满足前面的行,然后再来满足后面的行 2)二维数组行的长度用来表明共有多少行,列的个数用来表明每行的元素个数 二维数组的输出 1)有数组就要循环 我们肯定要输出三行,每行要输出四个数据 第i行第j个元素:for(i=0;i<3(行的长度);i++) {for(j=0;j<4(列的长度);j++) {printf(“%d”,a[i][j]);}//如果内循环做完了,表示第i行 就输出完了 printf(“/n”);}

矩阵分析第3章习题答案

第三章 1、 已知()ij A a =是n 阶正定Hermite 矩阵,在n 维线性空间n C 中向量 1212(,,,),(,, ,)n n x x x y y y αβ==定义内积为(,)H A αβαβ= (1) 证明在上述定义下,n C 是酉空间; (2) 写出n C 中的Canchy-Schwarz 不等式。 2、 已知2111311101A --?? =? ? -?? ,求()N A 的标准正交基。 提示:即求方程0AX =的基础解系再正交化单位化。 3、 已知 308126(1)316,(2)103205114A A --?? ?? ????=-=-?? ?? ????----?? ?? 试求酉矩阵U ,使得H U AU 是上三角矩阵。 提示:参见教材上的例子 4、 试证:在n C 上的任何一个正交投影矩阵P 是半正定的Hermite 矩阵。 5、 验证下列矩阵是正规矩阵,并求酉矩阵U ,使H U AU 为对角矩阵,已知 1 31(1)612A ????? =????????? ? 01(2)10000i A i -????=??????,434621(3)44326962260i i i A i i i i i +--????=----? ???+--?? 11(4)11A -?? =?? ?? 6、 试求正交矩阵Q ,使T Q AQ 为对角矩阵,已知

220(1)212020A -????=--????-?? ,11011110(2)01111011A -?? ??-? ?=?? -??-?? 7、 试求矩阵P ,使H P AP E =(或T P AP E =),已知 11(1)01112i i A i i +????=-????-??,222(2)254245A -?? ??=-?? ??--?? 8、 设n 阶酉矩阵U 的特征根不等于1-,试证:矩阵E U +满秩,且1 ()() H i E U E U -=-+是Hermite 矩阵。反之,若H 是Hermite 矩阵,则E iH +满秩,且1 ()()U E iH E iH -=+-是酉矩阵。 证明:若||0+=E U ,观察0-=E U λ知1-为U 的特征值,矛盾,所以矩阵E U +满 秩。()()1 1()()()--=-+=-+-H H H H H i E U E U i E U E U ,要H H H =,只要 ()()1 1()()()()()()---+-=-+?--+=+-?-=-H H H H H H i E U E U i E U E U E U E U E U E U U U U U 故H H H = 由()0+=--=E iH i iE H 知i 为H 的特征值。由Hermite 矩阵只能有实数特征值可得 0+≠E iH ,即E iH +满秩。 111111()()()()()()()()()()()()------=+-+-=+-+-=++--=H H H U U E iH E iH E iH E iH E iH E iH E iH E iH E iH E iH E iH E iH E 9、 若,S T 分别是实对称和实反对称矩阵,且det()0E T iS --≠,试证: 1()()E T iS E T iS -++--是酉矩阵。 证明: 1111 [()()]()()()()()()----++--++--=++--++--H E T iS E T iS E T iS E T iS E T iS E T iS E T iS E T iS 11()()()()--=++++----=E T iS E T iS E T iS E T iS E

c语言二维数组课堂编程练习

完成下列程序代码 1、将二维数组(5行5列)的右上半部分置零。即: #include main() { int a[5][5]={{1,2,3,4,5},{6,7,8,9,10},{11,12,13,14,15},{16,17,18,19,20},{21,22,23,24,25}}; for(int i=0;i<5;i++) { for(int j=0;j<5;j++) { if(i main() { int a[5][5],i,j; for(i=0;i<5;i++) {

for(j=0;j<5;j++) { scanf("%d",&a[i][j]); } } int sum=a[0][0],x,y; for(i=0;i<5;i++) { for(j=0;j<5;j++) { if(sum main() { int a[3][3],i,j; for(i=0;i<3;i++) { for(j=0;j<3;j++) { scanf("%d",&a[i][j]); } } for(i=0;i<3;i++) { for(j=0;j<3;j++) { if(i==0||j==0) { printf("%d",a[i][j]); } }

C语言中动态分配二维数组

C语言中动态分配二维数组 在C中动态分配内存的,对于单个变量,字符串,一维数组等,都是很容易的。C中动态分配二维数组的方法,很少有C语言书中描述,我查找了有的C语言书中提到了一个方法:假定二维数组的维数为[M][N] 分配是可以这样: int **ptr=new int*[M]; //////这是先动态分配一个包含有M个指针的数组,即指先分配一个针数组 ///////////指针数组的首地址保存在ptr中 for(int i=0;i

矩阵分析模拟试题及答案

矩阵分析模拟试题及答案 一.填空题(每空3分,共15分) 1. 设A 为3阶方阵, 数2-=λ, 3=A , 则A λ= -24. 2. 设向量组T )4,3,2,1(1=α,T )5,4,3,2(2=α,T )6,5,4,3(3=α,T )7,6,5,4(4=α,则 ),,,(4321ααααR =2. 3. 已知??? ?? ??---=11332 223a A ,B 是3阶非零矩阵,且0=AB ,则=a 1/3. 4.设矩阵????? ??------=12422 421x A 与??? ? ? ??-=Λ40000005y 相似,则y x -=-1. 5. 若二次型()32212 3222132122, ,x ax x x x x x x x x f ++++=是正定二次型,则a 的取值 范围是22< <-a . 二.单项选择题(每小题3分,共15分) 1. 设A 是3阶矩阵,将的第二列加到第一列得矩阵,再交换的第二行与第三行得单位矩阵, 记????? ??=1000110011P ,??? ?? ??=010*******P ,在则=A ( D ) 21)(P P A 211)(P P B - 12)(P P C 112)(-P P D 2. 设A 是4阶矩阵,且A 的行列式0=A ,则A 中( C ) )(A 必有一列元素全为0 )(B 必有两列元素成比例 )(C 必有一列向量是其余列向量的线性组合 )(D 任意列向量是其余列向量的线性组合 3. 设A 与B 均为3阶方阵, 且A 与B 相似, A 的特征值为1, 2, 3, 则1 )2(-B 的特 征值为(B ) )(A 2, 1, 32 )(B 12, 14, 16 )(C 1, 2, 3 )(D 2, 1, 2 3

矩阵论答案

习题 一 1.(1)因 cos sin sin cos nx nx nx nx ?? ? ? -?? cos sin sin cos x x x x ????-??= cos(1) sin(1)sin(1) cos(1)n x n x n x n x ++?? ??-++?? ,故由归纳法知 cos sin sin cos n nx nx A nx nx ?? =??-?? 。 (2)直接计算得4 A E =-,故设4(0,1,2,3)n k r r =+=,则4(1)n k r k r A A A A ==-,即只需算出23,A A 即可。 (3)记J=0 1 0 1 1 0 ?????? ?????????? ,则 , 112211111 () n n n n n n n n n n n n n n i i n i n n i n n n a C a C a C a C a C a A aE J C a J a C a a -----=-????????=+==?? ???????? n ∑。 2.设11 22 (1,0),0 a A P P a A E λλ-??===?? ?? 则由得 2 1112111 1 1 210 0 0 a λλλλλλλ?? ????==?????????????? 1时,不可能。 而由2 112222 0 0 000 0 0 a λλλλλλ?? ????==?????????????? 1时,知1i λ=±所以所求矩阵为1i PB P -, 其中P 为任意满秩矩阵,而 1231 0 1 0 1 0,,0 10 1 0 1B B B -??????===?????? --?????? 。 注:2 A E =-无实解,n A E =的讨论雷同。 3.设A 为已给矩阵,由条件对任意n 阶方阵X 有AX=XA ,即把X 看作2 n 个未知数时线 性方程AX -XA=0有2 n 个线性无关的解,由线性方程组的理论知其系数矩阵为零矩阵,

C语言知识点总结8【二维数组】

C语言知识点总结8【二维数组】 一、二维数组的定义 ●一个3行,4列的二维数组。其行号:0,1,2;其列号:0,1,2,3 ●最大下标的元素为a[2][3],没有a[3][4]这个元素 ●数组共有3行,每一行都是:4个元素的一维数组,每一行的数组名分别为:a[0],a[1],a[2] ●从整体看,任何一个二维数组都可以看成是一个一维数组,只不过其数组元素又是一个一维数 组。 ●二维数组定义同时若有初始化,可以省略行号不写:如int a[][3]={1,2,3,4,5,6};系统会按照数据 的个数,和规定的列数,来确定数据分几行? ●二维数组定义同时若有初始化,可以省略行号不写,但列号不能省略:如int a[3][ ]={1,2,3,4,5}; 系统无法按照数据的个数,和规定的行数,来确定数据分几列。 二、二维数组的存储及地址关系 二维数组在计算机中的存储是按行连续存储。先保存第一行,在第一行末尾开始存第二行,依此类推。 这里,a是a[0]的地址,a[0]是数组元素a[0][0]的地址,则a是地址的地址,即二级地址

三、 二维数组的初始化 1、 分行赋值:int a[3][4] = {{1,2,3,4},{5,6,7,8},{9,10,11,12}}; 2、 不分行赋值:全部数据写在一个大括号内:int a[3][4] = {1,2,3,4,5,6,7,8,9,10,11,12}; 3、 部分元素赋值 4、如果对全部元素赋初值,则第一维的长度可以不指定,但必须指定第二维的长度。 int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12}; 等价:int a[ ][4]={1,2,3,4,5,6,7,8,9,10,11,12}; 四、 二维数组的输出 五、 二维数组的输入

矩阵问题(c语言)讲解

矩阵问题1.给一个二维数组A赋值如下数据: 2.输出以下5×5的矩阵 3.拐角矩阵 1)左上拐角 #include void main() { int i,j,k,n; printf("n : "); scanf("%d",&n); for(i=1;i<=n;i++) { for(j=1;j<=n;j++) { k=i>j?j:i; printf("%4d",k); } printf("\n"); } } 0 1 1 1 -1 0 1 1 -1 -1 0 1 1 -1 -1 -1 0 1 -1 -1 1 1 1 1 2 1 1 1 3 2 1 1 1 4 3 2 1 1 2 1 1 1 1 2

2) 右下拐角 void main() { int i,j,k,n; printf("n : "); scanf("%d",&n); for(i=1;i<=n;i++) { for(j=1;j<=n;j++) { if(i<=j) printf("%4d",n+1-j); else printf("%4d",n+1-i); } printf("\n"); } } 3) 左下拐角 1 2 3 1 2 2 1 1 #include void main() { int i,j,k,n; printf("n : "); scanf("%d",&n); for(i=1;i<=n;i++) { for(j=1;j<=n;j++) { if(i+j<=n+1) printf("%4d",j); else printf("%4d",n+1-i); } printf("\n"); } } 3 2 2 2 1

上海交大研究生矩阵理论答案

n k r n n 1 2 习题 一 1.( 1)因 cosnx sin nx sin nx cosnx cosx sin x sin x = cosx cos(n sin(n 1)x 1)x sin( n cos(n 1)x 1)x ,故由归纳法知 cosnx sin nx A 。 sin nx cosnx ( 2)直接计算得 A 4 E ,故设 n 4 k r (r 0,1,2,3) ,则 A n A 4 k A r ( 1) A , 即 只需算出 A 2, A 3 即可。 0 1 0 1 ( 3 )记 J= ,则 , 1 0 n 1 n 1 2 n 2 n a C n a C n a C n a n C 1 a n 1 C n 1a A n (aE J ) n n C i a i J n i i 0 n n a n 。 C 1a n 1 a n 2. 设 A P 1 a 2 P 1(a 1,0),则由A 2 E 得 a 1时, 1 1 1 1 0 1 2 1 2 1 0 2 不可能。 1 而由 a 1 0时, 2 1 知 1 所以所求矩阵为 PB P 1 , 其中 P 为任意满秩矩阵,而 i i 2 2 2 1 0 1 0 1 0 B 1 , B 2 , B 3 。 0 1 0 1 1 注: A 2 E 无实解, A n E 的讨论雷同。 3. 设 A 为已给矩阵,由条件对任意 n 阶方阵 X 有 AX=XA ,即把 X 看作 n 2 个未知数时线 性方程 AX XA=0 有 n 2 个线性无关的解, 由线性方程组的理论知其系数矩阵为零矩阵, 1

C语言二维数组作为函数的参数

可以用二维数组名作为实参或者形参,在被调用函数中对形参数组定义时可以指定所有维数的大小,也可以省略第一维的大小说明,如: void Func(int array[3][10]); void Func(int array[][10]); 二者都是合法而且等价,但是不能把第二维或者更高维的大小省略,如下面的定义是不合法的: void Func(int array[][]); 因为从实参传递来的是数组的起始地址,在内存中按数组排列规则存放(按行存放),而并不区分行和列,如果在形参中不说明列数,则系统无法决定应为多少行多少列,不能只指定一维而不指定第二维,下面写法是错误的: void Func(int array[3][]);实参数组维数可以大于形参数组,例如实参数组定义为: void Func(int array[3][10]); 而形参数组定义为: int array[5][10]; 这时形参数组只取实参数组的一部分,其余部分不起作用。 对于数组int p[m][n]; 如果要取p[i][j]的值(i>=0 && i

c语言实现矩阵的相关操作

算法分析与设计课程论文 —通过C语言实现矩阵的相关操作

一.摘要 本文在Microsoft Visual Studio 2010的编译环境下,通过C语言进行一些矩阵的基本操作,包括矩阵的设置,加减乘除,数乘运算。求矩阵的逆等操作。 关键词 矩阵 C语言逆矩阵 二.正文 1.引言 矩阵的相关知识只是是高等数学的基础,但是其庞大的运算量和纷繁的步骤让人却步。虽然有Matlab等软件可以实现矩阵的相关操作,但是我校一些专业并不学习数学实验,故通过C语言实现矩阵的操作也是一种可行的方法,本文列举的了一些矩阵的加减乘除等基本运算规则,还有对矩阵进行转置,也有矩阵求逆的相关操作。 同时,还介绍了行列式的计算,通过运行该程序,可以大大简化行列式的计算量。 2.算法分析

矩阵的初始化 相关概念 在数学中,矩阵(Matrix)是一个按照长方阵列排列的复数或实数集合,最早来自于方程组的系数及常数所构成的方阵。这一概念由19世纪英国数学家凯利首先提出。 矩阵是高等代数学中的常见工具,也常见于统计分析等应用数学学科中。在物理学中,矩阵于电路学、力学、光学和量子物理中都有应用;计算机科学中,三维动画制作也需要用到矩阵。矩阵的运算是数值分析领域的重要问题。将矩阵分解为简单矩阵的组合可以在理论和实际应用上简化矩阵的运算。对一些应用广泛而形式特殊的矩阵,例如稀疏矩阵和准对角矩阵,有特定的快速运算算法。 理论分析 在C语言中,可以使用二维数组来描绘一个矩阵。值得注意的是,在二维数组中,必须标明列数,否则编译器就会报错。故二维极其多维数组使用时要注意数组下标。 代码实现

#include int main() { int juzheng [100][100]; int i , j , a , b ; printf("请输入矩阵的行数a 列数b \n") ; scanf ("%d %d",&a,&b); for (i = 0;i < a ;i++) { for (j = 0;j < b ;j++) { scanf ("%d",&juzheng[i][j]); } } printf ("你所输入的矩阵是:\n"); for (i = 0;i < a ;i++) { for (j = 0;j < b ;j++) { printf("%d ",juzheng[i][j]); } printf ("\n"); } return 0; } 矩阵的相加

矩阵分析课后习题解答版

第一章 线性空间与线性变换 (以下题目序号与课后习题序号不一定对应,但题目顺序是一致的,答案为个人整理,不一定正确,仅供参考,另外,此答案未经允许不得擅自上传) (此处注意线性变换的核空间与矩阵核空间的区别) 1.9.利用子空间定义,)(A R 是m C 的非空子集,即验证)(A R 对m C 满足加法和数乘的封闭性。 1.10.证明同1.9。 1.11.rankA n A N rankA A R -==)(dim ,)(dim (解空间的维数) 1.13.提示:设),)(- ?==n j i a A n n ij (,分别令T i X X ),0,0,1,0,0(K K ==(其中1位于i X 的第i 行),代入0=AX X T ,得0=ii a ;令T ij X X )0,0,10,0,1,0,0(K K K ==(其中1位于ij X 的第i 行和第j 行) ,代入0=AX X T ,得0=+++jj ji ij ii a a a a ,由于0==jj ii a a ,则0=+ji ij a a ,故 A A T -=,即A 为反对称阵。若X 是n 维复列向量,同样有0=ii a , 0=+ji ij a a , 再令T ij i X X ),0,1,0,0,,0,0(K K K ='=(其中i 位于ij X 的第i 行,1位于ij X 的第j 行),代入0=AX X H ,得0)(=-++ij ji jj ii a a i a a ,由于 0==jj ii a a ,ij ji a a -=,则0==ji ij a a ,故0=A 1.14.AB 是Hermite 矩阵,则AB BA A B AB H H H ===)( 1.15.存在性:令2 ,2H H A A C A A B -=+=,C B A +=,其中A 为任意复矩阵,可验证C C B B H H -==, 唯一性:假设11C B A +=,1111,C C B B H H -==,且C C B B ≠≠11,,由

数值分析习题集及答案

数值分析习题集 (适合课程《数值方法A》和《数值方法B》) 长沙理工大学 第一章绪论 1.设x>0,x的相对误差为δ,求的误差. 2.设x的相对误差为2%,求的相对误差. 3.下列各数都是经过四舍五入得到的近似数,即误差限不超过最后一位的半个单位,试指 出它们是几位有效数字: 4.利用公式求下列各近似值的误差限: 其中均为第3题所给的数. 5.计算球体积要使相对误差限为1%,问度量半径R时允许的相对误差限是多少? 6.设按递推公式 ( n=1,2,…) 计算到.若取≈(五位有效数字),试问计算将有多大误差? 7.求方程的两个根,使它至少具有四位有效数字(≈. 8.当N充分大时,怎样求? 9.正方形的边长大约为100㎝,应怎样测量才能使其面积误差不超过1㎝? 10.设假定g是准确的,而对t的测量有±秒的误差,证明当t增加时S的绝对误差增加,而 相对误差却减小. 11.序列满足递推关系(n=1,2,…),若(三位有效数字),计算到时误差有多大?这个计算过程 稳定吗? 12.计算,取,利用下列等式计算,哪一个得到的结果最好? 13.,求f(30)的值.若开平方用六位函数表,问求对数时误差有多大?若改用另一等价公式 计算,求对数时误差有多大? 14.试用消元法解方程组假定只用三位数计算,问结果是否可靠? 15.已知三角形面积其中c为弧度,,且测量a ,b ,c的误差分别为证明面积的误差满足 第二章插值法 1.根据定义的范德蒙行列式,令 证明是n次多项式,它的根是,且 .

2.当x= 1 , -1 , 2 时, f(x)= 0 , -3 , 4 ,求f(x)的二次插值多项式. 3. 4.给出cos x,0°≤x ≤90°的函数表,步长h =1′=(1/60)°,若函数表具有5位有效数 字,研究用线性插值求cos x 近似值时的总误差界. 5.设,k=0,1,2,3,求. 6.设为互异节点(j=0,1,…,n),求证: i) ii) 7.设且,求证 8.在上给出的等距节点函数表,若用二次插值求的近似值,要使截断误差不超过,问使用函 数表的步长应取多少? 9.若,求及. 10.如果是次多项式,记,证明的阶差分是次多项式,并且为正整数). 11.证明. 12.证明 13.证明 14.若有个不同实根,证明 15.证明阶均差有下列性质: i)若,则; ii)若,则. 16.,求及. 17.证明两点三次埃尔米特插值余项是 并由此求出分段三次埃尔米特插值的误差限. 18.求一个次数不高于4次的多项式,使它满足并由此求出分段三次埃尔米特插值的误差限. 19.试求出一个最高次数不高于4次的函数多项式,以便使它能够满足以下边界条件,,. 20.设,把分为等分,试构造一个台阶形的零次分段插值函数并证明当时,在上一致收敛到. 21.设,在上取,按等距节点求分段线性插值函数,计算各节点间中点处的与的值,并估计误 差. 22.求在上的分段线性插值函数,并估计误差. 23.求在上的分段埃尔米特插值,并估计误差. i) ii) 25.若,是三次样条函数,证明 i); ii)若,式中为插值节点,且,则. 26.编出计算三次样条函数系数及其在插值节点中点的值的程序框图(可用式的表达式). 第三章函数逼近与计算 1.(a)利用区间变换推出区间为的伯恩斯坦多项式. (b)对在上求1次和三次伯恩斯坦多项式并画出图形,并与相应的马克劳林级数部分和误

如何在C函数中传递指向二维数组的指针参数

前几日用C编写DSP程序时,遇到一个问题:如何向C函数中传递指向二维数组的指针参数。初接触以为很简单,直接声明一个二维数组,然后把数组名传进去。但是一经编译便报错。后来仔细想了一下,并查找了一些相关资料,发现二维数组在概念上远比一维数组复杂,或者说二维数组以一种晦涩的方式构建在一维数组之上。 先来回顾一下一维数组。一维数组的数组名即为指向该数组的指针,该指针值保存了数组存放在内存中的一块连续区域的起始地址;数组的下标表示了这片内存区域的某存储区相对于起始地址的偏移量。简单来讲就是:指向一维数组的指针,指向数据存放区域的起始位置。 事实上,计算机系统的多维数组其实最终还是以一维数组的形式实现的。就N x M的二维数组来讲,设其数组名为array。指针array 指向一个数组,该数组存放的是一系列指针,这些指针分别指向相应的一维数组,而这些数组中存放的才是我们的数据。 array -> [一维数组指针1] -> [ 一维数组,M长] [一维数组指针2] -> [ 一维数组,M长] …… …… [一维数组指针N] -> [ 一维数组,M长]

由此array是第i个指针变量地址,array[j]则表示相对于第i个指针变量偏移j*sizeof(数组类型)。系统通过这种机制访问了该二维数组的第i行,第j列的内容。 有上述可知,指向二维数组的指针其实是指向“指针变量地址”的指针变量。所以在声明指向二维数组的指针时,用int ** array的形式。 有以下两种方式来对二维数组分配内存: ///// 方法一 #include // 必须包含该头文件,里面定义了malloc的实现 int ** array = malloc( N * sizeof(int *) ); for (int k=0;k int ** array = malloc( N * sizeof(int *) ); array[0] = malloc( M * sizeof(int) ); for (int k=1;k

矩阵分析 2018年期末试题

一、填空题 1、4[]R x 表示实数域R 上所有次数小于或等于3的多项式构成的向量空间,则微分算子 D 在4[]R x 的基 321234(),(),(),()1p x x p x x p x x p x ====下的矩阵表示______________。 2、λ-矩阵 322(1)()(1)A λλλλλλ??- ?=- ? ??? 的初等因子组为______________________ _______________, Smith 标准形是___________________________ 3、已知矩阵210024120A -??? ?=??????,则 1____,A =____,A ∞= _____F A = 其中1,∞??分别是由向量的1-范数和∞-范数诱导出来的矩阵范数(也称算子范数), F ?是矩阵的Frobenius 范数。 4. 已知函数矩阵222()2x A x x ??= ???,则22()d A x dx =___________, 5、已知n 阶单位矩阵I , 则 sin _______,2I π= 2______,i I e π=cos _______.I π= 6、设()m J a 表示主对角元均为 a 的m 阶Jordan 块。则 ()k m J a 的Jordan 标准形为________ _______, ()k m J a 的最小多项式为___________,这里0,a ≠ ,m k 是整数且 1,1m k >≥. 二、 已知 220260114A -????=?????? , (1)求矩阵的Jordan 标准形和最小多项式; (2)求矩阵函数 sin ,.t A A e 30(())_______.t A x dx '=?

2014矩阵分析试卷

2014矩阵分析试卷 一、判断题(不要求证明)(20分) 1.设n 是大于1的整数,{()|()}V f x f x n F =是次数小于的域上的多项式,V 关于多项式的加法与数乘是一个域F 上的线性空间。 ( √ ) 2.设a r 为XOY 面上的非零向量,V 为XOY 面内所有不平行于a r 的向量构成的集合,V 关于向量的加法与数乘是一个域R 上的线性空间。 ( × ) 3.设V 是域F 上的线性空间, V α∈不是零向量,映射:,()V V ξξα→=+A A 是V 上的线性变 换。 ( × ) 4. 设A 是数域R 上的对称阵,映射:,()n n R R A αα→=A A 是n R 上的对称变换。 ( √ ) 二、计算题 1. (1,1,1,1)T 2. 已知1 12212W ={,},W ={,}Span a a Span b b ,而 1212(0,1,1,1),(1,0,2,0);(0,3,3,1),(1,2,0,0)a a b b =-==-=。 12W W ?的基为(1,1,3,1)T --与维数1; 12122212W +W ={,,}={,,}span span ααβαββ的基122,,ααβ或212,,αββ与维数3 3. 23:,()R R A ββ→=A A ,基 123(1,0,0),(0,1,0);(0,0,1) ααα===及基 12(1,0),(0,1)ββ==下的矩阵为110=211T B ?? ? ?? 。 4. (10分)设线性变换22:R R →A ,在基12(1,0),(0,1)ββ==的矩阵为12=24A ?? ??? ,求A 的核为{k(-2,1)| k}T ?、值域的基1 2+2β β,维数1。 6.(8分)求矩阵11010=0111123131A ?? ? ? ??? 的满秩分解 7.(24分)设矩阵308=3-16-20-5A ?? ? ? ??? ,求可逆矩阵P ,使得1 P AP -为约当阵。 A E -λ = ??? ? ? ??+-+---502613803 λλλ→ ????? ??++2)1(0001 0001λλ,

上海交大研究生矩阵理论答案

|讪 而由a = 0时, 〔0 其中P 为任意满秩矩阵,而 注:A = -E 无实解,A n =E 的讨论雷同。 性方程AX -XA=0有n 2 个线性无关的解,由线性方程组的理论知其系数矩阵为零矩阵, 习题 -cosnx sin nx[ 1-("因[L sinnxcosnx 丄sin C0SX sin x = COs(n 1)x sin(n 1)x ,故由归纳法知 x cosx f-sin(n 1)x cos(n 1)x A n cosnx sin nx '-sinnx cosnx (2)直接计算得 A 4 - -E ,故设 n =4k r(r =0,1,2,3),则 A n = A 4k A r =(-1)k A r ,即 只需算出A 2, A 3即可。 (3 )记 J= ,则 a n C :a n n i i n _i_ A =(aE J) = 6 C n a J i =0 n 』亠2 n _2 C n a C ;a nJ n a III c :〕 III c^a C : a n 」 n a 2?设 A =P F a 1 -0 /一 2 _ P’yo),则由 A 2 =E 得 冷0 1 〔0 1 一 ,B 2 = 【0 -0] ,艮 0] 。 -1 i 0 -k 0 1 2 _0 所以所求矩阵为PB i P’ , 3?设A 为已给矩阵,由条件对任意 n 阶方阵 X 有AX=XA ,即把X 看作n 个未知数时线

通过直接检验即发现 A 为纯量矩阵。a n ? a n 1 ■ 11( ? = 0 5.先证A 或B 是初等到阵时有 AB *=B *A * ,从而当A 或B 为可逆阵时有 AB 、B *A *。 考虑到初等变换 A 对B 的n 阶子行列式的影响及 A 二A‘即可得前面提到的结果。 下设PAQ = E r 0 ,(这里P , Q 满秩),则由前讨论只需证下式成立即可: 〔0。」 6 .由 r(A)二 r(A —)及 AX 二 0= (AX)—AX = 0,即 AX = 0 与 A —AX = 0 同解,此即所 求证。 7.设其逆为 a j ,则当I 固定时由可逆阵的定义得 n 个方程 .i 1 . 1 2 . 1 n-1 ? a

多元统计分析期末试题及答案

22121212121 ~(,),(,),(,),, 1X N X x x x x x x ρμμμμσρ ?? ∑==∑= ??? +-1、设其中则Cov(,)=____. 10 31 2~(,),1,,10,()()_________i i i i X N i W X X μμμ=' ∑=--∑L 、设则=服从。 ()1 2 34 433,4 92,32 16___________________ X x x x R -?? ?'==-- ? ?-? ? =∑、设随机向量且协方差矩阵则它的相关矩阵 4、 __________, __________, ________________。 215,1,,16(,),(,)15[4()][4()]~___________i p p X i N X A N T X A X μμμμ-=∑∑'=--L 、设是来自多元正态总体和分别为正态总体的样本均值和样本离差矩阵,则。 12332313116421(,,)~(,),(1,0,2),441, 2142X x x x N x x x x x μμ-?? ?'=∑=-∑=-- ? ?-?? -?? + ??? 、设其中试判断与是否独立? (), 12 3设X=x x x 的相关系数矩阵通过因子分析分解为 211X h = 的共性方差1 11 X σ=的方差 21X g = 1公因子f 对的贡献121330.93400.1280.9340.4170.83511 00.4170.8940.02700.8940.44730.8350.4470.1032013R ? ? - ????? ? -?? ? ? ?=-=-+ ? ? ? ??? ? ? ????? ? ?? ?

C语言中动态分配二维数组

在C中动态分配内存的,对于单个变量,字符串,一维数组等,都是很容易的。C中动态分配二维数组的方法,很少有C语言书中描述,我查找了有的C语言书中提到了一个方法: 假定二维数组的维数为[M][N] 分配是可以这样: int **ptr=new int*[M]; //////这是先动态分配一个包含有M个指针的数组,即指先分配一个针数组 ///////////指针数组的首地址保存在ptr中 for(int i=0;i

{ pMatrix[i] = new int[column]; for(int j = 0; j < column; j++) { pMatrix[i][j] = (i+j); ///////简单的初始化 } } 这样创建一个数组有个严重的问题,就是它的内存不连续,行与行之间的内存不连续,虽然可以用[i][j]下标访问,无法满足用指向二维数组元素型别的指针变量来访问整个数组的要求. 例如不能如下访问每个二维数组元素: int * p = NULL; for(p = pMatrix[0]; p < pMatrix[0]+column * row; p++) { int fff = *(pme); }

而这种访问方式对于真正的二维数组是完全可以的。出现这种原因就是因为行与行之间的内存不连续造成的。 所以,这中方式创建的动态二维数组,不是真正意义上的二维数组。 那么什么是真正的二维数组呢?C语言中的二维数组在内存组织形式是按行存储的连续的内存区域。所以,必须保证数组元素是按行存储的,而且也是最重要的是内存要连续。 所以,我写出了如下的一个方法: 假定二维数组的元素变量类型是MyType;可以是C语言接受的除void之外的任何类型,因为编译器不晓得void类型的大小;例如int,float,double等等类型; int row = 2; /////暂假定行数是2,这个可以在运行时刻决定; int column = 3;/////暂假定列数是2,这个可以在运行时刻决定; void **ptdhead = NULL; //////////在后面说明为什么要用void**类型

相关主题