嵌入式学习 Day10

一. 函数


1.函数思想

                 ATM机 
                   |
                 (拆) //拆功能 --拆需求 
                   |
1.识别卡片  2.操作界面  3.存钱 4.取钱 5.查询 6.退出 
     |
    (拆)
     |
1.检测卡片
2.提示用户输入密码 
3.验证信息 
4.跳转到操作界面

函数 --- 实现某一个功能的程序模块 

对于复杂工程,要有模块化的程序设计思想!


2. 函数的定义

形式:

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

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

        

函数定义的位置:


1.main函数之前
2.main函数之后
  函数的声明 (函数头 + 分号) 

  函数声明可以放的极限位置,函数调用之前   
        


函数调用的形式:


add(a,b);                   // 函数调用语句 

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

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

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


练习:
    实现函数,找出两个数中的最大值     
    
    
准备数据:
int a,int b 

处理数据:
找最大值 

返回结果:
 max 
 
函数名: maxOfTwoNum
形参:  
    int a,int b
函数体:
     a>b
返回值:
    max -- int 返回值的类型 int 

练习:
    找三个数中的最大值 

嵌入式学习 Day10_第1张图片
    

练习:
     打印100以内的素数 
    嵌入式学习 Day10_第2张图片

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


3.main函数是主逻辑 
 针对 每个功能块 画一个流程图 


 
4. 函数的嵌套调用

打印月份的天数
main -->printPrimeNumIn100-->isPrime  //函数的嵌套调用 

main -->getMonthDays --> isLeapYear   //函数调用的本质(内存中)


栈 --- 数据结构 --先进后出 (FILO) 

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


栈:
   特点:先进后出 (FILO)
   自动申请,自动释放 
   主要:  局部变量   
 
堆:
  特点: 大 
  手动申请,手动释放 

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

直接递归
间接递归  


循环的思路,实现代码

eg:

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

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


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


递归的思路,实现代码 (如何写出递归以下二者是关键)
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



  if  (n==1)       // 递归是否结束
  { 
    return 1;      //如果结束,返回结束时的值
  }else  
  {
    return sum(n-1)+n;    //如果没结束,递归继续往下 
  }
   
}


练习:
 1.n的阶乘

嵌入式学习 Day10_第3张图片

你可能感兴趣的:(java,服务器,前端)