• 关于宏的定义注意事项


    定义:C语言允许宏带有参数。在宏定义中的参数称为形式参数,在宏调用中的参数称为实际参数。

    对带参数的宏,在调用中,不仅要宏展开,而且要用实参去代换形参。

    带参宏定义的一般形式为:
        #define  宏名(形参表)  字符串
    在字符串中含有各个形参。

    带参宏调用的一般形式为:
        宏名(实参表);

    特别注意事项:

    如:求(a+1)^2的值,用宏定义;

    #include <stdio.h>
    #define Square(x) x*x
    int main()
    {
    int x;
    int sum;
    printf("please input one number ");
    scanf("%d",&x);
    sum=Square(x+1);
    printf("the sum is %d",sum);
    return 0;
    }

    please input one number

    23

    the sum is :47

    ???????? 为什么是47?而不是529?

    原来是这样子的,x+1带入到宏中变成了------->x+1*x+1 再把x=23带入式子中可得:47。

    那又有什么办法可以得到我们需要的x^2呢?办法是有的,如下:

    ---------------------------------------

    第一种方法:

    #include <stdio.h>
    #define Square(x) x*x
    int main()
    {
    int x;

    int y;//------此处增加一个变量用来接收y=x+1的值
    int sum;
    printf("please input one number ");
    scanf("%d",&x);

    //---------此处增加y=x+1;
    sum=Square(x+1);//-----此处变更下 sum=Square(y);
    printf("the sum is %d",sum);
    return 0;
    }

    输出:

    please input one number

    23

    the sum is :529

    ----------------------------------------

    第二种方法:

    #include <stdio.h>
    #define Square(x) x*x//------此处更改成:#define Square(x) (x)*(x)
    int main()
    {
    int x;
    int sum;
    printf("please input one number ");
    scanf("%d",&x);
    sum=Square(x+1);
    printf("the sum is %d",sum);
    return 0;
    }

    解析:(x+1)*(x+1)

    输出:

    please input one number

    23

    the sum is :529

    这样就可以得到我们所想要的答案了,哎对了,是不是这样,我们的程序就算完成了呢?

    其实还没有完,假如我们的Square(x+1)/n后,那又会是怎么样的呢?

    如下:

    #include <stdio.h>
    #define Square(x) (x)*(x)
    int main()
    {
    int x;
    int sum;
    printf("please input one number ");
    scanf("%d",&x);
    sum=Square(x+1)/2;
    printf("the sum is %d",sum);
    return 0;
    }

    输出:

    please input one number

    23

    the sum is :288

    解析:从我们本意上来讲,我们应该是529/2=264才对,可答案却是288?

    原来现在变成这样子了:(x+1)*(x+1)/2----->带入x=23后,自然答案是288

    那么又怎么样变成我们的需求呢?

    如下:

    #include <stdio.h>
    #define Square(x) (x)*(x)//-------此处更改成:#define Square(x) ((x)*(x))
    int main()
    {
    int x;
    int sum;
    printf("please input one number ");
    scanf("%d",&x);
    sum=Square(x+1)/2;
    printf("the sum is %d",sum);
    return 0;
    }

    输出:

    please input one number

    23

    the sum is :264

    只有这样子我们的程序逻辑才算紧密,特写下,算作日后查阅学习之用。

  • 相关阅读:
    CSS布局:让页底内容永远固定在底部
    PHP+jQuery实现翻板抽奖
    【数据结构】Java 版本 链表常用操作
    【数据结构】Python3版本 链表常用操作
    Python爬虫学习第一记 (翻译小助手)
    2019年第十届蓝桥杯真题解析JavaC组 A.求和
    2019年第十届蓝桥杯真题解析Java C组 B 矩形切割
    Java 13天基础 06天map集合小练习(黑马程序员) 统计字符串中每个字符出现的次数 (经典面试题)
    2019年第十届蓝桥杯真题解析JavaC组 D: 质数
    Java 9天入门(黑马程序员) 课程收尾 学生管理系统 (9.13)
  • 原文地址:https://www.cnblogs.com/ltlly/p/4110023.html
Copyright © 2020-2023  润新知