




已阅读5页,还剩22页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
XxxxxxC程序设计课程设计报告书课程名称:C程序设计指导老师:xx专 业:xxxxx班 级:xxx题 目:13学 号:xxx姓 名: xxxx 2010年6月 目录 前言1设计目的与要求1内容及分配2算法的基本思想2测试数据21心得体会22附录25前言C语言课程设计为学生提供了一个既动手又动脑,分组配合实践的机会,将课本上的理论知识和上机实践操作有机的结合起来,锻炼学生的发现、分析、探索、解决实际问题的能力。提高学生适应实际,实践编程的能力。作为学生本人来讲,应该好好把握这次宝贵的机会,通过分组相互配合上机实践操作加深对该门课程的课本理论知识的理解和认识,在相互默契配合的同时,学会独立思考解决实践过程中遇到的方方面面的问题并虚心向老师和同学请教自己的困惑点,最终顺利完成设计目的与要求,使自己得到较好的锻炼。一、设计目的与要求老师通过布置具有一定难度的综合性程序设计题目,要求学生利用学到的编程知识和编程技巧,根据题目相应的难易程度。分组或独立完成编程及程序调试,最后按格式和要求写出并打印课程设计报告。 二、内容及分配1、 分析、设计数据结构。首先选定题目、收集资料、对系统进行功能模块分析,控制模块分析正确,系统设计要实用,然后确定模块,写出函数原型。2、 编程:根据函数原型及其功能,填充相应的算法。编程简练,可用性强,功能全面3、 调试程序:上机调试程序,解决编译等错误,直至运行成功。4、 撰写报告:按格式写出完整、规范的报告并打印,其中模块图、流程图要清楚、规范,不能有错别字。5、 答辩:程序运行通过,报告打印出来之后,通知指导老师检查,经提问能大部分做出回答即可。6、 设计题目(13):编写函数int fun(int a,int b),在【a,b】范围内统计满足下面条件的个数。条件:该数是素数,且该数逆序后形成的数也是素数。例如在【100,150】范围内101 107 113 131 149 满足条件,则下面程序输入100 150,输出num=5. 三、算法的基本思想 1、 概要设计(模块图如下)读入a,b for i=a to b for j=2 to sqrt (i)i能被j整除真假break;f1=0i逆序后得到xfor j=2 to sqrt(x)x能被j整除真假break;f2=0n+return(n)输出num=n;该程序要用到用一个main函数调用其他库函数,以及while循环语句实现对数字的逆序运算、forif语句实现的循环等等。 2、详细设计:该程序包含以下步骤及相关知识 自然语言:模块一:判断i为素数让i先后被2到i除,如果i能被2到i之中任何一个整数整除,即f1=0,则提前结束循环,此时j必然小于或等于i;如果i不能被2到i之间的任一整数整除,则在完成最后一次循环后j还要加1,因此j=i+1,然后才能终止循环。在循环之后判别j的值是否大于或等于i+1,若是,则表明未曾被2到i之间的任一整数整除过,即f1=1。模块二:实现对i的逆序(见后面难点突破)模块三:判断x为素数让x先后被2到x除,如果x能被2到x之中任何一个整数整除,即f2=0,则提前结束循环,此时j必然小于或等于x;如果x不能被2到x之间的任一整数整除,则在完成最后一次循环后j还要加1,因此j=x+1,然后才能终止循环。在循环之后判别j的值是否大于或等于x+1,若是,则表明未曾被2到x之间的任一整数整除过,即f2=1。最后,若满足(!f1=0)&(!f2=0),则n+;循环结束后将n的值返回main函数,输出最终结果即满足题中所给条件的数的个数(2),所用相关知识及注意点一)C程序的结构程序的执行部分是由语句组成的。 程序的功能也是由执行语句C 语句可分为以下五类: 1) 表达式语句 2) 函数调用语句 3) 控制语句 4) 复合语句 5) 空语句 表达式语句:表达式语句由表达式加上分号“;”组成。 其一般形式为: 表达式; 执行表达式语句就是计算表达式的值。 例如: x=y+z; 赋值语句; y+z; 加法运算语句,但计算结果不能保留,无实际意义; i+; 自增1 语句,i 值增1。 2. 函数调用语句:由函数名、实际参数加上分号“;”组成。 其一般形式为: 函数名(实际参数表); 执行函数语句就是调用函数体并把实际参数赋予函数定义中的形式参数,然后执行被调函数体中的语句,求取函数值 例如: printf(C Program);调用库函数,输出字符串。 3. 控制语句:控制语句用于控制程序的流程, 以实现程序的各种结构方式。它们由特定的语句定义符组成。语言有九种控制语句。 可分成以下三类: 1) 条件判断语句:if 语句、switch 语句; 2) 循环执行语句:do while 语句、while 语句、for语句; 3) 转向语句:break 语句、goto 语句、continue 语句、return 语句。4. 复合语句:把多个语句用括号括起来组成的一个语句称复合语句。 在程序中应把复合语句看成是单条语句,而不是多条语句。 例如: x=y+z; a=b+c; printf(“%d%d”,x,a); 是一条复合语句。 复合语句内的各条语句都必须以分号“;”结尾,在括号“”外不能加分号。 二)1) 在语言中,所有的数据输入输出都是由库函数完成的。 因此都是函数语句。 2) 在使用语言库函数时,要用预编译命令 #include 将有关“头文件”包括到源文件中。 使用标准输入输出库函数时要用到 “stdio.h”文件,因此源文件开头应有以下预编译命令: #include 或 #include ”stdio.h” stdio 是standard input &outupt 的意思。三)、逻辑表达式 逻辑表达式的一般形式为: 表达式 逻辑运算符 表达式 其中的表达式可以又是逻辑表达式,从而组成了嵌套的情形。 例如: (a&b)&c 根据逻辑运算符的左结合性,上式也可写为: a&b&c 逻辑表达式的值是式中各种逻辑运算的最后值,以“1”和“0”分别代表“真”和“假”。四)、if语句1. 基本形式:if if(表达式) 语句 其语义是:如果表达式的值为真,则执行其后的语句, 否则不执行该语句。其过程可表示为下图。2) 在 if 语句中,条件判断表达式必须用括号括起来,在语句之后必须加分号。 3) 在 if 语句的三种形式中,所有的语句应为单个语句,如果要想在满足条件时执行一(多个)语句,则必须把这一组语句用括起来组成一个复合语句。但要注意的是在后不能再加分号。 例如: if(ab) a+; b+; else a=0; b=10;五)、while语句 1)、while 语句的一般形式为: while(表达式)语句 其中表达式是循环条件,语句为循环体。 while 语句的语义是:计算表达式的值,当值为真(非 0)时, 执行循环体语句。其执行过程可用下图表示。2)、 循环体如包括有一个以上的语句,则必须用括起来,组成复合语句。六)、在 C 语言中,for 语句使用最为灵活,它完全可以取代 while 语句。它的一般形式为: for(表达式 1;表达式 2;表达式 3) 语句的执行过程如下: 先求解表达式 1。 求解表达式 2,若其值为真(非 0) ,则执行 for语句中指定的内嵌语句,然后执行下面第 3)步;若其值为假(0) ,则结束循环,转到第 5)步。 求解表达式 3。 转回上面第 2)步继续执行。 循环结束,执行 for 语句下面的一个语句。 执行过程可用下图表示。for 语句最简单的应用形式也是最容易理解的形式如下: for(循环变量赋初值;循环条件;循环变量增量) 语句 循环变量赋初值总是一个赋值语句, 它用来给循环控制变量赋初值; 循环条件是一个关系表达式,它决定什么时候退出循环;循环变量增量,定义循环控制变量每循环一次后按什么方式变化。这三个部分之间用“;”分开。 例如: for(i=1; i100时,结束循环。 相当于: i=1; while(i=100) sum=sum+i; i+; 对于 for 循环中语句的一般形式,就是如下的 while 循环形式: 表达式 1; while(表达式 2) 语句 表达式3; 注意: 1) for 循环中的“表达式 1(循环变量赋初值)”、“表达式 2(循环条件)”和“表达式 3(循环变量增量)”都是选择项, 即可以缺省,但“;”不能缺省。 2) 省略了“表达式 1(循环变量赋初值)”, 表示不对循环控制变量赋初值。 3) 省略了“表达式 2(循环条件)”, 则不做其它处理时便成为死循环。 例如: for(i=1;i+)sum=sum+i; 相当于: i=1; while(1) sum=sum+i; i+; 4) 省略了 “表达式 3(循环变量增量)”, 则不对循环控制变量进行操作,这时可在语句体中加入修改循环控制变量的语句。 例如: for(i=1;i=100;) sum=sum+i; i+; 5) 省略了“表达式 1(循环变量赋初值)”和“表达式 3(循环变量增量)”。 例如: for(;i=100;) sum=sum+i; i+; 相当于: while(i=100) sum=sum+i; i+; 6) 3 个表达式都可以省略。 例如: for(; ;)语句 相当于: while(1)语句 7) 表达式 1 可以是设置循环变量的初值的赋值表达式例如: for(sum=0;i=100;i+)sum=sum+i; 8) 表达式 1 和表达式 3 可以是一个简单表达式也可以for(sum=0,i=1;i=100;i+)sum=sum+i; 或: for(i=0,j=100;i=100;i+,j-)k=i+j; 9) 表达式 2 一般是关系表达式或逻辑表达式,但也可值非零,就执行循环体。七)、break语句 break 语句通常用在循环语句和开关语句中。当 break 用于开关语句 switch 中时,可使程序跳出 switch 而执行 switch 以后的语句;如果没有 break 语句,则将成为一个死循环而无法退出。 当 break 语句用于 do-while、for、while 循环语句中时,可使程序终止循环而执行循环后面的语句, 通常 break语句总是与 if 语句联在一起。即满足条件时便跳出循环。八)、函数的定义及调用 main 函数是主函数,它可以调用其它函数,而不允许被其它函数调用。因此,程序的执行总是从 main 函数开始,完成对其它函数的调用后再返回到 main 函数,最后由 main函数结束整个程序。一个源程序必须有,也只能有一个主函数 main。a、 有参函数的一般定义形式类型标识符 函数名(形式参数表列) 声明部分语句 有参函数比无参函数多了一个内容,即形式参数表列。在形参表中给出的参数称为形式参数,它们可以是各种类型的变量,各参数之间用逗号间隔。在进行函数调用时,主调函数将赋予这些形式参数实际的值。形参既然是变量,必须在形参表中给出形参的类型说明。 b、函数调用的方式 在语言中,可以用以下几种方式调用函数: 1. 函数表达式:函数作为表达式中的一项出现在表达式中,以函数返回值参与表达式的运算。这种方式要求函数是有返回值的。例如:z=max(x,y)是一个赋值表达式,把 max的返回值赋予变量 z。 2. 函数语句:函数调用的一般形式加上分号即构成函数语句。例如: printf (%d,a);scanf (%d,&b);都是以函数语句的方式调用函数。 3. 函数实参:函数作为另一个函数调用的实际参数出现。这种情况是把该函数的返回值作为实参进行传送,因此要求该函数必须是有返回值的。例如: printf(%d,max(x,y); 即是把 max 调用的返回值又作为 printf 函数的实参来使用的。在函数调用中还应该注意的一个问题是求值顺序的问题。所谓求值顺序是指对实参表中各量是自左至右使用呢,还是自右至左使用。对此,各系统的规定不一定相同。c、函数的返回值 函数的值是指函数被调用之后,执行函数体中的程序段所取得的并返回给主调函数的值。如调用正弦函数取得正弦值,调用的 max 函数取得的最大数等。对函数的值(或称函数返回值)有以下一些说明: 1) 函数的值只能通过 return 语句返回主调函数。 return 语句的一般形式为: return 表达式; 或者为: return (表达式); 该语句的功能是计算表达式的值,并返回给主调函数。 在函数中允许有多个 return语句,但每次调用只能有一个 return 语句被执行,因此只能返回一个函数值。 2) 函数值的类型和函数定义中函数的类型应保持一致。如果两者不一致,则以函数类型为准,自动进行类型转换。 3) 如函数值为整型,在函数定义时可以省去类型说明。 4) 不返回函数值的函数,可以明确定义为“空类型”,类型说明符为“void”。一旦函数被定义为空类型后,就不能在主调函数中使用被调函数的函数值了。例如,在定义 s 为空类型后,在主函数中写下述语句 sum=s(n); 就是错误的。 为了使程序有良好的可读性并减少出错, 凡不要求返回值的函数都应定义为空类型。d、对被调函数的声明在主调函数中调用某函数之前应对该被调函数进行说明(声明),这与使用变量之前要进行变量说明是一样的。在主调函数中对被调函数作说明的目的是使编译系统知道被调函返回值的类型,以便在主调函数中按此种类型对返回值作相应的处理。 其一般形式为: 类型说明符 被调函数名(类型 形参,类型 形参); 或为: 类型说明符 被调函数名(类型,类型); 括号内给出了形参的类型和形参名,或只给出形参类型。这便于编译系统进行检错,以防止可能出现的错误。 例 main函数中对 fun 函数的说明为: int fun(int a,int b); 语言中又规定在以下几种情况时可以省去主调函数中对被调函数的函数说明。 1) 如果被调函数的返回值是整型或字符型时,可以不对被调函数作说明,而直接调用。这时系统将自动对被调函数返回值按整型处理。2) 当被调函数的函数定义出现在主调函数之前时,在主调函数中也可以不对被调函数再作说明而直接调用。例如题中,函数 fun 的定义放在 main 函数之前,因此可在 main 函数中省去对 fun 函数的函数说明 int fun(int a,int b)。 3) 如在所有函数定义之前,在函数外预先说明了各个函数的类型,则在以后的各主调函数中,可不再对被调函数作说明。九)、难点突破该设计过程中最复杂也是最难理解的部分就是对i进行逆序运算,即:if(f1)m=i; x=0;while(m)x=x*10+m%10;m/=10; 分析:如果!f1=0执行以下嵌套循环 :将i的值赋给m;x=0,当m满足 !m=0时执行以下循环语句:x=x*10+m%10;m/10; 通过该循环实现对i的逆序运算,以i=113为例说明一下:首先将i的值赋给m则满足!m=0执行x=0*10+113%10;m/10;得到x=0+3=3;m=11同样满足!m=0执行x=3*10+11%10;m/10;得到x=31;m=1同样满足!m=0执行x=31*10+1%10;m/10;得到x=311;m=0不再满足!m=0,终止以上语句的执行得到i的逆序值x=311,其他数用同样的方法可以类推 。 (3)附:参考课本例题【例 6.8】判断 m 是否素数。 #include main() int m,i,k; scanf(“%d”,&m); k=sqrt(m); for(i=2;i=k+1) printf(“%d is a prime numbern”,m); else printf(“%d is not a prime numbern”,m);N-S 流程图:【例 6.9】求 100 至200 间的全部素数#include main() int m,i,k,n=0; for(m=101;m=200;m=m+2) k=sqrt(m); for(i=2;i=k+1) printf(“%d”,m); n=n+1; if(n%n=0)printf(“n”); printf(“n”); 四、测试数据输出结果:从键盘输入:100 150输出:num=5Press any key to continue五、心得体会总结起此次课程设计,我感慨颇多,的确,从从拿到题目到完成整个编程,从理论到实践,在整整一个星期的日子里,可以学到很多很多的的东西,同时不仅巩固了以前所学过的课本理论知识知识,而且学到了很多在书本上所没有学到过的知识。老师把我们分为几组,每一组六到七个人,并且分配了具体的任务。我们组的题目是在一定范围内统计满足本身是素数且逆序后仍是素数的数的个数,对于我们这些非计算机专业的学生来说,这是一种考验,虽然我们也学习了C语言,但是如果用来编一个相对大的实用的程序还是有一定难度的,因此这次实习对我们来说算是一次很好的的机会,能很好地巩固一下我们平时所学。 拿到设计要求以后,第一天我们把设计整个程序需要用的相关知识的资料查找了一下,我们觉得用到的程序段不用太高级,第一天结束时我们对程序有了一个大概的轮廓。 第二、三天是我们自己编程了,这使我们很好的锻炼了一下自己,因为这不仅考查我们平时所学,也将我们平时学习中的盲点都暴露出来了,促使我们填补了自己相关知识块儿学习的空白,另外,编程是一件很枯燥很无聊的事情,同时这对我们的耐力也是一次很好的考验,因为当你编辑的程序运行有错时你要修改,有时改了还是有错,一次次的改,又一次次的出现新问题,甚至把人都弄烦了,有时候一个消耗你几个小时时间,但是还得耐着性子去改,另外这也很好的检验一个人的细心,因为在程序的编辑中,有时只是一个标点都会影响到整个程序的运行,所以,我觉得整个程序的编辑不仅是对我们学习能力的一次考察,同时也是对我们综合能力的一次考查。 第四天,也是最关键的一天,我们全组的人要把程序弄在一起,让它完成我们需要的功能并不是一件简单的事,因为会出现我们意想不到的新问题,这时就需要大家共同配合了,大家对每次出现的新问题提出修改的建议不同,所以会有争议而且说急了还“指手画脚”,但是当这个问题解决以后,大家会露出会心的一笑,因为我们是一个团体,我们的争执都是为了我们的工作能做得更好,建议对的人还会自夸一下,调节一下气氛,以便更有劲儿地投入到下一步的工作中去。 6月24号我们的程序终于完成了,虽然程序在执行的结果上还是有点不完美,但是这是我们组这几天来的集体心血,经过我们一步步的努力换来的,我们会很好的珍惜,通过这次实习我觉得暴露出了许多我自身存在的问题,使我弥补了我许多知识上的缺陷,弄清楚了我不懂的地方和似是而非的地方,丰富了自己的知识结构体系;同时也对自身各个方面能力有了很大的提高,我觉得这次实习对我的学习、生活来
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 阿拉山口市2024-2025学年八年级下学期语文期末模拟试卷
- 安徽省黄山市黟县2022-2023学年高三下学期高考第三次模拟考试语文试卷及答案
- 安徽省池州市东至县2024-2025学年高三上学期期末考试英语考题及答案
- 2025 年小升初茂名市初一新生分班考试数学试卷(带答案解析)-(人教版)
- 河南省新乡市第七中学2025-2026学年七年级上学期第一次月考数学试题
- 广东省广州市东环中学2025-2026学年八年级数学第一学期期中测试数学试题(无答案)
- 社区管理与服务实践课件
- 社区画像基础知识培训课件
- 重庆市九龙坡区统编版2024-2025学年四年级下册期末考试语文试卷(含答案)
- 社区消费安全知识培训课件
- 2025年粉笔辅警考试题库
- 水声传感器技术研究与应用
- 2025年小学教研室教学计划
- 2025年上海市建筑工程施工合同模板
- 手术室护理业务学习
- 贩卖人口罪与强迫劳动罪
- 新员工入职职业道德培训
- 电气安全基础知识安全培训
- 宽带宣传活动方案
- 电缆生产工艺全解析
- 婚内债务隔离协议书范本
评论
0/150
提交评论