2021-10-15 C语言 函数

C语言删除一个字符串中的指定字符(字母区分大小写) ##问题描述 删除一个字符串中的指定字符(字母区分大小写) 输入 一个原始字符串,一个欲删除的字符集(该字符集元素不重复) 输出 删除指定字符后的字符串(按ASCII码序升序)。特别地,若删除后的字符串为空,输出null 样例1 输入 aacbggc12 gc2 输出 1aab 样例2 输入 abcgagc1222 abgc12 输出 null ##问题分析 在没学习指针和字符串之前,我们用什么方... 阅读详情

Day8 函数
函数的基本用法
1.定义
函数是一个完成特定功能的代码模块,其程序代码独立,通常要求有返回值,也可以是空值。
一般形式如下:

<数据类型><函数名称>(<形式参数说明>){
语句序列;
return [(<表达式>)];
}

① <数据类型>是整个函数的返回值类型,return [(<表达式>)]语句中表达式的值要和函数的<数据类型>保持一致。如无返回值应该写为void型。
② <形式参数说明>是逗号“,”分隔的多个变量的说明形式。
③ 大括弧内{<语句序列>},称为函数体;<语句序列>是大于等于0个语句构成的。
④ 函数的说明就是指函数原型。其中<形式参数说明>可以缺省说明的变量名称,但类型不能缺省。
⑤ 编写函数注意:函数功能、参数、返回值。
例:

double Power (double x , int n );
double Power (double , int );

2.函数的使用
函数的使用也叫函数的调用,形式如下:
函数名称(<实际参数>);
① 实参就是在使用函数时,调用函数传递给被调用函数的数据,需要确切的数据。
② 函数调用可以作为一个运算量出现在表达式中,也可以单独形成一个词语。对于无返回值的函数来讲,只能形成一个函数调用语句。
③ 函数要先说明后使用(可以不用先实现)
例:编写一个函数显示”Hello everyone!”,然后编写主程序main调用它。

#include <stdio.h>

int hello ( ){
	printf(“Hello everyone!”);
	return 0 ;
}

int main ( ){
	hello ( ) ;
	return 0 ;
}

3.程序举例
定义求X的n次方的函数(X是实数,n为正整数)

#include <stdio.h>

double power(double x, int n) 
{
        double r = 1;
        int i;

        for (i = 1; i <= n; i++)
                r *= x;

        return r;
}

int main() 
{
        double x, ret;
        int n;

        printf("input:");
        scanf("%lf%d", &x, &n);

        ret = power(x, n);

        printf("%lf %d = %lf\n", x, n, ret);

        return 0;
}

问:使用函数库时,为什么引入头文件,有没有别的替代办法?
答:头文件中有函数的说明,引入头文件后才能让编译器看到文件中的函数说明和调用。将头文件中需要的函数说明引入到程序中,可以代替直接引入头文件。
例:引用scanf和printf函数可以引入<stdio.h>头文件,也可以直接引用<stdio.h>中的scanf和printf
函数说明。

//#include <stdio.h>
int scanf(const char *format, ...);
int printf(const char *format, ...);

double power(double, int);

int main() 
{
        double x, ret;
        int n;

        printf("input:");
        scanf("%lf%d", &x, &n);

        ret = power(x, n);

        printf("%lf %d = %lf\n", x, n, ret);

        return 0;
}

double power(double x, int n) 
{
        double r = 1;
        int i;

        for (i = 1; i <= n; i++)
                r *= x;

        return r;
}

函数的参数传递
函数之间的参数传递方式:全局变量、复制传递方式、地址传递方式
1.全局变量
(1)全局变量就是在函数体外说明的变量,它在程序中的每个函数都是可见的。
(2)全局变量一经定义后就会在程序中的任何地方可见。函数调用的位置不同,程序的执行结果可能会受到影响,不建议使用。
例:

#include <stdio.h>

double x = 2;
int n = 3;

double power();

int main() 
{
//        double x = 2;
//        int n = 3;
        double ret;

        ret = power();

        printf("%lf %d = %lf\n", x, n, ret);

        return 0;
}

double power() 
{
        double r = 1;
        int i;

        for (i = 1; i <= n; i++)
                r *= x;

        return r;
}

2.复制传递方式(值传递)
(1)调用函数将实参传递给被调用函数,被调用函数将创建同类型的形参并用实参初始化。
(2)形参是新开辟的存储空间,因此在函数中改变形参的值,不会影响到实参。形参、实参是一对一关系。

例:

#include <stdio.h>

