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函放也单独一个文件。



目录
相关文章
WK
|
1月前
|
机器学习/深度学习 人工智能 算法
那C++适合开发哪些项目
C++ 是一种功能强大、应用广泛的编程语言,适合开发多种类型的项目。它在游戏开发、操作系统、嵌入式系统、科学计算、金融、图形图像处理、数据库管理、网络通信、人工智能、虚拟现实、航空航天等领域都有广泛应用。C++ 以其高性能、内存管理和跨平台兼容性等优势,成为众多开发者的选择。
WK
86 1
|
2月前
|
存储 并行计算 安全
C++多线程应用
【10月更文挑战第29天】C++ 中的多线程应用广泛,常见场景包括并行计算、网络编程中的并发服务器和图形用户界面(GUI)应用。通过多线程可以显著提升计算速度和响应能力。示例代码展示了如何使用 `pthread` 库创建和管理线程。注意事项包括数据同步与互斥、线程间通信和线程安全的类设计,以确保程序的正确性和稳定性。
|
2月前
|
程序员 C++ 容器
在 C++中,realloc 函数返回 NULL 时,需要手动释放原来的内存吗?
在 C++ 中,当 realloc 函数返回 NULL 时,表示内存重新分配失败,但原内存块仍然有效,因此需要手动释放原来的内存,以避免内存泄漏。
|
2月前
|
Ubuntu Linux 编译器
Linux/Ubuntu下使用VS Code配置C/C++项目环境调用OpenCV
通过以上步骤,您已经成功在Ubuntu系统下的VS Code中配置了C/C++项目环境,并能够调用OpenCV库进行开发。请确保每一步都按照您的系统实际情况进行适当调整。
571 3
|
2月前
|
存储 前端开发 C++
C++ 多线程之带返回值的线程处理函数
这篇文章介绍了在C++中使用`async`函数、`packaged_task`和`promise`三种方法来创建带返回值的线程处理函数。
83 6
|
2月前
|
C++
C++ 多线程之线程管理函数
这篇文章介绍了C++中多线程编程的几个关键函数,包括获取线程ID的`get_id()`,延时函数`sleep_for()`,线程让步函数`yield()`,以及阻塞线程直到指定时间的`sleep_until()`。
45 0
|
2月前
|
编译器 C语言 C++
详解C/C++动态内存函数(malloc、free、calloc、realloc)
详解C/C++动态内存函数(malloc、free、calloc、realloc)
388 1
|
2月前
|
编译器 C语言 C++
C++入门6——模板(泛型编程、函数模板、类模板)
C++入门6——模板(泛型编程、函数模板、类模板)
70 0
C++入门6——模板(泛型编程、函数模板、类模板)
|
28天前
|
存储 编译器 C语言
【c++丨STL】string类的使用
本文介绍了C++中`string`类的基本概念及其主要接口。`string`类在C++标准库中扮演着重要角色,它提供了比C语言中字符串处理函数更丰富、安全和便捷的功能。文章详细讲解了`string`类的构造函数、赋值运算符、容量管理接口、元素访问及遍历方法、字符串修改操作、字符串运算接口、常量成员和非成员函数等内容。通过实例演示了如何使用这些接口进行字符串的创建、修改、查找和比较等操作,帮助读者更好地理解和掌握`string`类的应用。
50 2
|
1月前
|
存储 编译器 C++
【c++】类和对象(下)(取地址运算符重载、深究构造函数、类型转换、static修饰成员、友元、内部类、匿名对象)
本文介绍了C++中类和对象的高级特性,包括取地址运算符重载、构造函数的初始化列表、类型转换、static修饰成员、友元、内部类及匿名对象等内容。文章详细解释了每个概念的使用方法和注意事项,帮助读者深入了解C++面向对象编程的核心机制。
103 5