基础语句——自定义函数

  上次我们讲了一些常用的功能性函数,上题:

题目描述:
设分段函数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

猜你喜欢

转载自www.cnblogs.com/RFdragon/p/10806695.html