double power(double, int);

int main() 
{
        double x = 2;
        int n = 3;
        double ret;

        printf("&x=%p &n=%p\n", &x, &n);

        ret = power(x, n);

        printf("%lf %d = %lf\n", x, n, ret);

        return 0;
}

double power(double a, int b) //double a = x; int b = n;将x的值传给a,将n的值传给b
{
        double r = 1;
        int i;

        printf("&a=%p &b=%p\n", &a, &b);

        for (i = 1; i <= b; i++)
                r *= a;

        return r;
}

3.地址传递方式(指针传递)
按地址传递,实参为变量的地址,而形参为同类型的指针。被调用函数中对形参的操作,将直接改变实参的值(被调用函数对指针的目标操作相当于对实参本身的操作)。
例:

#include <stdio.h>

void  swap(int * x, int * y);

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

        printf("before:%d %d\n", a, b);

        swap(&a, &b);//引入a,b地址

        printf("after:%d %d\n", a, b);

        return 0;
}
//int * x = &a; int *y = &b;
void  swap(int * x, int * y) 
{
        int t;
        t = *x;//a
        *x = *y;
        *y = t;
}

4.程序举例
写一个函数,统计字符串中小写字母的个数,并把字符串中的小写字母转化为大写字母。

#include <stdio.h>
int str_fun(char * p);

int main(int argc, char *argv[])
{
        char s[] = "welcome2021Beijing";
        int n;

        n = str_fun(s);
        printf("n=%d %s\n", n, s);

        return 0;
}

int str_fun(char * p) //char * p = s;
{
        int num = 0;
        while (*p != '\0') {//while (*p)
                if (*p <= 'z' && *p >= 'a') {
                        num++;//统计小写字母数量
                        *p -= ' ';//将小写字母转化为大写
                }
                p++;
        }
        return num;
}

问:如何编程可以实现地址传递方式且不能改变实参?
答:使用const修饰符

函数中传递数组参数
1.函数的传参——数组
(1)全局数组传递方式
(2)复制传递方式
实参为数组的指针,形参为数组名(本质是一个指针变量)
(3)地址传递方式
实参为数组的指针,形参为同类型的指针变量

2.程序举例
(1)编写函数,计算一个一维数组的所有元素的和
复制传递方式

#include <stdio.h>

int array_sum(int data[], int n);

int main(int argc, char *argv[])
{
        int a[] = {5, 9, 10, 3, 10};
        int sum = 0;

        sum = array_sum(a, sizeof(a)/sizeof(int));

        printf("sum=%d\n", sum);
        return 0;
}

int array_sum(int data[], int n) // int data[] = a;error  int * data = a;
{		
//int n = sizeof(a)/sizeof(int);
        int ret = 0;
        int i;

        for (i = 0; i < n;i++) {
                printf("%d\n", data[i]);
                ret += data[i];
        }

        return ret;
}

地址传递方式

#include <stdio.h>

int array_sum(int * data, int n);

int main(int argc, char *argv[])
{
        int a[] = {5, 9, 10, 3, 10};
        int sum = 0;

        sum = array_sum(a, sizeof(a)/sizeof(int));

        printf("sum=%d\n", sum);
        return 0;
}

int array_sum(int * data, int n) //int * data = a;
{
//int n = sizeof(a)/sizeof(int);
        int ret = 0;
        int i;

        for (i = 0; i < n;i++) {
                printf("%d\n", data[i]);
                ret += data[i];
        }

        return ret;
}

(2)编写函数,删除字符串中的空格

#include <stdio.h>

void del_space(char * s1);

int main(int argc, char *argv[])
{
        char s[] = "   h  a   sdf g  ";

        puts(s);
        del_space(s);
        puts(s);

        return 0;
}

void del_space(char * s1) 
{
        char * s2;

        s2 = s1;

        while (*s1) {
                if (*s1 == ' '){
                        s1++;//遇到空格指针前移
                }
                else {
                        *s2 = *s1;//遇到字符时将s1内容赋值给s2
                        s1++;
                        s2++;//s1,s2前移循环继续
                }
        }
        *s2 = '\0';
}

指针函数
指针函数是指一个函数的返回值为地址量的函数。
指针函数的定义的一般形式如下:

<数据类型> *<函数名称>(<参数说明>){
语句序列;
return [(<表达式>)];
}

返回值:全局变量的地址/static变量的地址/字符串常量的地址/堆地址
例:
下面程序是否有问题,若有问题如何修改?(存疑)

