《耿弋课程设计报告》由会员分享,可在线阅读,更多相关《耿弋课程设计报告(7页珍藏版)》请在金锄头文库上搜索。
1、江苏省江阴职业技术教育中心校江苏省江阴职业技术教育中心校江苏省江阴职业技术教育中心校JingYinJingYinJingYin VocationalVocationalVocational TechnologyTechnologyTechnology EducationEducationEducation SchoolSchoolSchool课程设计报告课程设计报告课程设计报告课程设计报告课程名称: C 语言语言 设计题目: 身份证号码之迷身份证号码之迷 班 级: 06 计信(计信(2)班)班 姓 名: 耿弋耿弋 学 号: 0621403205 指导教师: 丁丁 燕燕 萍萍 江苏省江阴职业技术
2、教育中心校江苏省江阴职业技术教育中心校江苏省江阴职业技术教育中心校江苏省江阴职业技术教育中心校二八 年 五 月目目目目 录录录录题目分析( 1 )总体设计( 1 )代码实现( 3 )常见问题分析( 4 )心得体会( 4 )参考资料( 5 )江苏省江阴职业技术教育中心校 课程设计1课程设计报告书课程设计报告书一、一、题目分析题目分析题目要求:这是发生在外国警察局中的一个故事,已知某人身份证号码扣除第一个英文字母后是9 位数,现在有一个人的身份证号码中前1 位可以被1 的平方整除,前2 位可以被2 的平方整除,前3 位可以被3 的平方整除,前4 位可以被4 的平方整除,而从第5位开始,前5 位可以
3、被5 整除,前6 位可以被6 整除 以此类推至前9 位可以被9 整除,请通过适当的算法求出此身份证号码中的 9 位数。对于上面的案子,仔细分析,可知任何一个数都可被1 整除,因此 9 个条件只有8 个有意义。我们可以将9 个数字用变量a1,a2,a9 来表示,每个位数的取值范围为0 9,有了各位上的数字,就要来组合题中对我们有用的8 个条件。(1)首先要将前两位数组合出来:a1*10+a2 这就是前两位组成的数,这个数能被2 的平方整除,用公式表示为(a1*10+a2) %4=0。(2)前 3 位可以被3 的平方整除,前3 位数就可写成:a1*100+a2*10+a3,整除条件为 (a1*10
4、0+a2*10+a3)%9=0。(3)前 4 位与上面类似。(4)前 5 位数为: a1*10000+a2*1000+a3*100+a4*10+a5,整除条件为( a1*10000+a2*1000+a3*100+a4*10+a5) %5=0.由于表达示太长,可设一个数n 来代表前面表达式的值。(5)第 6 9 个条件只要将(4)进行变化,就可得出。二、总体设计二、总体设计江苏省江阴职业技术教育中心校 课程设计2For a2=0 to 9图 1N=(a1*100000+a2*10000+a3*1000+a4*100+a5*10+a6)%6=0) N=(a1*1000000+a2*100000+a
5、3*10000+a4*1000+a5*100+a6*10+a7)%7=0)3 3For a1=o to 9For a2=0 to 9N=(a1*10+a2)%4=0)YNFor a3=o to 9N=(a1*100+a2*10+a3)%9=0)YNFor a4=0 to 9 N=(a1*1000+a2*100+a3*10+a4) %16=0)YNFor a5=0 to 9YNN=(a1*10000+a2*1000+a3*100 +a4*10+a5)%5=0)For a6=o to 9YNFor a7=o to 9YN3 3For a8=o to 9YNN=(a1*10000000+a2*100
6、0000+a3*100000+a4*10000+a5*1000+a6 100+a7*10+a8)%8=0)For a9=o to 9YNN=(a1*10000000+a2*1000000+a3*100000 +a4*10000+a5*1000+a6*100+ a7*10+a9)%9=0)江苏省江阴职业技术教育中心校 课程设计3图 2实质上我们就是将 a1 在 09,a2 在 09 之间a9 在 09 之间组成的000000000999999999 之间符合前面我们所列的 9 个条件的数列,最后得到的数也就是我们的所求了。所以程序的大体结构是 9 个循环并且内部有分支语句。本题最大的特点还是循环
7、,有 9 个循环套在一起。为什么能用这么多循环呢,和上面的 10 亿个数字的特点不无关系。如果从每个数位上去看,特点便是循环中出循环的特点。至于循环中的条件呢?因为不是各个条件对 9 个循环都是需要的,第 1 个循环只和第一个条件相联系,这就决定了 9 个条件不是连在一起的,而是分散发挥作用的,这是我们需注意的是第二点。三、代码实现三、代码实现main()long a1,a2,a3,a4,a5,a6,a7,a8,a9,n;for(a1=0;a1=9;a1+)for(a2=0;a2=9;a2+)if(a1*10+a2)%4=0)for(a3=0;a3=9;a3+)if(a1*100+a2*10+
8、a3)%9=0)for(a4=0;a4=9;a4+)if(a1*1000+a2*100+a3*10+a4)%16=0)for(a5=0;a5=9;a5+)if(a1*10000+a2*1000+a3*100+a4*10+a5)%5=0)for (a6=0;a6=9;a6+)if(a1*100000+a2*10000+a3*1000+a4*100+a5*10+a6)%6=0)for(a7=0;a7=9;a7+)if(a1*1000000+a2*100000+a3*10000+a4*1000+a5*100+a6*10+a7)%7=0)for(a8=0;a8=9;a8+)if(a1*10000000
9、+a2*1000000+a3*100000+a4*10000+a5*1000+a6*100+a7*10+a8)%8=0)for(a9=0;a9=9;a9+)if(a1*100000000+a2*10000000+a3*1000000+a4*100000+a5*10000+a6*1000+a7*100+a8*10+a9) %9=0)n=a1*100000000+a2*10000000+a3*1000000+a4*100000+a5*10000+a6*1000+a7*1江苏省江阴职业技术教育中心校 课程设计400+a8*10+a9;printf(“%9ld “,n); 输出结果:963258885
10、四、常见问题分析四、常见问题分析Unable to open input file COS.OBJ 不能打开输入文件“cos.obj”Function call missing ) in function main 丢失了括号Illegal use of floating point 非法浮点运算五、心得体会五、心得体会通过此次课程设计,我发现自己仍存在着许许多多的问题。实习的第一天,老师将我们分成了三小组,让各组组长分别抽了题。我们组抽到了求解身份证号码之迷。刚拿到题时,我顿时傻了眼,一时不知该从何下手。老师给我们作了简单的讲解后,首先让我们做的就是分析题目,我觉得分析题目还是比较简单的,9
11、 个条件只有 8 个是有用的,而且经过讨论我也清楚的了解了题意。我们根据题意将表达示一一列了出来。第二天,我们就得根据题目画流程图了。画流程图对我来说是比较简单的,不过就是烦了些。第三天,就该编程了,刚开始我认为会很简单的,不就是循环语句里再套循环吗。可是我好像想错了,编程一开始我就遇到了许多问题,我先试着编写了一个两位数的,但一开始也出现了一些问题,我没有正确理解 for 语句的嵌套,导致程序无法按照自己所预计的那样输出,后来,在老师的帮助下,和我正确理解 for 语句的循环嵌套的基础上,我终于将两位数给编了出来。接着要编写第三位的了,我根据编写两位时的方法继续编写,但还是遇到了不小的问题,
12、经过讨论分析,终于得出了三位数的结果。第四就比较的顺利了。但到了第五位问题又来了,我们的输出结果竟然出现了负的,不管我们怎么修改都无江苏省江阴职业技术教育中心校 课程设计5法得出结果来,经过多次修改运行后,我渐渐失去了耐心,尤其是经过了两天还是一无进展,更让我失去了信心。就在我几乎想要放弃的时候老师又给了我们新的思路,让我又稍微恢复了些信心。最后经过反复尝试我终于有了结果,那时的我心情很激动,终于有结果了,我真想高呼:我成功了!我成功了!这次实习真的让我发现了自己许多的不足之处,让我明白了一些在课本上不曾学到过的道理,也巩固了以前学过的知识,让我知道自己在哪方面还存在着不足,可以有更好的改进。最后,我想说:实习也快结束了,我真心希望每位同学都能够有所收获,同时也要感谢老师的辛苦教导,如果没有您或许我早就放弃了,所以我再次感谢您。六、参考资料六、参考资料C 语言程序设计 谭浩强 清华大学出版社,2000C 语言程序设计题解与上机指导 谭浩强 清华大学出版社,2000