请把问题的描述提供的更具体一些,否则无法提供更详细的帮助。
就现有的信息来看,有这几个点:1.C语言字符串
。就是以型氏单字节字符为内容,用'\0'表示结尾的巧租芹字符串表示方式。
2.校验和。由数据计算得到的一个数值,具有以下两个特性:
a)相同的数据计算出的校验和结果必定是相同的
b)数孝毕据有所变动时,计算出的校验和一般不相同
常用的校验和有累加和异或方式。比如,[1,2,3,4,5]这一组数据的累加较验和就是1+2+3+4+5=15
3.异或。异或是一种二进制(逻辑)运算,定义如下:
1与1、0与0的异或结果为0
1与0、0与1的异或结果为1
如35和27,其二进制表示为:100011和11011。低位对齐后进行异或,结果为:111000,也就是56
4.在C语言中,异或运算的运算符为:^
也就是说35^27的值就是56。【temp=temp+*chk8】
temp加上 chk8地址并携清上隐陵的值 再复绝前制给temp
【if(temp<*chk8)】
如果temp小于chk8地址上的值
temp自增chk8位置
自增
*chk8 你可以当它是个变量
chk8 的值是一个地址chk8++ 指针
往后移,后移的大小和指针指向类型大小一样.
#include<stdio.h>
int Quicksum(char *str) //用指针做校验函数的参数,来接收被校验的字符串A;
{
int sum=0,loc=1,i,n //sum代表校验和,loc代表每个字符在字符串A里的位置;
char *p
p=str //将被校验字符串A的地址赋值给字符指针p,用p表示位置;
n=strlen(p) // 用strlen函数求出A的有效长度;
for(i=0i<ni++) //注意循环的次数。体会i<n的意思,保证能计算到每个字符
{
if((*p)==' ') {p++ loc++continue} //如果遇到空格,就将位置指针向后移动做瞎一个,跳过空格
//注意loc也要增加一,为了正确记录每个字符的位置
sum+=((*p-'A')+1)*loc //如果此处不是空格,就根据校验计算该位置所代表的和,进庆棚行累加
loc++ //将位置指针移动到下一个字符,同时loc也跟着变化
p++
}
return sum //返回校验和
}
void main()
{
int jiaoyanhe
char *string
printf("Please input (A-Z) : ")
gets(string) //使用gets函数输入字符串;
jiaoyanhe=Quicksum(string) //调用Quicksum函数进行校验和的计算。
printf("jiao yan he : ")
printf("%d\n",jiaoyanhe)
}
上机运行的时候,把注释全删了吧,要不然可能运行出错,多体会一下吧,这只是其中的一种方法而已,多上机运行代码誉胡则,理解下里面的逻辑,好运。
评论列表(0条)