2015级C++第4周项目 函数

简介: 【项目1-求最大公约数】 参考解答 (1)输入两个数,并求出其最大公约数#include <iostream>using namespace std;//自定义函数的原型(即函数声明)int main(){ int a,b,g; cin>>a>>b; g=gcd(a,b); cout<

【项目1-求最大公约数】 参考解答
(1)输入两个数,并求出其最大公约数

#include <iostream>
using namespace std;
//自定义函数的原型(即函数声明)
int main()
{
    int a,b,g;
    cin>>a>>b;
    g=gcd(a,b);
    cout<<"最大公约数是: "<<g;
    return 0;
}
int gcd(int x,int y) //定义用于求两数的最大公约数的函数,函数只管求值。输出由main完成
{

}

  (2)在上面程序基础上,增加函数gcds函数的声明和定义,实现求4数最大公约数的功能

int gcds(int x,int y,int z,int w)   //调用gcd()求四数的最大公约数
{ 

}

提示:
①既然gcd函数已经实现了求两数最大公约数的功能,gcds可以调用gcd分别求出两对的最大公约数,再求最大公约数的最大公约数;
②修改main函数,以完成对新新定义的函数的测试。

  (3)利用单步调试工具,step into到函数内部观察程序的运行,掌握进入到函数“内部”观察其运行情况的方法。

【项目2-太乐了】参考解答
  话说sin和cos是一对夫妇。一天,sin去听相声了,cos在家。过了一会,有人敲门,cos开门一看,是一个不认识的多项式函数。cos问:你是谁啊?他说:我是你的老公sin啊。cos说:你不是去听相声了吗?怎么成这幅摸样了?sin说:是啊,太乐了!
  故事讲完了。下面是sin函数的泰勒展式:
  这里写图片描述(注:x取弧度值,而非角度值)
  用sin泰勒展式编写程序,求出sin(π/2)和sin(56°)的值,精度要求达到小数点后6位(即当最后一项的绝对值小于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;
    return 0;
}
//下面定义mysin函数,求sin值

//下面定义myabs函数,求绝对值

