1. 实验题目
蛇形矩阵是由1开始的自然数依次排列成的一个矩阵上三角形。
【输入】 本题有多组数据,每组数据由一个正整数N组成。(N不大于100)
【输出】 对于每一组数据,输出一个N行的蛇形矩阵。两组输出之间不要额外的空行。矩阵三角中同一行的数字用一个空格分开。行尾不要多余的空格。
【输入范例】 5
【输出范例】 1 3 6 10 15 2 5 9 14 4 8 13 7 12 11
2. 需求分析
1.该程序编写与运行环境VC++6.0;
2.输入的形式和输入值的范围:输入要求的是整数,范围为[0,100]。输出要求的也是整数,并且(对于每一组数据,输出一个N行的蛇形矩阵。两组输出之间不要额外的空行。矩阵三角中同一行的数字用一个空格分开。行尾不要多余的空格)
3.程序所能达到的功能:
由1开始的自然数依次排列成的一个矩阵上三角形。
4.测试数据:
输入数据有:
5
输出是:
1 3 6 10 15
2 5 9 14
4 8 13
7 12
11
3.概要设计
要实现以上程序需要定义int数据类型以及整型数组,用for循环和递归算法来实现蛇形矩阵,并且只用一个主函数来实现;
4.详细设计
1.输入数据类型与主函数内数据定义与初始化
#define N 100
intn,i,j,k;
inta[N][N];
2. 输入语句与输出语句的实现
scanf("%d",&n);
printf("%d\t",a[i][j]);
3.for循环的实现
for(i=0;i<n;i++)
for(j=0;j<n-i;j++)
{
k=i+j+1;
a[i][j]=k*(k-1)/2+j+1;
}
for(i=0;i<n;i++)
{
for(j=0;j<n-i;j++)
{
printf("%d\t",a[i][j]);
}
printf("\n");
}
5.调试分析
1:for(i=0;i<n;i++)
for(j=0;j<n-i;j++)
{
k=i+j+1;
a[i][j]=k*(k-1)/2+j+1;
}该程序段的时间复杂度为O(n^2);空间复杂度为O(n^2);
2:for(i=0;i<n;i++)
{
for(j=0;j<n-i;j++)
{
printf("%d\t",a[i][j]);
}
printf("\n");
}该程序段的时间复杂度为O(n^2);空间复杂度为O(1);
3:以上程序在调试时采用了单步跟踪法,可以逐步跟踪程序,首先先初始化数据,再进入1,完成1,再进入2,并输出结果;
6.使用说明
#include <stdio.h>
#define N 100
void main()
{
int n,i,j,k;
int a[N][N];
scanf("%d",&n);
1: for(i=0;i<n;i++)
for(j=0;j<n-i;j++)
{
k=i+j+1;
a[i][j]=k*(k-1)/2+j+1;
}
2: for(i=0;i<n;i++)
{
for(j=0;j<n-i;j++)
{
printf("%d\t",a[i][j]);
}
printf("\n");
}
}
以上程序在VC++6.0环境下编写与运行的,该程序采用c语言编程,该程序的输入输出运用的都是整型,并且用for循环和数组来实现,当输入n(n大于0)的数程序开始执行1号for循环,知道i=n结束1号for循环。然后执行2号for循环,逐一把数打印出来当i=n时结束程序;
7.测试结果