嵌入式day5(2022.1.11)

简介: 嵌入式day5(2022.1.11)

在C语言知识体系中,


数据类型 ---》 点


运算符 ---》 线


逻辑结构 ---》 面


函数 ---》 体


1.函数(Function)的含义


C语言中的函数分类:


  1. 系统函数(预定义函数,编程者直接使用即可)


  1. 自定义函数(编程者根据需要,自行编写)


  • 主函数main(程序的入口)


  • 功能函数(子函数)


// 子函数作用:计算2个数的和
int func_sum(int n1, int n2)
{
    int n3 = n1+n2;
    return n3;  // 结束当前函数,返回调用处
}
// int:返回值。
// func_sum:函数名
// (int n1, int n2):形参列表(形式参数)
// {...}:函数体


备注:


如果需要使用系统函数,可以查看他们的帮助手册:man手册


(一般函数位于第2本,或第3本)


可使用man -f  printf,查看当前函数位于哪本手册。


2.自定义函数的使用


一般形式:


备注:


  1. 返回值 + 函数名 + 形参列表,共同组成了函数头。


  1. 形参只对函数内有效。


  1. 如果实际情况下,子函数不需要传参,或者不需要返回值


返回值、形参列表中,可以使用空类型 void


如果出现下列警告:


 

出现原因:隐式声明。


解决方法:在使用前进行函数声明。



出现原因:红框内的函数未定义。


解决方法:把缺失的函数编写完成即可。



出现原因:缺失了分号;


3.递归函数


特点:


  1. 自己调用自己。


  1. 递归函数一般来说,代码量很少,但是功能非常强大。


  1. 适用场景:


  • 结束条件


  • 算式的前一式和后一式存在等式关系。


例子:阶乘问题。


5! = 5*4*3*2*1


6! = 6*5*4*3*2*1 = 6*5!


a.结束条件


func_jc(1) = 1 --->当n等于1时,结果直接返回1


b.算式的前一式和后一式存在等式关系。


6! = 6*5!


func_jc(6) = 6*func_jc(5);


结论---> func_jc(n) = n*func_jc(n-1);


#include <stdio.h>
// 子函数作用:计算2个数的和
int func_sum(int n1, int n2)
{
  int n3 = n1+n2;
  return n3;  // 结束当前函数,返回调用处
}
// int:返回值。
// func_sum:函数名
// (int n1, int n2):形参列表(形式参数)
// {...}:函数体
int main()
{
  int a=100, b=200;
  int c = func_sum(a, b); // 子函数的调用。(a, b)称为实参的传参(实际参数的传递)
  printf("c: %d\n", c);
  return 0; // 直接结束程序
}


#include <stdio.h>
// 函数的声明
// 传递1个int,计算它平方,返回int
int func_square(int a);
// 传递2个int,计算他们的差值,返回int
int func_sub(int a, int b); 
// 打印函数
void func_print(void);
int main()
{
  func_print();
  int a=10, b=5;
  // int c1 = func_square(a);
  // int c2 = func_square(b);
  // int c = func_sub(c1, c2);
  // printf("square: %d\n", c);
  int c = func_sub(func_square(a), func_square(b));
  printf("square: %d\n", c);
  return 0;
}
// 打印函数
void func_print(void)
{
  printf("hello\n");
  printf("hello\n");
  printf("hello\n");
  printf("hello\n");
  printf("hello\n");
  printf("hello\n");
  printf("hello\n");
  printf("hello\n");
}
// 传递1个int,计算它平方,返回int
int func_square(int a)
{
  return a*a;
}
// 传递2个int,计算他们的差值,返回int
int func_sub(int a, int b)
{
  return a-b;
}


#include <stdio.h>
// 递归计算传参的阶乘
int func_jc(int n)
{
  // a.结束条件
  if(n == 1)
    return 1;
  // b.算式的前一式和后一式存在等式关系。
  return n*func_jc(n-1);
}
int main()
{
  int a = 4;
  int num = func_jc(a);
  printf("%d\n", num);
  return 0;
}


2.c


#include<stdio.h>
void donut(int a);
void gear(int a,int b);
void stuff_it(double a,double *b);
int main()
{
    int a,b;
    double c;
    double *d;
    donut( a);
    gear( a, b);
    stuff_it(c,&c);
   return 0;
}
void donut(int a){
    for (int i = 0; i < a; i++)
    {
        printf("0\t");
    }
}
void gear(int a,int b){
    int c;
    return c;
}
void stuff_it(double a,double *b){
    return *b=a;
}


#include<stdio.h>
void max( int a,int b ,int c)
{
    int max;
    if(a>b){
        max=a;
        if(a>c) max=a;
        else max=c;
    }
    if(b>c){
        max=b;
        if(b>a) max=b;
        else max=a;
    }
    if(c>a){
        max=c;
        if(c>b) max=c;
        else max=b;
    }
     printf("最大值是:%d\n",max);
}
int main()
{
    printf("输入3个整型数");
    int a,b,c;
    scanf("%d%d%d",&a,&b,&c);
   max(a,b,c);
   printf("\n");
   return 0;
}


