首页
外语
计算机
考研
公务员
职业资格
财经
工程
司法
医学
专升本
自考
实用职业技能
登录
计算机
阅读以下应用程序说明和C程序,将C程序段中(1)~(7)空缺处的语句填写完整。 [说明] 以下[C程序]是对某电码明文(原文)进行加密形成密文。其加密算法如下。 假定原文为C1C2C3……Cn,加密后形成的密文为S1S2S3……Sn其中n
阅读以下应用程序说明和C程序,将C程序段中(1)~(7)空缺处的语句填写完整。 [说明] 以下[C程序]是对某电码明文(原文)进行加密形成密文。其加密算法如下。 假定原文为C1C2C3……Cn,加密后形成的密文为S1S2S3……Sn其中n
admin
2009-02-15
33
问题
阅读以下应用程序说明和C程序,将C程序段中(1)~(7)空缺处的语句填写完整。
[说明]
以下[C程序]是对某电码明文(原文)进行加密形成密文。其加密算法如下。
假定原文为C1C2C3……Cn,加密后形成的密文为S1S2S3……Sn其中n为小于256的任意自然数。首先读入正整数Key(Key>1)作为加密钥匙,并将密文字符位置按顺时针方向连成一个环,如图4-12所示。
图4-12 密文字符环示意图
加密时从S1位置起顺时针计数,当数到第Key个字符位置时,将原文中的字符放入该密文字符位置中,同时从环中除去该字符位置;接着从环中下一个字符位置起继续计数,当再次数到第Key个字符位置时,将原文中字符C2放入其中,并从环中除去该字符位置;依此类推,直至n个原文字符全部放入密文环中。由此产生的S1S2……Sn即为原文的密文。
例如,原文:One World One Dream。当Key=5时,其密文为:me OnWlanD oOedrer;当Key=6时该原文的密文为:oeDn OedrrOn Wma le。程序使用示例如图4-13所示。
图4-13 程序使用示例
在[C程序]中,将电码的原文存入字符数组old[],加密钥匙存入在整数变量Key中。函数decode用于将原文old加密并返回密文字符数组的首指针。其中,函数采用一个双向循环链表CODE来表示密文环。函数strlen用于计算一个字符串中个数(不包括字符串结尾符’\0\)。为了简单起见,程序中假设内存容量足以满足动态存贮单元分配的要求。
[C程序]
#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("\n Please input the telegraph:\n")
while (num<255 && (old[num++] = getch() != CR );
old [(2)] = ’\0’;
do
{ printf("\n Please input Key=?(Key>1):");
scanf ("%d",& key);
} while (key<=1);
printf("\n The 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
.forward = &loop[i+1];
loop
.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
= loop
.ch;
new[length]=’\0’;
return (new)
}
int strlen(s)
char *s;
{ int len = 0;
while ((7) !=’\0’)
len++;
return( len );
}
选项
答案
本案例是对一字符串根据正整数key进行加密处理。C程序中原文存放在数组old中,用函数 decode(old, key)将原文old加密成密文,并返回存放密文字符数组的首指针。了解加密算法和存放原文与密文的数据结构及完成加密功能的函数名称后,再仔细阅读程序,分析给出的语句在加密过程中的作用,就能逐步求得解答。 主函数main用来接收输入参数并输出加密结果。仔细阅读程序,可知加密函数decode在main之后定义而被main引用,在引用前应给予说明。因此(1)空缺处是用来说明函数decode的,其所填入的内容是“*decode()”。 主函数中用while循环语句读入原文并存放在数组old[]中,控制条件是已接收255个字符或回车符。在C语言中规定,一个字符串数据总是以‘\0’为结束标志。在接收字符过程中,变量num总是指向下一个要接收的字符存放位置。如果已接收255个字符,就应该把‘\0’放入old[255];如果遇到回车符,因其不是原文字符,则应该把‘\0’放入old[num-1]中。因此(2)空缺处需要使用C语言中的条件语句来完成相应的功能,该空缺处所填入的内容是“(num==255)?num:num-1”。 函数decode把存放在old中的原文按key值进行加密,加密结果存放在以new为首地址的字符串中,并将该地址返回。这此信息可从函数一开始的“char *decode(old,key)”和函数结束处的"return (new);”得知。函数decode中调用另一个函数length(old),以计算数组old中的字符个数,并利用此长度去分配存储空间。该存储空间用于存放密文,空间的首地址指针为loop,类型为CODE。借鉴语句“new=(char *)malloc((length+1) *sizeof(char));”可得,(3)空缺处所填入的内容是“CODE*”,使之成为待加密的双向环状链表。 在函数decode中,对待加密的双向环状链表加密之后,利用for循环语句找出应从环中去除字符的位置,因此(4)空缺处所填入的内容是“p->forward”,使指针p指向下一个节点。按题干说明的加密算法,应把*old放入该节点,并要把该节点从双向链表中删除。(5)、(6)即为将该节点从链表中脱钩,节点本身仍然存在,可以通过loop[i]的形式取其密文。因此(5)、(6)空缺处所填入的内容分别是“p->forward”和“p->backward”。 函数strlen的功能是计算字符串的长度。它先取字符串进行判别,即是否为字符串的结束标志‘\0’,是则结束;否则应使S指向该串的下一个字符,同时计数器加1。因此(7)空缺处所填入的内容是“*s++”。
解析
转载请注明原文地址:https://kaotiyun.com/show/kEjZ777K
本试题收录于:
程序员下午应用技术考试题库软考初级分类
0
程序员下午应用技术考试
软考初级
相关试题推荐
信息处理技术员除了应熟练使用计算机进行信息处理操作外,还应熟悉本岗位相关的业务知识,其理由比较多,但不包括(67)。
某工作站无法访问域名为www.test.com的服务器,此时使用ping命令按照该服务器的IP地址进行测试,响应正常。但是按照服务器域名进行测试,出现超时错误。此时可能出现的问题是(17)。
对用户来说,信息系统的(14)反映了系统的功能。
Excel中,快捷功能按钮的功能是(51)。
企业信息系统的用户一般不包括()。
社会问卷调查是一种常见的调查方法。设计问卷的注意事项中不包括(31)。
Word定时自动保存功能可以()。
设有关系R、S、T如下所示,则(55)________________。
在Excel2003中,A1到E6单元格的值如下图所示,若在A7单元格中输入计算众数的函数“=MODE(A1:E6)”,按回车键后,则.A7单元格显示的值为(47)。
计算机运行一段时间后性能一般会有所下降,为此需要用优化工具对系统进行优化。系统优化的工作不包括()。
随机试题
公证机构的任务。
在选择重置成本时,在同时可得复原重置成本和更新重置成本的情况下,应该选择【】
A.双下肺固定部位的湿啰音B.呼气相延长的弥漫性哮鸣音C.杵状指、趾D.胸部X线检查上双侧肺门淋巴结对称性肿大E.局限性的喘鸣音结节病Ⅰ期可见
(一)甲企业于2000年以划拨方式取得某城市四级地范围内的一宗工业用地,土地面积为4000m2,随后投入资金200万元进行厂房建设,厂房总建筑面积为2500m2。2003年,由于生产发展的需要,甲企业先后向乙、丙两家银行申请房地产抵押贷款,并分别获得贷款8
已知函数y=x3—4x+1,其拐点为______.
一个城市的基础设施建设,不需要________的东西,那些急功近利的政绩工程往往经不起时间的________。填入画横线部分最恰当的一项是:
在商品经济运行中,价值、价格、供求三者之间的关系是()
查询"读者"表的所有记录并存储于临时表文件one中的SQL语句是( )。
在Access的5个最主要的查询中,能从一个或多个表中检索数据,在一定的限制条件下还可以通过此查询方式来更改相关表中记录的是()。
为实现以ADSL.方式接入Internet,至少需要在计算机中内置或外置的一个关键硬设备是()。
最新回复
(
0
)