C语言课程设计矩阵的构造与打印.docx
《C语言课程设计矩阵的构造与打印.docx》由会员分享,可在线阅读,更多相关《C语言课程设计矩阵的构造与打印.docx(14页珍藏版)》请在冰豆网上搜索。
C语言课程设计矩阵的构造与打印
《C语言》
课程设计报告
标题:
矩阵的构造与打印
学号:
姓名:
同组人员:
年级专业:
09电子信息工程
指导老师:
完成日期:
2010/6/24
目录
一、选题思想
二、课题要求
三、课题分析与设计
四、具体分工
五、源程序代码与调试
六、流程图
七、总结
八、参考文献
九、评定意见
一、选题思想
通过对线性代数与C语言课程相关知识的学习,产生了用计算机知识方便快捷地去处理简单数据结构的想法,并进行了相关的设计构想。
通过本课题的锻炼,增强对所学知识的理解及相关知识贯通的运用,提升了自我学习实践的兴趣与能力!
二、课题要求
(1)矩阵为n阶方阵,n由键盘输入;
(2)可在螺旋方阵和蛇形方阵中选择(如下图所示)。
三、课题分析与设计
本程序的设计要充分运用所学知识函数调用,二维数组,内存的动态分配,指针等进行设计,问题的关键在于如何进行矩阵的“转向”在螺旋矩阵设计中通过记录(计数器)控制每行的数的数目和转向,实现行列互换,“层层推进”,根据n的奇偶定出最后一位数(即n!
)的具体位置,从而实现数的螺旋循环。
在蛇形矩阵中通过行列坐标之和的递增规律,以对角线元素行列坐标之和为界,通过坐标和的奇偶互换行列坐标从而实现“转向”。
通过判断数n与对角线元素坐标和的大小,跨过“对角线”,进行类似操作即可。
四、具体分工
在程序的设计过程中进行了明确的分工与合作,第一部分螺旋矩阵的设计由王一朝完成,第二部分蛇形矩阵的设计由王艳辉完成。
五、源程序代码与调试
1.源程序代码
#include
#include
#include
#include
voidmain()
{
inta,n,*w,p,g,j;
int*wyz(intn);
intwyh(intn);
intmenu();
j=menu();
if(j==1)exit(0);
else
{clrscr();
printf("pleasechoose1or2:
1forspialmatrix,2forserpentmatrix:
");
scanf("%d",&a);
if(a==1)
{printf("pleaseentern");
scanf("%d",&n);
w=wyz(n);
for(p=1,g=0;g<=n*n-1;g++,p++)
{
printf("%4d",w[g]);
if(p%n==0){printf("\n");printf("\n");printf("\n");}}}
else
wyh(n);
}
}
intmenu()
{
inti;
clrscr();
textcolor(85);
gotoxy(9,10);
cprintf("welcometousingoursoftware\n");
gotoxy(9,11);
cprintf("**************Menu************\n");
gotoxy(9,12);
cprintf("*1.use*\n");
gotoxy(9,13);
cprintf("*2.no*\n");
gotoxy(9,14);
cprintf("******************************\n");
gotoxy(9,15);
cprintf("PleaseEnterYourChoice<1~2>:
");
scanf("%d",&i);
return(i);
}
int*wyz(intn)
{
int*str,i,j,b,k,q,m,z,r,p,g,sum,max,h;
clrscr();
sum=0;
max=n*n;
str=(int*)malloc(max+max);
for(q=0,j=1,b=0,z=i=n-1,g=0;sum{
for(m=q;m<=i-b;m++,j++)
str[m+b*n]=j;
for(m=m-1,r=1+b;r<=n-1-b;j++,r++)
str[r*n+m]=j;
for(r=r-1,m=m-1;m>=b;j++,m--)
str[r*n+m]=j;
for(m=m+1,r=r-1;r>=b+1;j++,r--)
str[r*n+m]=j;
g=4*(z+1)-4;
sum=sum+g;
}
if(n%2!
=0)str[max/2]=n*n;
return(str);
}
intwyh(intn)
{
intj,k,c,m=1,x,y;
inta[100][100];
printf("Inputn:
");
do
{
scanf("%d",&n);
}while(n<1||n>10);
printf("\n");
for(c=0;c<=(n-1)+(n-1);c++)
{
if(c<=n-1)
for(k=0;k<=c;k++)
{
for(j=0;j<=c;j++)
{
if(k+j==c)
{
if(c%2==0)
a[k][j]=m++;
else
a[j][k]=m++;
}
}
}
else
for(k=0;k<=n-1;k++)
{
for(j=0;j<=n-1;j++)
{
if(k+j==c)
{
if(c%2==0)
a[k][j]=m++;
else
a[j][k]=m++;
}
}
}
}
clrscr();
for(k=0;k{
for(j=0;jprintf("%4d",a[k][j]);
printf("\n");
printf("\n");
printf("\n");
}
}
2.调试
在运行程序后,我们就进入了选择界面。
作为使用者,他可以考虑是否使用我们的程序。
运行结果如下:
当决定你的选择后,可按上述提示键入1或2.键入以后出现下面的界面。
在这个界面下,可以考虑是使用蛇形矩阵还是使用螺旋形矩阵?
。
当选择1(即螺旋形矩阵)得到的结果如下
这是可以选择输入的矩阵的阶数如果输入6,运行结果如下:
如果在这次使用中不用螺旋形矩阵可以选择使用蛇形矩阵,运行结果如下:
同样此时可以键入数字,例如5:
六、流程图
蛇形矩阵伪代码如下:
Inputthenumbern
n取值范围:
1m=1
三重循环
在c<=(n-1)中
c=0,k=0,j=0
k+j=0+0=c
c能被2整除
a[0][0]=m=1
c=1,k=0,j循环
j=0,不满足k+j=c,pass
j=1,满足k+j=c
c=1不能被2整除,交换数组行列坐标
a[1][0]=m++=2
c=1,k=1,j=0满足k+j=c
c=1不能被2整除,交换数组行列坐标
a[0][1]=m++=3
c=2,k=0时,j循环
j=0,1时,不满足k+j=c,pass
j=2,满足k+j=c
c能被2整除
a[0][2]=m++=4
k=1时,j=0不满足k+j=c,pass
j=1时,满足k+j=c
a[1][1]=m++=5
k=2时,j=0满足k+j=c
a[2][0]=m++=6
、
、
、
当c>(n-1)时
c=n,k=0,j循环
j=0,不满足k+j=c,pass
j=1,不满足k+j=c,pass
、
、
、
j=n-1,满足k+j=c
判断c能否被2整除,确定交不交换行列坐标
a[k][j]=m++或a[j][k]=m++
k=2,j循环(同上)
、
、
、
k=n-1,j=0,满足k+j=c
判断c能否被2整除,确定交不交换行列坐标
a[k][j]=m++或a[j][k]=m++
c=n+1,k=0,j循环(同上)
、
、
、
c=2n-2,k=0,j循环(同上)
k=1,2,、、、n-2,j循环(同上)
k=n-1,j=0,1,2、、、n-2判断k+j=c是否成立,进行循环
j=n-1,满足k+j=c,且c能被2整除
a[n-1][n-1]=m++=n!
七、总结
通过此次课题的设计,使我们对所学知识特别是数组、指针、函数的调用技巧等有了更加充分的认识与理解,在设计调试过程过程中,也得到了指导老师的许多有益意见与指导,使自己受益匪浅。
设计中充分发挥自己在不同方面的优势进行了分工合作,在相互沟通与交流的努力下成功完成了本次课程的设计工作。
八、参考文献
1.谭浩强,C程序设计(第三版)。
北京:
清华大学出版社,2005年
2.赵永哲,李雄飞,戴秀英编著,《C语言程序设计》,科学出版社,2003年
3.夏宽理,赵子正编著,《C语言程序设计》,中国铁道出版社,2006年
4.谭浩强编著,《C程序设计》,清华大学出版社,1991年
5.GaryJ.Bronson,AFirstBookofANSIC(FourthEdition),PublishingHouseofElectronicsIndustry,2006.
6.AlKelley,IraPohl,ABookonC:
ProgramminginC(FourthEdition),ChinaMachinePress,2004.
7.BrianW.Kernighan,DennisM.Ritchie,TheCProgrammingLanguage,ChinaMachinePress,2006.
8.KochanSG著。
ProgramminginANSIC。
HagdenBooksIndianapolis:
Indiana,U.S.A,1994
9.BeitelHM,DeitelPJ.CHowtoprogram.secondEdition.蒋才鹏等译。
C程序设计教程。
北京:
机械工业出版社,2000
九、评定意见
指导教师评语
主要内容包括:
设计报告内容的完整性和完成情况、报告格式的规范性、通过课程设计取得的收获等。
成绩:
签名:
年 月 日