試題四(15分,每空3分)
閱讀以下說明和C語言程序,將應(yīng)填入___(n)___處的字句寫在答題紙的對應(yīng)欄內(nèi)。
[說明]
本程序?qū)δ畴姶a文(原文)進行加密形成密碼文,其加密算法如下:
假定原文為C1,C2,C3,…,Cn加密后形成的密文為S1,S2,S3,…,Sn,首先讀入正整數(shù)
key(key>1)作為加密鑰匙,并將密文字符位置按順時針方向連成一個環(huán),如下圖所示:
加密時從 S1 位置起順時針計數(shù),當數(shù)到第 key 個字符位置時,將原文中的字符放入該密文字符位置中,同時從環(huán)中除去該字符位置;接著從環(huán)中下一個字符位置起繼續(xù)計數(shù),當再次數(shù)到第 key 個字符位置時,將原文中字符 C2 放入其中,并從環(huán)中除去該字符位置;依次類推,直至 n 個原文字符全部放入密文環(huán)中。由此產(chǎn)生的 S1S2...Sn 即為原文的密文。
例如,當 Key=3 時,原文:this is a decoding system 的密文為:
aotgnhedi ys d imietsnc ss
當Key=4時,該原文的密文為:
ssdtyd htegiasiscnm e ion
#include
#include
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 *old,int key)
{ char *New; int length,count,i;
CODE *loop,*p;
length=strlen(old);
loop=(CODE *) malloc( length*sizeof(CODE) );
for ( i = 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
{ for ( count = 1;count
p= p->forward ;
___(3)___
p->backward->forward = p->forward ;
p->forward->backward = p->backward ;
___(4)___
}
New = ( char *)malloc( ( length+1 ) *sizeof(char) );
for ( i=0;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 ) );
}
相關(guān)推薦:計算機軟考程序員備考:程序設(shè)計知識點匯總北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |