天天看点

2013级C++第12周项目——函数应用

【项目1-当年第几天】

  定义一个函数,其参数为年、月、日的值,返回这一天为该年的第几天。要求在main函数中输入年月日,然后调用这个函数求值,并在main函数中输出结果。

【项目2-太乐了】先听故事,再编程序。

  故事是这样的:话说sin和cos是一对夫妇。一天,sin去听相声了,cos在家。过了一会,有人敲门,cos开门一看,是一个不认识的多项式函数。cos问:你是谁啊?他说:我是你的老公sin啊。cos说:你不是去听相声了吗?怎么成这幅摸样了?他说:是啊,太乐了!

2013级C++第12周项目——函数应用

  用sin和cos的泰勒展开式编程序,求出sin(π/2)、sin(56°)、cos(87°)、cos(π/3),当最后一项的绝对值小于0.00001时,累加结束(求绝对值的函数也可以自定义函数myabs实现)。

  下面是程序模板,请完成自定义函数的声明和定义,并将main函数中下划线部分补充完整。

  一点说明:将任意函数利用泰勒公式展开为多项式进行计算,是计算机求解数值问题的一个重要手段。高等数学中的“泰勒定理”为我们解决这一大类问题提供了理论依据与方法指导。sin听相声“太乐”了,变成了多项式,太太cos都不认识了。高等数学、线性代数等课程为我们提供解决各种问题的基础知识,是大学中最为实用的学科,学好,必须的。

  实际上,c++的数学库(#include<cmath>)中已经提供了sin和cos函数,一般解题中我们直接调用即可,而本题要求自定义函数实现,为区别起见,分别起名为mysin和mycos。

  提示:程序的输出应该为

【项目3-多文件程序组织】

【项目4-学习辅助软件开发】通过本题学习一些系统函数。

  第一组是数学函数,需要#include<cmath>支持,包括log、log10、 pow、 pow10、 sqrt、 acos、 asin、 atan、 cos、 sin、 tan、 cosh、 sinh、 tanh、 ceil、 floor。

  第二组是时间函数,需要#include<ctime>的支持。暂介绍一个函数long time(long *tloc)。调用time(0)将返回自格林威治时间1970年1月1日凌晨至现在所经过的秒数。显然,下面的代码可以用于测试一段代码运行的时间:

  第三组是随机数函数,需要#include<cstdlib>支持。(1)void srand(unsigned seed)用于初始化随机数发生器,参数seed称作为“种子数”,用不同的种子数可以产生不一样的序列,故time(0)的返回值常用作种子数。(2)int rand()产生一个0到rand_max(一个系统内已经定义的很大的数)的整型随机数并返回。例如,下面的程序产生10个0~5的随机数

任务1——猜数字游戏

  随机产生一个1000内的数字,要求用户猜测这个整数。输入一个猜测想的整数,判断是否与产生的随机数相等,由屏幕显示判断结果。如果猜得不对,给出“大了”或“小了”的提示,直到猜出这个数为止。(可以再加一个要求,猜了几次才得到正确结果。)

任务2——小学生算术能力测试系统

  设计一个程序,用来实现帮助小学生进行算术运算练习,它具有以下功能:提供10道加、减、乘、除四种基本算术运算的题目,每道题中的操作数是随机产生的,且操作数不超过2位数的正整数;练习者根据显示的题目输入自己的答案,程序自动判断输入的答案是否正确并显示出相应的信息。最后显示做对了几道题。

【项目5-银行系统】

  这是我们要做的一个真正的项目!涉及到的技术都用过了,只不过,程序真的要长得多了。

  在学习中,总是想要些成就感的。当你没有做过一些事情的时候,总是不能知道所学知识究竟能干些什么。在学习过程中,完成一个像样的项目,那是一件很酷的事情,也让我们更有激情。做好思想准备,中间可能会有些困难,但相信沉下心来还是可以完成的。

  要做项目的需求最好能和大家的生活实践联系起来,我们想得到。另外,还能和我们的课程同步上。两厢结合,我们就开个银行,做个自动取款机吧。

  如果没有用过自动取款机,先用你的银行卡取一次钱去吧,权当作调研。

  我们首先插卡,输密码。做纯软件模拟,我们没有读卡机,好吧,认为卡已经插好了。

  为了让大家一点一点地做出来,我试图分解其中的工作,我们逐渐完善,“增量式”地完成工作。你可以每做完一个任务,就发一篇博文,将这样一个成长的阶段记录下来。

任务1——搭一个框架

  你的程序运行后的界面如图:

  

2013级C++第12周项目——函数应用

用const定义全局的常变量password,作为银行卡的密码(真银行卡的密码可不是这样,它要分别记住各个帐户的密码,我们现在认为所有卡都这个密码)。

判断输入的密码是否正确,如果不正确,提示:“你这个笨脑瓜!”并退出程序,(注意,真银行可不敢骂人,你的银行这样写写无妨。)否则,继续下面的工作。

用户如图输入功能选择,根据给出的答复,用switch多分支完成下面的显示:

a. 输入1,显示“您的余额是xxxx.xx元。”(想过瘾,用你觉得足够大的数当余额)

b. 输入2-4的提示自编;

c. 输入0,显示“谢谢,欢迎下次再来!”(好有礼貌)

d. 输入不是0-4,提示“输错,不要急!”

  只要输入不是0,循环处理业务。

  写完程序后,请将之发布为博文(程序中的注释自己加,程序前要有,中间也来些必要的)。

任务2——引入函数改善程序结构

  1、数据

  仍然只支持一位用户,所以用户帐号不必存储。

  要用全局变量存储:(1)用户密码(由于支持改密码功能,所以用变量,暂先用整型,声明时赋初值);(2)帐户余额(用浮点数表示,声明时赋初值)

  2、在输入密码环节,实现有限次密码输入的限制,如果三次都没有输入正确,程序将直接退出,不允许用户继续操作。

查验密码功能做成一个函数。例如:

  3、main()函数的结构将如下所示,work函数用于处理业务。

  4、办理业务的函数work的结构如下:

  其中,各项业务分别编制一个函数完成。提示功能菜单(1.查询、2.取款、3.存款、4.转帐、5.改密、0.退出)后,由用户输入功能选择,用switch多分支完成对应的功能(有的功能依然只输出一句话提示即可)。图示给出建议(鼓励在合理范围内别出心裁):

2013级C++第12周项目——函数应用

输入1(查询),调用函数showbalance(),显示“您的余额是xxxx.xx元。”

输入2(取款),调用drawmoney(),完成取款。要求输入取款金额,若余额不够,提示不能取款,否则,帐户余额减少。取款后给出提示:“你的余额还有xxx.xx元”。

在实际业务中,还涉及到计算的问题。本题暂不考虑,作为拓展建议,可以在此处考虑计息。

输入3(存款):调用deposit(),完成存款,余额增加(过瘾吧,想存多少存多少)。存款后给出提示:“你的余额是xxx.xx元”。

输入4(转帐):调用transferaccounts(),完成转帐,只支持转出功能。要求输入对方帐号和转帐金额,若金额充足,完成转帐,当前帐户的余额减少,对方帐户余额增加。由于本题只有一个帐号,故对方帐户增加的操作先不做了。

输入5(改密):调用updatepassword()改变密码。要求先输入旧密码,对了以后才能改密。新密码要输入两次,只有两次完全相同时才可以完成修改。

输入0,显示“谢谢,欢迎下次再来!”退出循环,返回调用函数。

输入不是0-5,提示“输错了,不要急!”

  以后我们再做支持多个帐户的银行系统。

任务3——将程序用多文件组织

  将任务2中的代码,涉及密码、帐户的函数放在一个文件中,完成各项功能的函数放在另一个文件中,main函放也单独一个文件。

继续阅读