#include <stdio.h>
#include <string.h>

char * getstring();

int main(int argc, char *argv[])
{
        char * r;
        
        r = getstring();
        printf("---%s---\n", getstring());

        (*r)++;
        puts(r);

        return 0;
}

char * getstring() 
{
        char str[20];

        strcpy(str, "hello");//字符串str为局部变量

        return str;
}

修改:

#include <stdio.h>
#include <string.h>

//char str[20];
char * getstring();

int main(int argc, char *argv[])
{
        char * r;
        
        r = getstring();
        printf("---%s---\n", getstring());

        //(*r)++;
        puts(r);

        return 0;
}

char * getstring() 
{
        //char str[20];//error
        //static char str[20];
        char * str = "hello";

       // strcpy(str, "hello");

        return str;
}

例:
(1)编写一个指针函数,删除一个字符串中的空格

#include <stdio.h>
#include <string.h>

char * del_space(char * s);

int main(int argc, char *argv[])
{
        char * r;
        char str[]= "   how    are  you  ";
        char s[50], s2[50];
        
        r = del_space(str);
        printf("---%s---\n", r);

        //strcpy(s, del_space(str));
        strcpy(s2, strcpy(s, del_space(str)));//m=n=k
        puts(str);
        puts(s);
        puts(s2);

        return 0;
}

char * del_space(char * s) //char * s = str;
{
        char * r = s;
        char * p = s;

        while (*s) {
                if (*s == ' ')
                        s++;
                else {
                        *p = *s;
                        s++;
                        p++;
                }
        }
        *p = '\0';

        return r;//r指针为字符串首地址,p指针进行字符串操作
}

(2)编写一个指针函数,实现字符串函数连接

#include <stdio.h>

char * mstrcat(char * dest, const char * src);

int main(int argc, char *argv[])
{
        //char * r;
        char dest[50] = "welcome";
        char src[] = "everyone";
        
        puts(mstrcat(dest, src));
        puts(dest);

        return 0;
}

char * mstrcat(char * dest, const char * src) 
{
        char * r = dest;

        while (*dest++);//当*dest不为\0时,dest指针加1

        dest--;//此时dest指针指向\0,需要回退一位,进行字符串连接

        while (*dest++ = *src++);//循环将src字符串连接在dest字符串之后

        return r;
        /*方式二
        char * r = dest;

        while (*dest++);

        dest--;

        while (*src) {
                *dest++ = *src++;
        }

        *dest = '\0';

        return r;
        */
        /*方式三
        char * r = dest;

        while (*dest) {
                dest++;
        }

        while (*src) {
                *dest = *src;
                dest++;
                src++;
        }

        *dest = '\0';

        return r;
        */
}

(3)编写一个指针函数,把整数转化为字符串

#include <stdio.h>

char * itoa(char *p, int n);

int main(int argc, char *argv[])
{
        int n;
        char  s[50], * r;

        printf("input:");
        scanf("%d", &n);

        r = itoa(s, n);

        puts(r);
        puts(s);

        return 0;
}

char * itoa(char *p, int n)
{
        int r, i = 0, j;
        //static char p[50];

        while (n) {
                r = n % 10;
                n /= 10;
                p[i] = r + '0';
                i++;//循环输出数字字符串,此时输出字符转为数字的逆序
        }
        p[i] = '\0';

        j = i-1;
        i = 0;

        while (i < j) {
                r = p[i];
                p[i] = p[j];
                p[j] = r;
                i++;
                j--;//将输出字符串转化为正序
        }

        return p;
}

递归函数和函数指针
1.递归函数
递归函数是指一个函数的函数体中直接或间接调用了该函数。
递归函数调用的执行过程分为两个阶段:
① 递推函数:从原问题出发,按递归公式递推从未知到已知,最终达到递归终止条件。
② 回归阶段:按递归终止条件求出结果,逆向逐步带入递归公式,回归到原问题求解。
例:
(1)编写一个递归函数计算n!

#include <stdio.h>

int fac(int n);

int main(int argc, char *argv[])
{
        int n;

        printf("input:");
        scanf("%d", &n);

        printf("%d\n", fac(n));

        return 0;
}

int fac(int n) 
{
        if (n == 0 || n == 1)
                return 1;

        return n * fac(n-1);
}

(2)编写一个递归函数,计算斐波那契数列:一般而言,兔子出生两个月后,就有繁殖能力,一对兔子每个月能生出一对小兔子来,如果所有兔子不死,那么一年后可以繁殖多少对兔子?

