ACM实习报告之蛇形矩阵

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即调用fm)函数,再一步步构造蛇形矩阵和输出蛇形矩阵。

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

» 输出:输入的数值超出范围!

猜你喜欢

转载自blog.csdn.net/attack_5/article/details/80295718
今日推荐