zoukankan      html  css  js  c++  java
  • c语言之函数

    函数
    1、函数的原型和调用(函数在使用前必须定义或者声明)
      #include<stdio.h>
      int max(int a,int b); //函数声明

      int main(void)
      {
        int a = 3;
        int b = 21;
        max_one = max(a,b);
        printf("%d ",max_one);
        return 0;
      }

      int max(int a,int b)
      {
        int max;
        if (a>b)
      {
        max = a;
      }
      else{
        max = b;
        }
      return max;
      }  

    2、函数的形参与实参
      形参:定义函数时,函数名后的括号内就是“形式参数”,简称形参。
      实参:在调用函数时,函数名后的括号中的变量或表达式称为“实际参数”,简称实参。
      1、实参可以是变量、常量,也可以是表达式。
      2、形参必须指定数据类型,实参和形参必须一一对应。
      3、如果一个函数没有明确地标明函数的返回类型,那么函数的返回类型就是int。
      4、如果一个函数没有返回值,那么函数的返回类型为void.
      5、c语言中,实参形参的数据传递是‘值传递’,即单向传递,只能由实参传给形参,
      而不能由形参传递给实参。
      如果函数的形参是一个数组,那么可以通过形参修改实参的值。
      如:void str(char s[])
      {  
        s[0] = 'a';
        s[1] = 'b';
      }
       int main(void)
       {
        char str1[100] = "hello world";
        str(str1);
        printf("%s ",str1); //输出: abllo world
        return 0;
       }

    3、函数的返回类型与返回值
      1、返回值通过return获得,返回值为void时可不需要return语句。
      如:void max(){
      语句;
      }
      2、return 语句中的返回值数据类型应与函数定义时相同。
      3、如果函数没有return语句,那么函数将返回一个不确定的值。

    4、多个源代码文件程序的编译
      1、头文件的使用
        如果把main函数放在第一个文件中,而把自定义函数放在第二个文件中,
        那么就需要在第一文件中声明函数原型。
        如果把函数原型包含在一个头文件里,那么就不必每次使用函数的时候都声明其原型了,把函数声明放入头文件是好习惯。
      2、#include与#define的意义
        #include 就是简单的文件内容替换
        #denfine就是简单的文本替换
      3、#ifndef 和 endif
        #ifndef __AH__//如果没有__AH__这个宏,那就编译#endif之间的代码,如果有的话,不再预编译
        #define __A__H__//具体宏的名字是自定义的
        在#ifndef中的宏,一定要大写和下划线,必要时加数字,避免和其他头文件中名字冲突。
        #endif //防止多次include的同一个文件的时候,重复预编译头文件内容。

    5、函数递归
      递归给某些编程问题提供了最简单的方法。
      缺点:有缺陷的递归会耗尽计算机资源,递归程序难以理解和维护。  

        #include<stdio.h> 
    
        void test(int j)
        {
            while(j>0)
            {
                j--;
                printf("先序递归:%d
    ",j);//先序递归,代码顺序执行 
                test(j); //自身调用自身
                printf("后序递归:%d
    ",j);//后序递归,代码逆序执行 
            }
        }

      实例1:一个队列,前一个人 总是比后一个人大2岁 ,求第n个人的年龄

      实例1:求第n个人的年龄,前一个人 总是比后一个人大2岁 
        #include<stdio.h> 
        int age(int n);//函数声明
        int main(void)
        {
            int n=5;
            printf("age=%d
    ",age(n));
            return 0;
        }
    
        int age(int n) 
        {
            if(n==1)
            {
                return 10;
            }
            else{
                return age(n-1)+2; //前一个人 总是比后一个人大2岁 
            }
            
        }
    View Code

      实例2:10进制转2进制

        #include<stdio.h>
    
        void bin(int j)  //10进制转2进制 ,除2求余,倒序排列 
        {
            int n = j%2;
            if(j>0)
            {
                //printf("%d",n);//先序递归,顺序输出 
                bin(j/2);
                printf("2进制:%d",n); //后序递归,逆序输出 1101 
    
            }
        }
    
        int main(void)
        {
            int i = 13;
            bin(i);
            return 0;
        }
    View Code

      实例3:求fib数列和自然数的和

        #include<stdio.h> 
        int fib(int n) //fib数列,1,1,2,3,5,8... 
        {
            if(n==1||n==2){
                return 1;
            }
            if(n>2)
            {
                return fib(n-2)+fib(n-1); //从第三个位置开始,等于前两个位置的数值和 
            }
        }
        
        int sum(int m) // 求自然数的和
        {
            if(m==1)
            {
                return 1;
            }
            else{
                return sum(m-1)+m;
            }
        }
        int main(void)
        {
            int i,res1,res2; //输入要求的第i个位置的数,res1和res2分别为fib函数和sum函数的返回值  
            scanf("%d",&i);
            res1=fib(i) ;
            res2=sum(i);
            printf("你要求的位置的数是:%d	%d",res1,res2);
            return 0;
        }
    View Code

      实例4:递归求字符串长度

        #include<stdio.h> 
    
        int sum_str(char s[],int i)
        {
            if(s[i])
            {
                return sum_str(s,i+1);
            }
            else{
                return i;
            }
    
        }
        int main(void)
        {
            char a[100];
            scanf("%s",a); 
            printf("%d
    ",sum_str(a,0));
            return 0;
        }
    View Code
  • 相关阅读:
    20169204,EXP 3:Java object
    20169204,EXP 2:Java object
    20169204,exp1:Familiar with the Java development environment(Linux+IDEA)
    20169204 2016-2017-2 <Mobbile Platform Development and Practice> Learning Summary, Seventh Week
    第一次使用MarkDown写博客
    理解IOC
    .net与技术经理面谈时经常被提问到的相关技术点
    缓存二、HttpRuntime.Cache用法
    缓存一、Asp.net页面缓存
    一次提交涉及两个数据库处理
  • 原文地址:https://www.cnblogs.com/schut/p/8570145.html
Copyright © 2011-2022 走看看