c/c++:函数的作用,分类,随机数,函数定义,调用,申明,exit()函数,多文件编程,防止头文件重复

news2024/9/21 22:10:44

c/c++:函数的作用,分类,随机数,函数定义,调用,申明,exit()函数,多文件编程,防止头文件重复

2022找工作是学历、能力和运气的超强结合体,遇到寒冬,大厂不招人,此时学会c++的话,
我所知道的周边的会c++的同学,可手握10多个offer,随心所欲,而找啥算法岗的,基本gg
提示:系列c++学习的基础和高阶知识,用于公司生产实践中,实实在在的公司部署产品要用的,因为c++速度快,
而java和Python速度慢,自然往硬件里面部署算法啥的,都得用c++或者c,因此本科学的c很重要,后来的Python或者java就没有那么重要了,
c/c++系列文章:
【1】c++:c语言优缺点,visual studio2019如何新建项目,写hello world程序
【2】c/c++:gcc安装,gcc编译hello world文件,system函数调用系统命令,sleep函数
【3】linux下gcc的编译过程和功能,预处理,编译,汇编,链接,.c预处理为.i文件.s文件.o文件.exe文件
【4】c/c++:windows平台下依赖的动态库,c底层是汇编语言,程序断点调试,反汇编,vs快捷键
【5】c/c++:数据类型,常量变量,标识符,有符号整型,无符号unsigned,字符类型,字符串类型,实数类型,浮点型,科学计数法
【6】c/c++:2进制、8进制、10进制、16进制和进制之间的转换,c语言输出匹配格式%
【7】c/c++:原码,反码,补码和常见的数据类型取值范围,溢出
【8】c/c++:类型限定符,printf输出格式,putchar,scanf,getchar
【9】c/c++:算术运算符,赋值运算,逻辑运算,比较运算,三目运算,逗号运算,数据类型转换
【10】c/c++:顺序结构,if else分支语句,do while循环语句,switch case break语句
【11】c/c++:for循环语句,分号不可省略,表达式可以省略,猜数字游戏,跳转语句continue,break,避免写goto
【12】c/c++:一维数组,初始化数组,循环打印数组,计算数组存储空间,数组元素个数,数组逆序算法
【13】c/c++:二维数组,数组的行数和列数求法sizeof,数组初始化不同形式,5个学生,3门功课,求学生总成绩和功课总成绩
【14】c/c++:visual studio的代码快捷键,VS设置自定义默认代码,使用快捷键
【15】c/c++:三维数组,字符数组和字符串,统计字符串中字符出现的频次,scanf输入空格,正则匹配表达式
【16】c/c++:gets(),fgets(),puts(),fputs(),strlen(),字符串拼接函数


文章目录

  • c/c++:函数的作用,分类,随机数,函数定义,调用,申明,exit()函数,多文件编程,防止头文件重复
    • @[TOC](文章目录)
  • c/c++:函数的作用
  • 函数的分类
  • 函数定义:函数原型和函数体{}
  • 函数的调用
  • 函数申明
  • exit()函数和return类似
  • 多文件联合编程
  • endif
  • 总结

c/c++:函数的作用

现在发现,c真的是超级底层的编程语言,很多功能没有集成的函数
还得自个儿写

python,java,c++他们会集成很多函数,我们可以用,舒服
不过c和c++运行速度就是很快的。

咱们今天会就这下面几个问题,讨论c语言中的函数
在这里插入图片描述
在这里插入图片描述
提高代码的复用性

注意,传入数组作为参数时,要单独传入数组的长度,这样才能遍历处理
这c语言,狗的很,比java麻烦多了



void swap(int arr[], int i , int j)
{
    //传入数组,直接交换--感觉和java没区别
    int tmp = arr[i];
    arr[i] = arr[j];
    arr[j] = tmp;
}

