这个作业属于的课程

第十一周编程总结

我在这个课程的目标是

学习递归函数和用递归进行程序设计

这个课程在哪个具体方面帮我实现目标

通过汉诺塔问题学习递归在实际问题的作用

参考文献

<<C语言程序设计>>

 

 

 
7-1 汉诺塔问题* (10 分)
 

汉诺塔是一个源于印度古老传说的益智玩具。据说大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘,大梵天命令僧侣把圆盘移到另一根柱子上,并且规定:在小圆盘上不能放大圆盘,每次只能移动一个圆盘。当所有圆盘都移到另一根柱子上时,世界就会毁灭。

请编写程序,输入汉诺塔圆片的数量,输出移动汉诺塔的步骤。

输入格式

圆盘数 起始柱 目的柱 过度柱

输出格式

移动汉诺塔的步骤
每行显示一步操作,具体格式为:
盘片号: 起始柱 -> 目的柱
其中盘片号从 1 开始由小到大顺序编号。

输入样例

3
a c b

输出样例

1: a -> c
2: a -> b
1: c -> b
3: a -> c
1: b -> a
2: b -> c
1: a -> c


1).实验代码

#include<stdio.h>
void hanio (int n, char a, char b, char c);
int main (void)
{
    int n;
    char a,b,c;
    scanf("%d %c %c %c",&n,&a,&b,&c);
    hanio (n,a,c,b);
    
    return 0;
}
void hanio (int n, char a, char b, char c)
{
    if (n==1)
        printf ("1: %c -> %c\n",a,c);
    else{
        hanio (n-1,a,c,b);        /将a柱上n-1个圆盘通过c柱过度以移到b柱上/
        printf ("%d: %c -> %c\n",n,a,c);  /将a柱上的第n个圆盘移到c柱上/
        hanio (n-1,b,a,c);
    }
}

 

2)设计思路

 

3)本题做对过程碰到问题及解决办法

 

开始对汉诺塔问题不太明白,便看了书并参照245页的程序进行了编写,但后来发现有许多的不同,在输出格式和目的柱上出现了错误。改正之后,编程软件上输出结果正确,但pta上答案错误,耽误了许多时间,后来将hanio (n,'a','b','c')改为

hanio (n,a,c,b)才正确。
 

正确截图

 

7-2 估值一亿的AI核心代码 (20 分)
 

AI.jpg

以上图片来自新浪微博。

本题要求你实现一个稍微更值钱一点的 AI 英文问答程序,规则是:

  • 无论用户说什么,首先把对方说的话在一行中原样打印出来;
  • 消除原文中多余空格:把相邻单词间的多个空格换成 1 个空格,把行首尾的空格全部删掉,把标点符号前面的空格删掉;
  • 把原文中所有大写英文字母变成小写,除了 I
  • 把原文中所有独立的 can youcould you 对应地换成 I canI could—— 这里“独立”是指被空格或标点符号分隔开的单词;
  • 把原文中所有独立的 I 和 me 换成 you
  • 把原文中所有的问号 ? 换成惊叹号 !
  • 在一行中输出替换后的句子作为 AI 的回答。

输入格式:

输入首先在第一行给出不超过 10 的正整数 N,随后 N 行,每行给出一句不超过 1000 个字符的、以回车结尾的用户的对话,对话为非空字符串,仅包括字母、数字、空格、可见的半角标点符号。

输出格式:

按题面要求输出,每个 AI 的回答前要加上 AI: 和一个空格。

输入样例:

6
Hello ?
 Good to chat   with you
can   you speak Chinese?
Really?
Could you show me 5
What Is this prime? I,don 't know

输出样例:

Hello ?
AI: hello!
 Good to chat   with you
AI: good to chat with you
can   you speak Chinese?
AI: I can speak chinese!
Really?
AI: really!
Could you show me 5
AI: I could show you 5
What Is this prime? I,don 't know
AI: what Is this prime! you,don't know


本题做对过程碰到问题及解决办法

