学号:学号:学号:学号:《计算机软件技术基础》大作业题目蛇形矩阵学院电子信息与自动化学院专业测控技术与仪器班级姓名指导教师2011年5月11日任务书学生姓名:专业班级:题目:蛇形矩阵初始条件:理论:学习了《计算机软件技术基础》课程,掌握了基本的数据结构和常用的算法实践:计算机技术系实验室提供计算机及软件开发环境。要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)1、系统应具备的功能:(1)由1开始的自然数依次排列成的一个矩阵上三角形;(2)输入文件由一行或多行构成,每行由一个正整数N组成,(N不大于100)。输入文件的最后一行是‘#’表示文件结束。(3)对于每一组数据,输出一个N行的蛇形矩阵。两组输出之间不要额外的空行。矩阵三角中同一行的数字用一个空格分开。行尾不要多余的空格。2、数据结构设计;3、主要算法设计;4、编程及上机实现;5、撰写课程设计报告,包括:(1)设计题目;(2)摘要和关键字(中文和英文);(3)正文,包括引言、需求分析、数据结构设计、算法设计、程序实现及测试、不足之处、设计体会等;(4)结束语;(5)参考文献。时间安排:目录摘要和关键字-----------------------------------------------------------------------11引言---------------------------------------------------------------------------------22需求分析---------------------------------------------------------------------------23数据结构设计--------------------------------------------------------------------34算法设计----------------------------------------------------------------------------55程序实现及测试------------------------------------------------------------------76不足之处----------------------------------------------------------------------------97设计体会----------------------------------------------------------------------------98结束语-------------------------------------------------------------------------------109参考文献-----------------------------------------------------------------------------101蛇形矩阵摘要:蛇形矩阵是矩阵的一种,常被应用在编程题目与数学数列中。它由1开始的自然数依次排列成的一个矩阵上三角形,输入文件由一行或多行构成,每行由一个正整数N组成(N不大于100)。输入文件的最后一行是‘#’表示文件结束。对于每一组数据,输出一个N行的蛇形矩阵。两组输出之间不要额外的空行,矩阵三角中同一行的数字用一个空格分开,行尾不要多余的空格。在程序设计时需要运用到while循环行数,还有函数调用,以及要运用数学公式来实现蛇形矩阵算法的设计。Abstract:Asnake-likematrixisamatrix,oftenusedinprogrammingthenumberofcolumnsandmathematicstopics.Itconsistsofasequenceofnaturalnumbersarrangedinthebeginningofatriangularmatrix,inputfileconsistsofoneormorelinesform,eachlineformedbyapositiveintegerN(Nisnotgreaterthan100).Thelastlineistheinputfile'#'indicatesendoffile.Foreachsetofdata,aserpentinelineoftheoutputmatrixN.Betweenthetwogroupsdonotoutputextrablankline,Triangularmatrixnumbersinthesamelineseparatedbyaspace,trailingextraspacesdonot.Needtousetheprogramdesignedtoloopwhilethenumberofrows,therearefunctioncalls,andtheneedtousemathematicalformulastoachievethedesignofsnake-likematrixalgorithm.2关键字:蛇形矩阵while循环函数调用Keywords:Snake-likematrixWhileloopFunctioncall1.引言在计算机科学中,出现了以矩阵中的蛇形矩阵。常常被应用于计算机编程题目和数学数列之中。有时需要运用数组来实现,有时也可以运用数学公式来实现它的算法。While语句是用来实现“当型”结构。它的一般形式为:“while(表达式)循环体语句;”其执行过程为:先判断表达式的值,为真(非0)则执行语句,然后再判断。如果表达式为假(值为0)则跳过循环体而直接执行while语句的下一个语句。因此循环体可能一次也没执行。当初始条件为假时,是不会执行循环的。函数调用几乎是所用程序据用的普遍现象。在函数调用中,实参可以是常量、变量和表达式等具有确切值得各种形式,形参必须是变量,但实参必须在数量、类型与形参严格对应。根据实参与形参数据传递方式的不同,函数调用可以分为传值调用、传地址调用和引用调用三种方式。它还包括了函数的嵌套调用和递归调用。嵌套调用是指函数A调用了函数B,而函数B有调用了函数C,这样就形成了函数的嵌套调用。C++语言允许函数自身调用自身,即为递归调用。2.需求分析在本程序中采用了数学公式来实现蛇形矩阵它的算法,并利用循环函数来实现小于100行以内的蛇形矩阵,同时也利用函数的调用,本程序是运用的是嵌套调用。在运用while语句是应该注意:(1)如果循环体包括两个及以上的语3句,应该用{}括起来,构成一个复合语句,否则系统只把第一个语句当成循环体部分加以重复执行,余者作为while循环的后续语句。(2)循环体重应该包括改变循环条件的语句,否则有可能导致死循环。3.数据结构设计3.1函数的调用采用output函数调用其调用函数执行过程为:Main函数调用函数output()结束voidoutput(intn)//返回空值output(n);//调用函数output注意:C++对函数嵌套调用的层次没有限制,可以更具实际情况的需要,进行多层次的嵌套调用。递归调用包括直接递归调用和间接递归调用。括直接递归调用是指函数直接调用自身,间接递归调用是指主调函数调用了其他被用函数,但该被调函数有调用了原主调函数,从而形成了函数递归调用。其直接递归调用和间接递归调用示意图为:43.2While循环设计while循环的流程图有:第一个while循环while(currentLine=n)//当currentLine=n时,进行以下语句进行执行{intcurrentLineTmp=currentLine;//定义变量totalLine=n;//蛇形矩阵的总行数factorNum=n-currentLine+1;//每一行元素的个数factorDistance=currentLine+1;//相邻元素差值firstFactor=1;//第一行第一个元素第二个while循环while(--currentLineTmp)firstFactor+=currentLineTmp;//每一行第一个元素第三个while循环while(factorNum--)//while循环{5coutfirstFactor;//输出每一行元素firstFactor+=factorDistance;//确定下一个元素值++factorDistance;//相邻元素的差值加1}4.算法设计4.1蛇形矩阵数学公式算法:令M为表示输入的整数,1.则第n行开始的第一个数为:1+11)1(nnn2.则第n行输出的元素个数为:M+n-13.则第n行的起始间隔为:n+1其程序为:inttotalLine,currentLine,factorNum,factorDistance,firstFactor;//定义整形变量currentLine=1;//给currentLine赋值while(currentLine=n)//当currentLine=n时,进行以下语句进行执行{intcurrentLineTmp=currentLine;//定义变量totalLine=n;//蛇形矩阵的总行数factorNum=n-currentLine+1;//每一行元素的个数factorDistance=currentLine+1;//相邻元素差值firstFactor=1;//第一行第一个元素while(--currentLineTmp)6firstFactor+=currentLineTmp;//每一行第一个元素while(factorNum--)//while循环{coutfirstFactor;//输出每一行元素firstFactor+=factorDistance;//确定下一个元素值++factorDistance;//相邻元素的差值加1}coutendl;//输出该行后,然后换行++currentLine;//行数加1}4.2函数调用算法主函数中函数output()将调用voidoutput(intn)函数,在本程序中是运用了函数的嵌套调用,其主函数为:voidmain()//定义主函数{intn;//定义整形变量cout请输入一个数:endl;//输出“请输入一个数:”,然后换行cinn;//输入一个数ncout#endl;//输出“#”,然后换行output(n);//调用函数output}75.程序实现及测试/*//////////////////////////////////////////////////////////////////////////////////作者:王雪飞//学号:10807030222//////////////////////////////////////////////////////////////////////////////*/#includeiostream//预处理命令usingnamespacestd;voidoutput(intn)//返回空值{inttotalLine,currentLine,factorNum,factorDistance,firstFactor;//定义整形变量currentLine=1;//给currentLine赋值while(currentLine=n)//当currentLine=n时,进行以下语句进行执行{intcurrentLineTmp=currentLine;//定义变量totalLine=n;//蛇形矩阵的总行数factorNum=n-currentLine+1;//每一行元素的个数/*////////////////////////////////////////////////////////////////////