完成下列训练题的基本步骤是:
1、 问题分析及解决方案框架确定
充分地分析和理解问题本身,明确问题到底要做什么。(what to do?)
在确定解决问题框架过程中(how to do?),考虑怎样使程序结构清晰、合理、简单和易于调试,并确定每个函数的简单功能,以及函数之间的调用关系。
2、 详细设计和编码
确定算法的主要流程,在此基础上进行代码设计(coding),一般来讲,每个明确的功能模块程序不超过60行代码,否则,功能要继续分解。
3、 上机前编写程序与检查
上机前检查程序可有效提高调试效率,减少上机调试程序时的无谓错误。
程序检查主要有两种途径:用一组测试数据手工执行程序;或者通过阅读或给别人讲解自己的程序而深入、全面地理解程序逻辑,把程序中的明显错误事前排除。
4、上机调试程序
提供的结果应当包括:
算法、数据结构的设计、程序清单
1、猜数游戏
游戏的开始由机器产生一个随机数(1~100之间,用库函数random()取值),然后游戏者在程序的提示下猜数,若输入的数比这个数大,程序提示“your answer is HIGH,try again!”否则,程序提示“your answer is LOW,try again!”直到猜对为止。程序可以实现连续猜数,直到游戏者退出。
程序输出要求:累计游戏者猜对这个数所需的次数n,当n<=7时,给出“congratulation!”,当7<n<15时,给出“I believe you can do it better!”;当n>15时,用exit(0)库函数退出程序。
2、百钱百鸡问题(穷举算法)
我国古代数学家张丘建在《算经》中出了一道题“鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一。百钱买百鸡,问鸡翁、鸡母、鸡雏各几何?”
注:穷举法是最简单、最常见的一种程序设计方法,它充分利用了计算机处理的高速特性。使用穷举法的关键是确定正确的穷举范围,即不能过分扩大,也不能过分缩小穷举的范围。
3、请编写一个程序,计算表达式:data1 op data2的值。其中,op为运算符+、-、*、/、%。
4、打印所有的水仙花数
5、编写一个程序,实现将输入的一个无符号整数转换为二进制和八进制表示,分别存入字符数组中并输出。(提示:算法采用模拟人工法)
注:计算机模拟人功法是编程中常用的算法,这种方法要求编程者首先分析在人工方式下解决问题的过程,从中出步骤和规律,然后编写程序,按照人工解决问题的步骤和规律进行操作。
6、判断一个数是否是数组中的成员(用二分查法)
已知数组a中一共有10个已经排好序的整数(由小到大排序)。现在从键盘上输入一个数,判断这个数是否是数组a中的数,如果是的话,打印出此数在数组a中的位置,否则打印“can’t find!”。
提示:设待查的数为x,设置三个位置变量l、编写函数其功能是计算一个字符串m、h分别代表查范围的顶部、中间位置和底部,m=(l+h)/2,把数组分成a[m]为中点的两段范围。判断x是否等于a[m],若是,则到。若大于a[m],则x必定在后半段范围,即在a[m+1]到a[h],则舍弃前半段,再在后半段重新划分两段范围,定出l、m、h,重复以上步骤,逐步缩小查范围。
7、位数大小排序(掌握数值排序算法)
输入一个五位整数,对此整数中的五个数值进行从大到小的顺序排序,形成一个新的五位整数,并输出这个整数。 要求:用函数调用
8、有一行字符,要求将其中每个单词中的第一个字母改成大写字母(如果原来已是大写字母则不变)。
9、设计一个函数,要求删去指定文字行中的某个字符。此行文字和要删去的字符均由键盘
在主函数中输入。删去之后的文字行也要求在主函数中输出。
10、将螺旋方阵存放到n×n的二维数组中并把它打印输出。要求由程序自动生成如下图所示的螺旋方阵(而不是人为地初始化或逐个赋值)。n由程序读入。
11、请编写函数fun,函数的功能是求出二维数组周边元素之和,作为函数值返回。二维数组中的值在主函数中赋予。(数组维数用宏定义)
12、矩阵乘法(数值求解算法)
编写一个函数,实现矩阵A(2行3列)与矩阵B(3行2列)相乘,乘积放在C数组中。在主函数中定义矩阵A和矩阵B,并输出结果。
13、求所有不超过200的N值,N的平方是具有对称性质的回文数。回文数就是将一个数从左往右读都是一样的,如:满足题意要求的数有:N=11,11的平方为121,121为一个回文数。
14、计算分数的精确值
使用数组精确计算m/n(0<m<n<=100)的值,如果m/n是无限循环小数,则计算并输出它的第一循环节,同时要求输出循环节的起始位置(小数位的序号)
由于计算机内字长有限,常规的浮点运算都有精度限制,为了得到高精度的计算效果,就必须自行设计算法。
提示:可将商存放在一维数组中,进行除法运算时,可模拟人的手工操作,即每次求出商的一位后,将余数乘以10,再计算商的下一位。若某次余数为0,则为有限不循环小数。若某次计算后的余数与前面的某个余数相同时,则m/n是无限循环小数。
15、马克思手中的数学题(穷举算法)
马克思手稿中有一道趣味数学题:有30个人,其中有男人、女人、小孩各若干,在一家
饭馆吃饭总共花了50先令:每个男人花3先令,每个女人花2先令,每个小孩花1先令,问男人、女人、小孩各有几人?
16、用梯形法求定积分(数值求解算法)
用梯形法编程求函数f(x)=x2+2x+1的定积分 f(x)dx的值。(我这里没有装函数,第一项为x的平方,后面f(x)前有个积分符号,范围是从0到2)
提示:把积分区间[a,b]等分为n等份(a、b、n的值由程序输入),可得到若干个小梯形,积分面积就近似为这些小梯形面积之和。
17、一个奇异的三位数(穷举算法)
一个自然数的七进制表达式是一个三位数,而这个数的九进制表示也是一个三位数,且这两个三位数的数码顺序刚好相反,求这个三位数。
18、约瑟夫问题(掌握一维数组的用法)。
15个基督教徒和15个异教徒在海上遇险,必须将一半的人投入大海,其余的人才能幸免于难,
于是想了一个办法:30个人围成一个圆圈,从第一个人开始依次报数,每数到第九个人就将他扔入大海,如此循环直到仅余15个人为止。问:怎样排法,才能使每次投入大海的是异教徒?
提示: 30个人顺序编号,自增量k报数,k%9==0时,此人投入大海。投入大海标志为置数组元素值为0或(-1),投入大海的人不再报数。
程序输出要求:程序执行后,显示原始顺序,每次投入大海人的信息及剩下人的顺序。
19、回文数的形成
任取一个十进制整数,将其倒过来后与原来的整数相加,得到一个新的整数后重复以上步骤,则最终可得到一个回文数。请编程验证。(回文数就是将一个数从左向右读都是一样的,如121,11等)。(注:回文数不超过2147483647)
回文数的这一形成规则目前还属于一个猜想,尚未获得数学上的验证,有些回文数要经历上百个步骤才能获得,请编程验证,打印形成过程。如输入整数78,则形成回文数的过程为: 78+87=165,165+561=726,726+627=1353,1353+3531=4884。
提示:用一个函数来求反序数,另一个函数判断是否为回文数,在主函数中输入输出。
20、人机猜数游戏
由计算机“想”一个四位数,请人猜这个四位数是多少。人输入一个四位数后,计算机首先判断这个数四个数位中有几个猜对了,并且在猜对的数字中又有几位位置也是对的,将结果显示出来,给人以提示,请人再猜,直到人猜出计算机所想的四位数为止。请编程实现该游戏,游戏结束时,显示人猜一个数共用了几次。
提示:库函数random()产生一个随机数。
如: int z;
z=random(9999); //产生一个0~9999的随机数
21、条件编译
用条件编译方法实现以下功能:
输入一行电报文字,可以任选两种输出,一为原文输出;一为将字母变为其下一个字母,译为密码输出(如’a’变为’b’………’z’变为’a’)。用宏命令来控制是否要译成密码。例如: #define change 1 则输出密码,若#define change 0则不译成密码,按原码输出。
22、取子串函数
编写求子串函数substr(s,n1,n2),在串s中从n1位置开始取n2个字符的字串
23、设计一个函数,对n个字符串按由小到大的顺序排列,n由程序读入,字符串的输入输出都在main函数中进行。
24、输入三行文字,出其中有多少个空格和多少个单词(规定单词间以一个或多个空格分开)。若一个单词恰好在行末结束,则下一行的开头应有空格,句号和逗号后面也应有空格。
25、计算字符串中子串出现的次数
利用输入函数输入任意两个字符串,请编写程序求出第二个字符串在第一个字符串中出现的次数,即在第一个字符串中有几个第二个字符串。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论