1991年程序员下午试题[4]

程序员 责任编辑:daydayup 2008-08-30

添加老师微信

备考咨询

加我微信

摘要:试题8阅读下列程序说明和C程序,将应填入程序中__(n)__处的字句,写在答卷纸的对应栏内。[程序说明]本程序对某电码文(原文)进行加密形成密码文.其加密算法如下:假定原文为C1C2C3...Cn,加密后形成的密文为S1S2S3...Sn,首先读入正整数Key(Key>1)作为加密钥匙,并将密文字符位置按顺时针方向连成一个环,如下图所示:加密时从

试题 8
阅读下列程序说明和 C 程序,将应填入程序中__(n)__ 处的字句,写在答卷纸的对应栏内。

[程序说明]
本程序对某电码文(原文)进行加密形成密码文.其加密算法如下:
假定原文为C123...Cn,加密后形成的密文为S123...Sn,首先读入正整数Key(Key>1)作为加密钥匙,并将密文字符位置按顺时针方向连成一个环,如下图所示:

  
加密时从 S1 位置起顺时针计数,当数到第 Key 个字符位置时,将原文中的字符放入该密文字符位置中,同时从环中除去该字符位置;接着从环中下一个字符位置起继续计数,当再次数到第 Key 个字符位置时,将原文中字符 C2 放入其中,并从环中除去该字符位置;依次类推,直至 n 个原文字符全部放入密文环中.由此产生的 S1S2...Sn 即为原文的密文。
例如,当 Key=3 时,原文: THIS IS AN DECODING SYSTEM 的密文为:
AOTGNHEDI YS D IMIETSNC SS
当Key=4时,该原文的密文为:
SSDTYD HTEGIASISCNM E ION
本程序将电码的原文存放在字符数组 old 中,加密钥匙存放在整数 Key 中.函数 decode 用于将原文 old 加密并返回密文字符数组的首指针。其中函数采用一个双向循环链表 CODE 来表示密文环.函数 strlen 用于计算一个字符串中的字符个数( 不包括字符串结尾符 '\0' )。为了简单起见,程序中假设内存容量足以满足动态存贮单元分配的要求。

[程序]
#include <stdio.h>
#include <alloc.h>
#define CR 13
typedef struct node
{
 char ch;
 struct node *forward; /* Link to next node. */
 struct node *backward;/* Link to previous node.*/
} CODE;
main()
{
 char __(1)__ ,old[256];
 int strlen() , key , num=0;
 printf("\nPlease input the telegraph: \n")l
 while ( num<255 && ( old[num++] = getch()) != CR );
old [ __(2)__ ] = '\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 ) );
}
char *decode(old,key)
char *old; int key;
{
 char *new; int length,count,i;
 CODE *loop,*p;
 length=strlen(old);
 loop=( __(3)__ ) malloc( length.sizeof(CODE) );
 for ( i = 1;i<length-1;i++ )
 {
loop[i].forward = &loop[i+1];
loop[i].backward = &loop[i-1];
 }
 loop[0].backward = &loop[length-1];
 loop[0].forward = &loop[1];
 loop[length-1].forward = loop;
 loop[length-1].backward = &loop[length-2];
 for ( p = loop,i = 0;i<length;i++ )
 {
for ( count = 1;count<key;count++ )
 p= __(4)__ ;
p->ch=.old++;
p->backward->forward = __(5)__ ;
p->forward->backward = __(6)__ ;
p=p->forward;
 }
 new = ( char *)malloc( ( length+1 ) *sizeof(char) );
 for ( i=0;i<length;i++ ) new[i] =l oop[i] *ch;
 new[length]='\0';
 return (new);
}
int strlen(s)
char *s;
{
 int len = 0;
 while ( __(7)__ != '\0' ) len++;
 return( len );
}

[1]  [2]  [3]  [4]  [5]  [6]  

更多资料
更多课程
更多真题
温馨提示:因考试政策、内容不断变化与调整,本网站提供的以上信息仅供参考,如有异议,请考生以权威部门公布的内容为准!

软考备考资料免费领取

去领取