第二章 面向过程的编程——2.1如何编写函数


  【代码已上传至自己github,供参考: github
  从本文开始,进入第二章。在第一章中。我们将整个程序写在 main()函数里,这种做法仅仅局限在不大的程序,在实际项目中,这是不切实际的。
  我们将函数独立出来有如下几个优点:
  1、通过调用函数、可以节省重复编写代码时间,是程序更容易读懂。
  2、我们可以在不同的程序中调用这些函数。
  3、在实际项目中,可以更容易的将工作分配给协作开发团队。

1、函数定义

  函数必须包括如下四个部分:
  1、返回类型:后面的案例以及之前的案例中,指点元素类型为int,所以返回类型必然是int类型;如果函数没有返回值,则返回类型为void
  2、函数名:我们在定义函数名时,尽可能易于理解,这样有助于我们理解函数操作的实际含义,也有助于代码共享、协作开发时的阅读。
  3、参数列表:函数参数一般扮演占位符的角色,用户在每次调用时,将要传入的值放入其中,以便函数调用。参数代表的值随每次调用操作而有所不同,有些函数中,则无需参数,具体情况具体分析。
  4、 函数体:函数体在参数列表之后,用大括号{}括起,主要功能代码在函数体内。
  
  注意:函数必须先声明,然后才能被调用。函数声明的目的是让编译器得以检查后出现的使用方式是否正确(是否有足够参数、参数类型是否正确等等)。声明函数时不需要提供函数体,但必须指明返回类型、函数名、参数列表。例如:

int fibon_elem(int pos);//int为返回类型,fibon_elem为函数名,pos为参数(其中int为参数类型)

2、案例

  通过一个案例来理解函数的操作,本案例函数主要是实现Fibonacci数列中由用户指定某个位置元素是多少,例如用户可以询问“Fibonacci数列的8个元素是多少?”;程序可以输出:21.

#include <iostream>
#include <cstdlib>
using namespace std;

//函数声明
bool fibon_elem(int pos, int &elem); //&为引用类型的elem
bool print_fibon(int pos);//打印函数

//打印函数
bool print_fibon(int pos) {
	//由于数据类型范围,比如无符号int,所以输入固定位置范围
	if (pos <= 0 || pos > 1024) {
		cerr << "invalid position: " << pos << "--can not handle request!\n" << endl;
		
		return false;
	}
	cout << "The Fibonacci Squence for " << pos << " position: \n";
	
	//在第一行1、2个数都设为1
	switch (pos)
	{
	default:
	case 2:
		cout << "1 ";
		//注意,此处没有break
	case 1:
		cout << "1 ";
		break;
	}

	int elem;
	int n1 = 1;
	int n2 = 1;
	for (int ix = 3; ix <= pos; ix++)
	{
		elem = n1 + n2;
		n1 = n2;
		n2 = elem;
		cout << elem << (!(ix % 10) ? "\n" : " ")  ;

	}
	cout << endl;
	return true;

}


//函数
bool fibon_elem(int pos, int &elem) {
	//同上
	if (pos <= 0 || pos > 1024) {
		elem = 0;
		return false;
	}
	elem=1 ;
	int n1 = 1;
	int n2 = 1;

	for (int ix = 3; ix <= pos; ix++)
	{
		elem = n1 + n2;
		n1 = n2;
		n2 = elem;
		
	}
	return true;

}


//主函数
int  main() {
	int pos;
	int elem;

	//while实现程序循环询问用户,不至于回答一次就结束,后面设置了退出程序条件
	cout << "please input the pos:" ;
	while(cin >> pos){

		//若没有问题,调用函数
		if (fibon_elem(pos, elem))
		{
			cout << "element # " << pos << " is element " << elem <<endl;
			//打印数据
			print_fibon(pos);
		}
		else
			cout << "Sorry,could not calculate the element #" << pos << endl;
		
		cout << "please enter anchor position:(enter[-1]-->exit) ";
		//如果用户输入-1,退出程序
		if (pos==-1)
		{
			exit(-1);//使用该函数,必须声明cstdlib头文件
		}
	}
	return 0;
}

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

cqy阳

预祝上岸,感谢打赏

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

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

打赏作者

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

抵扣说明:

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

余额充值