栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

明解·函数

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

明解·函数

函数定义

函数头:返回类型+函数名+形参声明

·形参声明——用于接收辅助性提示的变量

函数体:

·仅在函数中的变量——注意不能声明和形参同名的变量,否则会发生变量名冲突的错误

函数调用
//输出较大的整数
#include
 int max2(int a,int b)
 {
     if(a>b)
     return a;
     else
     return b;
 }
 int main()
 {
     int n1,n2;
     printf("请输入两个数:n");
     scanf("%d%d",&n1,&n2);
     printf("较大的数是:%d",max2(n1,n2));
     return 0;
 }

printf("较大的数是:%d",max2(n1,n2));

·其中max2后的 括号()称为——函数调用运算符

·()括起来的n1 ,n2——实参

·被函数调用的一方,会生成用于形参的变量,并赋予其实参的值,这种情况下a,b会被赋予n1和n2的值,即45,83

·函数返回的是表达式的值,不能返回两个以上的值

·函数间参数的传递是通过值传递进行的


函数设计

1⃣️没有返回值的函数
#include
void put_stars(int n)
{
while(n-->0)
putchar('*');
}

int main()
{
    int i,len;
    printf("打印一个直角在左下方的等腰直角三角形n");
    printf("短边:n");
    scanf("%d",&len);
    for(i=0;i<=len;i++)
    {
        put_stars(i);
        putchar('n');
    }
    return 0;
}

此函数只是用来显示的,因此没有需要返回的结果

对于这类没有返回值的函数——声明用void

2⃣️ 不含形参的函数

·逆向显示输入的正整数算法

#include

int scan_print(void)
{
    int tmp;
    do{
        printf("请输入一个正整数");
        scanf("%d",&tmp);
        if(tmp<=0)
        printf("请输入正整数");
    }while(tmp<=0);
    return tmp;
}

int rev_int(int num)
{
    int tmp=0;
    if(num>0){
        do{
            tmp=tmp*10+num%10;
            num /= 10;
        }while(num>0);
    }
    return tmp;
}


int main()
{
    int nx=scan_print();
    printf("该整数倒转后的值时%dn",rev_int(nx));
    return 0;
}

scan_print 读取键盘输入的正整数并返回

该函数不接收形参,在小括号内写入了void

·注意: int main(void) 表示main函数中不包含形参

int nx=scan_print();//变量使用函数的返回值进行初始化

这种初始化方法只适用于拥有自动存储期的对象,不适用于拥有静态存储期的对象
 

·作用域

块作用域:变量的名称从变量声明的位置开始,到包含该声明的程序块最后的大括号}为止这一区间内通用

int rev_int(int num)
{
    int tmp=0;
    if(num>0){
        do{
            tmp=tmp*10+num%10;
            num /= 10;
        }while(num>0);
    }
    return tmp;
}

例如例子的 tmp 变量

文件作用域:在函数外声明的变量标识符,其名称从声明的位置开始,到该程序的结尾都是通用的


⬇️例中的数组tensu被赋予了文件作用域,因此在main函数和top函数中无需特意声明,可以直接使用

#include
#define NUMBER 5 //学生人数为5
int tensu[NUMBER];//创建数组实体的声明
int top(void);//top函数的原型声明

int main()
{
    extern int tensu[];//数组的声明,可以省略
    int i;
    printf("请输入%d名学生的分数n",NUMBER);
    for(i=0;imax)
        max=tensu[i];
    }
    return max;
}
函数定义

#define NUMBER 5 //学生人数为5

int tensu[NUMBER];//创建了一个变量实体:元素为5,元素类型为int的数组tensu


声明

extern int tensu[]; //没有真正创建出变量的实体——非定义声明

函数原型声明:

编译器在读取数据时,也是从头到尾顺序依次读取(中top函数定义在main函数后面,所以想在main函数中调用top函数,编译器需要提前知道)


int top(void);//明确了 函数的返回类型,形参类型和个数等的声明--函数原型声明

注意该声明以;结尾

对比:

int top(void){.....}----定义声明

int top(void);  ----非定义声明


头文件——库函数的函数原型声明

使用#include 指令,就可以将中的全部内容读取到程序中


数组的传递

#include
#define NUMBER 5
int max_of(int v[],int n);//非定义声明
int main()
{
    int i;
    int eng[NUMBER];// english score
    int mat[NUMBER];// maths score
    int max_e , max_mat ; // highest score
    printf("请输入%d名学生的分数。n",NUMBER);
    for(i=0;imax)
        max=v[i];
    }
    return max;
}
接收数组的形参声明:

类型名参数名 [] 

int max_of(int v[],int n)

这里使用形参n来接收元素个数


max_e=max_of(eng,NUMBER); ----> v[0]代表eng[0]的内容

max_mat=max_of(mat,NUMBER);

调用函数时使用的实参,只要写明数组的名称就可以了


const类型修饰符

·被调用函数中作为形参收到的数组==函数调用时被作为实参的数组

️止在函数内修改已接收到的数组内容的方法——在声明形参的时候加上const类型修饰符

#include
void set_zero(int v[], int n);
void print_array(const int v[], int n);
int main()
{
    int a,b;
    int arr1[]={1,2,3,4,5,6,7,8,9};
    int arr2[]={2,3,4,1,4,2,1,4,5};
    printf("arr1= "); print_array(arr1,9); putchar('n');
    printf("arr2= "); print_array(arr2,5); putchar('n'); 
    set_zero(arr1,5);//把0赋给arr1的前5个元素
    set_zero(arr2,8);//把0赋给arr2的前8个元素
    printf("赋值0过后的元素如下n");
    printf("arr1= "); print_array(arr1,9); putchar('n');
    printf("arr2= "); print_array(arr2,9); putchar('n');
    return 0;
}

void print_array(const int v[], int n)//声明不改变所接收的数组的元素的值
{
    int i;
    printf("{");
    for(i=0;i 
 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/289729.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号