六道题 : 1.设计一个函数,用来计算b的n次方 2.(n! = 1*2*3*4*...n) 3.(1! + 2! + 3! + 4! + ... + n!) 4.成绩 5. 数组中的...

/*

设计一个函数,用来计算bn次方

 

 递归的2个条件:

 1.函数自己调用自己

 2.必须有个明确的返回值

*/

#include <stdio.h>

int pow2(int b, int n);

 

int main()

{

    int c = pow2(3, 2);

    

    printf("%d\n", c);

    return 0;

}

 

/*

 pow2(b, 0) == 1

 pow2(b, 1) == b == pow2(b, 0) * b

 pow2(b, 2) == b*b == pow2(b, 1) * b

 pow2(b, 3) == b*b*b == pow2(b, 2) * b

 

 1> n0,结果肯定是1

 2> n>0pow2(b, n) == pow2(b, n-1) * b

 */

 

int pow2(int b, int n)

{

    if (n <= 0) return 1;

    return pow2(b, n-1) * b;

}

 

/*

int pow2(int b, int n)

{

    // 用来保存计算结果

    int result = 1;

    

    

    //result *= b;

    //result *= b;

    //result *= b;

    //result *= b;

    //....

    

    //n

 

    

    for (int i = 0; i<n; i++)

    {

        result *= b;

    }

    

    return result;

}*/

/*第一题:
 提示用户输入一个正整数n,求出并输出其阶乘值n! = 1*2*3*4*...n
 要求:用递归的方式编写一个函数实现n的阶乘
*/

#include <stdio.h>

int jieCheng(int n);

int main()
{
    // 1.定义变量存储用户输入的整数
    int n = 0;
    
    // 2.判断n是否为正整数
    while (n <= 0)
    {
        // 2.1 提示输入
        printf("输入一个正整数:\n");
        
        // 2.2 让用户输入
        scanf("%d", &n);
    }
    
    // 3.计算阶乘
    int result = jieCheng(n);
    
    printf("%d! = %d\n", n, result);
    return 0;
}

int jieCheng(int n)
{
    // 如果n为1,那么阶乘值就是1
    if (n == 1) return 1;
    
    // jieCheng(n) = n! = 1*2*3*...*(n-1)*n
    // jieCheng(n-1) = (n-1)! = 1*2*3*...*(n-1)
    // jieCheng(n) = jieCheng(n-1) * n
    return jieCheng(n-1) * n;
}

  

/*第二题
 提示用户输入一个正整数n,求出并输出下列结果:1! + 2! + 3! + 4! + ... + n!
 要求:用至少两种方式实现(函数名自拟,函数个数不限)
 1> 非递归
 2> 递归
*/
#include <stdio.h>
int pieAdd(int n);

int main()
{
    // 1.定义变量存储用户输入的整数
    int n = 0;
    
    // 2.判断n是否为正整数
    while (n <= 0)
    {
        // 2.1 提示输入
        printf("输入一个正整数:\n");
        
        // 2.2 让用户输入
        scanf("%d", &n);
    }
    
    // 3.计算结果
    int result = pieAdd(n);
    
    printf("结果是%d\n", result);
    
    return 0;
}

// ------------------非递归的方式----------------
int pieAdd(int n)
{
    // 1.定义变量保存总和
    int sum = 0;
    
    // 2.需要累加n次,每次累加的都是一个阶乘值
    for (int i = 1; i<=n; i++)
    {
        // 3.计算阶乘i!
        // 3.1 定义变量保存阶乘的结果
        int multi = 1;
        for (int j = 1; j<=i; j++)
        {
            multi *= j;
        }
        
        // 4.累加每次的阶乘结果
        sum += multi;
    }
    
    // 5.返回和
    return sum;
}

/*
// ------------------递归的方式----------------
// 为了代码方便和性能,额外定义一个函数求阶乘
int jieCheng(int n)
{
    // 如果n为1,那么阶乘值就是1
    if (n == 1) return 1;
    
    // jieCheng(n) = n! = 1*2*3*...*(n-1)*n
    // jieCheng(n-1) = (n-1)! = 1*2*3*...*(n-1)
    // jieCheng(n) = jieCheng(n-1) * n
    return jieCheng(n-1) * n;
}

int pieAdd(int n)
{
    // 1.如果n是1,计算结果就是1
    if (n == 1) return 1;
    
    // pieAdd(n) = 1! + 2! + ... + (n-1)!+ n! 
    // pieAdd(n-1) = 1! + 2! + ... + (n-1)!
    // pidAdd(n) = pieAdd(n-1) + n!
    return pieAdd(n - 1) + jieCheng(n);
}*/

  

