初识C语言——第二十四天

函数的基本使用和递归

1.函数是什么

2.库函数

3.自定义函数

4.函数参数

5.函数调用

6.函数的嵌套调用和链式访问

7.函数的声明和定义


函数是什么

C语言中函数的分类

1.库函数

2.自定义函数

库函数:

简单的总结,C语言常用的库函数都有:

#include <stdio.h>
#include <string.h>
int main()
{
    char arr1[20] = { 0 };
    char arr2[] = "hello bit";
    strcpy(arr1, arr2);

    printf("%s\n",arr1);//打印arr1这个字符串%s - 以字符串的格式打印
    return 0;
}

int main()
{
    char arr[] = "hello bit";

    memset(arr,'x', 5);

    printf("%s\n", arr);

    return 0;
}

自定义函数

//Swap1在被调用的时候,实参传给形参,其实形参是实参的一份临时拷贝
//改变形参,不能改变实参
void Swap1(int x,int y)//传值调用
{
    int z = 0;
    z = x;
    x = y;
    y = z;
}

void Swap2(int* pa, int* pb)//传址调用
{
    int z = 0;
    z = *pa;
    *pa = *pb;
    *pb = z;
}




int main()
{
    int a = 10;
    int b = 20;

    printf("交换前:a=%d b=%d\n", a, b);
    Swap2(&a, &b);

    printf("交换后:a=%d b=%d\n", a, b);

    return 0;
}

函数的调用

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>

//#include <stdlib.h>
//#include <time.h>
//
//void menu()//无返回值函数
//{
//    printf("**************************\n");
//    printf("********  1.play   *******\n");
//    printf("********  0.exit   *******\n");
//    printf("**************************\n");
//
//}
//
//void game()
//{
//
//    int guess;
//    int ret = rand() % 100 + 1;//产生1-100的随机数
//    while (1)
//    {
//        printf("请猜一个数字:<");
//        scanf("%d", &guess);
//        if (guess < ret)
//        {
//            printf("猜小了\n");
//        }
//        else if (guess > ret)
//        {
//            printf("猜大了\n");
//        }
//        else
//        {
//            printf("恭喜你,猜对了\n");
//            break;
//        }
//    }
//}


//#include <string.h>
//int main()
//{
//    char arr1[20] = { 0 };
//    char arr2[] = "hello bit";
//    strcpy(arr1, arr2);
//
//    printf("%s\n",arr1);//打印arr1这个字符串%s - 以字符串的格式打印
//    return 0;
//}
//
//int main()
//{
//    char arr[] = "hello bit";
//
//    memset(arr,'x', 5);
//
//    printf("%s\n", arr);
//
//    return 0;
//}

Swap1在被调用的时候,实参传给形参,其实形参是实参的一份临时拷贝
改变形参,不能改变实参
//void Swap1(int x,int y)//传值调用
//{
//    int z = 0;
//    z = x;
//    x = y;
//    y = z;
//}
//
//void Swap2(int* pa, int* pb)//传址调用
//{
//    int z = 0;
//    z = *pa;
//    *pa = *pb;
//    *pb = z;
//}
//
//
//
//
//int main()
//{
//    int a = 10;
//    int b = 20;
//
//    printf("交换前:a=%d b=%d\n", a, b);
//    Swap2(&a, &b);
//
//    printf("交换后:a=%d b=%d\n", a, b);
//
//    return 0;
//}

//#include <math.h>
//int is_prime(int x)
//{
//    //2-x-1
//    int j = 0;
//    for (j = 2; j <=sqrt(x); j++)
//    {
//        if (x % j == 0)
//        {
//            return 0;
//        }
//
//    }
//    
//        return 1;
//
//}
//
//
//int main()
//{
//    //100-200之间的素数
//    int i = 0;
//    int count = 0;
//    for (i = 100; i <= 200; i++)
//    {
//        //判断i是否为素数
//        if (is_prime(i) == 1)
//        {
//            printf("%d ", i);
//            count++;
//        }
//    }
//
//    printf("\ncount=%d ", count);
//    return 0;
//}

//int is_leap_year(int x)
//{
//    if ((x % 4 == 0 && x % 100 != 0) || (x % 400 == 0))
//    {
//        return 1;
//    }
//    else
//    return 0;
//}
//
//
//
//int main()
//{
//    int y = 0;
//    for (y = 1000; y <= 2000; y++)
//    {
//        if (is_leap_year(y) == 1)
//        {
//            printf("%d ", y);
//        }
//        
//    }
//
//    return 0;
//}

