对于小型应用程序来说不设计自定义函数完全可行,但随着程序越来越大,越来越复杂,实现的功能越来越多,如果不使用函数,main函数将变的越来越复杂越来越雍肿越来越令人难懂,而在更改程序的每一个功能的时候,往往要对整个main函数继续修改,所以在程序设计中,函数的设计与调用是很重要的一个部分。
例1:计算一个正方形的面积
#include<iostream>
using namespace std;int area(int x)
{return x*x;
} int main(){int a;cin>>a;cout<<"面积为"<<area(a);return 0;}
1)在4~7行声明且实现了函数area
2)在14行调用了函数area得到正方形的面积
一.函数的基本原型
通过例1中函数area我们可以知道函数原型的组成部分如下
1)返回值类型可以是c++基本数据类型,也可以是类,函数返回值类型必须与函数返回值匹配。
2)函数参数可以为空,可以不为空,为空时在调用该函数时,不输入认真参数;不为空时,函数参数可以有一个或者多个,这取决于你的寻求。
int test1()
{int a;return a; //编译正确
}int test2()
{double b;return b; //报错
}int test3(int a,int b)//多个函数参数
{return a+b;
}
二.函数的实现是什么
例2
//质数判断
bool isprime(int x){ //如果x为小于2得数 则肯定不为质数 if (x < 2 ||( x & 1 == 0)){return 0;}for (int i = 2; i <= sqrt(x); i++) {if (x % i == 0) {return 0;}}return 1;
}
在例2中
bool isprime(int x) 为函数的声明。
为函数的实现。
三.函数调用和实参形参是什么
例3
//设N是一个四位数,它的9倍恰好是其反序数(例如:1234的反序数是4321)
//求N的值#include<iostream>
using namespace std;int rve(int num)
{int sum = 0;while (num != 0){sum = sum*10 + num % 10;num = num / 10;}return sum;
}int main()
{for (int i = 1000; i < 10000; i++){int v_num = rve(i);if (v_num == i * 9){cout << i << endl;}}return 0;
}
1)函数调用:在23行的int v_num = rve(i)实现了对rve函数的调用,值i被传入rve函数,返回值i的
倒序数。
2)函数的实参形参,在23行的int v_num = rve(i)中,i就是函数的实参,而num就形参,他们的值相同都互不影响,如果在函数rve中修改num的值,是不会对main函数i的值产生影响,除非使用引用的方法传递参数。
//#include<iostream>
//#include<string>
//using namespace std;
//
//int get_letter(string let)
//{
// int sum = 0;
// string letter[9] = { "one","two","three","four","five","six","seven","eight","nine" };
// int n[9] = { 3,3,5,4,4,3,5,5,4 };
// for (int i = 0; i < 9; i++)
// {
// int ret = 0;
// char p[5];
// letter[i].copy(p, 5, n[i]);
// *(p + 5) = '\0';
// for (int j = 0; j < 5; j++)
// {
// if (p[j]==NULL)
// {
// break;
// }
// else
// {
// ret++;
// if (p[j] == let[j])
// {
// sum++;
// }
// }
// }
// if (sum >= ret)
// {
// return i;
// }
//
// }
//}
//
//int main()
//{
// string letter[9]= { "one","two","three","four","five","six","seven","eight","nine" };
// int total;
// cin >> total;
// while (total != 0)
// {
// string one_letter;
// cin >> one_letter;
//
// int num=get_letter(one_letter);
// cout << letter[num] << endl;
// total--;
// }
//
// return 0;
//}#include<iostream>
using namespace std;//编写一个不返回返回值的函数
void test(int num)
{cout << "num=" << num << endl;num = 2;//修改num的值cout << "num=" << num << endl;
}int main()
{int i = 1;cout << "i=" << i << endl;test(i);//在函数test中传入icout << "i=" << i << endl;//观察i的值在num的值被修改后是否发生变化
}
输出:
i=1
num=1
num=2
i=1
引入传入
#include<iostream>
using namespace std;//编写一个不返回返回值的函数
void test(int &num)// 即int &num=i
{cout << "num=" << num << endl;num = 2;//修改num的值cout << "num=" << num << endl;
}int main()
{int i = 1;cout << "i=" << i << endl;test(i);//在函数test中传入icout << "i=" << i << endl;//观察i的值在num的值被修改后是否发生变化
}
输出:
i=1
num=1
num=2
i=2 //i的值因为num的修改而发生变化,可以说明在引用传递中,num和i是绑定在一起的;
//可以这样理解例如一个他真名叫吴衍林 他小名叫五五,所以五五和吴衍林代表着同一个人,这里的num和i的关系就可以理解为大名和小名的关系,即代表着同一个东西,只是名字的不同。
四.函数的重载
函数类型相同 函数名相同 函数列表不同
#include<iostream>
using namespace std;//编写一个不返回返回值 参数列表为空的函数
void test()
{cout << "一个不返回返回值 参数列表为空的函数" << endl;
}//函数的重载
void test(int a)
{cout << "函数的重载" << endl;cout << a << endl;
}int main()
{test();test(1);
}
输出
一个不返回返回值 参数列表为空的函数
函数的重载
1
ps:以上是我对函数的理解,可能有一些不完美不全面甚至错误的地方,希望谅解,如果可以的话指出的错误,感谢您阅读我这篇文章。
本文链接:https://my.lmcjl.com/post/2615.html
4 评论