2019第十一周作业

2019第十一周作业

问题 回答
这个作业属于哪个课程 函数与程序结构
这个作业要求在哪里 https://www.cnblogs.com/pengchen511/p/10564067.html
我在这个课程的目标是 要求学生能够对相对复杂的问题,合理定义程序的多函数结构;能够使用递归函数进行编程;掌握宏的基本用法;掌握编译预处理的概念。
这个作业在那个方面帮我实现目标 了解递归函数的基本概念,和其他少些函数结构
参考文献 C语言程序设计1

基础作业

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 c,char b);
int main()
{
  int n;
  char a,c,b;
  scanf("%d\n",&n);
  scanf("%c %c %c",&a,&c,&b);
  hanio(n,a,c,b);
  return 0;
}

void hanio(int n,char a,char c,char b)
{
    if(n==1)
       printf("%d: %c -> %c\n",n,a,c);
    else{
        hanio(n-1,a,b,c);
        printf("%d: %c -> %c\n",n,a,c);
        hanio(n-1,b,c,a);
    }   
}

2)设计思路

3)遇到的问题及错误

问题 这个题目我是参考书上的,但有一点点不同就是这个题目要我们自己输入acb,而书上是直接去abc,但我还是有hanio(n,'a','c','b');所以答案错误。

解决 改成hanio(n,a,c,b);因为abc已经输入了。

4)正确运行截图

心得 这个题目呢主要是考察我们对递归函数的概念,和汉诺塔函数,了解就应该没问题了。

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

以上图片来自新浪微博。
本题要求你实现一个稍微更值钱一点的 AI 英文问答程序,规则是:
无论用户说什么,首先把对方说的话在一行中原样打印出来;
消除原文中多余空格:把相邻单词间的多个空格换成 1 个空格,把行首尾的空格全部删掉,把标点符号前面的空格删掉;
把原文中所有大写英文字母变成小写,除了 I;
把原文中所有独立的 can you、could you 对应地换成 I can、I 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

解答

这个题目对我来说难度很大,尽管我在网上搜了答案,但还是很多看不懂,可能是我差的原因吧
但这个题目总的来说还是了解了大致过程,先把头空格去掉,再把后面的问好改感叹号,再把对话中的canyou could you 改成I can I could 还又me I 改you之类的
好像还少了点什么,但即使这样我还是不会,不知道怎么操作。

7-3 ***八皇后问题 (20 分)

在国际象棋中,皇后是最厉害的棋子,可以横走、直走,还可以斜走。棋手马克斯·贝瑟尔 1848 年提出著名的八皇后问题:即在 8 × 8 的棋盘上摆放八个皇后,使其不能互相攻击 —— 即任意两个皇后都不能处于同一行、同一列或同一条斜线上。
现在我们把棋盘扩展到 n × n 的棋盘上摆放 n 个皇后,请问该怎么摆?请编写程序,输入正整数 n,输出全部摆法(棋盘格子空白处显示句点“.”,皇后处显示字母“Q”,每两格之间空一格)。

输入格式

正整数 n (0 < n ≤ 12)

输出格式

若问题有解,则输出全部摆法(两种摆法之间空一行),否则输出 None。
要求:试探的顺序逐行从左往右的顺序进行,请参看输出样例2。

输入样例1

3

输出样例1

None

输入样例2

6

输出样例2

. Q . . . .
. . . Q . .
. . . . . Q
Q . . . . .
. . Q . . .
. . . . Q .

. . Q . . .
. . . . . Q
. Q . . . .
. . . . Q .
Q . . . . .
. . . Q . .

. . . Q . .
Q . . . . .
. . . . Q .
. Q . . . .
. . . . . Q
. . Q . . .

. . . . Q .
. . Q . . .
Q . . . . .
. . . . . Q
. . . Q . .
. Q . . . .

解答

这个题目对我来说和上题目一样不会,但也有一点点想法,至少先要输出一张n阶的表,再根据题目要求的摆放位置来解答,来输出结果,但我在这一步
想不到要怎么做

预习作业

1.指针数组   指针数组是以指针定义的指针类型数组,比如 int *p[10],
2. 数组指针  是定义一个指针类型然后这个指针指向一个数组  比如  int a[10],*p=&a;
3.函数指针   指向函数的指针,类型名指定函数返回的类型,变量名是指向函数指针变量的名称  比如 int (*fun)(int,int)
4.指针函数   定义指针,指针可以做为返回值返回主函数,比如 函数接口之后,要返回计算的值,我们以前要用return ,现在只用指针代替要返回的就行了
5.二级指针 大概就是在指针的基础上再给它一个指针定义,比如 int a;int *p=&a;int **pp=&p;
6 单向链表 结构体内的成员包含指向自身结构体的结构指针。 比如:struct num{int n;struct num *next=NULL}; 结构指针next指向下一个同类型的结构首地址,可以通过next找到下一个结构。

本周学习进度条

第十一周 这周所花时间 代码行数 学到的内容简介 目前比较困惑
5/6-4/12 10小时 31 递归函数,宏定义 对宏定义不懂

本周学习感悟

这周我们学习了递归函数和宏定义,但是对递归函数只是了解,对于宏定义是更本不懂,不懂结构操作
对于这周的学习自不觉得不好,也对自己很失望,好像是白学了,对于作业基本上是不会了,完不成,但下周一定努力。

累计字数和代码行数

时间 累计字数 累计代码长度
第一周 126 23
第二周 335 68
第三周 461 105
第四周 584 157
第五周 724 227
第六周 841 283
第七周 1002 391
第八周 1136 512
第九周 1280 609
第十一周 1412 641

折线图

结对编程

优点:

      1,如果代码有问题可以两个人找错误
       2,两个人可以相互督促学习
       3,可以增进两个人之间的友谊

缺点

要是两个人有不同的思路,处理不好会闹矛盾,从而单独解决
posted @ 2019-05-10 14:39  渔家傲。  阅读(271)  评论(1编辑  收藏  举报