• C Primer Plus(6) 中文版 第6章 C控制语句:循环 6.12 使用函数返回值的循环示例


    6.12 使用函数返回值的循环示例
    整数次幂(math.h)库提供了一个更强大幂函数pow(),可以使用浮点指数。
    该示例有3个主要任务:设计算法、在函数中表示算法并返回计算结果、提供一个测试函数的便利方法。
    编写一个有返回值的函数,要完成以下内容:
    1.定义函数时,确定函数的返回类型;
    2.使用关键字return表明待返回的值。
    要声明函数的返回类型,在函数名前写出类型即可,就像声明一个变量那样。关键字return表明该函数将把它后面的值返回给主调函数。
    函数返回一个变量的值。返回值也可以是表达式的值。
    函数将计算表达式的值,并返回该值。
    // power.c -- raises numbers to integer powers
    #include
    double power(double n, int p); // ANSI prototype
    int main(void)
    {
        double x, xpow;
        int exp;
        
        printf("Enter a number and the positive integer power");
        printf(" to which\nthe number will be raised. Enter q");
        printf(" to quit.\n");
        while (scanf("%lf%d", &x, &exp) == 2)
        {
            xpow = power(x,exp);   // function call
            printf("%.3g to the power %d is %.5g\n", x, exp, xpow);
            printf("Enter next pair of numbers or q to quit.\n");
        }
        printf("Hope you enjoyed this power trip -- bye!\n");
        
        return 0;
    }

    double power(double n, int p)  // function definition
    {
        double pow = 1;
        int i;
        
        for (i = 1; i <= p; i++)
            pow *= n;
        
        return pow;                // return the value of pow

    /* 输出:

    */

    6.12.1 程序分析
    main()是一个驱动程序(driver),即被设计用来测试函数的小程序。
    编译器要知道power()函数返回值的类型,才能知道有多少字节的数据,以及如何解释它们。这就是为什么必须声明函数的原因。
    注意,函数定义的末尾没有分号,而函数原型的末尾有分号。在函数头后面花括号中的内容,就是power()完成任务的代码。
    6.12.2 使用带返回值的函数
    声明函数、调用函数、定义函数、使用关键字return,都是定义和使用带返回值函数的基本要素。
    为什么在定义中说明了power()的返回类型为double,还要单独声明这个函数?
    因为编译器在程序中首次遇到power()时,需要知道power()的返回类型。此时,编译器尚未执行到power()的定义,并不知道函数定义中的返回类型是double。因此,必须通过前置声明(forward declaration)预先说明函数的返回类型。前置声明告诉编译器,power()定义在别处,其返回类型为double。如果把power()函数的定义置于main()的文件顶部,就可以省略前置声明,因为编译器在执行到main()之前已经知道power()的所有信息。但是,这不是C的标准风格。因为main()通常只提供整个程序的框架,最好把main()放在所有函数定义的前面。另外,通常把函数放在其他文件中,所以前置声明必不可少。
    为什么不用声明scanf()函数就可以使用它?
    其实,你已经声明过了。stdio.h头文件中包含了scanf()、printf()和其他I/O函数的原型。 

  • 相关阅读:
    servlet开发-通过Tomcat部署一个简单的webapp
    【智能大数据分析】实验1 MapReduce实验:单词计数
    38.【C语言】指针(重难点)(C)
    机器人相关课程考核材料归档实施细则2022版本
    计算机视觉系列-轻松掌握 MMDetection 中常用算法 YOLOF(一)
    如何使用ai去水印?用这款就够了
    一次预制体丢失[XX prefab at index n is missing]的排查经历 及 【用代码查找场景中的预制体】
    嵌入式数据库sqlite3基本命令操作基础(05)
    NPDP如何申请退考?你学会了吗?
    常见的请求头,怎么用?
  • 原文地址:https://blog.csdn.net/weixin_40186813/article/details/126206133