c语言主函数与子函数的调用疑问

请问怎样处理多个子函数的调用问题?
如何明确其中的逻辑关系与思路?
主函数是否应在子函数前?
比如以下实例

⑴ 编写函数fun1,其返回值类型为整型,有2个整型参数。
fun1的功能为:计算两个参数的最大公约数,并将其返回。
⑵ 编写函数fun2,其返回值类型为整型,有2个整型参数。
fun2的功能为:计算两个参数的最小公倍数,并将其返回。
⑶ 编写主函数,其功能为:
首先,提示用户输入2个正整数,并存放到变量n1和n2中。
然后,判断用户输入的数值是否满足要求,不满足则输出错误信息并终止运行。
最后,以n1和n2作为参数,分别调用函数fun1和fun2,将结果存放到变量result1和result2中。
⑷ 输出上一步得到的结果。

这种类型函数的编写是否需要注意顺序?

只要先申明函数原型即可。
你可以一股脑把所有的函数原型申明放在前面
然后它们相互调用就随意了。

  • 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/7595736
  • 除此之外, 这篇博客: C语言实现八大排序算法详解及其性能之间的中的 名字已经暴露了他的算法,就是往里面插入数据,就拿我们生活中的例子来说,打扑克牌。我们往手里码牌的时候,是一张一张的码,先码一张,抓手心,不需要修改位置,因为只有一张牌,一定是有序的。再接一张,和手里的牌对比大小,调整位置,选择放在它的左边或者右边。然后接着码,又接到一张牌,拿到先和右边的牌比,比右边还大就放到最右边,如果比右边这张小呢,在和左边这张比。同样,我们这里也是这样的,首先我们默认第一个元素,一定是有序,OK吧。然后第二个,元素比较,大,放到左边,小放到右边。然后第三个元素,直到第N个,比它前一个大,继续往前找位置,直到找到对应位置了,就是有序数列了。(当然每次找位置都是在一个有序的序列中找,所以完全可以用二分查找找位置,数据大的话,二分明显快于我们一张一张比) 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 算法思想

  • 以下回答由chatgpt基于相关博客总结生成:

    我可以回答这个问题。

    首先需要明确的是,在主函数和子函数之间没有先后顺序的限制,只需要在需要使用子函数的时候调用即可。

    对于题目中所要求的情况,主函数需要先判断用户输入的数值是否合法,可以使用一个专门用来判断的函数来实现。这个函数可以返回一个布尔型的值,表示用户输入是否合法。如果用户输入不合法,可以输出错误信息并停止运行,否则就可以继续执行下一步。

    接着,主函数需要调用fun1和fun2函数分别计算最大公约数和最小公倍数,并将结果存放到变量result1和result2中。

    下面是代码实现:

    #include <stdio.h>
    #include <stdbool.h>
    
    // 计算最大公约数
    int fun1(int a, int b) {
        if(b == 0) {
            return a;
        }
        return fun1(b, a % b);
    }
    
    // 计算最小公倍数
    int fun2(int a, int b) {
        int max = fun1(a, b);
        return a * b / max;
    }
    
    // 判断用户输入是否合法
    bool is_valid(int n1, int n2) {
        return n1 > 0 && n2 > 0;
    }
    
    int main() {
        int n1, n2;
        int result1, result2;
    
        printf("请输入两个正整数:\n");
        scanf("%d %d", &n1, &n2);
    
        if(!is_valid(n1, n2)) {
            printf("输入错误,请输入两个正整数!\n");
            return 0;
        }
    
        result1 = fun1(n1, n2);
        result2 = fun2(n1, n2);
    
        printf("最大公约数:%d\n", result1);
        printf("最小公倍数:%d\n", result2);
    
        return 0;
    }
    

    这里我们先定义了fun1和fun2两个函数,分别用来计算最大公约数和最小公倍数。is_valid函数用来判断用户输入是否合法,返回一个布尔型的值。

    在主函数中,我们首先读取用户输入的两个数值,并调用is_valid函数进行判断。如果输入不合法,则输出错误信息并退出程序。否则,我们继续调用fun1和fun2函数分别计算最大公约数和最小公倍数,并将结果存放到result1和result2变量中。最后,我们输出结果即可。

    需要注意的是,在计算最小公倍数的时候,我们需要先计算最大公约数。因此,在调用fun2之前,需要先调用fun1计算最大公约数。另外,此处没有要求对结果进行排序输出,因此不需要考虑调用顺序的问题。