C语言

您所在的位置:网站首页 java实验身份证号码的分析 C语言

C语言

#C语言| 来源: 网络整理| 查看: 265

前言

为什么我这个萌新要来写这篇文章?事情还要从上周三说起。

在上周三的程序设计基础课上,我们老师给我们全班同学布置了一项题为《实验一:查验身份证》的实验作业,这也是我第一次接触到实验作业,作为一名开学不到一个月的大一新生,这项作业对我来说,还是不简单的。接到这项作业后的第二天,我怀着无比愧疚的心情打开CSDN,想要学(fu)习(zhi)一下前辈们解决这道题的代码,结果搜索无果,只搜到了用Python解决类似题目的方法,于是我陷入了沉思————

我该怎么办 ,老师只给了一个星期的时间,完不成会影响期末考试的分数,万一挂科了。。。。。。

咦~,既然CSDN上还没有相应的文章,我为什么不能弥补它的空白,于是我花了几个小时去学习同学写的代码,并写了属于自己的代码,又自学用软件画出来程序框图,完成了我的作业。

这是我——一个萌新开始写文章的初衷,它会激励我不断地去成长。

接下来上——

——正文 题目

实验一:查验身份证 一、实验目的: 正确定义一个能够存储非常大的整数的类型;熟练应用嵌套的if语句和switch语句实现多分支结构程序设计,能够根据不同状态取出不同值并做计算; 熟练应用for()、while()和do-while()三种语句实现循环结构的设计; 灵活运用break和continue语句控制循环过程的流向;能够利用循环结构取出一个整数各个位中的数字;熟悉简单的调试程序方法,如单步调试、设置信息的输出等;通过对身份证号的校验码了解信息系统编码中校验码的意义、原理及真伪的判定。

二、实验要求: 

一个合法的身份证号码共18位,由17位地区、日期编号和顺序编号加1位校验码组成。校验码的计算规则如下:

首先对前17位数字加权求和,权重分配为:{7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};然后将计算的和对11取模得到值Z;最后按照以下关系对应Z值与校验码M的值:

Z: 0  1  3  4  5  6  7  8  9  10(删掉了2)

M:1  0  9  8  7  6  5  4  3  2(删掉了2对应的X)

现在给定一些身份证号码,请你验证校验码的有效性,并输出有问题的号码。

输入、输出格式:

输入第一行给出正整数N(≤100)是输入的身份证号码的个数。随后N行,每行给出1个18位身份证号码,18位必须全部是数字。

不检验身份证前17位是否合理,只检查对前17位计算出的校验码是否与身份证第18位一致。如果一致,则输出“身份证号 passed”,否则输出“身份证号 Fail”。

输入、输出样例1:

2

320124198808240056

320124198808240056 Passed

110108196711301866

110108196711301866 Fail

输入样例2:

2

320124198808240056

320124198808240056 Passed

110108196711301862

110108196711301862 Passed

三、实验内容和结果: 

(将实验完成中的一些内容记录于此,包括算法流程图、程序源代码、测试用例、运行结果截图、调试过程等)

四、实验总结: (描述实验过程中的收获和遇到的困难)

五、思考与拓展:

1.在没有学习一维数组之前,现在我们是如何存储一批相同类型的数据的?大概有两种方法,第1种,定义一个变量,所有数据都保存在这一个变量中;第2种,定义一批简单变量,不同数据存储在不同的变量中。试问,第1种方法在一批数据处理过程中有什么缺陷?如果这批数据要在循环结构中处理的话,第2种方法适合吗? 

2.一般我们处理的整数定义为int类型即可,如果整数的位数超出了int类型所能表示的数据范围时,可以定义为long long int类型,为什么呢?还有其它数据类型可以提高数据的表示范围吗?它与整数的操作有什么不同吗? 

3. 身份证号码的校验码末位实际包含字符“X”,在学习了字符数组后我们就可以对身份证按照字符串处理了,并且保存在数组中,保存在数组中的数据可以重复使用。届时,大家可以重新设计本实验,解决当前不能解决的问题。

——————解答——————

三、实验内容和结果: 

(将实验完成中的一些内容记录于此,包括算法流程图、程序源代码、测试用例、运行结果截图、调试过程等)

1.算法流程图(自己用  亿图图示 画的)

 

2.源代码

#include int main() { int QuanZhong[17]={7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2}; int z[10]={0,1,3,4,5,6,7,8,9,10}; int m[10]={1,0,9,8,7,6,5,4,3,2}; int x[18]; int n, i, j, k, l, sum, c; scanf("%d", &n); for(i=1;i


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3