提示1: 实际上,C++的数学库(#include<Cmath>)中已经提供了sin和cos函数,一般解题中我们直接调用即可,而本题要求自定义函数实现,为区别起见,分别起名为mysin和mycos。
提示2: 程序的输出应该为:
  sin(π/2)的值为1
  sin(56°)的值为0.829038

【项目3-随机数函数应用于游戏】
  (1)猜数字游戏 参考解答
  随机产生一个1000内的数字,要求用户猜测这个整数。输入一个猜测想的整数,判断是否与产生的随机数相等,由屏幕显示判断结果。如果猜得不对,给出“大了”或“小了”的提示,直到猜出这个数为止。(可以再加一个要求,猜了几次才得到正确结果。)
  (2)小学生算术能力测试系统 参考解答
  设计一个程序,用来实现帮助小学生进行算术运算练习,它具有以下功能:提供10道加、减、乘、除四种基本算术运算的题目,每道题中的操作数是随机产生的,且操作数不超过2位数的正整数;练习者根据显示的题目输入自己的答案,程序自动判断输入的答案是否正确并显示出相应的信息。最后显示做对了几道题。

【项目4-程序分析】
  写出下面程序的运行结果,并解析其运行机制。请描述其执行流程及相关变量的变化过程,可以配合图示完成,在博客中上传画出的图。

(1)

#include<iostream>
using namespace std;
void fun(int k)
{
    if(k>0)
        fun(k-1);
    cout<<k;
}
int main()
{
    int w=5;
    fun(w);
    cout<<endl;
    return 0;
}

(2)

#include <iostream>
using namespace std;
void recur(char);
int main()
{
    recur('0');
}
void recur(char c)
{
    cout<<c;
    if(c<'5')
        recur(c+1);
    cout<<c;
}

(3)

#include<iostream>
using namespace std;
int fun2(int a,int b)
{
    int c;
    c=a*b%3;
    return c;
}
int fun1(int &a,int &b)
{
    int c;
    a+=a;
    b+=b;
    c=fun2(a,b);
    return c*c;
}
int main()
{
    int x=11,y=19;
    cout<<fun1(x,y)<<endl;
    return 0;
}

(4)理解函数的默认参数:运行程序,利用调试功能,观察变量和函数参数的值,结合课堂讲解,品味默认参数的作用。

#include <iostream>  
using namespace std;  
const double pi=3.1415926;  
float area(float r=6.5);//指定r的默认值为6.5  
float volume(float h,float r=6.5); //指定r的默认值为6.5  
int main( )  
{  
    cout<<area()<<endl; //相当于area(6.5);  
    cout<<area(7.5)<<endl; //形参得到的值为7.5,而不是6.5  
    cout<<volume(45.6)<<endl; //相当于volume(45.6,6.5)  
    cout<<volume(34.2,10.4)<<endl; //h的值为34.2,r的值为10.4  
    return 0;  
}  
float area(float r)  
{  
    return pi*r*r;  
}  
float volume(float h,float r)  
{  
    return pi*r*r*h;  
}  

① 去掉第4行的“=6.5”试试,出错的原因是__________
② 将第14行改为“float area(float r=6.5)”,出错的原因是________
③ 将第5行“float h,float r=6.5”改为“float h=1,float r”,出错的原因是___
④ 将第5行改为“float volume(float h=0,float r=6.5)”,带来的改变将是__________

【项目5-用递归方法求解】 参考解答
(1)编写递归函数求出n的阶乘(自定义main函数,调用定义的递归函数)
(2)写出求1*3*…*n的递归式,并编写出递归函数求解。
(3)编程序,用递归函数求出两个数的最大公约数。(包括编main函数,调用定义的递归函数)
(4)编制递归函数fib(int n)返回第n个Fibnacci数,以此输出Fibnacci序列的第20个数。

#include <iostream>  
using namespace std;  
int fib(int n);  
int main(){  
   cout<<fib(20)<<endl; //输出  
   return 0;        
}  
//返回Fibnacci序列中的第n个数  
int fib(int n)  
{

}
目录
相关文章
WK
|
1月前
|
机器学习/深度学习 人工智能 算法
那C++适合开发哪些项目
C++ 是一种功能强大、应用广泛的编程语言,适合开发多种类型的项目。它在游戏开发、操作系统、嵌入式系统、科学计算、金融、图形图像处理、数据库管理、网络通信、人工智能、虚拟现实、航空航天等领域都有广泛应用。C++ 以其高性能、内存管理和跨平台兼容性等优势,成为众多开发者的选择。
WK
75 1
|
2月前
|
程序员 C++ 容器
在 C++中,realloc 函数返回 NULL 时,需要手动释放原来的内存吗?
在 C++ 中,当 realloc 函数返回 NULL 时,表示内存重新分配失败,但原内存块仍然有效,因此需要手动释放原来的内存,以避免内存泄漏。
|
2月前
|
Ubuntu Linux 编译器
Linux/Ubuntu下使用VS Code配置C/C++项目环境调用OpenCV
通过以上步骤,您已经成功在Ubuntu系统下的VS Code中配置了C/C++项目环境,并能够调用OpenCV库进行开发。请确保每一步都按照您的系统实际情况进行适当调整。
496 3
|
2月前
|
存储 前端开发 C++
C++ 多线程之带返回值的线程处理函数
这篇文章介绍了在C++中使用`async`函数、`packaged_task`和`promise`三种方法来创建带返回值的线程处理函数。
79 6
|
2月前
|
C++
C++ 多线程之线程管理函数
这篇文章介绍了C++中多线程编程的几个关键函数,包括获取线程ID的`get_id()`,延时函数`sleep_for()`,线程让步函数`yield()`,以及阻塞线程直到指定时间的`sleep_until()`。
37 0
C++ 多线程之线程管理函数
|
2月前
|
编译器 C语言 C++
C++入门3——类与对象2-2(类的6个默认成员函数)
C++入门3——类与对象2-2(类的6个默认成员函数)
38 3
|
2月前
|
编译器 C语言 C++
详解C/C++动态内存函数(malloc、free、calloc、realloc)
详解C/C++动态内存函数(malloc、free、calloc、realloc)
337 1
|
2月前
|
存储 编译器 C++
C++入门3——类与对象2-1(类的6个默认成员函数)
C++入门3——类与对象2-1(类的6个默认成员函数)
47 1
|
2月前
|
安全 编译器 C++
【C++篇】C++类与对象深度解析(三):类的默认成员函数详解
【C++篇】C++类与对象深度解析(三):类的默认成员函数详解
24 3
|
2月前
|
编译器 C语言 C++
C++入门6——模板(泛型编程、函数模板、类模板)
C++入门6——模板(泛型编程、函数模板、类模板)
60 0
C++入门6——模板(泛型编程、函数模板、类模板)