void bubble_sort(int arr[], int n)
{
    if (sizeof(arr) == 0) return;
    //冒泡排序
    //int n = sizeof(arr) / sizeof(arr[0]);
    for (int i = n - 1; i >= 0; i--)
    {
        for (int j = i; j < n - 1; j++)//每次都是右边i--n-1对比一把,大的冒泡
        {
            if (arr[j] > arr[j + 1]) swap(arr, j, j +1);//交换
       }//知道i=0,整体比一遍
    }
}

void printArr(int arr[], int n)
{
    //整体打印一个数组
    if (sizeof(arr) == 0) return;
    //冒泡排序
    //int n = sizeof(arr) / sizeof(arr[0]);
    for (size_t i = 0; i < n; i++)
    {
        printf("%d ", arr[i]);
    }
    printf("\n");
}


int main(void)
{
    //f53();
    int arr[] = { 9,2,3,6,1 };
    int n = sizeof(arr) / sizeof(arr[0]);
    bubble_sort(arr, n);
    printArr(arr, n);

    system("pause");
    return 0;
}

在这里插入图片描述
其他的跟java没区别,反正传入的时候数组整体带入了,不要在函数里面去求数组的sizeof

模块化组织

今后都不用一个main通用干所有
之前我都是f123456
等等

main调用f即可

你上面看看我就是这么干的

函数的分类

系统库函数:标准的c库
用户自定义函数

系统库函数,首先要引入头文件–它就是申明函数
你调用函数原型就行

比如,获取随机数
播种随机数srand(time(NULL))

srand
time
都是系统库函数
直接用就完事了
rand()生成随机数,%N就是0–N-1之间的数


//rand函数%n,0--n-1之间的数
void frand(void)
{
    srand(time(NULL));
    printf("%d\n", rand() % 10);//0--9
}

int main(void)
{
    frand();
    

    system("pause");
    return 0;
}

在这里插入图片描述
至于用户自定义呢
就是上面函数的作用那一个小节
我是了解了。

函数定义:函数原型和函数体{}

包含函数的原型【1返回值类型,2函数名字,3形参列表】

在这里插入图片描述
下面是4函数体
{}
在这里插入图片描述
整体就是一个函数


void bubble_sort(int arr[], int n)
{
    if (sizeof(arr) == 0) return;
    //冒泡排序
    //int n = sizeof(arr) / sizeof(arr[0]);
    for (int i = n - 1; i >= 0; i--)
    {
        for (int j = i; j < n - 1; j++)//每次都是右边i--n-1对比一把,大的冒泡
        {
            if (arr[j] > arr[j + 1]) swap(arr, j, j +1);//交换
       }//知道i=0,整体比一遍
    }
}
int add(int a, int b)
{
	int c=a+b;
	return c;
}

形式参数ab,它们各自有自己的类型
函数名add
返回int类型数据
函数体是:

	int c=a+b;
return c;

这就是函数的定义

函数的调用

使用的时候,直接用函数名,传入实际参数ab


int add(int a, int b)
{
    int c = a + b;
    return c;
}

void f54(void)
{
    int a = 10;
    int b = 20;
    int c = add(a, b);//顺序,类型,调用类型得一致
    printf("%d\n", c);
}

int main(void)
{
    f54();
    

    system("pause");
    return 0;
}

在这里插入图片描述
很简单的

形参实参的顺序类型不可乱哦

在这里插入图片描述

函数申明

函数调用它之前,编译器必须见过这个定义
否则需要函数申明

说白了,你要么把函数写在调用之前写好
要么就是你把函数写在调用之后,但是,调用前,好歹你要申明一下。

上面小结说的就是往往我把函数写在前面,然后main调用

如果你要把函数放在main之后,那需要再main前还是说一下

在这里插入图片描述
在这里插入图片描述


void f54(void);//申明一波即可

int main(void)
{
    f54();
    

    system("pause");
    return 0;
}


int add(int a, int b)
{
    int c = a + b;
    return c;
}


void f54(void)
{
    int a = 10;
    int b = 20;
    int c = add(a, b);//顺序,类型,调用类型得一致
    printf("%d\n", c);
}