本题没有做出来,根据题目的规则将其中的条件逐一用程序实现,再将它们组装成一个程序。用这个方法编程很复杂,我尝试编写了前面几个条件的程序,但将它们综合在一起便出现了错误,而且太多的字符也容易搞混,后来上百度查找了这题,结果也没怎么看懂,所以也就没有复制粘贴了,打算再仔细研究下,毕竟题目难在代码长和变量多,需要时间解决。

 

预习作业

第十二周的教学内容是:第十一章 指针进阶

请大家查阅资料,思考如下问题:

请举实例解释以下几个概念:数组指针,指针数组,指针函数,函数指针,二级指针,单向链表。(无实例不给分)

请用自己的理解回答。如果有引用他人的文字,请一定要标出出处(使用Markdown的链接方式)。

数组指针:是指向数组地址的指针, 比如: int (*p)[5]; p即为指向数组的指针;

指针数组:是数组元素为指针的数组, 如int *p[3],定义了p[0],p[1],p[2]三个指针,本质为数组。

指针函数:是指带指针的函数,即本质是一个函数,指针函数一定有“函数返回值”,而且,在主调函数中,函数返回值必须赋给同类型的指针变量。如float *find(float(*pionter)[4],int n);

函数指针:函数指针是指向函数的指针变量,赋给函数指针的函数应该和函数指针所指的函数原型是一致的;int (*ptr)(intint);

二级指针:是指向指针的指针,用于存放二级指针的变量称为二级指针变量.如int i ; int*pi=&i; int*ppi=&*pi;

单向链表:

1,什么叫单向循环链表。单向循环链表是指在单链表的基础上,表的最后一个元素指向链表头结点,不再是为空。

2,由图可知,单向循环链表的判断条件不再是表为空了,而变成了是否到表头。

3,链表的结点表示

复制代码
1 struct LNode
2 {
3     int data;
4     struct LNode * next;
5 };
6 typedef struct LNode * linklist
复制代码

4,单向循环链表的操作集合,仍是defs.h里的操作集合,这里就不给出了。

5,单循环链表的初始化操作。示意图

             

实现:

复制代码
1 #include"defs.h"
2 
3 void InitList(linklist *L) //改变尾指针
4 {
5     *L = (linklist)malloc(sizeof(struct LNode)); //分配头结点
6     if (*L == NULL) //分配失败
7         exit(0);
8      (*L)->next = *L;  //指针域指向它本身
9 }
复制代码

链接:https://www.cnblogs.com/rookiefly/p/3451310.html

作业评价

本周题目难度很大,在参照书上代码并与队友讨论的基础上完成了第一题,后面的一题尝试了多次还是没有做出来,更别说后面的挑战题了,题目难是事实,但自己不行是主要原因,要加油呀。

 

结对编程

本周我和结对的队员在一起进行了编程,在书上列子的基础上两个人在一起讨论第一题的解决方法,但第二题过于复杂没能解决。结对编程能使两个人沟通起来,得到1+1>2的效果,但也要在两个人相互配合,一起努力,这次还不错,希望下次有更好的表现。

 

学习进度条

这周所花的时间

代码行

学到的知识点

遇到的问题

第二周

8h

51

文件指针的定义

指针的具体用法

第三周

12h

74

二维数组的定义和用其编程

如何使用指针对二维数组进行处理。

第四周

12h

98

利用数组对一组数进行排序

把一些简单的问题复杂化,不能找到最佳的方法。

第五周

10h

125

综合利用指针和数组解决问题

指针在编程中的作用

第六周

12h

150

学习指针的定义和作用

指针在问题中如何体现出简便

第七周

10h

128

学习指针和数组的关系

什么时候该用指针

第八周

13h

167

学习字符指针和字符串处理函数

内存动态分配的用法

第九周

12h

135

学习结构的使用

如何综合使用结构和指针

第十一周

12h

148

学习递归函数

如何利用递归函数进行程序设计

posted on 2019-05-10 20:49  lizhiyang  阅读(168)  评论(0编辑  收藏  举报