尝试用递归实现求均值,无报错警告,输出无效

img

img


我的想法是输入任意一串数字,按下回车即求值输出,但是判断输入是否为回车好像出了问题(是不是整形与符号型无法进行比较运算),不知道这个环节怎么写。还有如果我想输入12,怎么告诉系统我输入的不是1和2?求解

  • 帮你找了个相似的问题, 你可以看下: https://ask.csdn.net/questions/7539269
  • 我还给你找了一篇非常好的博客,你可以看看是否有帮助,链接:给定一个字符数组,统计字符数组中每一个字符出现的次数,并打印到控制台
  • 除此之外, 这篇博客: 数码管的段选和位选是什么中的 初选单片机的时候,数码管是一个绕不过去的弯,对于初学者来说,数码管的段选和位选总是一脸懵。那么数码管的段选和位选是什么呢? 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 位选,选位置。我要选择哪一位数码管亮。

    段选,选一段。我要选择哪一段LED亮.

     

     

  • 您还可以看一下 程张浩老师的微信小程序项目实战之我画你猜视频课程课程中的 你猜我画小程序功能分析和数据库设计小节, 巩固相关知识点
  • 以下回答由chatgpt基于相关博客总结生成:

    解决方案

    根据参考资料可以发现,问题的关键在于如何判断输入的数据是否为回车以及如何处理输入的数字12。

    首先,我们需要了解回车的ASCII码是多少,这样才能用数字和ASCII码进行比较。空格的ASCII码是32,换行符的ASCII码是10,回车符的ASCII码是13。所以,我们可以使用这些值来判断输入是否为回车。

    其次,关于输入数字12的问题,在C语言中,我们无法直接识别数字12的两个数字。但我们可以通过将输入的数字转换为字符数组来解决这个问题。

    基于上述分析,我们可以提供以下解决方案的代码:

    #include <stdio.h>
    #include <stdlib.h>
    
    // 定义递归函数,计算数字均值
    double recursive_average(int *numbers, int count, double sum) {
        // 递归终止条件
        if (count == 0) {
            return sum / count;
        }
    
        // 读取输入的字符
        char ch[3]; // 如果数字的位数少于3位,则修改此处的数组大小
        scanf("%s", ch);
    
        // 判断输入是否为回车
        if (ch[0] == 13 || ch[0] == 10) {
            return sum / count;
        }
    
        // 将输入字符转换为数字
        int num = atoi(ch);
    
        // 累加数字的值
        sum += num;
    
        // 递归调用函数,并更新参数值
        return recursive_average(numbers, count + 1, sum);
    }
    
    int main() {
        // 定义一个数组,用于存储输入的数字
        int numbers[100]; // 数组大小可以根据实际需要进行调整
    
        // 调用递归函数计算数字均值
        double average = recursive_average(numbers, 0, 0.0);
    
        // 输出计算得到的均值
        printf("The average is: %lf\n", average);
    
        return 0;
    }
    

    这个解决方案中,我们定义了一个名为recursive_average的递归函数,用于计算数字的均值。在函数中,我们首先读取输入的字符,然后判断输入是否为回车。如果输入是回车,就返回最终的均值计算结果;如果输入不是回车,则将输入字符转换为数字,并累加到总和中。之后,我们递归调用函数,并更新参数值,以继续计算下一个数字的均值。最终,我们在main函数中调用递归函数,计算数字的均值,并将结果输出。

    请注意,在这个解决方案中,我们使用了一个数组来存储输入的数字。数组的大小可以根据实际需要进行调整,以适应不同的输入情况。

    至于如何输入数字12,我们只需要在输入时输入两次数字即可。例如,要输入数字1和数字2,我们可以按照以下方式输入:1 2(用空格分隔)或12(直接输入)。

    希望这个解决方案能够帮助到你。如果你有其他问题,欢迎继续提问。

供参考:

#include <stdio.h>
double avrg(int k)
{
    int  n = 0;
    if (k) {
        scanf("%d", &n);
        return (double)(n + avrg(k - 1) * (k - 1)) / k;
    }
    return 0;
}
int main()
{
    int k;
    printf("输入数字个数:");
    scanf("%d", &k);
    printf("avg=%f", avrg(k));
    return 0;
}