前言
为什么我这个萌新要来写这篇文章?事情还要从上周三说起。
在上周三的程序设计基础课上,我们老师给我们全班同学布置了一项题为《实验一:查验身份证》的实验作业,这也是我第一次接触到实验作业,作为一名开学不到一个月的大一新生,这项作业对我来说,还是不简单的。接到这项作业后的第二天,我怀着无比愧疚的心情打开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<stdio.h>
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<=n;i++)
{
sum = 0;
for(j=0;j<=17;j++)
{
scanf("%1d", &x[j]);
}
for(l=0;l<=16;l++)
{
sum += x[l] * QuanZhong[l];
}
c=sum%11;
for(k=0;k<=9;k++)
{
if(c==z[k])
{
break;
}
}
if(m[k]==x[17])
{
for(j=0;j<=17;j++)
{
printf("%1d", x[j]);
}
printf(" Passed\n");
}
else
{
for(j=0;j<=17;j++)
{
printf("%1d", x[j]);
}
printf(" Fail\n");
}
}
return 0;
}
3.运行截图
以上就是本篇文章的全部内容啦,以后会不定时更新。
希望这篇文章能对大家有所帮助
拒绝白嫖 记得点赞