c语言程序怎样添加说明,阅读以下说明和C语言程序,将应填入(n)处的字句写在对应栏内。【说明】本程序..._考试资料网...

阅读以下说明和C语言程序,将应填入(n)处的字句写在对应栏内。

【说明】

本程序对某电码文(原文)进行加密形成密码文,其加密算法如下:

假定原文为C1,C2,C3,…,Cn加密后形成的密文为S1,S2,S3,…,Sn,首先读入正整数 key(key>1)作为加密钥匙,并将密文字符位置按顺时针方向连成一个环,如下图所示:

516d598fb2b19eda61a01accc29a43b5.png

加密时从S1位置起顺时针计数,当数到第key个字符位置时,将原文中的字符放入该密文字符位置中,同时从环中除去该字符位置;接着从环中下一个字符位置起继续计数,当再次数到第key个字符位置时,将原文中字符C2放入其中,并从环中除去该字符位置:依次类推,直至n个原文字符全部放入密文环中。由此产生的 S1S2…Sn即为原文的密文。

例如,当Key=3时,原文this is a decoding system的密文为:

aotgnhedi ys d imietsnc ss

当Key=4时,该原文的密文为:

ssdtyd htegiasiscnm e ion

本程序将电码的原文存放在字符数组old中,加密钥匙存放在整数key中。函数decode用于将原文old加密并返回密文字符数组的首指针。其中函数采用一个双向循环链表CODE来表示密文环:函数strlen用于计算一个字符串中的字符个数(不包括字符串结尾符'/O')。为了简单起见,程序中假设内存容量足以满足动态存储单元分配的要求。

include <stdio.h>

include <stdlib.h>

typedef struct node

{ char ch;

struct node *forward;/* Link to next node. */

struct node *backward;/* Link to previous node.*/

} CODE;

int strlen(char *s)

{ int len=0;

while (*s++!='/0')

len++;

return(len);

}

char *decode(char *otd,int key)

{ char *New; int length,count,i;

CODE *loop,*p;

length=strlen(old);

loop=(CODE *) malloc(length*sizeof(CODE));

for (i=1;i<length-1;i++)

{ loop[i],forward=&loop[i+1];

(1)

}

loop[0].backward=&loop[length-1];

loop[0],forward=&loop[1];

loop[length-1].forward=loop;

(2)

for (p=loop,i=0;i<length;i++)

{ for (count=1 ;count<key;count++

p=p->forward;

(3)

p->backward->forward=p->forward;

p->forward->backward=p->backward;

(4)

}

New=(char *)malloc((length+1) *sizeef(char));

for (i=0;i<length;i++)

(5)

New[length]='/0';

return (New);

}

void main()

{ char old[256];

int key, num=0;

printf('/nPlease input the telegraph: /n');

while (num<255 && (old[num++]=getchar())!='/n');

old [(num==255)?num:num-1]='/0';

do

{ printf('/nPlease input Key (Key>1):');

scanf('%d',&key);

} while (key<=1);

printf( '/nThe decode of telegraph:'%s'is:/n'%s'/n',old,decode(old,key));

}

A.shangxueba.cn/images/ct_csrppxm_crppxprogbc_00248(200911).jpg'

B.h>

C.h>

D.*/

E.backward=&loop[length-1];

F.forward=loop;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值