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