首页
外语
计算机
考研
公务员
职业资格
财经
工程
司法
医学
专升本
自考
实用职业技能
登录
计算机
阅读以下应用程序说明和C程序,将C程序段中(1)~(7)空缺处的语句填写完整。 [说明] 以下[C程序]是对某电码明文(原文)进行加密形成密文。其加密算法如下。 假定原文为C1C2C3……Cn,加密后形成的密文为S1S2S3……Sn其中n
阅读以下应用程序说明和C程序,将C程序段中(1)~(7)空缺处的语句填写完整。 [说明] 以下[C程序]是对某电码明文(原文)进行加密形成密文。其加密算法如下。 假定原文为C1C2C3……Cn,加密后形成的密文为S1S2S3……Sn其中n
admin
2009-02-15
23
问题
阅读以下应用程序说明和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
程序员下午应用技术考试
软考初级
相关试题推荐
以下文件类型中,除__________外,都属于可执行文件。
在Excel中,绝对地址在被复制或移动到其他单元格时,其单元格地址______。
对某地区家庭人数的抽样调查统计结果如下表:根据此表,该地区每个家庭的平均人数大致为(28)。
某社区有12个积极分子A~L,他们之间的联系渠道见下图。居委会至少需要通知他们之中(67)________________个人,才能通过联系渠道通知到所有积极分子。
在Excel2010的A1单元格中输入函数“=ABS(ROUND(-1.478,2))”,按回车键后,A1单元格中的值为________________。
Word2010中的格式刷可用于复制段落的格式,若要将选中的当前段落格式重复应用多次,应()。
下列关于Windows7屏幕保护程序的叙述中,不正确的是__________。
要使Word能自动提醒英文单词的字母拼写是否正确,应设置Word的(47)选项功能。
双击某个非可执行程序的文件名将(24)。
Windows XP的许多应用程序的“文件”菜单中,都有“保存”和“另存为”两个命令。以下对这两个命令的叙述,正确的是(36)。
随机试题
在我国,植物新品种权的保护期根据不同科目而有所不同,给予20年保护的植物新品种有()
关于法律职业道德基本原则和法律职业道德的关系,下列哪些选项的表述是正确的?
下列基层中,属于嵌锁型粒料基层的有()。
某公司过去8年的产品销售量资料如下:要求回答下列互不相关的问题(计算结果均保留整数):用算术平均法预测公司2020年的销售量。
据新华社电,我国将建立以公民身份证号码和组织机构代码为基础的统一()。根据规划,这一制度建成后,我国每个公民一生都将有一个也是唯一的信用账号。
(2013年卷一第80题)专利实施许可合同中记载的下列哪些事项,可以作为人民法院确定侵权纠纷赔偿数额时的参照?
Onanaverageofsixtimesaday,adoctorinHollandpractices"active"euthanasia:intentionallyadministeringalethal(致死的)d
Startingthismonth,roughlyonequarteroftheworld’spopulationwilllosesleepandgainsunlightastheysettheirclocksah
A、Theyareconvenient.B、Theyareadvancedintechnology.C、Theyarecumbersome.D、Theyarecomputerized.C女士问:听说目前有支票授权系统可以使用。
A、Shepreferstogoshoppingwithhim.B、Shedoesnotwanttoeatout.C、Sheisinabadmoodtoday.D、Shewantstoenjoythepe
最新回复
(
0
)