上次我们讲了一些常用的功能性函数,上题:
题目描述: 设分段函数f(x)= x^2+1,x<-5 |x|*x,-5<=x<5 max(x*10,x^2)*x,x>=5 输入n个x的取值,输出对应的函数值。 输入描述: 第一行一个正整数n,表示有n个自变量取值。 第二行有n数,中间用空格隔开。 输出描述: n行,每行一个整数,表示自变量对应的函数值。 输入样例: 3 -6 -5 9 输出样例: 37 -25 810 其他说明: 所有输入数据均不超过1000。
今天我们来讲一讲自定义函数。为了使大家更快理解自定义函数的用法,我们来看一看之前将的绝对值函数abs。假设你要自定义一个功能和abs一样的函数,那它大概长这样:
int abs(int x) { if(x>=0) return x; else return -x; }
首先,你需要为函数确定一个类型,这个类型就是函数返回值的类型,拿绝对值函数abs举例,假设你用这个函数求的永远是一个整数,那么函数的类型就是int。另外,函数和变量一样需要有一个名字,一般用它的英文名字或简写,也就是绝对值absolute的前三个字母。简单地说,你需要定义一个名叫abs的返回值为整数的函数,因此就需要写“int abs”。括号里的数称为“参数”。假设我是一个绝对值函数,你要我求一个数的绝对值,那你怎么着也得告诉我这个数是什么,这就是参数的作用,也就是告诉你的函数要计算哪个数的绝对值。显然,你只需要给函数一个整数,也就是要求绝对值的那个数,就能通过函数知道他的绝对值。因此我们就有了函数的第一行:int abs(int x)。其中,函数名和参数名都可以随便取,你开心就好。
接下来,我们就需要函数实现它的功能。功能很简单,如果x>=0,就返回x,否则返回-x。返回值用return语句就可以完成。你可能终于知道int main()中的return 0是干什么用的了,它的用处就是没用好看。这里讲一下三目运算。三目运算的格式是:语句1?语句2:语句3。语句1是一个逻辑运算式,三目运算的意思是:如果语句1为true,就执行语句2,否则执行语句3。因此,上面的绝对值函数也可以写成:
int abs(int x) { return x>=0?x:-x; }
简单吧?我们来看一道例题:
题目描述: 输入n个数,输出其中的所有质数,要求排序去重。 输入描述: 第一行一个正整数n,表示有n个数。 第二行有n个正整数,中间用空格隔开。 输出描述: 第一行一个数m,表示有m个不重复的指数。 接下来m行,每行一个质数,由小到大排序。 输入描述: 5 3 10 8 5 3 输出描述: 2 3 5 其他说明: 所有输入数据均不超过1000。
答案代码如下:
#include<algorithm> #include<cmath> #include<cstdio> using namespace std; int n,ans[1000],m; bool prime(int x) { int y=sqrt(x); for(int i=2;i<=y;i++) if(x%i==0) return 0;//0就是false return 1; } int main() { int a; scanf("%d",&n); for(int i=1;i<=n;i++) { scanf("%d",&a) if(prime(a)) ans[++m]=a; } sort(ans+1,ans+m+1); printf("%d",m); for(int i=1;i<m;i++) if(ans[i]!=ans[i-1]) printf("%d\n",ans[i]); return 0; }
不知道你能不能看懂,但我确定其中所有的关于编程的知识点我都讲到过,看不懂评论区说一声。
这就是自定义函数的用法了,你学会了吗?
//答案代码 #include<algorithm> #include<cmath> #include<cstdio> using namespace std; int n,a[1000]; int main() { scanf("%d",&n); for(int i=1;i<=n;i++) scanf("%d",&a[i]); for(int i=1;i<=n;i++) { if(a[i]<-5) printf("%d\n",x*x+1); else if(x>=-5&&x<5) printf("%d\n",abs(x)*x); else printf("%d\n",max(x*10,x*x)*x); } return 0; } //以下是用函数的做法 //#include<algorithm> //#include<cmath> //#include<cstdio> //using namespace std; //int n,a[1000] //int f(int x) //{ // if(x<-5) // return x*x+1; // else // return x>=-5&&x<5?abs(x)*x:max(x*10,x*x)*x; //} //int main() //{ // scanf("%d",&n); // for(int i=1;i<=-n;i++) // scanf("%d",&a[i]); // for(int i=1;i<=n;i++) // printf("%d",f(a[i])); // return 0; //}
Created by RFdragon
原文地址:https://www.cnblogs.com/RFdragon/p/10806695.html