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

回到课程主页,链接: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函数



  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

迂者-贺利坚

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值