• 函式


    12.0 回传值的资料型态  函式名称参数的资料型态 参与名称 , ...){       /*程式码片段*/    return 回传值;}

    函式内不能再定义其他函式

    在函式码顺序中,呼叫函式前要先宣告或定义函式

     

     练习:两个数中最大的(函式)

    #include <stdio.h>
    int max2(int, int);
    
    
    int main()
    {
        int a,b;
        printf("Please enter the first integer: ");
        scanf("%d", &a);
        printf("Please enter the second integer: ");
        scanf("%d", &b);
        printf("The maxinum is %d.
    ", max2(a,b));
        return 0;
    
    }
    
    
    int max2 (int a,int b)
    {
        int max;
        if (a >= b)
        {
            max = a;
        }else {
            max = b;
    
        }
        return max;
    }
    
    
    Please enter the first integer: 7
    Please enter the second integer: 8
    The maxinum is 8.
    
    Process returned 0 (0x0)   execution time : 2.883 s
    Press any key to continue.

     变数名称的宣告舆区块

    在同一组区块{}里同名称变数只能有一个

    int main() {
        int i;
        {
            int i;
        }
        return 0;
    
    }

    同名的全域变数和函式只能有一个

    全域和区域变数可以同名

     

    变数名称的可视范围满足两个条件:1,在程式码中位于该变数名称宣告以后    

    2, 该变数是全域变数  或者  被包含在该变数名称宣告的区块 {} 内

    #include <stdio.h>
    int i = 1;  //第一层
    int main()
    {
        printf("%d ", i);
        int i = 2; //第二层
        printf("%d ", i);
        {
            printf("%d ", i);
        int i = 3;  //第三层
            printf("%d ", i);
        }
        printf("%d ", i);
        return 0;
    }
     
    1
    2
    2
    3
    2
    Process returned 0 (0x0)   execution time : 2.615 s
    Press any key to continue.
    #include <stdio.h>
    
    
    int main()
    {
        int i = 3;
        printf("%d
    ", i);
        if ( i == 3)
        {
            i = i + 1;
            int i = 6;
            printf("%d
    ",i);
            i = i +1;
        }
        if (i == 3) // 注意这里的 i = 4;
        {
            printf("%d
    ",i);
            
        }
        return 0;
        
    }

     12.5练习三个数那个最大(函式的使用)

    #include <stdio.h>
    int max3(int,int,int);
    
    
    int main() {
        int a,b,c;
        printf("Please enter three integers: ");
        scanf("%d%d%d", &a, &b, &c);
        printf("The maxinum is %d.
    ", max3(a,b,c));
        return 0;
    }
    
    int max3(int a, int b, int c)
    {
        int max = a;
        if (b > max) {
            max = b;
        }
        if (c > max) {
                max = c;
        }
        return max;
    }
    
    Please enter three integers: 567 233 634
    The maxinum is 634.
    
    Process returned 0 (0x0)   execution time : 20.803 s
    Press any key to continue.

     练习:这种方式的思想是在原来的基础上增加,依照过去累积的成果继续发展新的东西。

    #include <stdio.h>
    int max2(int,int);
    int max3(int,int,int);
    
    
    int main() {
        int a,b,c;
        printf("Please enter three integers: ");
        scanf("%d%d%d", &a, &b, &c);
        printf("The maxinum is %d.
    ", max3(a,b,c));
        return 0;
    }
    
    int max3(int a, int b, int c) {
        return max2(max2(a,b), c);
    }
    
    
    int max2(int a, int b)
    {
        if (a >= b)
        {
            return a;
    
        }else {
            return b;
        }
    }
    
    Please enter three integers: 3 5 4
    The maxinum is 5.
    
    Process returned 0 (0x0)   execution time : 10.111 s
    Press any key to continue.

     12.6用文字绘制三角形的练习(使用函式)

     

    #include <stdio.h>
    void print_stars(int i);
    
    
    int main()
    {
        int N;
        printf("N = ");
        scanf("%d", &N);
    
        int i;
        for (i = 1; i <= N; ++i)
        {
            print_stars(i);//int k = print_stars(i);这样写是错误的,因为它不回传任何值
            printf("
    ");
    
        }
        return 0;
    }
    
    
    void print_stars(int i) // void 作为回传值型态时,表示该函式不回传任何值
    {
        int j;
        for (j =1; j<= i; ++j)
        {
            printf("*");
        }
        return; // 当回传值型态是 void 时,return 可以省略
    }
    
    
    N = 7
    *
    **
    ***
    ****
    *****
    ******
    *******
    
    Process returned 0 (0x0)   execution time : 10.220 s
    Press any key to continue.

      12.7 随机产生五个乱数(函式的使用)

     

    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    
    int main()
    {
        srand(time(0));
        int i;
        for (i = 1; i <= 5; i++)
        {
            printf("%d
    ", rand());
        }
        return 0;
    }
    
    
    每次输出都是不同的五个数

     12.8 掷骰子(函式乱码的调用)

    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    
    int main() {
        srand (time(0));
        int i;
        for (i = 1; i <= 5; ++i) {
            int dice = rand() % 6 + 1;
            printf("%d
    ", dice);
        }
        return 0;
    
     } // 每次都输出五个随机的数


     运用函式猜数字的练习

    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    
    int main()  {
        srand(time(0));
        int answer = rand() % 100;
        int guess;
    
        do {
            printf("Please enter your guess: ");
            scanf("%d", &guess);
            if  (guess > answer) {
                printf("Too large!
    ");
    
            } else if (guess < answer) {
                printf("Too small!
    ");
            } else {
                printf("Correct!
    ");
            }
        } while (guess != answer);
        return 0;
    
    }
    
    Please enter your guess: 62
    Too small!
    Please enter your guess: 63
    Too small!
    Please enter your guess: 64
    Too small!
    Please enter your guess: 65
    Too small!
    Please enter your guess: 67
    Too small!
    Please enter your guess: 89
    Too large!
    Please enter your guess: 70
    Too small!
    Please enter your guess: 71
    Too small!
    Please enter your guess: 76
    Too small!
    Please enter your guess: 77
    Too small!
    Please enter your guess: 78
    Too small!
    Please enter your guess: 80
    Too large!
    Please enter your guess: 79
    Correct!
    
    Process returned 0 (0x0)   execution time : 90.357 s
    Press any key to continue.

     19.1 在函式间传递阵列

    没有使用函式的情况

     1 #include <stdio.h>
     2 #include <stdlib.h>
     3 #include <time.h>
     4 
     5 int main() {
     6     srand(time(0));
     7     int v[10], i;
     8     for (i = 0; i < 10; i++) {
     9         v[i] = rand() % 100;
    10 
    11     }
    12     for (i = 0; i < 10; i++) {
    13         printf(" %d", v[i]);
    14     }
    15     printf("
    ");
    16 
    17     int max = v[0];  ///最大值从第一个取
    18     for (i = 0; i < 10; i++) {
    19         if (v[i] > max) {
    20             max = v[i];
    21         }
    22     }
    23     printf("Max: %d
    ", max);
    24 
    25     return 0;
    26 
    27 
    28 }
    29 
    30  79 70 44 24 13 56 95 56 0 84
    31 Max: 95
    32 
    33 Process returned 0 (0x0)   execution time : 10.031 s
    34 Press any key to continue.

    使用函式后

     1 #include <stdio.h>
     2 #include <stdlib.h>
     3 #include <time.h>
     4 
     5 void arrayRand(int[10]);
     6 void arrayPrint(int[10]);
     7 int arrayMax(int[10]);
     8 
     9 int main() {
    10     srand(time(0));
    11     int v[10];
    12     arrayRand(v);
    13     arrayPrint(v);
    14     printf("Max: %d
    ", arrayMax(v));
    15     return 0;
    16 
    17 
    18 }
    19 void arrayRand(int v[10]) {
    20     int i;
    21     for (i = 0; i < 10; i++) {
    22         v[i] = rand() % 100;
    23 
    24     }
    25 }
    26 int arrayMax(int v[10]) {
    27     int i,max = v[0];  ///最大值从第一个取
    28     for (i = 0; i < 10; i++) {
    29         if (v[i] > max) {
    30             max = v[i];
    31         }
    32     }
    33     return max;
    34 }
    35 
    36 void arrayPrint(int v[10]) {
    37     int i;
    38     for (i = 0; i < 10; i++) {
    39         printf(" %d", v[i]);
    40     }
    41     printf("
    ");
    42 
    43 }
    44 
    45  64 0 29 64 81 96 26 68 76 45
    46 Max: 96
    47 
    48 Process returned 0 (0x0)   execution time : 11.376 s
    49 Press any key to continue.

    总结:在函式间传送阵列

    当函式参数为阵列型态时,与一般资料型态行为不一样

    • 一般资料型态会将引数复制一份后传入函式,但是阵列型态却不会复制一份阵列(复制的是阵列元素第一个的记忆体位址

    当函式回传值时是阵列型态,这是不合法的

    • 为了做出等效于函式回传的效果,我们可以将阵列作为引数传入。当阵列作为引数传入时,阵列内容修改会套用到这个传入的阵列本身

    为了与一般资料型态行为相符,C语言导入了指针来处理各种阵列复制与存取行为(指标用来存记忆体位址

     19.7 在函式间传递阵列原理

     1 #include <stdio.h>
     2 
     3 int maxv(int[], int N);
     4 
     5 int main()
     6 {
     7     int a[3] = {2, 3, 5};
     8     printf("Max: %d
     ", maxv(a, 3));
     9     int b[5] = {7, 8, 9, 2, 4};
    10     printf("Max: %d
     ", maxv(b, 5));
    11     return 0;
    12 }
    13 
    14 int maxv(int v[], int N) { // 这里的v[]表示一个指标,存的是起止位址,如:20000
    15     int max = v[0], i;
    16     for (i = 0; i < N; i++) {
    17         if (v[i] > max) {
    18             max = v[i];
    19         }
    20 
    21     }
    22     return max;
    23 }
    24 
    25 Max: 5
    26  Max: 9
    27 
    28 Process returned 0 (0x0)   execution time : 1.183 s
    29 Press any key to continue.

    v[i] 的起始位址 =  第一个元素的起始位址 +  i*sizeof(int)

  • 相关阅读:
    python之os模块
    python之字符串
    python之爬虫(beautifulsoup)
    python之常见算法
    python之装饰器(类装饰器,函数装饰器)
    python之mock使用,基于unittest
    python之定时器
    python基础语法随记
    redis基础
    移动端页面开发(二)
  • 原文地址:https://www.cnblogs.com/pxxfxxxx/p/10752740.html
Copyright © 2020-2023  润新知