在这里插入图片描述
懂了没,编译器必须要把函数编译在前
然后调用在后
怎么着也要提前说清楚,我要申明用这种函数。

在这里插入图片描述
在这里插入图片描述
那些头文件的作用就是申明

exit()函数和return类似

stdlib.h
中的退出函数

参数是整数,执行完就闪退了整个程序。

return是返回当前函数调用,将返回值返回给调用者
但是exit是直接结束当前程序。
在这里插入图片描述



void f54(void);//申明一波即可

int main(void)
{
    f54();
    

    system("pause");
    //return 0;
   
}


int add(int a, int b)
{
    int c = a + b;
    //return c;
    exit(1);//退出整个程序

}


void f54(void)
{
    int a = 10;
    int b = 20;
    int c = add(a, b);//顺序,类型,调用类型得一致
    printf("%d\n", c);
}

在这里插入图片描述

多文件联合编程

在这里插入图片描述
在这个解决方案上再加一个新建项目

目前你可以看到day01是主要的main启动项

你可以设置多文件联合编程项目为新的main启动项

在这里插入图片描述
这样的话,它就可以直接启动
其他项目内部的main是没用的

好,

我们在这个main
下加函数
正常情况下,你申明函数,构建函数,调用函数,都在本文件下使用

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
#include<time.h>
#include<Windows.h>

//申明
int add(int a, int b);
int sub(int a, int b);
int mul(int a, int b);

void f(void)
{
    int a = 10;
    int b = 5;

    printf("add:%d\n", add(a, b));
    printf("sub:%d\n", sub(a, b));
    printf("mul:%d\n", mul(a, b));
}

int main(void)
{
    f();

    system("pause");
    return 0;
}


int add(int a, int b)
{
    return a + b;
}

int sub(int a, int b)
{
    return a - b;
}

int mul(int a, int b)
{
    return a * b;
}

在这里插入图片描述
但是,如果我们要把add这仨函数独立出去每一个文件下,怎么玩?
首先把代码分别建立在其他的c文件中,命名为函数名.c
add.c
sub.c
mul.c
在这里插入图片描述
现在呢,你运行看看能行吗?

在这里插入图片描述
在这里插入图片描述
显然,你那些c文件,还没有办法联合为头文件

将多个不同函数功能的c文件模块编译生成1个exe文件:叫联合多文件编程

我们去把这仨函数申明,添加到新建一个head.h头文件,我们来自定义一个头文件

int add(int a, int b);
int sub(int a, int b);
int mul(int a, int b);

在这里插入图片描述

放head里面了
#program once,这是Windows系统中的用法
下面放你要的函数申明即可
在这里插入图片描述
然后你再main中调用这个手动的头文件head.h
冒号打头哦
尖括号是系统头文件
【好像这样不行,我试了,还是按照下面的方法】

Linux中:
#ifndefine HEAD_H
#define HEAD_H
头文件内容

endif

防止头文件包含,这叫头文件守卫。
像这样:
head.h

//#pragma once

#ifndef __HEAD_H__
#define __HEAD_H__

//include头文件也可以放
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
#include<time.h>
#include<Windows.h>
//函数申明
int add(int a, int b);
int sub(int a, int b);
int mul(int a, int b);
//宏定义也可以往这里放

#define PI 3.14


#endif // !__HEAD_H__


main中这样调用:




//申明自定义头文件
#include "head.h"

void f(void)
{
    int a = 10;
    int b = 5;

    printf("add:%d\n", add(a, b));
    printf("sub:%d\n", sub(a, b));
    printf("mul:%d\n", mul(a, b));
}

int main(void)
{
    f();

    system("pause");
    return 0;
}



我这个没有成功,不知道设置哪里有问题,很狗很狗

先不管了,出去散步再说,吃太饱了


总结

提示:重要经验:

1)
2)学好c++,即使经济寒冬,手握10个大厂offer绝对不是问题!
3)笔试求AC,可以不考虑空间复杂度,但是面试既要考虑时间复杂度最优,也要考虑空间复杂度最优。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Spring启动及Bean实例化过程来看经典扩展接口

