C++程序设计-第12周函数序设计上机实践项目

简介: 回到课程主页,链接:C++程序设计课程主页-2012级  本次上机对应的教学内容:第4章   函数【项目1-调用函数输出星号图】  这一组的练习意在通过调用函数输出星号图,体会与理解函数的工作过程,并为其后编制自定义函数实现特定功能,打下基础。  任务1:补充完下面的程序,使程序输出上面的两个星号图,要求在main()函数中调用自定义函数printstars()。  给出的程序如下:

回到课程主页,链接:C++程序设计课程主页-2012级

  本次上机对应的教学内容:第4章   函数


【项目1-调用函数输出星号图】

  这一组的练习意在通过调用函数输出星号图,体会与理解函数的工作过程,并为其后编制自定义函数实现特定功能,打下基础。


  任务1:补充完下面的程序,使程序输出上面的两个星号图,要求在main()函数中调用自定义函数printstars()。
  给出的程序如下:

//while循环中调用函数printstars的程序
#include <iostream>
using namespace std;
void printstars(int m) //定义能输出一行m个星号的函数
{  
  for (int j=1; j<=m; ++j)
    cout<<'*';
}
int main( )
{ 
  int n=6; //n代表要输出的行数
  //请在下面构造循环,调用printstars()输出每一行的星号


  return 0;
} 
  要求:左图必需实现,右图尝试实现。
  回答:实现右图遇到了什么困难?如何解决,有何办法?用你想到的办法尝试一下。
  进一步提示:如果要输出的不是星号(*)图,而是井号(#)图,该如何改上面的程序?试着实施一下。


   任务2:请先阅读已经定义好的函数printchs(),然后利用这个函数输出星号图:
  给出的程序如下:
//调用函数printchs输出星号图
#include <iostream>
using namespace std;
void printchs(char c, int m)  //定义能输出一行m个字符c的函数
{  
  for (int j=1; j<=m; ++j)
     cout<< c;
  cout<<endl;
}


int main( )
{ 
  int n=6; //n代表要输出的行数
  //请在下面构造循环,调用printchs()输出符号


  return 0;
} 
  要求:分别编程序,输出左右两个星号图;
  进一步要求:有了printchs()函数,这儿的处理比任务1要方便了很多。如果要输出的不是星号(*)图,而是井号(#)图,该如何改上面的程序?试着实施一下。


   任务3:在由多个函数构成的程序中,程序员常用的做法是,main()函数先定义,其他自定义函数后定义,这时必须在main()函数前声明自定义的函数(请详读教材4.4.3小节)。按这个要求,重写上面任务2中的程序。
  通过项目1中的3个任务,请思考:你认为函数的参数有什么作用?在设计中如何考虑参数,会给调用带来方便?将你的体会写到上机报告的博文中。


【项目2-求解分段函数的值】

/*
* 程序的版权和版本声明部分
* Copyright (c)2012, 烟台大学计算机学院学生
* All rightsreserved.
* 文件名称: fun.cpp                           
* 作    者:                            
* 完成日期:  年  月   日
* 版本号: v1.0      
* 对任务及求解方法的描述部分
* 输入描述:函数自变量x
* 问题描述:求函数的值:当x<0.3时,f(x)=0; 当0.3≤x≤0.8时,f(x)=(x-0.3)/(0.8-0.3);当x>0.8时,f(x)=1;
* 程序输出:f(x)的值
*/
#include<iostream> 
using namespacestd;
const double x1=0.3, x2=0.8; //式子中出现的两个常数定义为全局常变量,方便,易维护
double f(double);  //先声明
int main( )
{
   double x;
   cout<<"请输入x的值:";
   cin>>x;
   cout<<"解得:f("<<x<<")="<<f(x)<<"\n";
   return 0;
}
//下面是自定义函数的定义部分
double f(double x)
{
  
}
  提示:函数求解的结果要在main()中使用,要用return <表达式>得到返回值。
  通过这个项目,体会函数利用返回值的方法。


【项目3-四数的最大公约数】

  输入四个数,并求出其最大公约数

#include <iostream>
using namespace std;
//自定义函数的原型(即函数声明)


int main()
{
	int a,b,c,d;
	cin>>a>>b>>c>>d;
	cout<<"最大公约数是: "<<gcds(a,b,c,d));   
	return 0;
}


int gac(int x,int y) //用于求两数的最大公约数
{


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


}

【项目4-回文、素数】
   编制一个返回值为bool型的函数isPrimer(),用于判断参数是否为素数,isPalindrome()用于判断参数是否是回文数,调用函数回答以下问题(可以分别编制几个程序完成,也可以在一个main()函数中完成,输出时,用明显的提示语,说明正在完成哪个任务。)
int main()
{
}


bool isPrimer(int n)
{
}
bool isPalindrome(int n)
{
}
(1)输出10000以内的所有素数。
(2)输出10000以内的所有回文数。
(3)输出10000以内的所有回文素数。
(4)拓展(选做):若一个素数的反序数仍为素数,则称它为可逆素数。求10000以内的所有可逆素数,在上面的代码基础上拓展。


【项目5-特殊三位数】
  请输出满足条件n=a!+b!+c!的所有三位数n,其中,a、b、c分别是n的百、十、个位数。要求用自定义函数实现求阶乘。
  参考程序段:
int  main()
{
} 
long fac(int n)
{
} 
【项目5拓展(选做)-求组合数】
  求组合数公式为:
  编一程序,输入m和n的值,求组合数。要求分别定义求阶乘和求组合的函数,求组合数的函数调用求阶乘的函数来实现求解,在main()函数中,负责输入输出及调用求组合数的函数。


【项目6-泰勒展开】
  先听故事,再编程序。故事是这样的:话说sin和cos是一对夫妇。一天,sin去听相声了,cos在家。过了一会,有人敲门,cos开门一看,是一个不认识的多项式函数。cos问:你是谁啊?他说:我是你的老公sin啊。cos说:你不是去听相声了吗?怎么成这幅摸样了?他说:是啊,太乐了!故事讲完了。不懂吗?好好学高数。否则,挂了不冤。

  编程序求出sin(π/2)、sin(56°)、cos(87°)、cos(π/3)
  一点说明:数学库(#include<Cmath>)中已经提供了sin和cos函数,一般解题中我们直接调用即可,而本题要求自定义函数实现,为区别起见,分别起名为mysin和mycos。
  提示和要求:(1)要求自定义函数要写在main函数之后;(2)自定义函数中求解的效率问题必须考虑(用好迭代方法);(3)关于精度:当最后一项的绝对值小于0.00001时,累加结束(求绝对值的函数也可以自定义实现);(4)为验证求解是否正确,可以调用数学库中相应的函数,输出结果以对比。
#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函数


//下面定义mycos函数


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


【项目6扩展(选做)-编制三角函数表】

  要求在main()函数中调用show_sin_table(min_angle, max_angle),显示角度值为min_angle到max_angle之间的所有角度(间隔为1度)的正弦值。要求不能用数学库函数,将项目6中的mysin函数拷贝到这个程序中,用于计算sin值。例如show_sin_table(0, 90)可以显示出所有0到90度的正弦值。为取得更好的效果,可以考虑像英尺到米的转换一样,以速查表格的形式给出结果。
#include <iostream>   
using namespace std;
//下面加入常变量和自定义函数的声明


int main( )
{
	show_sin_table(0, 90);
	show_sin_table(135, 180);
	return 0;
}
//下面定义show_sin_table()函数


//下面定义mysin函数



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