2019春第十一周作业
这个作业属于哪个课程 | C语言程序设计II |
---|---|
这个作业要求在哪里 | 2019春第十一周作业 |
我在这个课程的目标是 | 理解并调用递归函数 |
这个作业在那个具体方面帮助我实现目标 | 锻炼我的思维 |
参考文献 | C语言程序设计(第3版) |
单选题
编程题
7-1 汉诺塔问题
汉诺塔是一个源于印度古老传说的益智玩具。据说大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘,大梵天命令僧侣把圆盘移到另一根柱子上,并且规定:在小圆盘上不能放大圆盘,每次只能移动一个圆盘。当所有圆盘都移到另一根柱子上时,世界就会毁灭。
请编写程序,输入汉诺塔圆片的数量,输出移动汉诺塔的步骤。
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\n",&n);
scanf("%c %c %c",&a,&b,&c);
hanio(n,a,b,c);
return 0;
}
void hanio(int n,char a,char b,char c)
{
if(n==1)
printf("%d: %c -> %c\n",n,a,b);
else
{
hanio(n-1,a,c,b);
printf("%d: %c -> %c\n",n,a,b);
hanio(n-1,c,b,a);
}
}
2)设计思路
3)本题调试过程碰到问题及解决办法
问题:不怎么理解递归的实现过程,想了解细节的实现过程。
解决办法:问助教,后来又看了下书,书上说“不要钻到细节的实现上去”,结果我还是不懂。
4)运行结果截图
7-2 估值一亿的AI核心代码
以上图片来自新浪微博。
本题要求你实现一个稍微更值钱一点的 AI 英文问答程序,规则是:
无论用户说什么,首先把对方说的话在一行中原样打印出来;
消除原文中多余空格:把相邻单词间的多个空格换成 1 个空格,把行首尾的空格全部删掉,把标点符号前面的空格删掉;
把原文中所有大写英文字母变成小写,除了 I;
把原文中所有独立的 can you、could you 对应地换成 I can、I could—— 这里“独立”是指被空格或标点符号分隔开的单词;
把原文中所有独立的 I 和 me 换成 you;
把原文中所有的问号 ? 换成惊叹号 !;
在一行中输出替换后的句子作为 AI 的回答。
1)实验代码
无
2)设计思路
无
3)本题调试过程中碰到问题及解决办法
问题:这题主要是实现五个功能,其中有三个比较容易实现,还有两个不知道怎样实现。
解决办法:未解决。
4)运行结果截图
无
预习作业
请举实例解释以下几个概念:数组指针,指针数组,指针函数,函数指针,二级指针,单向链表。
数组指针
数组指针,指的是数组名的指针,即数组首元素地址的指针。即是指向数组的指针。
例如:
int (*p)[10];
p即为指向数组的指针,又称数组指针。引自数组指针
指针数组
数组可以是任何类型,如果数组的各个元素都是指针类型,用于存放内存地址,那么这个数组就是指针数组。
例如:
char *color[5];
该指针数组有五个元素,元素类型是字符指针,用于存放字符数据单元的地址。
我们对它进行初始化,
char *color[5]={"red","blue","yellow","green","black"};
数组color的每个元素color[i]分别指向一个字符串,color[i]中存放的是该字符串的地址。
用我自己的话说就是:指针数组是同一类变量地址的一个集合。
指针函数
指针函数是一个函数。函数都有返回类型(如果不返回值,则为无值型),只不过指针函数返回类型是某一类型的指针。
例如:
int *pfun(int, int);
这样是定义个一个指针函数,该函数在最后返回一个指针。引自指针函数
函数指针
函数指针是指向函数的指针变量。 因此“函数指针”本身首先应是指针变量,只不过该指针变量指向函数。这正如用指针
变量可指向整型变量、字符型、数组一样,这里是指向函数。
例如:
int func(int x); /* 声明一个函数 */
int (*f) (int x); /* 声明一个函数指针 */
f=func; /* 将func函数的首地址赋给指针f */
或者使用下面的方法将函数地址赋给函数指针:
f = &func;
赋值时函数func不带括号,也不带参数,由于func代表函数的首地址,因此经过赋值以后,指针f就指向函数func(x)的代码
的首地址。引自函数指针
二级指针
二级指针指的是指向指针的指针。
例如:
int a=10;
int *p=&a;
int **pp=&p;
定义了三个变量a、p和pp并初始化。一级指针指向整型变量a,二级指针pp指向一级指针p,p和*pp代表同一个单元。
单项链表
单向链表(单链表)是链表的一种,其特点是链表的链接方向是单向的,对链表的访问要通过顺序读取从头部开始;链表是
使用指针进行构造的列表;又称为结点列表,因为链表是由一个个结点组装起来的;其中每个结点都有指针成员变量指向列
表中的下一个结点;列表是由结点构成,head指针指向第一个成为表头结点,而终止于最后一个指向NULL的指针。
例如:
--->[p1]---->[p2]...---->[pn]---->[NULL]
head p1->next p2->next pn->next
引自单向链表
学习进度条
周/日 | 这周所花的时间 | 代码行数 | 学到的知识点简介 | 目前比较迷茫的问题 |
---|---|---|---|---|
3/11-3/15 | 6小时 | 57 | 指针的定义与调用 | 无 |
3/18-3/22 | 8小时 | 80 | 二维数组的定义与调用 | 无 |
3/25-3/29 | 6小时 | 54 | 调用处理字符的函数 | 无 |
4/01-4/05 | 6小时 | 78 | 将数组名作为指针进行调用 | 无 |
4/08-4/12 | 6小时 | 104 | 指针与数组的关系 | 无 |
4/15-4/19 | 6小时 | 133 | 字符串处理函数 | 无 |
4/22-4/26 | 6小时 | 91 | 结构的定义与调用 | 无 |
5/06-5/10 | 6小时 | 22 | 递归函数、宏定义、文件包含 | 无 |
学习感悟
这周的题目有点难,这周的题目可以用到结构化程序的思想,对于函数的调用我还不是特别熟练,方法是有的,但实现起来比较难。
结对编程队友:彭星文2019春第十一周作业
结对过程:这周双方先进行编写,晚自习的时候进行了讨论,一是各自的问题,二是各自的思路,对于每到道题双方都讲出自己的写法,如果双方都不明白问题所在就会上网去查。
结对编程对现阶段我们的好处:
1、互相鼓励,不容易沮丧:团队工作能增加成员的工作积极性。因为在面对问题的时候,会有人一起分担,共同尝试新的策略。
2、互相监督,不容易偷懒:两个人一起工作需要互相配合,如果想偷懒去干别的,就会拖延工作进度。
3、互相学习编程技巧:在编程中,相互讨论,可以更快更有效地解决问题,互相请教对方,可以得到能力上的互补。
自己优点:细心,认真,提出建议。缺点:不会遇难而上。
彭星文优点:认真,有耐心,提出建议。缺点:不会往后学习