嵌入式day10

day9 函数
函数
function //功能 

函数 --- 实现某一个功能的 


函数的定义: //实现函数 

类型标识符 函数名(形式参数)
{
    声明部分
    语句部分
}

(1).类型标识符 (返回值的类型标识符)
   返回值类型 
        返回值 如果没有,返回值类型 一般写成void 
        返回的结果的类型 与 定义返回值类型 不一致 ,以定义的返回值类型为准 
        返回值的类型如果不写,默认为int型 
(2).函数名   --- 一般和函数功能对应 
(3).形式参数 --- 函数接收数据的入口 
    形参 --不是一定要有 
          看函数功能的需要 
          形参没有,一般写成 void 
          
    形参使用时:
    a.个数相同 
    b.类型匹配 
    
    //c.形参 与 实参匹配顺序  -- 在ubunt18.04平台上 顺序是 从 右向左 
     
(4).函数体   --- 完成函数具体功能的代码 

        

函数定义的位置:
1.main函数之前
2.main函数之后
  函数的声明 
  函数头 + 分号 

  函数声明可以放的位置,
  使用之前   
        
        
函数调用的形式:
add(a,b); // 函数调用语句 

int ret;

ret = add(a,b); //函数调用在表达式中 

ret = add(a,b) + 3; //表达式的一部分

//函数调用作为某个函数的实际参数    
printf("sum = %d\n",add(a,b));    


返回值的类型标识符 函数名(形式参数) //函数头 --规定了一下函数的形式   
{
    函数体    //--实现函数具体功能代码 
    
    返回结果 //return 返回结果 
}

strcpy(s1,s2); //实际参数 
    
    
怎么定义函数?


eg:
实现两个数求和?  
a+b  --复用 
1+2     

//功能:
  求和 
  
 准备数据 --> 处理数据 --->输出结果 

y = f(x)  //x --> y
     
 输入数据 -->处理数据 --->带出结果
 
 
  准备数据:
  准备两个数据 --- 形式参数要能接收两个数据 ---本身其实就是变量

  处理数据:
  a+b

  返回结果:
  return 

  
函数名:
  add
  
形式参数:
  int a,b; //形参不能这样写 
  
  数据类型 形参变量名1,数据类型 形参变量名2,...
  
  int a,int b
函数功能:

  a+b
结果:
  return 结果;
  

函数调用:
语法:
  函数名(实际参数);
  
  
练习:
    实现函数,找出两个数中的最大值     
    
    
准备数据:
int a,int b 

处理数据:
 找最大值 
返回结果:
 max 
 
函数名: maxOfTwoNum
形参:  
    int a,int b
函数体:
     a>b
返回值:
    max -- int 返回值的类型 int 

练习:
    找三个数中的最大值 
    
练习:
    判断素数?
    
    
    函数功能 --判断 --真 假 
    
    
    
    真 假 
    
    0 ---假 
    1 ---真 //1 
    
main()  //主调函数
{
   add();  //被调函数 
}

练习:
     打印100以内的素数 
    
练习:
    输入月份
    打印月份的天数 
    
    
    printMonthDays()
    {
       if isLeapYear
    }
    
----------------------------

总结:
1.函数实现 
  主要是 代码逻辑 
  
2.流程图 --- 某一个功能块 


3.main函数 
 主逻辑 
 
 针对 每个功能块 画一个流程图 
 
main函数的流程图:
打印月份天数的流程图:
判断闰年的流程图:
4.打印100以内素数 
main -->printPrimeNumIn100-->isPrime  //函数的嵌套调用 

main -->getMonthDays --> isLeapYear   //函数调用的 本质?


栈 --- 数据结构 --先进后出 (FILO) //First In Last out

linux系统上 ,默认情况下 8M ,大小可以调整。


    
栈:
   特点: 
    先进后出 (FILO)
    8M
   主要:
      局部变量 
      
      自动申请 自动释放 
      
      int a; 
堆:
  特点:
    大 
    手动申请,手动释放 
字符串常量区:
  char s[10] = "hello";
  
全局区(静态区)
  全局变量(静态变量)
  
代码区

内存的5个区
   
    
程序 = 代码 + 数据 

函数的嵌套调用:
特殊的嵌套调用 --- 递归 (自己调用自己)
递归 --就是循环

直接递归
间接递归  


while (1)  //死循环 
{
  
}


递归:
 1.
 2.算法 
 
递归的思路,实现代码?

eg:

1+...+100 
int i = 0;
int sum = 0;
while (i <= 100)
{
  sum += i;
}

//1.初始条件
//2.结束条件 
//3.趋于结束的操作 
//4.循环体 


//sum()
递归来实现: //倒着来 

sum(100)
 |--sum(99)+100
     |--sum(98)+99
         |--sum(97)+98
           ...
            |--sum(2)+3
                |--sum(1)+2
                      |--1

   
   
写出代码:
1.递推关系 //重复的 
 第n项 与 第n-1项之间的关系 
2.结束条件 

sum(100) = sum(99)+100
sum(99) = sum(98) + 99

sum(n) = sum(n-1) + n; //

sum(2) = sum(1)+2
sum(1) = 1


sum(2)

sum(n) = 
int sum(int n) //n = 2
{
  if 递归是否结束? (n==1)
  { //结束
    return 1;
  }else // 
  {
    return sum(n-1)+n;
  }
}

1.利用函数找n以内的素数(自己输入n)

嵌入式day10_第1张图片

嵌入式day10_第2张图片

2.

利用函数 输入月份输出对应天数 考虑闰年

嵌入式day10_第3张图片

嵌入式day10_第4张图片

你可能感兴趣的:(c语言)