C语言课程设计指导书.docx
《C语言课程设计指导书.docx》由会员分享,可在线阅读,更多相关《C语言课程设计指导书.docx(20页珍藏版)》请在冰豆网上搜索。
C语言课程设计指导书
附件1报告封面
课程设计报告
课程设计名称:
C语言程序设计
指导教师:
学生:
学号:
学院:
完成时间:
2011/9/27
目录
1需求分析1
2总体设计2
2.12
2.22
3详细设计3
4调试与测试4
5测试结果5
6附录6
1需求分析
(描述问题。
简述课题要解决的问题是什么,有什么要求和限制条件。
)
1课程设计目标
使学生综合使用所学过的C语言程序设计知识,掌握结构化程序设计的基本思路和方法,利用所学的基本知识和技能,发挥自学能力和查找资料的能力,解决稍微复杂的结构化程序设计问题,加深对所学知识的理解与掌握,增强学生利用自己所学知识解决实际问题的能力,为以后的程序开发打下基础。
课程设计的目的和要求:
1.使学生巩固和加强《C语言程序设计》课程的理论知识。
2.使学生掌握C语言的基本概念、语法、语义和数据类型的使用特点。
3.使学生掌握C语言程序设计的方法及编程技巧,能正确使用C语言编写程序。
4.进一步理解和运用结构化程设计的思想和方法;学会利用流程图或N-S图表示算法。
5.使学生掌握调试程序的基本方法及上机操作方法。
6.掌握书写程设计开发文档的能力,使学生学会撰写课程设计总结报告。
课程设计的思想和方法还可以作为学生做毕业论文时的参考资料。
7.通过查阅手册和文献资料,培养学生独立分析问题和解决问题的能力。
为学生做毕业设计打好基础。
8.初步掌握开发一个小型实用系统的基本方法:
结合实际应用的要求,使课程设计既覆盖知识点,又接近工程实际需要。
通过激发学习兴趣,调动学生主动学习的积极性,并引导他们根据实际编程要求,训练自己实际分析问题的能力及编程能力,并养成良好的编程习惯。
9.培养学生的创新能力和创新思维。
学生可以根据指导书和相关文献上的参考算法,自己设计出相应的应用程序。
10.培养学生良好的程序设计风格。
在实际编程中,为了提高编程质量,对空行、空格和注释均有要求。
学生在课程设计书写代码时,应该严格按要求处理,以便建立良好的程序设计风格。
2课程设计内容
2.1设计环境
1、硬件:
PC机。
2、软件:
操作系统为Win7或Windowsxp,设计语言为VisualC++6.0或TurboC2.0。
2.2基本要求
1.课程设计采取每两人一组,体现团队合作精神,要求选定一人为组长。
2.可以选择老师提供的参考选题(选题方法另行公布),也可以自选,如果自选,需要将自选题目的详细内容以及实现要求提供给老师,老师批准后方可采用(和网上雷同的一律不批准)。
3.要求有欢迎界面、菜单、数据使用数组、结构体、链表等均可,键盘操作或鼠标操作均可;可以加以其他功能或修饰,使程序更加完善、合理;
4.模块化程序设计:
要求在设计的过程中,按功能定义函数或书写多个文件,进行模块化设计,各个功能模块用函数的形式来实现;
5.学生所选课题必须上机通过,并获得满意的结果;
6.设计上交内容:
设计报告每组一份(按附件1的格式书写);源程序文件;
7.流程图要采用N-S流程图;
10.源程序书写风格:
锯齿型书写格式。
2.3设计过程
1.根据问题描述,设计数据存储方式;
2.分析系统功能,划分功能模块,确定各模块函数名称;
3.主程序算法设计和各模块算法设计;
4.编程实现;
5.调试和测试;
6.完成设计文档和课程设计说明书。
2.4、课程设计报告格式及要求
一、封面(见附件1);
二、目录;
三、需求分析;
描述问题。
简述课题要解决的问题是什么,有什么要求和限制条件。
四、总体设计(程序设计总流程图及各模块划分);
五、详细设计(各模块功能说明,如函数功能、入口及出口参数说明,函数调用关系描述等);
六、调试与测试:
调试方法,测试结果的分析与讨论,测试过程中遇到的主要问题及采取的解决措施;
七、测试结果,用几组测试数据进行测试算法设计的正确性,要包括测试数据和运行结果。
八、附录。
源程序清单和结果:
源程序要加注释。
2总体设计
(程序设计总流程图及各模块划分)
3详细设计
(各模块功能说明,如函数功能、入口及出口参数说明,函数调用关系描述等)
魔方阵NS流程图:
最大值子函数流程图
输入:
c,k,i,l,max
输出:
======================
max=magic[0][0]
3.3排序子函数流程图:
素数子函数流程图:
完数子函数流程图:
水仙花数子函数流程图:
4调试与测试
(调试方法,测试结果的分析与讨论,测试过程中遇到的主要问题及采取的解决措施)
这一个问题主要是在c(56)中:
fprintf("%d\t",magic[i][c]);没有定义magic[i][c]的途径,为解决问题,需将fprintf("%d\t",magic[i][c])改为fprintf(fp,"%d\t",magic[i][c]);
在一个简单的程序中,测试的错误反而会很多,在很多情况下,很多错误的问题大多数因为我们的粗心所导致,往往会在一些简单的细节上出了差错,从而导致程序运行不了.在这一点上,我需要培养自己的能力,不但在平时的训练中,还是在考试中,我都要养成良好的习惯,却不可以大意,不可以小看.
另外一种情况就是在一个较为复杂的程序中,测试出现错误是正常的,复杂的程序多多少少会因为自己的能力有限而导致测试出现错误,导致程序运行不了.现在解决的方法有:
第一:
和老师讨论一下,多吸收老师们的经验,多学习老师们的解决方法。
第二:
网络的发展为我们提供了学习的平台,所以网络也是我们学习的好地方,但也不忘网络的双重性。
5测试结果
(用几组测试数据进行测试算法设计的正确性,要包括测试数据和运行结果)
输入一位奇数,例如:
9.则出现魔方阵:
选择功能1,将出现魔方阵地最大值:
选择功能2,将出现排序顺序:
选择功能3,将出现魔方阵中的所有素数:
选择功能4,将出现魔方阵地所以完数:
选择功能5,将出现魔方阵的所有水仙花数:
操作完毕!
6附录
(源程序清单和结果:
源程序要加注释)
#include
voiddaxiao(intmagic[][100],intn);//最大值函数声明
voidpaixu(intmagic[][100],intn);//行数排序函数声明
voidsushu(intmagic[][100],intn);//素数函数声明
voidwangshu(intmagic[][100],intn);//完数函数声明
voidshuixianhuashu(intmagic[][100],intn);//水仙花数函数声明
voidmain()
{
FILE*fp;
inti=0,n,nn,c,s,v,x=1,t=1;
intmagic[100][100];
char*filename="magic.txt";
fp=(filename,"w+");//生成文件
if((fp=fopen("magic.txt","w+"))==NULL)
{
printf("cannotopenthefile\n");
exit(0);
}
while(x)
{
printf("请输入一个奇数:
\n");//生成魔方阵
scanf("%d",&n);
if((n%2)==0)
printf("数据不存在,重新输入\n");
else
{
c=(n-1)/2;
s=1;
nn=n*n;
while(s<=nn)
{
magic[i][c]=s;
s++;
if((s-1)%n==0)
i++;
else
{
i--;
c++;
}
if(i<0)
i=n-1;
elseif(i==n)
i=0;
if(c<0)
c=n-1;
elseif(c>=n)
c=0;
}
for(i=0;i{
for(c=0;c{
fprintf(fp,"%d\t",magic[i][c]);
printf("%d\t",magic[i][c]);
}
printf("\n");
}
printf("\n\n");
x--;
}
}
while(t)//显示菜单
{
printf("=================================================\n");
printf("1求魔法阵的最大值以及所在行列\n");
printf("2求各行的排序\n");
printf("3求素数\n");
printf("4求完数\n");
printf("5求水仙花数\n");
printf("6退出\n");
printf("==================================================\n");
printf("请选择功能:
\n\n\n");
scanf("%d",&v);
if(v>=1&&v<=6)
switch(v)//子函数调用
{
case1:
daxiao(magic,n);break;
case2:
paixu(magic,n);break;
case3:
sushu(magic,n);break;
case4:
wangshu(magic,n);break;
case5:
shuixianhuashu(magic,n);break;
case6:
t--;
}
else
{
printf("数据输入错误\n");
}
}
}
voiddaxiao(intmagic[][100],intn)//最大值子函数
{
intc,k,i,l,max;
printf("===================\n");
max=magic[0][0];
for(i=0;i{
for(c=0;c{
if(magic[i][c]>max)
{
max=magic[i][c];
k=i;
l=c;
}
}
}
printf("最大值=%d\n行数=%d\n列数数=%d\n",max,k+1,l+1);
printf("======================\n");
printf("\n\n");
}
voidpaixu(intmagic[][100],intn)//排序子函数
{
intj,x,temp,b;
printf("\n\n");
printf("请输入需要排序的行数:
\t");
scanf("%d",&b);
{
printf("\n\n");
printf("=================================================\n");
for(j=0;jfor(x=0;xif(magic[b-1][x]>magic[b-1][x+1])
{
temp=magic[b-1][x];
magic[b-1][x]=magic[b-1][x+1];
magic[b-1][x+1]=temp;
}
}
for(j=0;j{
printf("%d\t",magic[b-1][j]);
}
printf("\n===============================================\n\n\n");
}
voidsushu(intmagic[][100],intn)//素数子函数
{
inti,j,m;
printf("\n\n\n====================\n");
printf("此魔方阵中的素数有:
\n");
for(j=0;j{
for(i=0;i{
for(m=2;m<=magic[j][i];m++)
{
if(mif(magic[j][i]%m==0)break;
if(magic[j][i]==m)
printf("%5d",magic[j][i]);
}
}
}
printf("====================\n\n\n");
}
voidwangshu(intmagic[][100],intn)//完数子函数
{
intj,sum,h,m;
printf("\n\n\n");
printf("======================\n");
for(m=0;m{
for(h=0;h{
sum=0;
for(j=1;j<=magic[m][h]/2;j++)
if(magic[m][h]%j==0)
sum+=j;
if(sum==magic[m][h])
{
printf("%d\t的因子是:
",magic[m][h]);
for(j=1;j<=magic[m][h]/2;j++)
if(magic[m][h]%j==0)
printf("%d\t",j);
printf("\n");
}
}
}
printf("=================\n\n\n");
}
voidshuixianhuashu(intmagic[][100],intn)//水仙花数子函数
{
inti,k,s,l,m,sum=0;
printf("\n\n\n================================================\n");
if(n<13)
printf("此魔方阵没有水仙花数");
else
printf("水仙花数有:
\t");
for(l=0;l{
for(m=0;m{
i=magic[l][m];
k=i;
do
{
s=k%10;
k=k/10;
sum=sum+s*s*s;
}
while(k>0);
if((i==sum)&&(i!
=1))
printf("%d\t",magic[l][m]);
sum=0;
}
}
printf("\n");
printf("=============================================\n\n\n");
}