//int binary_search(int* a,int key1)

int binary_search(int arr1[],int key1,int n1)
{
    int left = 0;
    int right = n1 - 1;
    
    while (left <= right)
    {
        int mid = (left + right) / 2;
        if (arr1[mid] < key1)
        {
            left = mid + 1;
        }
        else if (arr1[mid] > key1)
        {
            right = mid - 1;
        }
        else
        {
            return mid;
        }

    }
    return -1;

}



int main()
{
    int arr[] = {1,2,3,4,5,6,7,8,9,10};
    int key = 7;
    int n = sizeof(arr) / sizeof(arr[0]);

    //找到了就返回找到的位置的下标
    //找不到就返回-1
    //数组arr传参,实际传递的不是数组本身
    //仅仅传过去了数组首元素的地址
    int ret=binary_search(arr,key,n);
    if (ret == -1)
    {
        printf("找不到\n");
    }
    else
    {
        printf("找到了,下标是: %d\n", ret);
    }


    return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/647685.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

QT之常用控件

一个图形化界面当然需要有各种各样的控件&#xff0c;QT也不例外&#xff0c;在QT designer中就有提供各种各样的控件&#xff0c;用以开发图形化界面。 而想使用好一个QT控件&#xff0c;就需要了解这些控件。 QWidget 在QT中&#xff0c;所有控件都继承自 QWidget 类&…

Docker学习(4):部署web项目

一、部署vue项目 在home目录下创建项目目录 将打包好的vue项目放入该目录下&#xff0c;dist是打包好的vue项目 在项目目录下&#xff0c;编辑default.conf 内容如下&#xff1a; server {listen 80;server_name localhost; # 修改为docker服务宿主机的iplocation / {r…

24法考证件照要求|不合格原因汇总!

6月法考报名&#xff0c;大家一定要提前熟悉下电子证件照片要求‼️ ⚠️证件照注意事项 ▪️不得上传全身照、风景照、生活照、背带(吊带)衫照、艺术照、侧面照、不规则手机照等。 ▪️本人近三个月内彩色(红、蓝、白底色均可)正面免冠电子证件照片&#xff0c;照片必须清晰完…

人工智能为犯罪地下世界带来了巨大的生产力提升

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

MySQL--执行计划

一、执行计划 1.介绍 执行计划是sql在执行时&#xff0c;优化器优化后&#xff0c;选择的cost最低的方案 通过desc、explain可以查看sql的执行计划 2.如何查看执行计划 table语句操作的表&#xff0c;在多表时才有意义type查找类型possible_keys可能会用到的索引key最终选择的…

python ofd转pdf及图片

本文部分内容参考&#xff0c;如有侵权请联系删除&#xff1a;使用 easyofd 解析ofd 文件_python模块easyofd如何使用-CSDN博客 背景需求&#xff1a;需要将邮箱中得ofd格式发票提取出来转换成pdf或者图片。 在网上搜了发现使用pyofd包&#xff0c;安装之后使用各种问题&…

VXLAN小结

1.VXLAN:(组件虚拟网络的架构核心)虚拟扩展本地局域网&#xff0c;通过隧道的形式&#xff0c;将物理上有隔离的资源&#xff0c;在逻辑上连通起来&#xff0c;使其二层互通。 a.物理网络:指的是构成 VXLAN 连接的基础 IP 网络 b.逻辑网络:指的是通过 VXLAN 构建的虚拟网络 C.N…

腾讯Java社招面试题真题,最新面试题

Java中synchronized和ReentrantLock有什么区别&#xff1f; 1、锁的实现方式不同&#xff1a; synchronized是JVM层面的锁&#xff0c;主要依赖于监视器对象&#xff08;monitor&#xff09;实现。ReentrantLock是JDK层面的锁&#xff0c;通过Java代码实现&#xff0c;提供了更…

docker 上面安装 Nginx 以及设置访问 IP 就可以访问前端工程

docker 运行 Nginx 第一步&#xff1a;搜索下镜像 首先可以使用 docker search nginx 搜索 nginx 服务 docker search nginx相关控制台输出&#xff1a; NAME DESCRIPTION STARS OFFICIAL…

[OC]深拷贝与浅拷贝

深拷贝与浅拷贝 深拷贝与浅拷贝 深拷贝与浅拷贝定义按照类型说明非容器类对象的深拷贝与浅拷贝不可变字符串可变类型字符串 容器类对象的深浅拷贝自定义类对象的深浅拷贝容器类对象的完全深拷贝1.copyItems2.解档和归档 定义 深拷贝&#xff1a;简单来说就是创建一个与被复制对…

虚拟化技术[2]之存储虚拟化

存储虚拟化 存储虚拟化简介存储虚拟化一般模型存储虚拟化实现方式基于主机存储虚拟化基于存储设备存储虚拟化基于网络存储虚拟化 案例分析&#xff1a;VMFSVMFS功能 存储虚拟化简介 存储虚拟化&#xff1a;将存储网络中的各个分散且异构的存储设备按照一定的策略映射成一个统一…

webpack5生产模式

生产模式 生产模式准备 开发模式和生产模式有不同的 配置文件 2修改webpack.prod.js文件修改webpack.dev.js文件 修改webpack.dev.js文件 1》修改输出路径为undefined 2》将绝对路径进行修改&#xff0c;进行回退 此时文件的执行命令为 修改webpack.prod.js文件 1》修改绝…

LangChain笔记

很好的LLM知识博客&#xff1a; https://lilianweng.github.io/posts/2023-06-23-agent/ LangChain的prompt hub: https://smith.langchain.com/hub 一. Q&A 1. Q&A os.environ["OPENAI_API_KEY"] “OpenAI的KEY” # 把openai-key放到环境变量里&…

【Linux】Linux的基本指令_2

文章目录 二、基本指令8. man9. nano 和 cat10. cp11. mv12. echo 和 > 和 >> 和 <13. more 和 less14. head 和 tail 和 | 未完待续 二、基本指令 8. man Linux的命令有很多参数&#xff0c;我们不可能全记住&#xff0c;我们可以通过查看联机手册获取帮助。访问…

深入编程逻辑:从分支到循环的奥秘

新书上架~&#x1f447;全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目录 一、编程逻辑的基石&#xff1a;分支与循环 分支逻辑详解 代码案例&#xff1a;判断整数是…

Unity 资源 之 限时免费的Lowpoly农场动物,等你来领!

Unity资源 之 Lowpoly farm animals 农村动物 前言资源包内容领取兑换码 前言 Unity 资源商店为大家带来了一份特别的惊喜——限时免费的农场动物资源&#xff01;这是一个充满趣味和实用性的资源包。 资源包内容 在这个资源包中&#xff0c;你可以找到丰富多样的低地养殖动物…

685. 冗余连接 II

685. 冗余连接 II 问题描述 在本问题中&#xff0c;有根树指满足以下条件的 有向 图。该树只有一个根节点&#xff0c;所有其他节点都是该根节点的后继。该树除了根节点之外的每一个节点都有且只有一个父节点&#xff0c;而根节点没有父节点。 输入一个有向图&#xff0c;该…

mac 安装Node.js

文章目录 前言一、Node是什么&#xff1f;二、下载三、安装四、验证总结 前言 Node.js是一个开源、跨平台的JavaScript运行时环境&#xff0c;它允许开发者在服务器端运行JavaScript代码。Node.js是基于Chrome V8 JavaScript引擎构建的&#xff0c;它的设计目标是提供一种高效…

这样的直男程序员,活该你单身一万年!

#分享下相亲时遇到过哪些奇葩现象# 这样的直男程序员&#xff0c;活该你单身一万年&#xff01; 在丛丛脱单小程序上相亲&#xff0c;遇到一个程序员妹纸&#xff0c;于是有了如下的真实故事&#xff1a; 妹子说她是程序员来着&#xff0c;想着我也是程序员&#xff0c;就想交…

基于xilinx FPGA的 FFT IP使用例程说明文档(可动态配置FFT点数,可计算信号频率与幅度)

目录 1 概述2 IP examples功能3 IP 使用例程3.1 IP设置3.2 fft_demo端口3.3 例程框图3.4 仿真结果3.5 仿真验证得出的结论4 注意事项5例程位置 1 概述 本文用于讲解xilinx IP 的FFT ip examples的功能说明&#xff0c;方便使用者快速上手。 参考文档&#xff1a;《PG109》 2 …