zoukankan      html  css  js  c++  java
  • 10-C语言函数

    目录:

    一、函数

    二、return与exit关键字

    三、递归与递推

    回到顶部

    一、函数

    1 函数由函数名、返回值、形参、函数体组成。

    函数的使用分三个步骤:声明、定义、调用

    2 语法格式:

    返回值类型 函数名(参数){

          。。。函数体;

    }

    3 函数声明

    正常来件,函数在使用前一定要声明,由编译器从上到下,所以下面的代码调用上面的函数,不需要声明,但上面的代码调用下面的函数,就必须声明。

    函数的声明:去掉函数体部分,保留返回值类型 函数名(参数);

    如果返回值类型不是int的话,都要使用函数声明。

    函数声明,可以省略参数,省略参数代表可以接收任意参数,如果不需要参数,使用void关键字。

    4 函数调用

    在准备使用函数的时候,执行函数名(参数),就调用了函数体的语句。没有参数()也不能省略。

    有参数的函数在定义时使用的参数叫形参,当调用此函数时传人的参数叫实参。

    调用函数时,需要函数的执行结果,这时就需要返回值类型标识结果的类型,函数体内部需要使用return关键字,标识具体的函数结果(返回值)。

    如果函数有返回值,当调用函数时,通常会使用变量接收返回值。

    5 函数使用时注意的问题:

    如果函数执行后,不需要结果,就定义函数的返回值类型void(空),也就不需要return关键字。

    如果执行函数需要参照一些特定的条件,就可以使用参数,如果有多个参数,之间用逗号分隔符。

    练习:

    1)求两个数的和。(求和函数、有返回值、参数2)

    2)求两个数的差、积、商。定义成函数。

    3)输入五组数,求和差积商。

    4)输入一个分数,输出相应的级别。

       输入一个级别,输出相应的分数。

       分别输入5个数,5个级别。

      1 #include <stdio.h>
      2 //声明函数
      3 //void空 没有返回值
      4 void sayHello();
      5 //定义函数
      6 void sayHello()
      7 {
      8     printf("hello world!
    ");
      9 }
     10 //声明
     11 void sayHello5();
     12 //int func();
     13 void sayHelloByCount(int count);//形参
     14 void sayHelloByCount(int count)
     15 {
     16     for (int i = 0; i < count; i++) {
     17         printf("hello world!
    ");
     18     }
     19 }
     20 int getNumber()
     21 {
     22     return 0;
     23 }
     24 //练习:求两个数的和
     25 int sum(int n1,int n2)
     26 {
     27     int sum2 = n1 + n2;
     28     return sum2;
     29 }
     30 //2)求两个数的差、积、商。定义成函数。
     31 int cha(int n1,int n2)
     32 {
     33     return n1 - n2;
     34 }
     35 int ji(int n1,int n2)
     36 {
     37     return n1 * n2;
     38 }
     39 int shang(int n1,int n2)
     40 {
     41     return n1 / n2;
     42 }
     43 //3)输入五组数,求和差积商。
     44 int intputNum()
     45 {
     46     int num;
     47     printf("输入一个数:");
     48     scanf("%d",&num);
     49     scanf("%*c");//清除缓存
     50     return num;
     51 }
     52 //输入一个分数,输出相应的级别。
     53 int inputNum2()
     54 {
     55     int num;
     56     printf("输入一个数:");
     57     scanf("%d",&num);
     58     return num;
     59 }
     60 void printFenshuByLevel(int i){
     61     if (i >= 90) {
     62         printf("a
    ");
     63     }else if(i >= 60){
     64         printf("b
    ");
     65     }else{
     66         printf("c
    ");
     67     }
     68 }
     69 //输入一个级别,输出相应的分数。
     70 char inputChar(){
     71     char ch;
     72     printf("输入一个字母:
    ");
     73     scanf("%c",&ch);
     74     scanf("%*c");//清除缓存
     75     return ch;
     76 }
     77 void printLevelByChar(char ch){
     78     switch (ch) {
     79         case 'a':
     80             printf("90~100
    ");
     81             break;
     82         case 'b':
     83             printf("60~90
    ");
     84             break;
     85         case 'c':
     86             printf("0~60
    ");
     87             break;
     88             
     89         default:
     90             break;
     91     }
     92 }
     93 int main(int argc, const char * argv[])
     94 {
     95     //调用函数
     96     //    sayHello();
     97     //    sayHello5();
     98     //    func();//int返回值可以不用声明
     99     //    sayHelloByCount(3);
    100     //    int num = getNumber();
    101     //    printf("num:%d
    ",num);
    102     //    int i = 3;
    103     //    int j = 5;
    104     //    int s = sum(i,j);
    105     //    printf("sum:%d
    ",s);
    106     //    int i = intputNum();
    107     //    int i2 = intputNum();
    108     //    int j = intputNum();
    109     //    int j2 = intputNum();
    110     //    printf("res:%d
    ",cha(i, i2));
    111     //    printf("res:%d
    ",ji(j, j2));
    112 //    for (int i = 0; i < 3; i++) {
    113 //        char c = inputChar();
    114 //        printLevelByChar(c);
    115 //    }
    116     for (int i = 0; i < 3; i++) {
    117         char i = inputNum2();
    118         printFenshuByLevel(i);
    119     }
    120     //command +a 全选 ctrl + i 格式化
    121     return 0;
    122 }

     作业:使用函数重构昨天的作业。

    使用参数的时候,相当于实参传递值给形参。

    练习:有两个数i = 2,j = 3使用函数调换两个数的值,在调换函数中查看i和j的值,在main函数中查看调换后的值。

    形参是数组时,采用两个参数,第一个参数是数组的长度,第二个参数是不指定数组长度的数组名。

    练习:求一组数的和,最小值,最大值。

    #include <stdio.h>
    //有两个数i = 2,j = 3使用函数调换两个数的值,在调换函数中查看i和j的值,在main函数中查看调换后的值。
    void swap(int m,int n){//实参传递给形参时是值传递
        int temp = 0;
        temp = m;
        m = n;
        n = temp;
        printf("swap函数中m:%d,n:%d
    ",m,n);
    }
    int main()
    {
        int i = 2;
        int j = 3;
        printf("main调换之前i:%d,j:%d
    ",i,j);
        swap(i,j);
        printf("main调换之后i:%d,j:%d
    ",i,j);
        return 0;
    }

    回到顶部

    二、return与exit关键字

    1 exit(0)是一个函数,用于退出整个程序,需要包含stdlib.h

    2 return可以作为返回值的关键字,终止当前函数的继续执行。

    #include <stdio.h>
    #include <stdlib.h>
    int test(){
        //exit(0);//终止整个程序
        return 0;//终止函数的继续执行
        printf("函数结束了!
    ");//这里不会被执行
    }
    int main()
    {
        printf("程序开始!
    ");
        test();
        printf("程序结束了!
    ");//如果test函数里加上exit(0),这里不会被执行
        return 0;
    }

    回到顶部

    三、递归与递推

    1 递归算法

    递归的过程:一般通过函数或子函数实现。

    递归的方法:在函数或子函数内部,直接或间接调用自己的算法。

    递归有可能造成死循环或算法的复杂化,(运行次数过多),因此在使用递归时,必须注意:

    1)必须有退出条件

    2)必须保证递归后,算法简化

    2 递归格式

    int f1(int n){

        if (n == 1) {//结束条件

            return 1;

        }

        return n*f1(n - 1);

    }

    3 递推的概念与基本思想

    给一个数的序列H0、H1、H2、....、Hn,若存在n0,当n > n0时,可以用等号(或大于号、小于号)将Hn与前面的某些Hi(0 < i < n)联系起来,这样的式子就叫递推关系。

    int f2(int n){

        int res = 1;

        for (int i = 1; i <= n; i++) {

            res = res * i;

        }

        return res;

    }

  • 相关阅读:
    MySQL 8 新特性之Clone Plugin
    哈尔滨工业大学(威海)第九届ACM程序设计竞赛
    我回来了
    正则表达式(五):正则表达式的高阶使用
    正则表达式(四):正则表达式中的分组的概念
    正则表达式(三):正则表达式中的重复
    正则表达式(二):正则表达式的元字符
    正则表达式(一):正则表达式的概念
    Android NDK 跨平台构建工具 CMake 使用笔记
    字节序问题之大小端模式讲解
  • 原文地址:https://www.cnblogs.com/yangmx/p/3468216.html
Copyright © 2011-2022 走看看