#include <stdio.h>

int fib(int n);

int main(int argc, char *argv[])
{
        int n = 1;

        while (n <= 10) {
                printf("%d  ", fib(n));
                n++;
        }

        printf("\n");


        return 0;
}

int fib(int n) 
{
        if (n == 1 || n == 2)
                return 1;

        return fib(n-1)+fib(n-2);
}

2.函数指针
(1)函数指针用来存放函数的地址,这个地址是一个函数的地址,函数名代表了函数的入口地址,函数指针变量说明的一般形式如下:

<数据类型> (*<函数指针名称>) (<参数说明列表>) ;

<数据类型>是函数指针所指向的函数的返回值类型。
<参数说明列表>应该与函数指针所指向的函数的形参说明保持一致,参数名可省略。
(*<函数指针名称>)中,*说明为指针类型。 ()不可缺省,表明为函数的指针。
例:

#include <stdio.h>

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;
}

int main(int argc, char *argv[])
{
        int m = 10, n = 20;
        
        int  (* p)(int, int);

        p = add;

        //printf("%d\n", add(m, n));
        printf("%d\n", (*p)(m, n));

        p = sub;
        printf("%d\n", (*p)(m, n));

        return 0;
}

(2)函数指针数组是一个保存若干个函数名的数组。一般形式如下:

<数据类型> (*<函数指针数组名称>) [<大小>] (<参数说明列表>) ;

其中,<大小>是指函数指针数组元素的个数,其它同普通函数指针。
例:

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;
}

int main(int argc, char *argv[])
{
        int m = 10, n = 20;
        
        int  (* p[2])(int, int);//int * p[3]

        p[0] = add;

        //printf("%d\n", add(m, n));
        printf("%d\n", (*p[0])(m, n));

        p[1] = sub;
        printf("%d\n", (*p[1])(m, n));

        return 0;
}

问:如何调用C库中的qsort函数来实现整型数组排序?
答:

#include <stdio.h>
#include <stdlib.h>

int compare(const void *, const void *);

int main(int argc, char *argv[])
{
        int s[] = {89, 23, 10, 8, 7, 61}, n, i;

        n = sizeof(s)/sizeof(int);

        qsort(s, n, sizeof(int), compare);//学会通过查找函数手册使用函数

        for (i = 0; i < n; i++)
                printf("%d ", s[i]);
        puts("");

        return 0;
}

int compare(const void * p, const void * q) 
{
        return (*(int *)p - *(int *)q);

}
10个C语言技巧 而在用了else语句的后半部分代码中,只评估第一个语句,之后就继续走下面的代码,这样就节省了时钟周期,使代码更加清晰。尽管工具和结构化编程已经有了很大进展,但通常选择的仍然是C语言,基础性错误的不断发生,仍会导致某些缺陷的产生并造成维护方面的困扰。通常我们会发现,代码由一个单一的主模块组成,其中有2.5万多行代码。由于编译器的复杂性,当检测到一个错误时,通常错误位于程序中的其它地方,而非编译器所指示的位置。采用C语言或C++语言等高级语言的开发,能获得更有序的结构,便于理解和维护,使代码的整体效果更好。 阅读详情

相关推荐

手把手教你用Gazebo插件实现阿克曼底盘仿真(附Navigation2适配指南)

本文提供了一份完整的ROS2 Navigation2与Gazebo阿克曼底盘仿真全栈指南。从阿克曼运动学原理出发,详细讲解了如何构建URDF/SDF模型、集成gazebo_ros_ackermann_drive插件并进行PID调优,并重点阐述了如何深度适配Navigation2,包括配置Ackermann运动模型、调整规划器与恢复行为,最终实现从建图到自主导航的全流程仿真。

weixin_29310631的博客 398

C语言字符串操作

几个好用的函数 1.strlen 求字符串长度好计数用 直接得出字符串长度 2.strcpy 内容拷贝 把\0也拷贝进去(相当于提前\0) 对传入内容后的数组进行打印或求字符串长度时遇到\0都会停止,相当于操作原数组的效果 注意:目标空间必须足够大,以确保能完整存放原字符‘ 目标字符串 后者内容传入前者相应位置 3.strcat 把后者指向的内容复制到前者内容的后面 删除原来的\0 保证目标空间足够大 不可以自己替自己 4.strcmp 比较大小 若<返回负数 =

weixin_63496716的博客 928

Proteus仿真实战:基于IIC驱动SSD1306的0.96英寸OLED显示方案解析

