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

简介: 课程首页在:http://blog.csdn.net/sxhelijian/article/details/11890759【项目1-当年第几天】  定义一个函数,其参数为年、月、日的值,返回这一天为该年的第几天。要求在main函数中输入年月日,然后调用这个函数求值,并在main函数中输出结果。 【项目2-太乐了】先听故事,再编程序。  故事是这样的:话说sin和cos是一对夫妇。一天,si

课程首页在:http://blog.csdn.net/sxhelijian/article/details/11890759

【项目1-当年第几天】
  定义一个函数,其参数为年、月、日的值,返回这一天为该年的第几天。要求在main函数中输入年月日,然后调用这个函数求值,并在main函数中输出结果。
 
【项目2-太乐了】先听故事,再编程序。
  故事是这样的:话说sin和cos是一对夫妇。一天,sin去听相声了,cos在家。过了一会,有人敲门,cos开门一看,是一个不认识的多项式函数。cos问:你是谁啊?他说:我是你的老公sin啊。cos说:你不是去听相声了吗?怎么成这幅摸样了?他说:是啊,太乐了!

  用sin和cos的泰勒展开式编程序,求出sin(π/2)、sin(56°)、cos(87°)、cos(π/3),当最后一项的绝对值小于0.00001时,累加结束(求绝对值的函数也可以自定义函数myabs实现)。
  下面是程序模板,请完成自定义函数的声明和定义,并将main函数中下划线部分补充完整。

#include <iostream>
using namespace std;
const double pi=3.1415926;
int main( )
{
    cout<<"sin(π/2)的值为"<<mysin(pi/2)<<endl;
    cout<<"sin(56°)的值为"<<_____________<<endl;
    cout<<"cos(87°)的值为"<<mycos((87.0/180)*pi)<<endl;
    cout<<"cos(π/3)的值为"<<______________<<endl;
    return 0;
}
//下面定义mysin函数,求sin值

//下面定义mycos函数,求cos值

