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函数



目录
相关文章
|
1天前
|
存储 算法 对象存储
【C++入门到精通】function包装器 | bind() 函数 C++11 [ C++入门 ]
【C++入门到精通】function包装器 | bind() 函数 C++11 [ C++入门 ]
12 1
|
1天前
|
存储 算法 数据安全/隐私保护
【C++入门到精通】 哈希结构 | 哈希冲突 | 哈希函数 | 闭散列 | 开散列 [ C++入门 ]
【C++入门到精通】 哈希结构 | 哈希冲突 | 哈希函数 | 闭散列 | 开散列 [ C++入门 ]
7 0
|
1天前
|
存储 自然语言处理 C++
刷题用到的非常有用的函数c++(持续更新)
刷题用到的非常有用的函数c++(持续更新)
7 1
|
2天前
|
存储 编译器 C++
【C++】内存管理和模板基础(new、delete、类及函数模板)
【C++】内存管理和模板基础(new、delete、类及函数模板)
15 1
|
8天前
|
存储 C++
c/c++宏定义(函数)
c/c++宏定义(函数)
|
9天前
|
Linux 程序员 图形学
C++语言在现代软件开发中的应用与实践
C++语言在现代软件开发中的应用与实践
18 2
|
9天前
|
存储 程序员 C语言
深入理解C++:从语言特性到实践应用
深入理解C++:从语言特性到实践应用
22 3
|
9天前
|
存储 算法 安全
C++语言深度探索:从基础到实践
C++语言深度探索:从基础到实践
11 2
|
9天前
|
算法 程序员 C语言
C++:深度探索与编程实践
C++:深度探索与编程实践
13 3
|
10天前
|
编译器 C++
【C++进阶】引用 & 函数提高
【C++进阶】引用 & 函数提高