/* 第三题:
提示输入5个学生的成绩(保证分数在0~100之间),算出平均分、最高分、最低分,然后输出
*/
#include <stdio.h>
// 学生的个数
#define kCount 5

int main()
{
    // 1.定义一个数组保存5个学生的分数
    // 初始化一下,默认都是-1分,只要默认值不是0~100都行
    int scores[kCount] = {-1, -1, -1, -1, -1};
    
    // 2.定义变量保存总分、最高分(默认是0分)、最低分(默认是100分)
    int sum = 0, max = 0, min = 100;
    
    // 3.提示输入
    for (int i = 0; i<kCount; i++)
    {
        // 3.1 如果学生的成绩不在0~100内,就重新提示输入
        while (scores[i]<0 || scores[i]>100)
        {
            // 3.1.1 提示输入
            printf("请输入第%d个学生的成绩(0~100):\n", i + 1);
            
            // 3.1.2 接收输入
            scanf("%d", &scores[i]);
        }
        
        // 3.2 累加成绩
        sum += scores[i];
        
        // 3.3 判断最高分
        if (scores[i] > max)
        {
            max = scores[i];
        }
        
        // 3.4 判断最低分
        if (scores[i] < min)
        {
            min = scores[i];
        }
    }
    
    // 4.输出结果
    printf("平均分是%d,最高分是%d,最低分是%d\n", sum/kCount, max, min);
}

  

/*第四题
设计一个函数:将一维整型数组中的元素逆序存放。比如本来是1,3,4,2,逆序存放就变成了:2,4,3,1
*/
#include <stdio.h>
void reverse(int array[], int len);

int main()
{
    int ages[4] = {1, 3, 4, 2};
    
    reverse(ages, 4);
    
    for (int i = 0; i<4; i++)
    {
        printf("%d\n", ages[i]);
    }
    
    return 0;
}

// 第一个参数是数组,第二个参数是数组长度
// 不需要返回值
// 因为改变了形参数组就相当于修改了外面的实参数组
void reverse(int array[], int len)
{
    // 思路:以数组中间为轴,交换左右对称元素的值
    // 比如array[0] array[1] array[2] array[3] array[4] array[5]
    // 交换array[0]和array[5]的值
    // 交换array[1]和array[4]的值
    // 交换array[2]和array[3]的值
    
    // 左边元素的下标(默认是最左边)
    int left = 0;
    // 右边元素的下标(默认是最右边)
    int right = len - 1;
    
    // 如果左边元素的下标 < 右边元素的下标
    while (left < right)
    {
        // 利用中间变量交换两个元素的值
        int temp = array[left];
        array[left] = array[right];
        array[right] = temp;
        
        // 交换一次后,左边元素下标增加,右边元素下标减小
        
        left++;
        right--;
    }
}

  

/*第五题:
输出99乘法表
 1x1=1
 2x1=2	2x2=4
 3x1=3	3x2=6	3x3=9
 4x1=4	4x2=8	4x3=12	4x4=16
 5x1=5	5x2=10	5x3=15	5x4=20	5x5=25
 6x1=6	6x2=12	6x3=18	6x4=24	6x5=30	6x6=36
 7x1=7	7x2=14	7x3=21	7x4=28	7x5=35	7x6=42	7x7=49
 8x1=8	8x2=16	8x3=24	8x4=32	8x5=40	8x6=48	8x7=56	8x8=64
 9x1=9	9x2=18	9x3=27	9x4=36	9x5=45	9x6=54	9x7=63	9x8=72	9x9=81
*/
#include <stdio.h>
int main()
{
    // 一共有多少行
    for (int row = 1; row<=9; row++)
    {
        // 一共有多少列(其实列数==行数)
        for(int column = 1; column<=row; column++)
        {
            // \t是tab键,目的是保持每列之间有相同的距离
            printf("%dx%d=%d\t", row, column, row * column);
        }
        
        // 换行
        printf("\n");
    }
}

  

转载于:https://www.cnblogs.com/sunyao/p/3754901.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值