- 1、本文档共3页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
2009年计算机网络技术三级上机试题练习129
2009年计算机网络技术三级上机试题练习129
函数ReadDat()实现从文件IN.DAT中读取一篇英文文章存入到字符串数组xx中;但这篇文件已被按行进行了加密,加密算法是这样的:假设原文的一行是字符串S1,加密后成为密文字符串S2,系统定义了一个密钥key(key>1),这样进行加密:先从S2的第一个字符计数,当数到第key个字符时,把S1的第一个字符放在S2的这个位置;然后接着从S2的下一个字符计数,当再次数到第key个字符时,把S1的第二个字符放在S2的这个位置……,以此类推;当S2的计数位置超出了字符串的长度时,就回到S2的起始位置向后计数(实际上是把S2当成一个圆环);直到S1中的所有字符都存入S2中,请编制函数Decode()对这篇文章按行进行解密,然后把解密后的每一行都按原顺序仍存放在数组xx中,最后调用函数WriteDat()把结果xx输出到文件OUT.DAT中。例:原文:DECODING密钥:key = 3密文:CIDONEDG原始数据文件的存放格式是:每行的宽度均小于80个字符,每一个单词的长度不大于20,含标点符号和空格。注意:部分源程序存放在文件prog1.c中。请勿改动主函数Main()、读数据函数ReadDat()和输出函数WriteDat()的内容。/*参考答案*/
#include <stdio.h>#include <string.h>#include <conio.h>
char xx[50][80];int maxline = 0; /*文章的总行数*/const int key = 3;
int ReadDat(void);void WriteDat(void);
void Decode(void){char str[80];int i,j,n,len;
for(i = 0; i < maxline; i++){len = strlen(xx[i]);j = -1;
for(n = 0; n < len; n++){j += key;if(j >= len)j -= len;
str[n] = xx[i][j];}
str[len] = '\0';strcpy(xx[i],str);}}
void main(){if(ReadDat()){printf("数据文件IN.DAT不能打开!\n\007");return;}
Decode();WriteDat();}
int ReadDat(void){FILE* fp;int i = 0;char*p;
if((fp = fopen("IN.DAT","r")) == NULL)return 1;
while(fgets(xx[i],80,fp) != NULL){p = strchr(xx[i],'\n');if(p)*p = 0;
i++;}
maxline = i;fclose(fp);return 0;}
void WriteDat(void){FILE* fp;int i;
fp = fopen("OUT.DAT","w");
for(i = 0; i < maxline; i++){printf("%s\n",xx[i]);fprintf(fp,"%s\n",xx[i]);}
fclose(fp);}
************************************************
文档评论(0)