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

递归函数在嵌入式中应用不常见,但对于学习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;
}

  • 7
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值