本文详细解析了在Proteus仿真环境中基于IIC驱动SSD1306的0.96英寸OLED显示方案。从硬件搭建、IIC接口连接、软件驱动移植到常见问题排查,提供了全面的实战指导,帮助开发者快速实现OLED显示功能并优化性能。

weixin_28724661的博客 770

(四川大学出版社C语言程序设计第二版课后习题)(指针)包含任意字符的字符数组,数组中的非字母字符删除

#include<stdio.h> #define LEN 40 void Scanf(char *s); void Delet(char *s); int main() { char s[LEN]; Scanf(s); Delet(s); puts(s); return 0; } void Scanf(char *s) { int i=0; char c; while((c=getchar())!=EOF) { s[i++]=c; } s[i]='\0'; .

thq_kuqi的博客 273

超详细Tokenizer——文本训练数据预处理

Tokenizer是Keras库中的一个文本处理工具,它用于将文本分词并构建词汇表,同时将文本映射到整数序列。这对于自然语言处理任务非常有用,例如文本分类、情感分析、机器翻译等。

halo的博客 3701

新手必看:Infineon Memtools烧录配置全流程(附常见错误解决方案)

本文为嵌入式开发新手提供了Infineon AURIX开发环境搭建与Memtools烧录的全流程实战指南。详细解析了ADS、DAS和Memtools三大核心工具的角色与协同关系,并重点讲解了Memtools的图形界面配置步骤、烧录操作流程,以及针对“无法连接设备”、“编程失败”等常见错误的系统性排查与解决方案,帮助开发者快速上手并规避典型陷阱。

weixin_29189377的博客 634

编写函数去除字符串中包含的非字母字符(不包括空格)

题目内容: 编写函数去除字符串中包含的非字母字符(不包括空格),并将小写字母转换成大写字母。 注意,不在函数中输出。输入输出应在主函数中进行。 输入格式: 待转换的字符串,字符串间会包含空格,长度不超过200。 输出格式: 转换后的字符串 输入样例: happy new year! 输出样例: HAPPY NEW YEAR 时间限制:500ms内存限制:32000kb ...

梧秋的博客 1万+

ST7789T3与CST816D驱动全解析,面试技巧第11篇:嵌入式面试场景问答 10 连发。

SPI模式下,SCLK、MOSI、CS、DC、RST为必需引脚;8080模式下需连接D0-D7、WR、RD等信号线。CST816D触摸芯片通常通过I2C接口通信,需连接SCL、SDA及INT(中断)引脚。确保电源引脚(VCC、GND)稳定供电,ST7789T3典型工作电压为3.3V。显示异常时检查时序参数,如SPI时钟频率(建议≤40MHz)、数据建立时间。初始化流程需发送一系列命令序列,包括设置像素格式、扫描方向、帧率控制等。扫描方向(MADCTL)可调整显示旋转角度,需根据实际硬件布局配置。

a967gsvj的博客 374

c语言字符串保留字母删除数字,如何从c中的字符串中删除所有非字母数字字符?...

编写一个需要char的函数,如果要删除该字符则返回true,如果要保留则返回false:bool my_predicate(char c);然后使用std :: remove_if算法从字符串中删除不需要的字符:std::string s = "my data";s.erase(std::remove_if(s.begin(), s.end(), my_predicate), s.end());根...

weixin_39743369的博客 1928

Windows 11 安装 uv:手动下载、配置国内源

本教程详细介绍了在 Windows 11 系统下安装并配置 Python 包管理器 uv 的完整流程,包括配置环境变量 PATH、设置清华 PyPI 镜像源,以及创建收据文件以支持未来更新。适用于因网络限制无法通过官方脚本自动安装的用户,操作步骤清晰,配有图文指引,帮助读者高效完成本地部署。

寒水馨 · 轻量级技术文档 · hanshuixin.org 7605

SKUA-GOCAD入门教程-第七节 点的创建与编辑3

本文介绍了四种从井数据创建点集的方法

江洋大葱的博客 963

【C语言】:10大字符串函数

