c语言程序设计课程教学中的案例设计_第1页
c语言程序设计课程教学中的案例设计_第2页
c语言程序设计课程教学中的案例设计_第3页
c语言程序设计课程教学中的案例设计_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

c语言程序设计课程教学中的案例设计

功能强大,创造力强c语言在20世纪70年代出生到近50年代,在信息技术领域仍然很活跃。在信息技术发展日新月异的今天,一项技术生存了50年仍保青春,不得不说,C语言是一种功能强大,生命力强的程序设计语言。如此功能强大的结构化的程序设计语言,有着丰富的数据类型,有着基本的语言结构,有着顺序结构、选择结构、循环结构的基本技能。传统的C语言程序设计教学是采用小程序设计为案例的,它如何与面向对象的程序设计语言衔接呢?我们的课程采用项目化教学就非常有必要了。一、基于实际案例的案例设计在项目化教学案例的设计过程中,如果缺少与实际生活相关的例子,学生在学习过程中就会缺少学习的动力。那么老师在设计“C语言程序设计”项目化案例时,根据日常生活实际问题具体情景进行项目设计。本案例我们应用C语言程序设计对身份证号校验码验证的项目来分析,通过对18位身份证号码的组成原理,校验码的检验真伪算法及实现身份证号校验码的项目设计来讲解。二、关于身份密码的知识2.1校验码构成公民身份证号码是按照一定的规则组成的,它由十七位数字和一位校验码构成。从左至右一到六位数字是地址码,七至十四数字是出生日期码,十五至十七数字是顺序码,最后一位为校验码。十八位数字我们可以用字母来表示:ABCDEFYYYYMMDDXXXR。1、表达高校数据的方式表示常住户口所在省、市、区的行政代码。比如:340000表示安徽省;340100表示安徽省合肥市;340101表示安徽省合肥市市辖区。2、出生日期码表示该人员的出生年月日,比如:2020年1月11日出生的人员,出生日期码为:20200111,月份和日期不足两位的,我们在前面加0,数字之间是不用分隔符的。3、地区同月同日出生的人员编码顺序表示是对身份证号前六位相同(同一个地区内),又是同年同月同日出生的人员编定的顺序码,奇数代表是男性,偶数代表是女性,可以更好的区别男女。4、检验码r根据前面17位数字,按照校验码计算方法得出一位数。2.2计算剩余余数y1、根据前面17位数字进行加权求和:公式:S=Sum(Ai*Wi),i=1至17,其中Ai为第i位置上身份证号码数字值,Wi为第i位置上的加权因子,相应的17位加权因子:7910584216379105842。身份证号码上每一位数字与相应的加权因子相乘的积相加,计算出总和S。2、用11对计算结果取模Y=mod(S,11),S除以11,看得到的余数。余数Y有0至10共11个数字。3、按照模的值对应的校验码如下图:2.3身份证号中的同余根据上表的对应关系,我们发现校验码有11个,如果我们用数字0到9来表示,就缺少一位。用二位数字来表示的话,身份证号就变成19位了。因为Ⅹ代青罗马数字的10,所以这里用X来代替其中一位校验码。这样可以保障公民身份证号符合国家标准。三、项目设计3.1开发环境开发工具:Code::Blocks/Dev-C++3.2校验位校验位判断输入身份证号码,以字符串的形式放入字符数组中,调用判断身份证号号码函数,首先判断位数是否为18位,接着判断除最后一位可以是大写’X’或小写’x’以外,其他位必须是数字,满足以上二个条件后,再来判断最后一位校验位是否正确。如果以上条件都能满足,那么我们就判断身份证号码是合法的,否则为不合法。3.3数据类型本案例中,我们将应用到了intcharlong的数据类型,加权因子采用整型数组,校验码和身份证号码都采用字符数组的类型。3.4自动计算数据大小本程序用到C语言基础知识,所涉及到的知识点如下:(1)stdio.h、string.h和ctype.h头文件的引入;(2)用户自定义函数及函数的调用;(3)数组的定义和初始化,缺省数组的大小时,必须初始化数据,编译器会自动计算数据的大小。如:intR[]={7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};//加权因子;(4)调用字符串长度函数strlen(),计算字符长度;调用数字判断isdigit()函数;(5)字符转换为数值功能,如’0’-48=0字符‘0’变成数值0;(6)gets()可以接受带有空格的字符,而scanf()函数遇到空格就截断,我们要理解两者之间的区别;(7)%,取模运算就是自然数学中的求余数,参与取模运算的两个操作数都是整型数。四、项目代码4.1身份证号校验函数是完成某个特定功能的模块代码。通过调用模块代码完成某项功能。我们定义了一个身份证验证函数,用来检测输入的字符串身份证号码的有效性。最后一位校验码是根据前面17位数字码,按照ISO7064:1983.MOD11-2校验码计算出来的校验码。我们采用用户自定义函数Chk18PaperId函数来完成身份证号校验过程。在Chk18PaperId函数中我们首先对字符串身份证码进行位数的判断,如果字符串长度不等于18位,那么我们直接返回,判定该身份证号码为不合法。在字符串长度为18位的基础上,我们再来判断每一位是否是数字字符或者最后一位是罗马数字X,这里为了方便,我们直接用英文字母’X’来表示。满足以上两个条件之后,我们再来判断最后一位校验码是否正确。假设某一身份证号前17位:17位数字32062119950718302加权因子7910584216379105842根据加权求和公式S=Sum(Ai*Wi),计算17位数字各位数字与对应的加权因子的乘积的和S:3×7+2×9+0×10+6×5+2×8+1×4+1×2+9×1+9×6+5×3+0×7+7×9+1×10+8×5+3×8+0×4+2×2=310;计算S÷11的余数T:310%11=2;余数0-10对应校验码为[1,0,X,9,8,7,6,5,4,3,2],那么该身份证号码的第18位校验码就是X。4.2完整代

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论