//下面定义myabs函数,求绝对值
  一点说明:将任意函数利用泰勒公式展开为多项式进行计算,是计算机求解数值问题的一个重要手段。高等数学中的“泰勒定理”为我们解决这一大类问题提供了理论依据与方法指导。Sin听相声“太乐”了,变成了多项式,太太cos都不认识了。高等数学、线性代数等课程为我们提供解决各种问题的基础知识,是大学中最为实用的学科,学好,必须的。
  实际上,C++的数学库(#include<Cmath>)中已经提供了sin和cos函数,一般解题中我们直接调用即可,而本题要求自定义函数实现,为区别起见,分别起名为mysin和mycos。
  提示:程序的输出应该为
sin(π/2)的值为1
sin(56°)的值为0.829038
cos(87°)的值为0.052336
cos(π/3)的值为0.5
 
【项目3-多文件程序组织】
  阅读 http://blog.csdn.net/sxhelijian/article/details/15187309中《CodeBlocks中程序的多文件组织》,建立一个包含多个文件的项目,把本周项目2“太乐了”也用多文件组织起来。其中,main()函数保存在一个文件中,所有自定义函数保存到另外一个文件中,运行程序并得到正确的结果,体会在实际的工程项目中这样组织程序的好处。
【项目3扩展】将第11周“ 项目3-回文、素数”中第(4)项目要求中所做工作,用多文件组织起来。
 
【项目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 <iostream>
#include<ctime>
using namespace std;
int main(void)
{
    int i,ran_num=0;
    double t1,t2;
    t1=time(0);
    //将要测试的代码放在这里,因为计数单位为秒。
    t2=time(0);
    cout<<"运行耗时"<<t2-t1<<"秒!"<<endl;
    return 0;
}
  第三组是随机数函数,需要#include<cstdlib>支持。(1)void srand(unsigned seed)用于初始化随机数发生器,参数seed称作为“种子数”,用不同的种子数可以产生不一样的序列,故time(0)的返回值常用作种子数。(2)int rand()产生一个0到RAND_MAX(一个系统内已经定义的很大的数)的整型随机数并返回。例如,下面的程序产生10个0~5的随机数
#include <iostream>
#include<ctime>
#include<cstdlib>
using namespace std;
int main(void)
{
    int i,ran_num;
    srand(time(0)); //time(0)返回值作种子
    for(i=0; i<10; i++)
    {
        ran_num=rand()%6; //rand()返回值对6取余保证了随机数为0~5。
        cout<<ran_num<<"  ";
    }
    return 0;
}
任务1——猜数字游戏
  
随机产生一个1000内的数字,要求用户猜测这个整数。输入一个猜测想的整数,判断是否与产生的随机数相等,由屏幕显示判断结果。如果猜得不对,给出“大了”或“小了”的提示,直到猜出这个数为止。(可以再加一个要求,猜了几次才得到正确结果。)
任务2——小学生算术能力测试系统
  设计一个程序,用来实现帮助小学生进行算术运算练习,它具有以下功能:提供10道加、减、乘、除四种基本算术运算的题目,每道题中的操作数是随机产生的,且操作数不超过2位数的正整数;练习者根据显示的题目输入自己的答案,程序自动判断输入的答案是否正确并显示出相应的信息。最后显示做对了几道题。
 
【项目5-银行系统】
  这是我们要做的一个真正的项目!涉及到的技术都用过了,只不过,程序真的要长得多了。
  在学习中,总是想要些成就感的。当你没有做过一些事情的时候,总是不能知道所学知识究竟能干些什么。在学习过程中,完成一个像样的项目,那是一件很酷的事情,也让我们更有激情。做好思想准备,中间可能会有些困难,但相信沉下心来还是可以完成的。
  要做项目的需求最好能和大家的生活实践联系起来,我们想得到。另外,还能和我们的课程同步上。两厢结合,我们就开个银行,做个自动取款机吧。
  如果没有用过自动取款机,先用你的银行卡取一次钱去吧,权当作调研。
  我们首先插卡,输密码。做纯软件模拟,我们没有读卡机,好吧,认为卡已经插好了。
  为了让大家一点一点地做出来,我试图分解其中的工作,我们逐渐完善,“增量式”地完成工作。你可以每做完一个任务,就发一篇博文,将这样一个成长的阶段记录下来。
任务1——搭一个框架
  你的程序运行后的界面如图:
  
  • 用const定义全局的常变量PASSWORD,作为银行卡的密码(真银行卡的密码可不是这样,它要分别记住各个帐户的密码,我们现在认为所有卡都这个密码)。
  • 判断输入的密码是否正确,如果不正确,提示:“你这个笨脑瓜!”并退出程序,(注意,真银行可不敢骂人,你的银行这样写写无妨。)否则,继续下面的工作。
  • 用户如图输入功能选择,根据给出的答复,用switch多分支完成下面的显示:
    • a. 输入1,显示“您的余额是xxxx.xx元。”(想过瘾,用你觉得足够大的数当余额)
    • b. 输入2-4的提示自编;
    • c. 输入0,显示“谢谢,欢迎下次再来!”(好有礼貌)
    • d. 输入不是0-4,提示“输错,不要急!”
  只要输入不是0,循环处理业务。
  写完程序后,请将之发布为博文(程序中的注释自己加,程序前要有,中间也来些必要的)。


任务2——引入函数改善程序结构
  1、数据
  仍然只支持一位用户,所以用户帐号不必存储。
  要用全局变量存储:(1)用户密码(由于支持改密码功能,所以用变量,暂先用整型,声明时赋初值);(2)帐户余额(用浮点数表示,声明时赋初值)
  2、在输入密码环节,实现有限次密码输入的限制,如果三次都没有输入正确,程序将直接退出,不允许用户继续操作。
查验密码功能做成一个函数。例如:

bool pass()
{
  int 次数=0;
  bool 是否密码正确=false;   //先假设密码不正确,以便能进入do-while循环
  do{
    输入密码;
    次数++;
    if(相符)是否密码正确=true;
  }while(密码不正确且尝试次数不足3次);
  return 是否密码正确;  //上面密码正确为true,反之……
}
  3、main()函数的结构将如下所示,work函数用于处理业务。
main()
{
  ……
    if(pass())
        work();
    else
        输出“请到柜台办理密码查询后再来”。
    return 0;
}    
  4、办理业务的函数work的结构如下:
void work()
{
  //循环显示功能菜单:1.查询、2.取款、3.存款、4.转帐、5.改密、0.退出
  //选择后办理各种业务,再显示菜单,直到选择了0。
 
}
  其中,各项业务分别编制一个函数完成。提示功能菜单(1.查询、2.取款、3.存款、4.转帐、5.改密、0.退出)后,由用户输入功能选择,用switch多分支完成对应的功能(有的功能依然只输出一句话提示即可)。图示给出建议(鼓励在合理范围内别出心裁):

  • 输入1(查询),调用函数showbalance(),显示“您的余额是xxxx.xx元。”
  • 输入2(取款),调用drawmoney(),完成取款。要求输入取款金额,若余额不够,提示不能取款,否则,帐户余额减少。取款后给出提示:“你的余额还有XXX.XX元”。
    在实际业务中,还涉及到计算的问题。本题暂不考虑,作为拓展建议,可以在此处考虑计息。
  • 输入3(存款):调用deposit(),完成存款,余额增加(过瘾吧,想存多少存多少)。存款后给出提示:“你的余额是XXX.XX元”。
  • 输入4(转帐):调用transferAccounts(),完成转帐,只支持转出功能。要求输入对方帐号和转帐金额,若金额充足,完成转帐,当前帐户的余额减少,对方帐户余额增加。由于本题只有一个帐号,故对方帐户增加的操作先不做了。
  • 输入5(改密):调用updatePassword()改变密码。要求先输入旧密码,对了以后才能改密。新密码要输入两次,只有两次完全相同时才可以完成修改。
  • 输入0,显示“谢谢,欢迎下次再来!”退出循环,返回调用函数。
  • 输入不是0-5,提示“输错了,不要急!”
  以后我们再做支持多个帐户的银行系统。


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



目录
相关文章
|
16天前
|
存储 C++ 容器
C++STL(标准模板库)处理学习应用案例
【4月更文挑战第8天】使用C++ STL,通过`std:vector`存储整数数组 `{5, 3, 1, 4, 2}`,然后利用`std::sort`进行排序,输出排序后序列:`std:vector<int> numbers; numbers = {5, 3, 1, 4, 2}; std:sort(numbers.begin(), numbers.end()); for (int number : numbers) { std::cout << number << " "; }`
19 2
|
28天前
|
安全 算法 C++
【C/C++ 泛型编程 应用篇】C++ 如何通过Type traits处理弱枚举和强枚举
【C/C++ 泛型编程 应用篇】C++ 如何通过Type traits处理弱枚举和强枚举
46 3
|
28天前
|
设计模式 安全 算法
【C/C++ 类型转换 】深入理解C++向上转型:从基础到应用
【C/C++ 类型转换 】深入理解C++向上转型:从基础到应用
41 0
|
29天前
|
算法 编译器 C语言
【C++ 异常】C++ 标准库异常类及其应用
【C++ 异常】C++ 标准库异常类及其应用
28 0
|
13天前
|
存储 算法 Linux
【实战项目】网络编程:在Linux环境下基于opencv和socket的人脸识别系统--C++实现
【实战项目】网络编程:在Linux环境下基于opencv和socket的人脸识别系统--C++实现
37 6
|
12天前
|
编译器 C语言 C++
【C++初阶(九)】C++模版(初阶)----函数模版与类模版
【C++初阶(九)】C++模版(初阶)----函数模版与类模版
18 0
|
16天前
|
程序员 C++
C++语言模板学习应用案例
C++模板实现通用代码,以适应多种数据类型。示例展示了一个计算两数之和的模板函数`add&lt;T&gt;`,可处理整数和浮点数。在`main`函数中,展示了对`add`模板的调用,分别计算整数和浮点数的和,输出结果。
12 2
|
22天前
C/C++test两步完成CMake项目静态分析
通过将C/C++test集成到CMake项目中,并根据项目的需要进行配置,可以在两步内完成CMake项目的静态分析。这样可以帮助开发人员及时发现并修复潜在的代码问题,提高代码质量和可靠性。
8 0
|
23天前
|
存储 缓存 C++
C++链表常用的函数编写(增查删改)内附完整程序
C++链表常用的函数编写(增查删改)内附完整程序
|
25天前
|
存储 安全 编译器
【C++】类的六大默认成员函数及其特性(万字详解)
【C++】类的六大默认成员函数及其特性(万字详解)
35 3

热门文章

最新文章