《c语言课程设计by琥珀》由会员分享,可在线阅读,更多相关《c语言课程设计by琥珀(23页珍藏版)》请在金锄头文库上搜索。
1、C语言程序设计课程设计报告C语言程序设计课程设计评语:考勤(10)纪律(10)过程(40)设计报告(30)答辩(10)总成绩(100)自动控制控1203班专 业: 魏万泊班 级: 201209431姓 名: 汤旻安学 号: 指导教师: 兰州交通大学自动化与电气工程学院2013年07月19日21 引言1.1 设计目的通过该课程设计来深化对C程序设计的学习,深入了解结构循环体,数组,指针以及动态分布内存等技术,熟练掌握对C程序的调试,培养自身的编程习惯,初步掌握程序设计的算法,熟练Word的用法。进一步培养学生结构化程序设计的思想。1.2 设计要求 问题分析及解决方案框架确定:充分地分析和理解问题
2、本身,弄清要求做什么。在确定解决方案框架过程中,综合考虑系统功能,考虑怎样使系统结构清晰、合理、简单和易于调试。最后确定每个过程和函数的简单功能,以及过程(或函数)之间的调用关系。 详细设计和编码:确定算法的主要流程,在此基础上进行代码设计。 上机前程序静态检查:上机前对程序进行静态检查可有效提高调试效率,减少上机调试程序时的无谓错误。 上机调试程序:在运行环境中执行编写好的程序代码,以便进一步检查程序设计中出现的错误。1.3 设计方法 拟出设计思路 表示出每个函数或过程的作用画出流程图 写出源程序 运行程序2 基础题2.1 题目要求 打印出所有的“水仙花数”,所谓“水仙花数”是指一个3位数,
3、其各位数字立方和等于该数本身。例如,153是一水仙花数,因为:153=13+53+33 。2.2 设计思路本题利用一个for循环语句,求出100到1000以内的三位数,再用if语句找出符合各个位数的立方和等于该数本身的书,即输出水仙花数。3开始int g,s,bi=b*b*b+s*s*s+g*g*g是是否是图2.1基础题的流程图i=100b=i/100, s=i/10-b*10 ,g=i-b*100-s*10i1000输出水仙花数printf(“n”)结束i+否2.3 画出流程2.4 编写源程序#include /主函数int main() /定义主函数 /主函数体开始int g,s,b,i;
4、 /定义g,s,b,i为整型变量 for(i=100;i1000;i+) /控制循环次数,共循环999次 b=i/100; /表示百位数字 s=i/10-b*10; /表示十位数字 g=i-b*100-s*10; /表示个位数字 if(i=b*b*b+s*s*s+g*g*g) /判断各个数位数字的立方和为该数本身 printf(水仙花数是:%-6d,i); /执行循环体,输出水仙花数 printf(n); /换行 return 0; /返回函数值为0 /主函数结束画出流程图2.5 运行结果执行以上程序,所得的结果如图2.2所示。图2.2基础题的运行结果3 改错3.1 改错题目下列给定的程序中,
5、函数fun的功能是:为一个偶数寻找两个素数,这两个素数之和等于该偶数,并将这两个素数通过形参指针传回主函数。请改正函数fun中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!源程序#include #include void fun(int a, int *b, int *c) int i,j,d,y; for (i=3;i=a/2;i=i+2) y=0; for (j=2;j=sqrt(double)i );j+) if (i%j=0) y=0; if (y=1) d=i-a; for (j=2;j=sqrt(double)d );j+) if
6、 (d%j=0) y=0; if (y=1) *b=i; *c=d; void main() int a,b,c; do printf(nInput a: ); scanf(%d,&a); while(a%2); fun(a,&b,&c); printf(nn%d=%d+%dn,a,b,c);3.2 错误分析 在第九行中y=0逻辑判断为假,操作停止,应改为y=0逻辑判断为真,操作继续执行。 另一个素数因是d=a-i.如果是d=i-a则取得是他的相反数,在执行次过程中计算机输出取它的反码。改正后的源程序#include /编译预处理指令 #include /程序中要调用求平方sqrtvoid f
7、un(int a, int *b, int *c) /对fun函数的声明 int i,j,d,y; /定义整型变量 for (i=3;i=a/2;i=i+2) /从i=3用递增的方式找到一个奇数,且这个数小于a/2 /循环体开始 y=1; /y为逻辑判断值,y=1为真,执行下列语句 for (j=2;j=sqrt(double)i );j+) /判别i是否为素数 if (i%j=0) y=0; /如果i不为素数,y=0逻辑 判断为假 if (y=1) /逻辑判断值y=1则i为素 数 /嵌套内循环 d=a-i; /找偶数的另一个数 for (j=2;j=sqrt(double)d );j+) /
8、判断另一数d是否为素数 if (d%j=0) y=0; /如果d不为素数,逻辑判 断值y=0为假4 if (y=1) /如果d为素数,y=1 *b=i; *c=d; /将两目标素数i,d的值分 别赋给指针*b,*c void main() /定义主函数 int a,b,c; /定义整型变量 do printf(nInput a: ); /向用户提示,输入一个 a值 scanf(%d,&a); /输入a值 while(a%2); fun(a,&b,&c)printf(nn%d=%d+%dn,a,b,c); / 输出a=b+c3.3 运行结果 执行以上程序,所得结果如图3.1所示图3.1改错题的运
9、行结果3.4 流程图main函数流程图3.2,fun函数流程图3.3是开始int a,b,ca%2否uprintf(“n input a”)fun(a,&b,&c)结束图3.2 main函数流程图6开始int i,j,d,yi=a/2j=sqrt(double)i是i=3y=1j=2y=0j+d=a-ij=2j=sqrt(double)d*b=i,*c=d输出a=b+c结束j+y=0否是否图3.3 fun函数流程图y=1i+是否4 综合题4.1题目 飞机订票管理系统 4.2问题描述假设某航空公司只有M架N个座位的飞机,每架飞机每天飞行一趟。通过该系统来实现机票的订购问题。4.3功能要求一本系统采用一个包含N个数据的结构体数组,每个数据的结构应当包括:起飞地、目的地 航班号、座次号码、座次订出与否标记、订座者的姓名和订座者的身份证号码。 本系统显示这样的菜单 输入航班信息 输出航班信息 查找航班信息 a.显示空座的数量 b.显示空座的信息 c.显示已订座的信息 d.起飞时间