目录 一、Spring启动及Bean实例化过程 二、分析其对应经典扩展接口 三、对开发的指导意义 备注&#xff1a;以下总结只是一些基本的总结思路&#xff0c;具体每个扩展接口的应用后续进行分析总结。 一、Spring启动及Bean实例化过程 Spring启动及Bean实例化的过程&#xff0…

6 款顶级 Android 数据恢复软件列表

数据丢失可能会扰乱您的个人/企业生活&#xff0c;如果手动完成&#xff0c;可能很难恢复丢失的数据。Android 数据恢复软件是解决此问题的完美解决方案。这些工具可帮助您快速轻松地从 Android 设备恢复丢失的数据。它可以帮助您恢复照片、视频、笔记、联系人等。 我研究了市…

1. C++使用Thread类创建多线程的三种方式

1. 说明 使用Thread类创建线程对象的同时就会立刻启动线程&#xff0c;线程启动之后就要明确是等待线程结束&#xff08;join&#xff09;还是让其自主运行&#xff08;detach&#xff09;&#xff0c;如果在线程销毁前还未明确上面的问题&#xff0c;程序就会报错。一般都会选…

webserve简介

目录 I/O分类I/O模型阻塞blocking非阻塞 non-blocking&#xff08;NIO&#xff09;IO复用信号驱动异步 webServerHTTP简介概述工作原理HTTP请求头格式HTTP请求方法HTTP状态码 服务器编程基本框架两种高效的事件处理模式Reactor模式Proactor模拟 Proactor 模式 线程池 I/O分类 …

字节岗位薪酬体系曝光,看完感叹:不服真不行

曾经的互联网是PC的时代&#xff0c;随着智能手机的普及&#xff0c;移动互联网开始飞速崛起。而字节跳动抓住了这波机遇&#xff0c;2015年&#xff0c;字节跳动全面加码短视频&#xff0c;从那以后&#xff0c;抖音成为了字节跳动用户、收入和估值的最大增长引擎。 自从字节…

最全MySQL8.0实战教程

文章目录 最全MySQL8.0实战教程一.前言1.计算机语言概述2.SQL的概述2.1 语法特点2.2 MySQL的安装2.2.1 方式1&#xff1a;解压配置方式2.2.2 方式2&#xff1a;步骤安装方式 二. 数据库DDL操作1.DDL概念2.对数据库常用操作 最全MySQL8.0实战教程 长路漫漫&#xff0c;键盘为伴&…

【Linux进阶篇】启动流程和服务管理

目录 &#x1f341;系统启动 &#x1f343;Init和Systemd的区别 &#x1f343;运行级别和说明 &#x1f341;Systemd服务管理 &#x1f343;6和7命令区别 &#x1f343;systemd常用命令 &#x1f341;系统计划调度任务 &#x1f343;一次性任务-at &#x1f343;batch &#x1…

论文 : Multi-Channel EEG Based Emotion Recognition Using TCNBLS

Multi-Channel EEG Based Emotion Recognition Using Temporal Convolutional Network and Broad Learning System 本文设计了一种基于多通道脑电信号的端到端情绪识别模型——时域卷积广义学习系统(TCBLS)。TCBLS以一维脑电信号为输入&#xff0c;自动提取脑电信号的情绪相关…

自然语言处理 —— 01概述

什么是自然语言处理呢? 自然语言处理就是NLP,全名为Natural Language Processing。 一、NLP的困难 1. 歧义 (1)注音歧义 (2)分词歧义 (3)结构歧义 (4)指代歧义 (5)语义歧义 (6)短语歧义

javascript简单学习

简介&#xff1a; javascript 是脚本语言 javascript是轻量级的语言 javascript是可插入html页面的编程代码 javascript插入html页面后&#xff0c;可由所有现代浏览器执行 以下是JavaScript的一些基本概念&#xff1a; 1. 变量&#xff1a;变量用于存储数据值&#xff0…

每日学术速递4.13

