zoukankan      html  css  js  c++  java
  • 函数 例题解析

    1.此程序运行结果:0 1 2 3 4 5  递归调用

    #include<stdio.h>
    #include<stdlib.h>
    fun(int k)
    {
        if (k > 0) 
            fun(k - 1);
        printf(" %d",k);
    }
    void main()
    {
        int w = 5; fun(w); 
        printf("
    ");
        system("pause");
    }

     

    例题2.求x的y次方

    double fun(double x,int y)
    {
        double cube = 1;
        for(int i = 0;i < y;i++) cube = cube * x;
        return cube;
    }
    
    //用递归计算n阶乘
    long factorial(int n) {
        if (n <= 0)
            return 1;
        else
            return n*factorial(n - 1);
    }
    //用迭代法计算n的阶乘
    long factorial(int n) {
        int result = 1;
        while (n > 1) {
            result *= n;
            n --;
        }
        return result;
    }

    例题3.编写一函数求四个整数的最大值。

    #define _CRT_SECURE_NO_WARNINGS
    #include<stdio.h>
    #include<stdlib.h>
    void Max_value(int a, int b, int c,int d)
    {
        int max = a;
        if (max < b)    max = b;
        if (max < c)    max = c;
        if (max < d)    max = d;
        printf("最大数是%d
    ", max);
    }
    
    void main()
    {
        int a, b, c, d;
        printf("输入四个整数a,b,c,d:");
        scanf("%d%d%d%d", &a, &b, &c, &d);
        Max_value(a, b, c, d);
    
        system("pause");
    }

    例题4.打印出3到1100之间的全部素数(判素数由函数实现)。

    #include<stdio.h>
    #include<stdlib.h>
    #include<math.h>
    int judgePri(int n) 
    {
        for (int i = 2; i <= (int)sqrt((double)n); i++) 
                if (n % i == 0) 
                    return 0;                
        return 1;
    }
    
    void main()
    {
        for (int i = 3; i < 1100; i++) 
        {        
            int flag = judgePri(i);
            if (flag == 1)
                printf("%6d", i);
        }
        system("pause");
    }

    例题5.写一函数,使给定的一个二维数组(3×3)转置,即行列互换。

    #include<stdio.h>
    #include<stdlib.h>
    
    void main()
    {
        int arr[3][3] = { 0 };
        for (int i = 0; i<3; i++)
            for (int j = 0; j<3; j++)
            {
                arr[i][j] = rand() % 100;
            }
    
        for (int i = 0; i < 3; i++)
        {
            for (int j = 0; j < 3; j++)
            {
                printf("%5d", arr[i][j]);
            }
            printf("
    ");
        }
    
        for (int i = 0; i<3; i++)
            for (int j = i + 1; j<3; j++)
            {
                int temp = arr[i][j];
                arr[i][j] = arr[j][i];
                arr[j][i] = temp;
            }
    
        printf("
    "); printf("
    "); 
        for (int i = 0; i < 3; i++)
        {
            for (int j = 0; j < 3; j++)
            {
                printf("%5d", arr[i][j]);
            }
            printf("
    ");
        }
        system("pause");
    }

    例题6.编写计算m的n次方的递归函数。

    #define _CRT_SECURE_NO_WARNINGS
    #include<stdio.h>
    #include<stdlib.h>
    
    int fun(int m, int n)
    {
        if (n == 1)
            return m;
        else
            return m * fun(m, n - 1);
    }
    void main()
    {
        int m, n;
        scanf("%d%d", &m, &n);
        printf("%d", fun(m, n));
        system("pause");
    }

    例题7.编一个程序,读入具有5个元素的整型数组,然后调用一个函数,递归计算这些元素的积。

    #include<stdio.h>
    #include<stdlib.h>
    int sumA(int *p, int n) 
    {
        if (n == 0) 
            return *p; //停止条件 return a[0]
        else
            return *(p + n) * sumA(p, n - 1);    
    }
    
    void main() 
    {
        int a[] = { 8,2,3,4,5 };                
        int n = sizeof(a) / sizeof(int);        
        int sum = sumA(a, n - 1);                
        printf("%d", sum);
    
        system("pause");
    }

    例题8.编一个程序,读入具有5个元素的实型数组,然后调用一个函数,递归地找出其中的最大元素,并指出它位置。

    #define _CRT_SECURE_NO_WARNINGS
    #include<stdio.h>
    #include<stdlib.h>
    int GO(float * arr, int num)
    {
        if (num == 1)
            return 0;
        else
        {
            if (arr[num - 1] > arr[GO(arr, num - 1)])
                return num - 1;
            else
                return GO(arr, num - 1);
        }
    }
    void main()
    {
        float arr[5] = { 0 };
        for (int i = 0; i<5; i++)
        {
            scanf("%f", &arr[i]);
        }
        int num = GO(arr, 5);
        printf("最大元素位置:%d最大元素为:%f", num, arr[num]);
    
        system("pause");
    }

    例题9.被调函数分配内存给主调函数使用--堆

    #include<stdio.h>
    #include<stdlib.h>
    char *Getmemory(int num)
    {
        char *p = (char *)malloc(sizeof(char) * num);//动态分配的内存都在堆上,只有自己释放
        return p;
    
    }
    void main()
    {
        char *pstr = NULL; 
        pstr = GetmemoryA(100); 
        if (pstr != NULL) 
        {
            strcpy(pstr, "hello world");
            printf("%s", pstr); 
        }
        free(pstr); //释放动态申请的内存
        system("pause");
    }

    例题10. 1 + 2 + 3 + …… + n 用非递归与递归实现

    int goN1(int n) 
    {
        int result = 0;
        for (int i = 0; i <= n; i++)
            result += i;
        return result;
    }
    int goN2(int num)
    {
        if (num == 1)
            return 1;
        else
            return goN2(num - 1) + num; 
    }

    例题11.用递归与迭代法计算斐波那契数列的第n个数的值。

    long fibonacci(int n)
    {
        if (n <= 2)
            return 1;
        return fibonacci(n - 1) + fibonacci(n - 2);
    }
    
    long fibonacci(int n)
    {
        long result;
        long previous_result;
        long next_result;
    
        result = previous_result = 1;
        while (n > 2)
        {
            next_result = previous_result;
            previous_result = result;
            result = previous_result + next_result;
            n--;
        }
        return result;
    }

    例题12.1 + 1 * 2 + 1 * 2 * 3 + 1 * 2 * 3 * 4 …… + 1 * 2 * 3 * 4 * …… * n  双层递归

    int Go(int num)
    {
        if (num == 1)
            return 1;
        else
            return num*Go(num - 1);//求第n项的值
    }
    int plus(int n)
    {
        if (n == 1)
            return 1;
        else
            return plus(n - 1) + Go(n);//推理公式
    }
  • 相关阅读:
    HBase 使用与原理总结
    Java8 的一些使用总结
    对Redis的一些理解
    BERT模型源码解析 -- 转载
    BERT原理解析 -- 转载
    SQL 多表查询之 where和INNER JOIN
    Spark 数据处理相关代码
    Sql实战 1.单表复用进行比较排名
    LeetCode 47.括号生成 DFS递归
    LeetCode 46.机器人的运动范围
  • 原文地址:https://www.cnblogs.com/Yang-Xin-Yi/p/13526983.html
Copyright © 2011-2022 走看看