标题:学习函数
关键词:函数
内容:
1 有参宏
有参宏定义的一般格式为 #define 宏名(形参列表) 字符序列。
值得注意的是宏参和形参列表之间是不能有空格的。
所以求两个数中最的那个应该这么写:#define MAX(a,b)(a>b)?a:b
在C++中,?:是一个唯一的三目运算符. 语句1? 语句2 : 语句3 首先它对语句1进行运算,当语句1的值是 TRUE (值为非零)时,执行语句2;当语句1的值是 FALSE (值为零)时,执行语句3.
#include <iostream>
#define MAX(a,b)(a>b)?a:b
int main()
{
int x=5,y=3,z=6,m;
m=MAX(x,y);
m=MAX(m,z);
std::cout<<m<<std::endl;
}
当然也可以写成一个,不用运算两次#include <iostream>
#define MAX(a,b,c)(a>b)?(a>c)?a:c:(b>c)?b:c
int main()
{
int x=5,y=3,z=6,m;
m=MAX(x,y,z);
std::cout<<m<<std::endl;
}
2 条件编译就是可以通过人工来确定哪些程序编译哪些不编译(有点不太懂)
好了看例题
定义函数求e^x的近似解,要求最后一项小于10的-6次方,求e^x的近似值公式为=====
#include <iostream>
#include<math.h>
int fun(int n)
{
if(n==1)
return 1;
else
return n*(n-1);
}//求n的阶✖️
int main()
{
double sum,m,a;
int n=1,x;
sum=1.0;
std::cin>>x;
m=x;//这个m是用来记x的n次方的
a=m/fun(n);//a用来计算每一个项的大小
while(a<1E-6)
{
sum+=a;
m*=x;
n++;
a=m/fun(n);
}
std::cout<<"sum="<<sum<<'\n';
}
例二
统计二维数组中所有元素的平均值,并将二维数组中小于平均值单位元素储存在一个一维数组中,同时输出这些元素,及其个数
#include<iostream>
#define M 3
#define N 4
float ave(int a[][N],int n)
{
float sum=0;
for(int i;i<n;i++)
for(int j;j<N;j++)
sum+=a[i][j];
return sum/(n*N);
}
int fun(int(*p)[N],int n,int *b)
{
float average=ave(p,n);
std::cout<<"平均数为"<<average<<std::endl;
int k=0;
for(int i;i<n;i++)
for(int j;j<N;j++)
if(p[i][j]<average)
{
*(b+k)=p[i][j];
k++;
}
return k;//这个函数代表小于平均数的元素的个数
}
int main()
{
int num[M][N]{{1,10,20,30},{20,15,10,5},{3,6,9,12}};
int c[(M)*(N)];//建立一个一维数组,这个数组肯定够用
int count=fun(num,M,c);//现在count就代表小于平均数的元素的个数
std::cout<<"二维数组中的元素的个数为"<<(M)*(N)<<'\n';
std::cout<<"二维数组中的元素为";
for(int i;i<M;i++)
for(int j;j<N;j++)
{
std::cout<<num[i][j]<<'\t';
std::cout<<'\n';
}
std::cout<<"小于平均数的元素为";
for(int i;i<count;i++)
std::cout<<c[i]<<'\t';
std::cout<<std::endl;
std::cout<<"小于平均数的个数为"<<count<<std::endl;
}