要引头文件字符串已经 ‘\0’ 作为结束标志,strlen函数返回的是在字符串中 ‘\0’ 前面出现的字符个数(不包含 ‘\0’ )。参数指向的字符串必须要以 ‘\0’ 结束。注意:函数的返回值为size_t,是无符号的(易错源字符串必须以 ‘\0’ 结束。会将源字符串中的 ‘\0’ 拷贝到目标空间。目标空间必须足够大,以确保能存放源字符串。目标空间必须可变。返回值是指向目标字符串的第一个字符的地址。源字符串必须以 ‘\0’ 结束。

2301_77900444的博客 1万+

【PCIe EP 设备入门学习专栏 -- 8 PCIe EP 架构详细介绍】

Synopsys PCIe 5.0 EP 架构由多个功能模块组成,整体遵循分层 + 模块化设计CXPL(事务层 + 链路层 + 物理层 MAC)XADM(仲裁/生成)、XAIM(应用接口)RADM(过滤/路由/Completion)CDM(配置空间)、PMC(电源管理)、LBC/DBI(寄存器访问)MSG_GEN(消息)、CXS(多芯片一致性)

CodingCos的博客 382

51单片机C语言延时函数

关键字:51单片机 C语言 延时函数      C程序中可使用不同类型的变量来进行延时设计。经实验测试,使用unsigned char类型具有比unsigned int更优化的代码,在使用时应该使用unsigned char作为延时变量。 以某晶振为12MHz的单片机为例,晶振为12MHz即一个机器周期为1us。 一. 500ms延时子程序 程序: void delay500ms(void)

shawsun的专栏 4万+

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

C题这是想干嘛,2021年美赛C题提前15天发数据?

目录通知内容分析1、[R语言入门——sqldf包 VS dplyr包](https://blog.youkuaiyun.com/weixin_46111814/article/details/112391788)2、[R语言入门——批量读取文件](https://blog.youkuaiyun.com/weixin_46111814/article/details/112491345)3、[数据可视化——一文入门ggplot2](https://blog.youkuaiyun.com/weixin_46111814/article/detai

统计学小王子的博客 1万+

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

15 C语言常用函数

参考哔站宋红康老师的学习笔记心得

兮和的个人博客 1083

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

4月从零学习C语言(第15天)——函数二

我们知道在C语言的编译器是自上往下分析你的代码的。如果我们将sum函数放到main函数下面也不提前声明这个函数。会出现什么样的错呢?

qq_46133833的博客 3万+

C语言中10个字符串函数详解

根据实例对字符串函数的学习,包括:strlen、strcpy、strcat、strcmp、strncpy、strncat、strncmp、strstr、strtok和strerror。

hihahahahah的博客 1718

C语言的本质(15)——C语言的函数接口入门

C语言的本质(15)——C语言的函数接口入门

尹成的技术博客 8136

C语言——函数

所以什么是库函数呢?总的来说,库函数就是C语言本身已经封装好定义好的函数,作为程序员可以直接去调用,比如打印控制台的printf()输出函数以及供用户键盘输入的scanf()输入函数。注意: 使用库函数的时候需要引入头文件,例如在使用printf()和scanf()函数的时候,我们需要引入stdio.h 头文件,即在一个编译文件中常见的 #include<stdio.h> ,字符串拷贝函数即strcpy()函数的话需要我们引用 string.h 头文件。

2301_78660674的博客 1750

【C语言】(15)字符函数和字符串函数

对常用的字符和字符串操作函数进行了讲解

2401_86272648的博客 1309

【C语言】详解函数

一、函数的概念二~三、自定义函数(形参和实参、return语句)和库函数(标准库和头文件)四、函数的声明和定义(函数先声明,后使用)五~六、传值调用和传址调用、嵌套调用和链式访问

无限进步!!! 2166

C语言 | C语言中的四种特殊函数

1.递归函数;2.变参函数;3.回调函数;4.内联函数

I_feige的博客 2036

C语言:函数详解(1)

了解了库函数,我们的关注度应该聚焦在自定义函数上,自定义函数其实更加重要,也能给程序员写代码更多的创造性。

2401_86551514的博客 1571

【C语言】函数

了解了库函数,我们的关注度应该聚焦在⾃定义函数上,⾃定义函数其实更加重要,也能给程序员写代码更多的创造性ret type fun_name(形式参数)• ret_type 是函数返回类型• fun_name 是函数名• 括号中放的是形式参数,简称形参• {}括起来的是函数体我们可以把函数想象成⼩型的⼀个加⼯⼚,⼯⼚得输⼊原材料,经过⼯⼚加⼯才能⽣产出产品,那函数也是⼀样的,函数⼀般会输⼊⼀些值(可以是0个,也可以是多个),经过函数内的计算,得出结果。

hdxbufcbjuhg的博客 1280
上一篇: 2021-09-28 C语言 指针专题(二)
下一篇: 详解volatile 关键字
Raymond430
博客等级 码龄7年 91粉丝 23原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值