首页 > 其他分享 >嵌入式软件--C语言高级 DAY 8.5 相关函数

嵌入式软件--C语言高级 DAY 8.5 相关函数

时间:2024-08-02 20:57:38浏览次数:14  
标签:8.5 -- char int 嵌入式软件 str printf 字符串 include

递归函数在嵌入式中应用不常见,但对于学习C语言的我们,也要时刻记得它的作用和用法。此外还要记住sprintf尤其重要!还有时间戳!

一、递归函数

1.概念

一个函数在函数体内又调用了本身。但必须满足两个条件:具有明显的结束条件;趋近于结束条件的趋势。

2.递归原理

#include <stdio.h>
void f(int n)
{
    printf("%d\n",n);
    if(n>1)
    {
        f(n-1);
    }
    printf("%d\n",n);//上面如果符合条件将会挂起执行条件里的调用函数,等函数结束在重新输出。
}
int main()
{
    f(3);
    return 0;
}
//当主函数内传递实参到定义函数那边,n=3,输出n=3,n>1成立,本次调用挂起;
//开始以f(2)继续输出n=2,n>1成立,本次调用挂起。
//开始以发f(1)继续输出,输出1,不成立,输出1.
//f(2)输出2,f(3)输出3。符合先进后出原则。
//所以输出结果 
// 3
// 2
// 1
// 1
// 2
// 3

二、常用系统函数

1.字符串相关函数

(1)<string.h>头文件中函数

strlen:
#include <stdio.h>
#include <string.h>
int main()
{
    //定义字符串
    char str[]={"hello,kingbd!"};
    //使用函数
    printf("获取str字符串的长度:%d",strlen(str));
    return 0;
}

strcpy:
#include <stdio.h>
#include <string.h>
int main()
{
    //定义字符串
    char str[]={"hello,kingbd!"};
    char str1[]={"imooos."};
    //使用函数
    printf("获取str字符串的长度:%d\n",strlen(str));
    //使用复制
    strcpy(str,str1);
    //输出查看str字符串是否被覆盖
    printf("将str1复制给str:%s",str);
    return 0;
}

strcat:
#include <stdio.h>
#include <string.h>
int main()
{
    //定义字符串
    char str[]={"hello,kingbd!"};
    char str1[]={"imooos."};
    //使用函数
    printf("获取str字符串的长度:%d\n",strlen(str));
    //使用复制
   // strcpy(str,str1);
    //输出查看str字符串是否被覆盖
    //printf("将str1复制给str:%s\n",str);
    //将str1的字符串追加到str的后面
    strcat(str,str1);
    printf("追加后的结果str:%s",str);
    return 0;
}

ps:要多次追加的话,还要扩大字符数组的字节长度,以免不够用。

(2)<stdio.h>头文件中的库函数

标准库的头文件 <stdio.h> 中,也有两个字符串函数:

sprintf(),用于将格式化数据写入字符串。相比于 printf(),多了一个参数,第一个参数是要写入的字符串,后面参数与 printf() 一致。简单地讲,sprintf() 是将内容写入字符串而不是输出。

sscanf(),用于从一个字符串中按照指定的格式提取数据。相比于 scanf(),多了一个参数,第一个参数是要提取数据的字符串,后面参数与 scanf() 一致。简单地讲,sscanf() 是从字符串中提取数据而不是从用户输入提取数据。

sprintf:
#include <stdio.h>
int main()
{
    //定义要格式化的数据
    char name[]="小阿川";//姓名
    double score=99.9;//成绩
    int age=21;//年龄
    //定义一个字符串
    char studentdate[100];
    sprintf(studentdate,"我是%s,成绩%f,年龄%d。",name,score,age);
    printf("%s",studentdate);
    return 0;
}

sscanf:
#include <stdio.h>
int main()
{
    //定义要格式化的数据
    char name[100];
    double score;//成绩
    int age;//年龄
    //定义一个字符串
    char studentdate[]="姓名:小阿川,成绩99.900000,年龄21";
    sscanf(studentdate,"姓名:%s,成绩%lf,年龄%d",&name,&score,&age);
    printf("%s %lf %d",name,score,age);
    return 0;
}

2.日期时间相关函数

<time.h>

time_t 是C语言中用于表示时间值的数据类型,它通常是一个整数类型(int 或 long 或 long long),用于存储时间戳。

时间戳是指从1970年1月1日(通常称为UNIX纪元)零时零分零秒(UTC时间)起至某一特定时刻所经过的秒数。

time&ctime
#include <stdio.h>
#include <time.h>
int main()
{
    time_t currtime;
    time(&currtime);//获取当前时间
    printf("当前时间戳:%lld\n",currtime);
    printf("将时间戳转换成字符:%s",ctime(&currtime));
    return 0;
}

