C语言程序设计项目化教学案例分析

来源 :中国新通信 | 被引量 : 0次 | 上传用户:yilongfengyue5656
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  【摘要】    C语言程序设计作为高职计算机专业学生的基础语言,在整个课程中的相当重要的。学习C语言程序设计不仅能让学生了解基本的程序设计概念,还能让学生学会使用编程语言的代码结构,更能让学生学会编程的思想。为后续学习其他语言:如JAVA、Python等语言打下扎实的基础。传统的C语言学习都是通过语法学习,加上小的案例来讲解的,缺乏对实际生活中案例的整体框架编程设计。针对上述情况,下面将通过生活实际案例,应用C语言程序设计判断身份证号校验码项目进行教学案例分析。
  【关键词】    身份证号    校验码    项目化教学
  引言:
  C语言从上个世纪70年代诞生至今将近50年,它仍旧活跃在信息技术的各个领域。在信息技术发展日新月异的今天,一项技术生存了50年仍保青春,不得不说,C语言是一种功能强大,生命力强的程序设计语言。如此功能强大的结构化的程序设计语言,有着丰富的数据类型,有着基本的语言结构,有着顺序结构、选择结构、循环结构的基本技能。传统的C语言程序设计教学是采用小程序设计为案例的,它如何与面向对象的程序设计语言衔接呢?我们的课程采用项目化教学就非常有必要了。
  一、案例背景
  在项目化教学案例的设计过程中,如果缺少与实际生活相关的例子,学生在学习过程中就会缺少学习的动力。那么老师在设计“C语言程序设计”项目化案例时,根据日常生活实际问题具体情景进行项目设计。
  本案例我们应用C语言程序设计对身份证号校验码验证的项目来分析,通过对18位身份证号码的组成原理,校验码的检验真伪算法及实现身份证号校验码的项目设计来讲解。
  二、身份证号码有关知识
  2.1身份證号的组成
  公民身份证号码是按照一定的规则组成的,它由十七位数字和一位校验码构成。从左至右一到六位数字是地址码,七至十四数字是出生日期码,十五至十七数字是顺序码,最后一位为校验码。十八位数字我们可以用字母来表示:ABCDEFYYYYMMDDXXXR。
  1、地址码(ABCDEF):表示常住户口所在省、市、区的行政代码。比如:340000表示安徽省;340100 表示安徽省合肥市;340101 表示安徽省合肥市市辖区。
  2、出生日期码(YYYYMMDD):表示该人员的出生年月日,比如:2020年1月11日出生的人员,出生日期码为:20200111,月份和日期不足两位的,我们在前面加0,数字之间是不用分隔符的。
  3、顺序码(XXX):表示是对身份证号前六位相同(同一个地区内),又是同年同月同日出生的人员编定的顺序码,奇数代表是男性,偶数代表是女性,可以更好的区别男女。
  4、校验码(R):根据前面17位数字,按照校验码计算方法得出一位数。
  2.2校验码的计算方式
  1、根据前面17位数字进行加权求和:公式:S=Sum(Ai*Wi),i=1至17,其中Ai为第i位置上身份证号码数字值,Wi为第i位置上的加权因子,相应的17位加权因子:7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2。
  身份证号码上每一位数字与相应的加权因子相乘的积相加,计算出总和S。
  2、用11对计算结果取模 Y=mod(S,11) ,S除以11,看得到的余数。余数Y有0至10共11个数字。
  3、按照模的值对应的校验码如下图:
  2.3校验码出现‘X’
  根据上表的对应关系,我们发现校验码有11个,如果我们用数字0到9来表示,就缺少一位。用二位数字来表示的话,身份证号就变成19位了。因为Ⅹ代青罗马数字的10,所以这里用X来代替其中一位校验码。这样可以保障公民身份证号符合国家标准。
  三、项目设计
  3.1开发环境
  开发语言:C语言
  开发工具:Code::Blocks/Dev-C++
  3.2项目需求
  输入身份证号码,以字符串的形式放入字符数组中,调用判断身份证号号码函数,首先判断位数是否为18位,接着判断除最后一位可以是大写’X’或小写’x’以外,其他位必须是数字,满足以上二个条件后,再来判断最后一位校验位是否正确。如果以上条件都能满足,那么我们就判断身份证号码是合法的,否则为不合法。
  3.3数据类型
  本案例中,我们将应用到了int char long的数据类型,加权因子采用整型数组,校验码和身份证号码都采用字符数组的类型。
  3.4涉及的知识点
  本程序用到C语言基础知识,所涉及到的知识点如下:
  (1)stdio.h、string.h和ctype.h头文件的引入;
  (2)用户自定义函数及函数的调用;
  (3)数组的定义和初始化,缺省数组的大小时,必须初始化数据,编译器会自动计算数据的大小。如:int R[] ={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 位数字码,按照 ISO 7064:1983.MOD 11-2 校验码计算出来的校验码。
  我们采用用户自定义函数Chk18PaperId函数来完成身份证号校验过程。
  在Chk18PaperId函数中我们首先对字符串身份证码进行位数的判断,如果字符串长度不等于18位,那么我们直接返回,判定该身份证号码为不合法。在字符串长度为18位的基础上,我们再来判断每一位是否是数字字符或者最后一位是罗马数字X,这里为了方便,我们直接用英文字母’X’来表示。满足以上两个条件之后,我们再来判断最后一位校验码是否正确。
  假设某一身份证号前17位:
  17位数字  3 2 0 6 2 1 1 9 9 5 0 7 1 8 3 0 2
  加权因子  7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2
  根据加权求和公式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完整代码
  #include <stdio.h> //输入输出函数scanf()和printf()包含在头文件里面
  #include <string.h>//字符串长度函数包含在头文件里面
  #include <ctype.h>//字符分类函数头文件
  int Chk18PaperId (const char *sPaperId) //函数用来判断身份证号校验码是否合法
  { long lSumQT =0;
  int R[] ={7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2 }; //加权因子
  char sChecker[11]={'1','0','X', '9', '8', '7', '6', '5', '4', '3', '2'}; //校验码
  if( 18 != strlen(sPaperId)) return -1; //检验长度
  int i=0;        //校验数字
  for (i=0; i<18; i++)
  {   if ( !isdigit(sPaperId[i]) && !(('X' == sPaperId[i] || 'x' == sPaperId[i])&& 17 == i) )
  {  return -1;//如果身份证号码中某一位不是数字或者X 的话,则返回-1,失败}}
  for (i=0; i<=16; i++)//验证最末的校验码
  {    lSumQT += (sPaperId[i]-48) * R[i];}
  if (sChecker[lSumQT%11] != sPaperId[17] )
  { return -1;}
  return 0;  }
  int main(void)
  { char Personal_ID[18];
  printf("请输入一个身份证号码:\n");
  gets(Personal_ID);     //用户输入一个字符串身份证号码
  if(!Chk18PaperId(Personal_ID))  printf("合法\n");  //调用自定义校验码函数
  else  printf("不合法\n");
  return 0;}
  五、结论
  C语言本身提供了强大的算法功能,而且还提供项目实践功能。我们对C语言程序设计进行项目化教学,在教学案例设计中根据高职学生学习的特点,设计出符合学生的C语言项目教学案例,从而提高学生学习C语言解决各种实际问题的能力。
  参  考  文  献
  [1]许芝卉,李建华.关于C语言程序设计题自动评分算法的探究,山西大同大学报,2020(10).
  [2]唐小健.探究C语言程序设计在项目实践中的技巧应用,电脑编程技术与维护,2020(11).
  [3]周军强.C 语言程序设计课程项目化教学研究,福建电脑,2020(04).
  [4]俞骋.项目教学法在技校C语言教学中的实证研究,现代计算机,2019(14).
  [5]林剑.C语言程序设计课程教学探索,課程教育研究,2019(02).
  秦春娣(1981-),女,江苏常州人,实验师,工程师,本科,主要研究方向为计算机应用;
  黄晓伟(1981-),男,江苏常州人,副教授,研究方向:工业自动化控制。
其他文献
【摘要】 大数据是目前社会各个发展领域发展的重要方向,也是目前低保管理信息化工作的重大机遇。在此背景下,我们以重庆地区的统筹城乡最低生活保障制度的应用管理中对大数据技术的应用展开研究,从地区性差异入手,分析低保资金地区分配不均衡的原因,以此提出各级政府要构建并完善调剂金制度,巩固社会保障制度体系并拓展脱贫攻坚的成果。  【关键词】 大数据 最低生活保障制度 地区性差异 城乡统筹 社会保
期刊
【摘要】 半导体材料作为当代信息技术产业的核心和革命先导,一直处于微电子、信息、绿色能源等产业的发展前沿,成为新材料产业的重要组成部分。但是,作为培养企业一线高端应用创新人才的平台基地,应用创新型大学担负着重要的使命,同时在现代化的教育体系中扮演着引领性的关键作用。除了传道授业解惑以外,提高学生的思政素养、主人翁意识,更是大学的培养方向。应用创新型人才德育素养的提升与职业精神的培育也在教学中发挥
期刊
【摘要】 着眼于内蒙古自治区狭长的地域特性,内蒙古境内高空层气象观测设备布设位置东西跨度很大、业务实际情况、业务人员素质、业务培训及远程培训的现状,探讨开展新形式远程培训的必要性及迫切性。构想培训课程模块,展望利用远程视频授课、“天气雷达定标控制器”及虚拟现实技术驱动远程气象观测业务培训,推进“自主学习、虚拟实训、虚拟考核”,无经验业务人员实现自主学习、业务开展预学习,有经验业务人员自由学习、工
期刊
【摘要】 职业技能大赛备受高职学院重视,已成为职业院校人才培养、专业建设的重要组成部分。重庆财经职业学院计算机类专业实施賽训融合实践教学模式,将大赛标准与课程标准融合、大赛内容与教学内容融合、竞赛项目与实训项目融合、竞赛方式与实训方式融合、竞赛评分标准与课程考核标准融合,提高人才培养质量,充分体现技能大赛对职业教育课程改革的促进与推动作用。  【关键词】 高职 计算机专业 赛训融合 教学模
期刊
【摘要】 本文针对目前现代学徒制教学模式存在的问题,分析实施“互联网+工作室”现代学徒制教学新模式的必要性,总结了“互联网+工作室”教学模式在现代学徒制教学需要思考的问题并提出相应的解决对策。  【关键词】 “互联网+工作室” 现代学徒制 教学模式 建筑室内设计  在15年的十二届全国人大三次会议上,我国国务院总理李克强在政府工作报告中首次提出互联网+行动计划。一时间,互联网技术被社会各
期刊
【摘要】 职教二十条对课程改革提出了明确要求,传统的课程体系不再适用于经济技术高速发展环境下的高职教育。针对当前“学习者为中心”和“知行合一、工学结合”的教育改革需求,以物联网应用技术专业人工智能方向班为例,将思政教育和校企合作共建“实境式”专业课程纳入到课程体系研究中,并在此基础上探讨了相关的“活页式”教材改革思路。  【关键词】 实境式 课程体系 活页式 人工智能 思政教育  20
期刊
【摘要】 随着信息化的发展,教育产业融合信息技术成为大势所趋。在高中数学教学中融入信息化的教学模式,一方面有利于教师利用信息化技术和设备辅助课堂教学,增加课堂教学的趣味性,让数学知识通过多种形式直观地展示出来,提升教学效率。另一方面,利用信息化的教学模式也有利于激发学生主动性,引导学生积极参与课堂教学,进行学生的自主探索。因此,将信息化的教学与高中数学融合,能够推进高中数学课堂的创新发展,营造良
期刊
【摘要】 理论教学和实践教学是高等教育人才培养的两个重要组成部分,相辅相成,又彼此独立。大部分民办院校的办学都定位于培养满足地方经济需求的应用型人才上,也就是要在基础知识学习基础上,重点培养学生的创新创业能力和实践能力。针对这个办学定位,实践教学环节就显得尤为重要,实践教学对于实践教学是理论教学的拓展、延伸和深化,通过传授基础知识、培养技能、积累经验来提升学生的综合素质,培养其创新精神。那么如何
期刊
【摘要】 本文介绍了基站天线美化外罩的应用场景、产品类别;外罩的材质选取原则及基本机械性能要求;明确指出该类外罩产品的主要技术指标。文章从透波性能、结构性能、射频性能及抗老化性能等方面综合评估天线美化外罩的整体性能。  【关键词】 美化外罩 透波率 电气性能 抗老化  一、美化外罩的定义  美化天线外罩是指将通信天线置于隐藏罩内,隐藏罩外观则通过对建筑周围环境的观察、协调而进行设计,使之
期刊
【摘要】 信息技术在教育方面的应用,为我国高等教育创设了更为多样的教学方式。慕课、微课等新型现代化教育工具的出现,让高校教育走向线上线下混合式教学的时代。《西方音乐史与作品欣赏》课程是民办高校音专的一门专业课,基于课时安排、课程内容教学等方面的原因,混合式的教学方法,可以让本课程的教学更加深入,让学生对西方音乐史有深入的理解,提高作品欣赏的能力。鉴于此,本研究,首先介绍线上线上混合式教学模式的定
期刊