0
点赞
收藏
分享

微信扫一扫

# 第五天

1. 函数

作用:对某一个具体功能的过程进行封装,对细节进行隐藏

基本形式:

返回类型  函数名(参数类型 参数名1,参数类型 参数名2 . ....){
    //主要功能
    ....

    return 返回值;
}

分类:

  • 库函数:比如printf,scanf等
  • 自定义函数

可以在memset - C++ Reference (cplusplus.com)

查找自己自己需要的库函数,及对应的头文件。

例如,math.h中提供了一系列数学计算函数:

image-20220702174736297

2. 函数的调用

1. 传值调用

函数的形参和实参分别占有不同的内存块,对形参修改==不会==影响实参。

  • 代码示例
#include<stdio.h>
//交换函数
void swap(int x, int y)//x,y是形参 
{
    int tmp = x;
    x = y;
    y = tmp;
}
int main()
{
    int a, b, c;
    printf("请输入任意三个数\n");
    scanf("%d %d %d", &a, &b, &c);
    if (a > b)
    {
        swap(a, b); // 实参
    }

    if (b > c)
    {
        swap(b, c);
    }

    if (a > b)
    {
        swap(a, b);
    }
    printf("这三个数从小到大依次为%d %d %d:\n", a, b, c);

    return 0;
}

image-20220702175503628

2. 传址调用

  • 传址调用是把函数外部所创建的==变量的内存地址==传递给函数参数的一种调用方式;
  • 这种方式可以让函数和外部变量建立真正的联系,也就是函数内部就可以直接操作外部变量。

  • 代码示例
#include<stdio.h>
void swap(int* px, int* py) // 参数变为指针
{
    int tmp = *px;
    *px = *py;
    *py = tmp;
}

int main()
{
    int a, b, c;
    printf("请输入任意三个数\n");
    scanf("%d %d %d", &a, &b, &c);
    if (a > b)
    {
        swap(&a, &b); // 传入参数为变量地址
    }

    if (b > c)
    {
        swap(&b, &c);
    }

    if (a > b)
    {
        swap(&a, &b);
    }
    printf("这三个数从小到大依次为%d %d %d:\n", a, b, c);

    return 0;
}

image-20220702175848717

  • ==注意:==
  1. ==函数的定义时:参数类型变为指针类型,操作时也是直接操作指针,也就是带*==
  2. ==函数使用时,传入的参数名前加上取地址符&==

3. 递归调用

1.直接递归

image-20220702180846975


#include <stdio.h>
void Add(int b,int sum) {
    sum += b;
    //设定一个结束递归的条件,否则陷入死循环
    if (sum < 50) {
        printf("%d\n", sum);
        Add(b,sum);//函数定义的内部调用本身
    }

}
int main() {
    int b;
    int sum =0;
    scanf("%d",&b);
    Add(b,sum);
    return 0;
}

image-20220702181319452

2.间接递归

image-20220702181602668

  • 示例程序:输入两个参数a,b。结果如果不等于50,则从0开始一直加上a,减去b。
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
void Add(int a, int b, int res);
void Subtract(int a, int b, int res);
void Add(int a,int b,int res) {
    res += a;
    if (res !=50) {
        printf("%d\n", res);
        Subtract(a,b,res);
    }
    else {
        printf("sum=50!\n");
    }

}
void Subtract(int a,int b,int res) {
    res -= b;
    if (res !=50) {
        printf("%d\n", res);
        Add(a,b, res);
    }
    else {
        printf("sum=50!\n");
    }
}
int main() {
    int a,b;
    int sum =0;
    scanf("%d %d",&a,&b);
    Add(a,b,sum);
    return 0;
}

image-20220702183748103

练习题

判断素数

思路:素数的定义:不能被除1和本身以外的任何数字整除。

  • 代码
//判断质数
#include <stdio.h>
int Prime_Num(int num) {

    if (num==2||num==3) {
        return 1;
    }
    else if (num > 3) {
        int i = 2;
        while (i<num) {
            if (num % i == 0) {
                return -1;
            }
            i++;
        }
        return 1;
    }
    else {
        return -1;
    }

}
int main() {
    int num;
    scanf("%d",&num);
    int flag=Prime_Num(num);
    if (flag == 1) {
        printf("%d是素数!\n",num);
    }
    else {
        printf("%d不是素数!\n", num);
    }
    return 0;
}
  • 运行效果

image-20220702190119621

image-20220702190144379

举报

相关推荐

python第五天

RHCSA(第五天)

第五天笔记

第五天解答

JS 第五天

HCIP第五天

0 条评论