CV - 计算机视觉 | ML - 机器学习 | RL - 强化学习 | NLP 自然语言处理 Subjects: cs.CV 1.Slide-Transformer: Hierarchical Vision Transformer with Local Self-Attention(CVPR 2023) 标题&#xff1a;Slide-Transformer&#xff1a;具有局部自注意力的分层视觉变换器 …

一、vue之初体验-两种方式引入vue

一、Vue引入方式-CDN <html lang"en"><head><meta charset"UTF-8" /><meta http-equiv"X-UA-Compatible" content"IEedge" /><meta name"viewport" content"widthdevice-width, initial-s…

开源问答社区软件Answer

什么是 Answer &#xff1f; Answer 是一个开源的知识型社区软件。您可以使用它快速建立您的问答社区&#xff0c;用于产品技术支持、客户支持、用户交流等。 Answer是国内SegmentFault 思否团队开发的技术问答社区&#xff0c;Answer 不仅拥有搭建问答平台&#xff08;Q&A…

界面控件DevExtreme使用指南 - 折叠组件快速入门(一)

DevExtreme拥有高性能的HTML5 / JavaScript小部件集合&#xff0c;使您可以利用现代Web开发堆栈&#xff08;包括React&#xff0c;Angular&#xff0c;ASP.NET Core&#xff0c;jQuery&#xff0c;Knockout等&#xff09;构建交互式的Web应用程序&#xff0c;该套件附带功能齐…

MySQL - C语言接口-预处理语句

版权声明&#xff1a;本文为CSDN博主「zhouxinfeng」的原创文章&#xff0c;原文链接&#xff1a;https://blog.csdn.net/zhouxinfeng/article/details/77891771 目录 MySQL - C语言接口-预处理语句预处理机制特点&#xff1a;预处理机制数据类型函数:预处理机制步骤&#xff1…

集群聊天服务器项目(三)——负载均衡模块与跨服务器聊天

负载均衡模块 为什么要加入负载均衡模块 原因是&#xff1a;单台服务器并发量最多两三万&#xff0c;不够大。 负载均衡器 Nginx的用处或意义**&#xff08;面试题&#xff09;** 把client请求按负载算法分发到具体业务服务器Chatserver能和ChatServer保持心跳机制&#xf…

机器学习实战5-天气预测系列:利用数据集可视化分析数据,并预测某个城市的天气情况

大家好&#xff0c;我是微学AI&#xff0c;最近天气真的是多变啊&#xff0c;忽冷忽热&#xff0c;今天再次给大家带来天气的话题&#xff0c;机器学习实战5-天气预测系列&#xff0c;我们将探讨一个城市的气象数据集&#xff0c;并利用机器学习来预测该城市的天气状况。该数据…

迈入Java,一文告诉你学习Java的原因

前言 Java是一种流行的编程语言&#xff0c;由Sun Microsystems于1995年首次发布。自那时以来&#xff0c;Java已成为全球最广泛使用的编程语言之一。Java具有许多优点&#xff0c;包括跨平台、面向对象和安全性等&#xff0c;使其成为开发企业软件、Web应用程序和移动应用程序…

Consul TTL健康检查方式

consul比较常用的健康检查方式为http健康检查方式&#xff0c;也还有使用TTL方式来进行健康检查的&#xff0c;下面从spring-cloud-consul-discovery这个SDK来着手分析。 构建ConsulAutoRegistration&#xff0c;这里的工作是组成服务注册的报文&#xff0c;有一个setCheck方法…

【应急响应】战中溯源反制对抗上线CSGoby蚁剑Sqlmap等安全工具

文章目录 溯源反制-Webshell工具-Antsword正常情况下&#xff0c;PHP后门上线发现PHP后门&#xff0c;修改webshell进行反制 溯源反制-SQL注入工具-SQLMAP溯源反制-漏洞扫描工具-Goby&Awvs溯源反制-远程控制工具-CobaltStrike1、伪造流量批量上线&#xff08;欺骗防御&…