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、互相学习编程技巧:在编程中,相互讨论,可以更快更有效地解决问题,互相请教对方,可以得到能力上的互补。

自己优点:细心,认真,提出建议。缺点:不会遇难而上。
彭星文优点:认真,有耐心,提出建议。缺点:不会往后学习

posted @ 2019-05-10 17:49  L磊  阅读(193)  评论(0编辑  收藏  举报