
源程序如下:
#include"stdio.h"
voidmain()
{
inti /*身份z的第i位*/
ints[17] /*定义一个数组用来存放身份z的前17位*/
intt[17] /*各位相乘后的数组*/
intm /*余数*/
intt18 /*身份z的第18位0--9*/
chart18c /*身份z的第18位X*/
longintsum=0
for(i=0i<17i++)
{
printf("请输入身份z的第%d位:",i+1);
scanf("%d",&s[i])
switch(i+1)
{
/*身份z的1到17位要乘的数一次是7910584216379105842*/
case1:t[i]=s[i]*7break
case2:t[i]=s[i]*9break
case3:t[i]=s[i]*10break
case4:t[i]=s[i]*5break
case5:t[i]=s[i]*8break
case6:t[i]=s[i]*4break
case7:t[i]=s[i]*2break
case8:t[i]=s[i]*1break
case9:t[i]=s[i]*6break
case10:t[i]=s[i]*3break
case11:t[i]=s[i]*7break
case12:t[i]=s[i]*9break
case13:t[i]=s[i]*10break
case14:t[i]=s[i]*5break
case15:t[i]=s[i]*8break
case16:t[i]=s[i]*4break
case17:t[i]=s[i]*2break
}
sum=sum+t[i]
}
printf("前17位相乘后的和为%ld\n",sum)
m=sum%17
printf("对17取余后的值位:",m)
switch(m)
}
/*各个余数所对应第18位身份z号10X98765432*/
case0:t18=1printf("这是一个合法的身份z号码,第18位是%d",t18)break
case1:t18=0printf("这是一个合法的身份z号码,第18位是%d",t18)break
case2:t18c='X'printf("这是一个合法的身份z号码,第18位是%c",t18c)break
case3:t18=9printf("这是一个合法的身份z号码,第18位是%d",t18)break
case4:t18=8printf("这是一个合法的身份z号码,第18位是%d",t18)break
case5:t18=7printf("这是一个合法的身份z号码,第18位是%d",t18)break
case6:t18=6printf("这是一个合法的身份z号码,第18位是%d",t18)break
case7:t18=5printf("这是一个合法的身份z号码,第18位是%d",t18)break
case8:t18=4printf("这是一个合法的身份z号码,第18位是%d",t18)break
case9:t18=3printf("这是一个合法的身份z号码,第18位是%d",t18)break
case10:t18=2printf("这是一个合法的身份z号码,第18位是%d",t18)break
default:printf("这不是一个合法的身份z号码")
}
printf("\n")
}
VC++6.0测试如下(输入一位后按回车输入第二位数)。
在51单片机中,只要将一个值传送给累加器,这个数的奇偶校验值就会影响P。一般而言,在串行通讯中为确保传输数的准确,用到校验位的情况比较多。以下是程序代码:#include
main()
{
char dat
TMOD=0x20
TH1=0xfd
TL1=0xfd
TR1=1
SCON=0xd0
while(1)
{
dat++
ACC=dat
TB8=P //校验位送第九数据位TB8
SBUF=ACC
while(TI==0)
TI=0
}
}
while(len--!=0)这句的len的值循环一次就减少1,先执行len!=0,再执行len--。
当len为0时退出循环。
for(i=0x80
i!=0
i/=2)
0x80是十六进制数,也即128
当i!=0时,执行循环体,
然后i=i/2,即i值减半。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)