4.c


#include <stdio.h>
float my_power(float a,int b)
{
  int sum1 = 1;
  float sum2 = 1.0;
  if( b > 0 )
  {
    for( int i = 0; i < b; i++ )
    {
      sum1 *= a;
    }
    return sum1;
  }
  else if( b == 0)
    return 1;
  else
  {
    for( int i = 0; i < -b ; i++)
    {
      sum2 *= (float)1.00 / a;
    }
    return sum2;
  }
}
int main()
{
  int N;
  float a,sum;
    printf("输入mypower(___,___)内两个数\n");
  scanf("%f %d", &a, &N);
  sum = my_power(a,N);
  printf("输出结果:%.6f\n",sum);
  return 0;
}


#include<stdio.h>
#include <strings.h>
#include <string.h>
void link(char a[],char b[]) {
    // strlen(): 获取指定字符串的长度(不含'\0')
  char t[strlen(a)-1 + strlen(b) +1];
  //          去掉'\n'       加上'\0'
  int i;
  for(i=0; i<strlen(a)-1; i++)
  {
    t[i] = a[i];
  }
  int j;
  for(j=0; j<strlen(b)+1; j++, i++)
  {
    t[i] = b[j];
  }
  printf("合并后: %s", t);
}
int main()
{
    char a[100],b[100];
    printf("输入第一个字符串\n");
    fgets(a, 100, stdin);
    //scanf("%s",&a);
     printf("输入第二个字符串\n");
    // scanf("%c",&b);
    fgets(b, 100, stdin);
    // printf("%s",b);
    link(a,b);
   return 0;
}


6.c


#include <stdio.h>
#include <stdlib.h>
void Fibonacci(int n){
 int a = 1;
 int b = 1;
 int c = 0;
 printf("Fibonacci:\n");
 for (int i = 0; i < n - 2;i++)
 {
   c = a + b;
   a = b;
   b = c;
   printf("%d\t", c);
 }
}
int main()
{
    int n ;
    printf("输入一个数计算Fibonacci\n");
    scanf("%d", &n);while(getchar()!='\n');
    Fibonacci(n);
    printf("\n");
    return 0;
}


7.c


#include <stdio.h>
void remoSpace(char character[]);
int main()
{
  printf("请输入带空格的字符串:");
  char character[120];  
  fgets (character , 50 , stdin);     
  remoSpace(character);
  printf("%s",character);
  return 0;
}
void remoSpace(char character[])
{
  int i = 0, j = 0;
  for( i = 0;character[i] != '\0';i++)    
  {
    if(character[i] == ' ')
    {
      for( j = i; character[j] != '\0'; j++)
      {
        character[j] = character[j+1];
      }
      i--;
    }
  }
}


相关文章
|
11天前
|
C语言
嵌入式程设
嵌入式程设
7 0
|
11月前
|
传感器 人工智能 安全
有什么是嵌入式不能满足的?
从20世纪60年代开始,嵌入式系统就已经开始出现,当时主要应用于航空航天、国防、工业自动化等领域
|
存储 Java C#
day10嵌入式(2022.1.16)
day10嵌入式(2022.1.16)
94 1
|
C语言
嵌入式day4(2022.1.10)
嵌入式day4(2022.1.10)
67 0
嵌入式day6(2022.1.12)
嵌入式day6(2022.1.12)
63 0
|
自然语言处理 编译器 C语言
day11嵌入式(2022.1.17)
day11嵌入式(2022.1.17)
74 0
|
Linux Windows
day9嵌入式(2022.1.15)
day9嵌入式(2022.1.15)
75 0
|
存储 编译器
day8嵌入式(2022.1.14)
day8嵌入式(2022.1.14)
55 0
嵌入式day2(2022.1.7)
嵌入式day2(2022.1.7)
73 0
|
传感器 设计模式 Ubuntu
嵌入式到底该怎么学
其实一直有人问我嵌入式怎么学,今天跟大家讲讲我的理解。因为嵌入式是一个泛的概念,可能很多人认为嵌入式就是嵌入式Linux。但是其实并不仅仅只有Linux, 像STM32,51单片机也属于这个范畴之内的,它们有的也可以跑协议栈,跑ucos等系统。所以其实嵌入式是有很多方向的,选择一个方向,做好,做精,都是有前途的。接下来,跟大家探讨一下嵌入式的一些方向,和如何去学习。我以前也是摸索着过来的,没人告诉我如何学习,也没有学习线路,所以走了很多弯路。所以希望这篇文章可以帮助到一些正在学习的人,当然这些内容可能有主观的东西,欢迎大家一起探讨吧。