一、宏定义

宏定义是比较常用的预处理指令,即使用“标识符”来表示“替换列表”中的内容。标识符称为宏名,在预处理过程中,预处理器会把源程序中所有宏名,替换成宏定义中替换列表中的内容。

常见的宏定义有两种,不带参数的宏定义和带参数的宏定义。

无参宏定义:即最常见“#define PI 3.1415926”

格式:#define 标识符 替换列表

说明:1)前面可以有空格,但是只允许有空格,或者在行首。

      2)宏定义不是语句,是预处理指令,故结尾不加分号。如果不小心添加了分号,虽然有时该宏定义没问题,但在宏替换时,可能导致 C 语法错误,或得不到预期结果。(按着格式写就好)

      3)当替换列表一行写不下时,可以使用反斜线\作为续行符延续到下一行。(若该宏定义中替换列表为字符串常量,如果该串较长,或为了使替换列表的结构更清晰,可使用续行符 \ 把该串分若干行来写,除最后一行外,每行行尾都必须加续行符 \。例如:

  1. #define USA "The United \
  2. States of \
  3. America"

     4)还有一类,由于宏定义仅是做简单的文本替换,故替换列表中如有表达式,必须把该表达式用括号括起来,否则可能会出现逻辑上的“错误”。

01

#define N (3+2)

02

int r=N*N;

结果r=25;

以上是扩括号的,没有括号的话,结果会有很大变化;

01

#define N 3+2

02

int r=N*N;

此时r=11;

为什么会产生变化呢?因为在宏定义中只能简单的替换;如果没有括号的话,计算机并不能把N识别成(3+2),只能是识别成3+2;所以没有括号的话,N*N只能是3+2*3+2=11;

而不是(3+2)*(3+2)=25。

带参宏定义:格式:#define 标识符(参数1,参数2,...,参数n) 替换列表

例如:#define MAX(a,b) ((a)>(b)?(a) : (b))==》替换列表,我自己认为基本就是相当于参数进行的操作,比如这个就是比较两个参数谁大。
注意:标识符与参数表的左括号之间不能有空格,否则预处理器会把该宏理解为普通的无参宏定义。

二、程序语法元素分析

1.缩进:(四个空格)缩进表达了从属关系。

注意:print()这样的简单语句不表达包含关系,不能使用缩进。

2.注释:对语句、函数、数据结构等进行说明,提升代码的可读性。

              单行注释以#开头,多行注释以'''(三个单引号)开头和结尾。

3.命名和保留字:

             命名和c语言相同。

             保留字,也称为关键字,指被编程语言内部定义并保留使用的标识符。33个保留字,区分大小写。

4.字符串:由0个或多个字符组成的有序字符序列,字符串由一对单引号或一对双引号表示。

                 可以按照单个字符或字符片段进行索引。比如:“computer"中”c"是第0个字符。

5.赋值语句:和c语言基本相同,不同的是:采用同步赋值,一行语句即可,比如:“x,y=1,2"

6.input()函数:从控制台获得用户输入的函数

              

  • input()函数的使用格式 :
    <变量>=input(<提示信息字符串>)
  • 用户输入的信息以字符串类型保存在<变量>中
    `TempStr = input(“请输入带有符号的温度值:”) #TempStr保存用户输入的信息
  • 注意:无论用户输入的是什么类型,输出的都是字符串型。

7.分支语句:和C语言差不多,注意C语言中的if语句中的else if 变成了elif。

8.eval()函数:以python表达式的方式解析并执行。就是将输入的字符串转变成python语句,并执行该语句。

  • eval()函数的基本使用格式:
  • 例如:eval(TempStr[0:-1]) 如果TempStr[0:-1]值是“12.3”,输出是12.3

 

9.print()函数:以字符形式向控制台输出结果的函数。