函数 例题解析

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("\n");
    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\n", 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("\n");
    }

    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("\n"); printf("\n"); 
    for (int i = 0; i < 3; i++)
    {
        for (int j = 0; j < 3; j++)
        {
            printf("%5d", arr[i][j]);
        }
        printf("\n");
    }
    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);//推理公式
}

 

posted @ 2020-08-19 00:37  YangXinYi  阅读(256)  评论(0编辑  收藏  举报
//color="150,150,150"粒子的颜色设置 opacity="1"粒子的透明度 count="100"粒子的个数