1.5【问题描述】
蛇形矩阵是由1开始的自然数依次排列成的一个矩阵上三角形。
2.需求分析
本演示程序用VC++6.0编写,完成蛇形矩阵的生成。
【输入】 本题有多组数据,每组数据由一个正整数N组成。(N不大于100)
【输出】 对于每一组数据,输出一个N行的蛇形矩阵。两组输出之间不要额外的空行。矩阵三角中同一行的数字用一个空格分开。行尾不要多余的空格。
【输入范例】 5
【输出范例】 1 3 6 10 15
2 5 9 14
4 8 13
7 12
11
3.概要设计
1)为了实现上述程序功能,需要定义函数以及在函数中定义二维数组来输入蛇形矩阵:
void f(int n)
{
int s[100][100];
2)本程序包含2个函数:
① 主函数main()
② 构造和输入蛇形矩阵的函数f(int n)
各函数间关系如下:
main() f(int n)
4.详细设计
实现概要设计中定义的所有的数据类型,输入的数据为整型int。
#include<stdio.h>
void f(int n)
{
int s[100][100];//数组s[][]是为了输出为矩阵上三角
int i,j,m,k=1;
for(m=0;m<n;m++)
for(i=m;i>=0;i--)//利用双重循环来构造蛇形矩阵以及赋值
{
j=m-i;
s[i][j]=k;
k++;
} //构造完成蛇形矩阵
for(i=0;i<n;i++){
for(j=0;j<n-i;j++){
printf("%d ",s[i][j]);} //利用双重循环输出蛇形矩阵
printf("\n");
}
}
void main()
{
int m,i=0;
int s[100];
for(i=0;i<100;i++){
scanf("%d/n",&s[i]); //s[i]为矩阵的行数(列数也是一样的)
m=s[i];
if(m>100) //根据题目要求的范围
printf("输入的数值超出范围!");
else
f(m);
}
}
5.调试分析
#include<stdio.h>
void f(int n)
{
int s[100][100];
int i,j,m,k=1;
for(m=0;m<n;m++)
for(i=m;i>=0;i--)
{
j=m-i;
s[i][j]=k;
k++;
} //时间复杂度T(n)=O(n^2),空间复杂度S(n)=O(n^2)
for(i=0;i<n;i++){
for(j=0;j<n-i;j++){
printf("%d ",s[i][j]);}
printf("\n"); //时间复杂度T(n)=O(n^2)
}
}
void main()
{
int m,i=0;
int s[100];
for(i=0;i<100;i++){
scanf("%d/n",&s[i]);
m=s[i];
if(m>100)
printf("输入的数值超出范围!");
else
f(m);
} //时间复杂度T(n)=O(1),空间复杂S(n)=O(1)
}
调试时,先进入main()函数,根据语句执行到输入语句,输入一个正整数N(不大于100),执行判断语句,根据判断结果,要是1即输出“输入的数值超出范围!”,要是0即调用f(m)函数,再一步步构造蛇形矩阵和输出蛇形矩阵。
6.使用说明
程序名为LinkList.exe,运行环境为DOS。程序执行后显示
第一行输入一个N不大于100的正整数,再点击换行就输出相应结果。
7.测试结果
1) 建立函数:
» 输入:5
» 输出:1 3 6 10 15
2 5 9 14
4 8 13
7 12
11
» 输入:-9
» 输出:输入的数值超出范围!