difftime:
#include <stdio.h>
#include <time.h>
int fu()
{
    int sum=0;
    for(int i=1;i<1000000;i++)
    {
        int sum=0;
        for(int j=1;j<1000;j++)
        {
         sum+=j;
        }
    }
    printf("%d",sum);
    return sum;
}
int main()
{
    time_t start_time;//开始时间
    time_t end_time;//结束时间
    time_t diff_time;//时间差
    time(&start_time);//得到开始时间
    fu();//执行程序,算出时间
    time(&end_time);//得到结束时间
    diff_time=difftime(end_time,start_time);
    printf("执行fu函数用了%lld秒",diff_time);
    return 0;
}

3.数学相关函数

<math.h>

举例:

#include <stdio.h>
#include <math.h>
int main()
{
    int a=2.16,b=3.14,c=-5.21;
    printf("算术平方根:%f\n",sqrt(a));
    printf("立方根:%f\n",cbrt(a));
    printf("a的b次幂:%f\n",pow(a,b));
    printf("绝对值:%f\n",fabs(c));
    printf("向上取整:%f\n",ceil(b/a));
    printf("向下取整:%f\n",floor(b/a));
    printf("四舍五入取整:%f\n",round(b/a));
    printf("截断小数部分:%f",trunc(b/a));

    return 0;
}

标签:8.5,--,char,int,嵌入式软件,str,printf,字符串,include
From: https://blog.csdn.net/zx18831955136/article/details/140877582

相关文章

  • 嵌入式软件--C语言高级 DAY 7数组
    一、概念数组array:是多个相同类型数据按一定顺序排列的集合,并使用一个标识符命名。并通过编号(索引,亦称为下标或角标)的方式对这些数据进行统一管理。数组的长度=元素的个数标号角标是从0开始。二、define_array.c定义数组的三种形式:1.定义数组,可以先确定数组的元素个......
  • 函数指针和指针函数的使用
    指针函数1:本质函数,返回值为指针1.2:格式:数据数据*函数名(形参){函数体return地址;//失败一般会返回NULL}#include<stdio.h>#include<stdlib.h>char*yue(){//chara[32]="hello";//栈区,函数调用结束后空间被释放//char*s="hello";//常量区,不会被释......
  • github是什么?
    gitHub是一个面向开源及私有软件项目的托管平台,因为只支持git作为唯一的版本库格式进行托管,故名gitHub。作为开源代码库以及版本控制系统,Github拥有超过900万开发者用户。随着越来越多的应用程序转移到了云上,Github已经成为了管理软件开发以及发现已有代码的首选方法。如......
  • 基于STM32的智能交通监控系统教程
    目录引言环境准备智能交通监控系统基础代码实现:实现智能交通监控系统车辆检测模块交通流量分析模块通信与网络系统实现用户界面与数据可视化应用场景:交通管理与优化常见问题与解决方案收尾与总结引言随着城市化进程的加快,交通拥堵问题日益严重。智能交通监控系统通过实......
  • driver. findElement()vs Selenium中的Webelement. findElement()
    Selenium是一个开源工具,可以自动化Web浏览器并帮助测试Web应用程序。它是Web应用程序测试中使用最广泛的工具之一。在Selenium中,两种常用的查找Web元素的方法是driver.findElement和WebElement.findElement。本文将讨论它们之间的差异。findElement()方法声明WebElementfindE......
  • 【数据结构】大根堆和小根堆
    大根堆实现逻辑从整棵树的最后一颗子树开始调整,每次都让根节点和左右孩子去比较,如果根节点比左右孩子的最大值要小,那么就将这两个值进行交换,然后此时这颗子树变成了大根堆,再看下一颗树然后对下一颗树进行相同的处理方法,后面的子树依次交换:当每棵子树都是大根堆的情况......
  • 基于Java养老院管理系统设计和实现(源码+LW+调试文档+讲解等)
    详细视频演示:请联系我获取更详细的演示视频系统技术介绍:后端框架SpringBootSpringBoot内置了Tomcat、Jetty和Undertow等服务器,这意味着你可以直接使用它们而不需要额外的安装和配置。SpringBoot的一个主要优点是它的自动配置功能。它可以根据你的项目中的依赖关......
  • 求奖金总数
    题目描述企业发放的奖金根据利润提成。I≤100000元的,奖金可提10%;100000<I≤200000时,低于100000 元的部分按10% 提成,高于100000 元的部分,可提成 7.5%200000<I≤400000时,低于200000 元部分仍按上述办法提成(下同),高于200000 元的部分按 5% 提成;400000<I≤600000......
  • charles教程与篡改接口数据
    charles简介Charles是一款常用的网络代理工具,可以用来监控、调试和分析网络请求和响应数据。它可以截取HTTP和HTTPS流量,在代理服务器和目标服务器之间建立连接,允许用户便捷地查看和记录网络通信数据,包括请求URL、请求头部、请求体、响应头部、响应体等信息。使用Ch......
  • 28.x86游戏实战-初探XXX发包
    免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动!本次游戏没法给内容参考于:微尘网络安全工具下载:链接:https://pan.baidu.com/s/1rEEJnt85npn7N38Ai0_F2Q?pwd=6tw3提取码:6tw3复制这段内容后打开百度网盘手机App,操作更方便哦上一个内容:27.x86游戏实战-线程......