5.5.2 对角线问题
2025年09月26日
5.5.2 对角线问题
【例5-11】定义一个10×10矩阵,并将矩阵两条对角线元素均设置为1,其他元素均为0,然后输出到窗体上。
做什么
1)将矩阵两条对角线元素均设置为1。
2)输出矩阵。
所以窗体上只需要一个按钮即可实现数据的输入和输出。
怎么做
分析:定义整型数组,因为所有元素系统默认为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对应关系
实现
完整代码如下。
运行结果如图5-12所示。
通过i,j的关系不难看出,j的值可以由i值来确定。左上角到右下角对角线上元素的行号与列号相等,也就是j=i;而右上角到左下角对角线上元素的行号与列号之间关系为:j=11−i。所以第i行要设置为1的两个元素为a(i,i)和a(i,11−i)。由此可见,可以把j循环去掉,并且也不需要If语句进行判断,赋值操作改用一重循环实现,这样可以减少程序的循环次数,提高效率。
图5-12 设置对角线元素
修改后代码如下。