5.5.2  对角线问题

5.5.2 对角线问题

【例5-11】定义一个10×10矩阵,并将矩阵两条对角线元素均设置为1,其他元素均为0,然后输出到窗体上。

978-7-111-49659-5-Chapter05-69.jpg做什么

1)将矩阵两条对角线元素均设置为1。

2)输出矩阵。

所以窗体上只需要一个按钮即可实现数据的输入和输出。

978-7-111-49659-5-Chapter05-70.jpg怎么做

分析:定义整型数组,因为所有元素系统默认为0,所以只需要将对角线元素设置为1即可。这时,需要观察对角线上元素的规律,只有总结出规律,才能用循环实现。

不难发现,左上角到右下角对角线上元素的行号等于列号。那么,左下角到右上角对角线上元素的行号和列号有什么规律呢?在总结时,不要凭空去想,要学会从具体到抽象。分析此类问题时,不妨给出一些具体的例子,就不难发现规律了。这里列出左下角到右上角对角线上元素的行号i和列号j,见表5-4。

步骤描述如下。

1)定义整型数组a(10,10)。

2)初始化i值为1。

3)判断i,如果i<=10,则向下执行;否则执行第9)步。

4)初始化j值为1。

5)判断j,如果j小于等于10,则向下执行;否则执行第8)步。

6)如果i=j或者i+j=11,则a(i,j)=1,然后继续向下执行。

7)j增1,返回第5)步。

8)i增1,返回第3)步。

9)用两重循环输出整个数组。

表5-4 左下角到右上角对角线上元素i,j对应关系

978-7-111-49659-5-Chapter05-71.jpg

978-7-111-49659-5-Chapter05-72.jpg实现

完整代码如下。

978-7-111-49659-5-Chapter05-73.jpg

运行结果如图5-12所示。

通过i,j的关系不难看出,j的值可以由i值来确定。左上角到右下角对角线上元素的行号与列号相等,也就是j=i;而右上角到左下角对角线上元素的行号与列号之间关系为:j=11−i。所以第i行要设置为1的两个元素为a(i,i)和a(i,11−i)。由此可见,可以把j循环去掉,并且也不需要If语句进行判断,赋值操作改用一重循环实现,这样可以减少程序的循环次数,提高效率。

978-7-111-49659-5-Chapter05-74.jpg

图5-12 设置对角线元素

修改后代码如下。

978-7-111-49659-5-Chapter05-75.jpg