欢迎来到冰豆网! | 帮助中心 分享价值,成长自我!
冰豆网
全部分类
  • IT计算机>
  • 经管营销>
  • 医药卫生>
  • 自然科学>
  • 农林牧渔>
  • 人文社科>
  • 工程科技>
  • PPT模板>
  • 求职职场>
  • 解决方案>
  • 总结汇报>
  • 党团工作>
  • ImageVerifierCode 换一换
    首页 冰豆网 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

    探究题参考答案.docx

    • 资源ID:6633350       资源大小:68.40KB        全文页数:14页
    • 资源格式: DOCX        下载积分:12金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录
    二维码
    微信扫一扫登录
    下载资源需要12金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    探究题参考答案.docx

    1、探究题参考答案探究问题1 黑色星期五问题有些西方人比较迷信,如果某个月的13号正好是星期五,这天被称为“黑色星期五”,他们就会觉得不太吉利。你能否编写程序,统计出在某个年份中,出现了多少次“黑色星期五”,并给出这一年出现“黑色星期五”的月份。并探究自公元1年以来,一年中最多会出现几次黑色星期五、最少会出现几次黑色星期五,是否可能某一年没有黑色星期五?已经在“C语言09.ppt”中77页解答。探究问题2 递归算法实现青蛙过河问题一、 问题描述一条小溪尺寸不大,青蛙可以从左岸跳到右岸,在左岸有一石柱L,面积只容得下一只青蛙落脚,同样右岸也有一石柱R,面积也只容得下一只青蛙落脚。有一队青蛙从尺寸上一

    2、个比一个小。我们将青蛙从小到大,用1,2,n编号。规定初始时这队青蛙只能趴在左岸的石头L上,当然是一个落一个,小的落在大的上面。不允许大的在小的上面。在小溪中有S个石柱,有y片荷叶,规定溪中的柱子上允许一只青蛙落脚,如有多只同样要求一个落一个,大的在下,小的在上。对于荷叶只允许一只青蛙落脚,不允许多只在其上。对于右岸的石柱R,与左岸的石柱L一样允许多个青蛙落脚,但须一个落一个,小的在上,大的在下。当青蛙从左岸的L上跳走后就不允许再跳回来;同样,从左岸L上跳至右岸R,或从溪中荷叶或溪中石柱跳至右岸R 上的青蛙也不允许再离开。问在已知溪中有S根石柱和y片荷叶的情况下,最多能跳过多少只青蛙?二、 程

    3、序设计思想定义函数Jump ( S ,y ) 最多可跳过河的青蛙数其中:S 河中柱子数y 荷叶数1、当河中无柱子时:即S =0,Jump(0,y)当y = 1 时,Jump(0,1)=2说明:河中有一片荷叶,可以过两只青蛙,起始时L上有两只青蛙,1#在2#上面。第一步:1#跳到荷叶上;第二步:2#从L 直接跳至R上;第三步:1#再从荷叶跳至R上。2、当y=2时, Jump(0,2)=3; 说明:河中有两片荷叶时,可以过3只青蛙。起始时: 1#,2#,3# 3只青蛙落在L上, 第一步:1# 从L跳至叶 1上, 第二步:2# 从L跳至叶 2上, 第三步:3# 从L直接跳至R上, 第四步:2# 从叶

    4、2跳至R上, 第五步:1# 从叶1跳至R上,采用归纳法:Jump(0,y)=y+1;意思是:在河中没有石柱的情况下,过河的青蛙数仅取决于荷叶数,数目是荷叶数+1。3、若Jump(S, y),先看一个最简单情况: S=1,y=1。从图上看出需要9步,跳过4只青蛙。 1# 青蛙从 L Y;2# 青蛙从 L S;1# 青蛙从 Y S;3# 青蛙从 L Y;4# 青蛙从 L R;3# 青蛙从 Y R;1# 青蛙从 S Y;2# 青蛙从 S R;1# 青蛙从 Y R;对于S = 1,y = 1的情形,从另外一个角度来分析若没有石柱S,最多可过y+1=2 只青蛙。有了石柱S后,最多可过2*2 = 4 只青

    5、蛙。步骤1:1#和2# 从L S;步骤2:3#和4# 从L R;步骤3:1#和2# 从S R;4、对于S = 1,y 1的情形若没有石柱S,最多可过y+1只青蛙。有了石柱S 后,最多可过2*(y+1) 只青蛙。步骤1:前y+1只从L S;步骤2:后y+1只从L R;步骤3:前y+1只从S R;5、对于S = 2,y 1的情形若只有石柱S1,最多可过2*(y+1)只青蛙。有了石柱S2后,最多可过4*(y+1)只青蛙。步骤1:前2*(y+1)只从LS2;步骤2:后2*(y+1)只从LR;步骤3:前2*(y+1)只从S2R;6、根据上述分析采用归纳法,可得出如下的递归形式:Jump(S,y)=2*J

    6、ump(S-1,y);意思是:先让一半的青蛙利用y片荷叶和S-1根石柱,落在河中剩下的那根石柱上;然后让另一半的青蛙利用y片荷叶和S-1根石柱,落在右岸的R上面;最后再让先前的一半青蛙,利用y片荷叶和S-1根石柱,落在右岸的R上面。递归边界: Jump(0,y)=y+1将上述分析出来的规律写成递归形式的与或结点图为:举例:S=3,y=4,算 Jump(3,4)三、程序代码:#include int Jump(int s,int y) int a;if(s=0) a=y+1;elsea=2*Jump(s-1,y);return a;void main() int s,y,a; printf(请输

    7、入石柱数s= ); scanf(%d,&s); printf(请输入荷叶数y= ); scanf(%d,&y); a=Jump(s,y); printf(“Jump(%d,%d)=%dn,s,y,a); 四、 运行结果请输入石柱数s=0请输入荷叶数y=3ump(0,3)=4请按任意键继续. . .请输入石柱数s=2请输入荷叶数y=2Jump(2,2)=12请按任意键继续. . .请输入石柱数s=5请输入荷叶数y=5Jump(5,5)=192请按任意键继续. . .探究问题3 超长整数相乘编程实现从键盘上读入两个超长正整数(可能几百上千位),计算它们的乘积并输出。#includemain( )

    8、char num11000,num21000; int num2000=0; int n,i,j,k,p,q; printf(输入两个整数:); scanf(%s,num1); scanf(%s,num2); p=strlen(num1); q=strlen(num2); for(n=0;np;n+) num1n=num1n-0; for(n=0;nq;n+) num2n=num2n-0; for(i=0;ip;i+) for(j=0;jq;j+) nump-1-i+q-1-j += num1i*num2j; for(n=0;n=0;n-) printf(%d,numn); 探究问题4 字符串

    9、替换试编写一函数char *my_replace(char *s1, char *s2, char *s3), 实现如下功能:把字符串s1中所有出现的字符串s2都替换成字符串s3,并通过函数名返回替换后的新字符串,但不得破坏s1。例如,当s1=aabcdabce, s2=abc, s3=ff,则函数返回的新字符串应该是affdffe。并编写主程序调用它,并以各种输入情况(s2比s3串长、短、相等)验证其正确性。(提示:尽量使用系统提供的字符串操作函数strcpy,strncpy,strstr, strlen, strcat来实现)#include #include #include char

    10、*replace(char *s1, char *s2, char *s3) char *p, *q, *r, *s; int l2, l3, l=0; l2 = strlen(s2); /* 串s2的长度 */ l3 = strlen(s3); /* 串s3的长度 */ p = s1; while (p=strstr(p,s2) != NULL) l+; /* 统计s2串出现的次数 */ p += l2; /* 跳过本次出现的s2串 */ l = strlen(s1) l*l2 + l*l3 + 1; /* 计算替换后新字符串的长度 */ s = r = (char *)malloc(l *

    11、 sizeof(char); /* 分配动态内存存放新字符串 */ p = s1; while (1) q = strstr(p, s2); /* s2是否在s1中出现,q是首次出现的位置*/ if (q != NULL) /* q不为空,表示剩余的s1串中有s2 */ l = q - p; /* l为s1中出现s2串之前的长度 */ strncpy(r, p, l); /* 将s1中出现s2串之前的子串复制到新串上 */ r += l; /* 将指向新串的指针移到串位 */ strcpy(r, s3); /* 将s3串复制到新串上,即替换了s1中的s2子串 */ r += l3; /* 将指

    12、向新串的指针移到串位 */ p = q + l2; /* 将指向s1串的指针移到s2子串出现的位置后, 为下一次循环做好准备 */ else /* q为空,表示剩余的s1串中已经没有s2 */ strcpy(r, p); /* 将s1串的剩余部分复制到新串的尾上, 注意:这里不能用strcat */ break; /* 终止循环 */ return (s); /* 返回指向所形成的新串的指针 */void main() char *a=aabcdabce, *b=abc, *c=ff, *d; d = replace(a, b, c); printf(result=%sn, d); free(

    13、d);探究问题5 用环形链表解约瑟夫问题。所谓环形链表,就是链表尾指针又指向了链表头,形成环状。所谓约瑟夫问题:就是,m个人每人一个编号:1,2,3,m,排成一个圆圈,由第1个人开始报数,每报数到第n人则该人就出列,然后再由下一个重新报数,直到剩下最后1个人,并打印出编号。/* Joseph problem */#include#includestruct node int num; struct node *next;struct node* biuld_circle(int n)/*建立一个n元素的圈*/ struct node *head = NULL,*p,*q = NULL; int

    14、 i; for (i = 0;i num = i; if (head = NULL) head = p; else q-next = p; q = p; q-next = head; return(head);void free_circle(struct node *head)/*释放一个圈的内存,实际上在这个程序中没有用到*/ struct node *p,*q = NULL; for (p = head-next;p != head;) q = p; p = p-next; free (q); free(p);struct node* kill(struct node *head,int

    15、 cycle)/*杀人过程,一直杀到只剩一个人*/ struct node *p,*q = NULL; int i; for (p = head;p != p-next;) for (i = 0;i next; p = p-next; free(q-next); q-next = p; return(p);main() int n,m; struct node *head; printf(please input the number of people:n); scanf(%d,&n); printf(please input the cycle:n); scanf(%d,&m); head

    16、 = biuld_circle(n); head = kill(head,m); printf(survivor:%d,head-num + 1); free(head);运行结果:please input the number of people:10please input the cycle:7survivor:9请按任意键继续. . .关于system函数的使用 system(“command”); 执行shell或 DOS命令。 需要 #include例如: #include#includevoid main() system(type a.txt); / 显示a.txt文件的内容在

    17、屏幕上 system(pause); / 暂停 system(cls); / 清屏如何显示当前时间 ftime函数/ crt_ftime.c#include #include #include int main( void ) struct _timeb timebuffer; char timeline26; errno_t err; time_t time1; unsigned short millitm1; short timezone1; short dstflag1; _ftime( &timebuffer ); / C4996 time1 = timebuffer.time; mi

    18、llitm1 = timebuffer.millitm; timezone1 = timebuffer.timezone; dstflag1 = timebuffer.dstflag; printf( Seconds since midnight, January 1, 1970 (UTC): %I64dn, time1); printf( Milliseconds: %dn, millitm1); printf( Minutes between UTC and local time: %dn, timezone1); printf( Daylight savings time flag (1

    19、 means Daylight time is in effect): %dn, dstflag1); err = ctime_s( timeline, 26, & ( timebuffer.time ) ); if (err) printf(Invalid argument to ctime_s. ); printf( The time is %.19s.%hu %s, timeline, timebuffer.millitm, &timeline20 );运行结果:Seconds since midnight, January 1, 1970 (UTC): 1356364050Millis

    20、econds: 359Minutes between UTC and local time: -480Daylight savings time flag (1 means Daylight time is in effect): 0The time is Mon Dec 24 23:47:30.359 2012请按任意键继续. . .=如何计时,估计一个程序的运行时间,以改进程序 time函数#include #include #include #include int main() time_t time1, time2; / 自1970年1月1日以来的总的秒数 int j=0, k=0; time( &time1 ); / 起始时间 while(j100) j+; k=0; while (k100000000) k+; time( &time2 ); / 终止时间 printf(time=%dsn, time2-time1); / 时间差,即为中间程序段运行所用时间运行结果:time=34s请按任意键继续. . .


    注意事项

    本文(探究题参考答案.docx)为本站会员主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2022 冰点文档网站版权所有

    经营许可证编号:鄂ICP备2022015515号-1

    收起
    展开