文档详情

递归实验报告.docx

发布:2019-06-07约6.36千字共20页下载文档
文本预览下载声明
递归实验报告 篇一:字符串,   宁波工程学院电信学院计算机教研室   实验报告   一、实验目的   1)熟悉串的定义和串的基本操作。   2)加深对串数据结构的理解,逐步培养解决实际问题的编程能力。   3)熟悉递归的定义和递归的算法设计。   4)加深对递归算法的理解,逐步培养解决实际问题的编程能力。   二、实验环境   装有Visual C++6.0的计算机。   三、实验内容   1、凯撒加密算法   凯撒密码(caeser)是罗马扩张时期朱利斯?凯撒(Julius Caesar)创造的,用于加密通过信使传递的作战命令。它将字母表中的字母移动一定位置而实现加密。 他的原理很简单,说到底就是字母与字母之间的替换。每一个字母按字母表顺序向后移3位,如a加密后变成d,b加密后变成e,······x加密后变成a,y加密后变成b,z加密后变成c。   例如:“baidu”用凯撒密码法加密后字符串变为“edlgx”。   试写一个算法,将键盘输入的文本字符串(只包含a~z的字符)进行加密后输出。 另写一个算法,将已加密后的字符串解密后输出。   提示:   ? 如果有字符变量c加密后则=’a’+(c-‘a’+3)%26   ? 采用顺序结构存储串,键盘输入字符串后保存到顺序串中;输出用顺序串的输出函数。   程序:   #include   #define MaxSize 100   typedef struct //串的类型定义   char ch[MaxSize];//存放串字符   int len; //串长   }SqString;   void SetString //设置源码   {   int i;   printf;   scanf;   for; //计算串的长度   s.len=i;   }   void TranString//开始加密   {   int i;   for   {   if   t.ch[i]=a+%26; //将每一个字母按字母表顺序向后移3位   else   t.ch[i]=s.ch[i];//如果字符不是字母a~z,则原样保留   }   t.len=s.len;   }   void RecoverString //开始解密   {   int i;   for   {   if //防止解密时字母溢出,对a,b,c三个字母另外考虑   t.ch[i]=s.ch[i]-3;   else if   t.ch[i]=s.ch[i]+23;   else   t.ch[i]=s.ch[i]; //如果字符不是字母a~z,则原样保留 }   t.len=s.len;   }   void DispString //输出字符串   int i=0;   while   {   printf; //字母的逐个输出   i++;   }   printf;   }   int main   {   SqString s1,s2,s3; //s1是源码,s2是加密后密码,s3是解密后密码   SetString; //输入字符串   DispString; //输出字符串   TranString;//加密   DispString; //加密后输出字符串   RecoverString;//解密   DispString; //解密后输出字符串   return 0;   }   按实验要求首先定义顺序串,实验的难点在于密码的加密 和解密的实现,特别是再解密时,字母的溢出问题,在参考网上程序后很好地解决了这个问题。在字符串的输入时,%s和%c的用法混淆,导致实验一度无法进行。实验编完后,又发现一个如果输入的是非字母的字符,程序就无法运行,因此添加了非字母字符维持原样的代码,使得程序更加完整。   2、求解n皇后问题   编写一个程序,求解皇后问题:在n×n的方格棋盘上,放置n个皇后,要求每个皇后不同行、不同列、不同对角线。   要求:使用递归算法求解;皇后的个数n由用户输入,其值不能超过20。   程序:   #include   #include   #include   const int N=20; //最多皇后个数   int count=0;//记录解个数   int q[N]; //存放皇后各皇后所在的行号   void print{//输出一个解   int i;   count++;   printf;   for   printf;   printf;   }   int find{ //测试第k列的i行上能否摆放皇后   int j;   j=1;   whil
显示全部
相似文档