精华内容
下载资源
问答
  • 复合语句
    2021-10-12 22:05:44

    复合语句

    写在花括号{}中的内容组成的语句,就是复合语句。特别的,如果你只写了一个花括号,里面什么内容都没有,这也是一种空语句,相当于只有一个分号。

    复合语句有三个主要特点:

    1,整个花括号中虽然可能包括了多条语句,但是算作一个复合语句。

    2,复合语句有自己的作用域,因此在离开复合语句以后,其中定义的变量会销毁。

    3,复合语句的结束不需要分号,当然也许从这是一个语句的角度来说,应该要写分号才对,但是不写分号可以算作是一种福利。也就是既然已经知道它在哪里结束了,就不用再额外写结束标志了。

    复合语句的作用

    1,当只需要一条语句,但是一条语句无法满足实际需要的时候,需要使用复合语句。经常会发生于选择或者循环语句使用的时候。

    #include <iostream>
    
    using namespace std;
    
    int main()
    {
    	int a = 500;
    	if (a > 0)
    	{
    		a += 20;
    		cout << "a: " << a << endl;
    	}
    }

    2,由于复合语句有自己独立的作用域,因此,可以通过复合语句来定义重名变量。

    这个在很多情况下,可能是很有用的。因为很多时候,给变量起一个好的名字也是很困难的,尤其在反复使用相同的功能的情况下,如果必须保证变量不重名的话,很可能就要加数字表示了。因此,如果可以将定义重名变量的部分写入复合语句之中,就可以让变量名可以重复使用。

    #include <iostream>
    
    using namespace std;
    
    int main()
    {
    	{
    		int a = 520;
    		cout << a << endl;
    	}
    
    	// 这两个a所在的作用域不同,不会互相影响
    	int a = 1314;
    	cout << a << endl;
    }

    思考:是否应该总是使用复合语句

    之前,我们说到在条件或者循环语句中,可以使用复合语句,那么,如果不使用复合语句也可以完成,是否应该总是使用复合语句呢?

    #include <iostream>
    
    using namespace std;
    
    int main()
    {
    	int a = 520;
    
    	// 不使用复合语句
    	if (a > 0)
    		cout << a << endl;
    
    	// 使用复合语句
    	if (a > 0)
    	{
    		cout << a << endl;
    	}
    }

    最终的运行结果自然是没有差别的,但是像这样只需要一个简单语句就可以完成的工作,到底是否应该使用复合语句呢?

    使用复合语句的坏处是什么,很显然是不美观。第一种没使用复合语句的写法很简洁,一句话就解决了。第二种使用了复合语句的写法很多余,就是花括号没有发挥作用。那么在这种情况下,到底使用复合语句好不好呢?似乎答案已经明确了,不使用复合语句更好。

    但是真的是这样吗?如果从长远角度来说的话,这个程序如果以后还需要更新和维护,那么很可能发生这样一种情况,以前在这个if语句中,只需要一句就能解决的问题,现在解决不了了,必须要增加更多的语句。在这种情况下,如果我们使用的是不使用复合语句的版本,那么我们还要先为其添加花括号,然后才能开始写新的需求,比较麻烦。而如果使用的是有复合语句的版本,那么我们直接换行以后,继续添加语句即可。那这样来看的话,似乎又是总是使用复合语句更好了。

    因此,如果我们非要得到一个结论的话,那就是:在能不用复合语句的情况下,如果这段代码是不会改变的(至少在可以预见的未来,你认为它应该不会被改变),那么,不使用复合语句更好。如果这段代码,后续随时都可能改变,那么应该总是使用复合语句。

    当然,这是一个建议,最终要如何决定代码风格自然还是取决于你自己。

    顺便一提,如果你决定要能不使用复合语句就不使用复合语句的话,我的建议是,如果你还不明确代码要怎么写,你可以先把复合语句的花括号写上。如果发现没用到,那再删掉就是了。这样可以有效避免,你认为这里不需要复合语句,等到第一句写完了,才发现需要复合语句的情况。毕竟,删掉括号要比添加括号更加容易。

    点击查看全部c++教程

    更多相关内容
  • 复合语句

    千次阅读 2020-11-29 19:34:47
    复合语句是包含其它语句(语句组)的语句;它们会以某种方式影响或控制所包含其它语句的执行。 通常,复合语句会跨越多行,虽然在某些简单形式下整个复合语句也可能包含于一行之内。 if, while 和 for 语句用来实现...

    复合语句是包含其它语句(语句组)的语句;它们会以某种方式影响或控制所包含其它语句的执行。 通常,复合语句会跨越多行,虽然在某些简单形式下整个复合语句也可能包含于一行之内。

    if, while 和 for 语句用来实现传统的控制流程构造。 try 语句为一组语句指定异常处理和/和清理代码,而 with 语句允许在一个代码块周围执行初始化和终结化代码。 函数和类定义在语法上也属于复合语句。

    一条复合语句由一个或多个‘子句’组成。 一个子句则包含一个句头和一个‘句体’。 特定复合语句的子句头都处于相同的缩进层级。 每个子句头以一个作为唯一标识的关键字开始并以一个冒号结束。 子句体是由一个子句控制的一组语句。 子句体可以是在子句头的冒号之后与其同处一行的一条或由分号分隔的多条简单语句,或者也可以是在其之后缩进的一行或多行语句。 只有后一种形式的子句体才能包含嵌套的复合语句;以下形式是不合法的,这主要是因为无法分清某个后续的 else 子句应该属于哪个 if 子句:
    if test1: if test2: print(x)
    还要注意的是在这种情形下分号的绑定比冒号更紧密,因此在以下示例中,所有 print() 调用或者都不执行,或者都执行:
    if x < y < z: print(x); print(y); print(z)
    总结:

    compound_stmt ::=  if_stmt
                       | while_stmt
                       | for_stmt
                       | try_stmt
                       | with_stmt
                       | funcdef
                       | classdef
                       | async_with_stmt
                       | async_for_stmt
                       | async_funcdef
    suite         ::=  stmt_list NEWLINE | NEWLINE INDENT statement+ DEDENT
    statement     ::=  stmt_list NEWLINE | compound_stmt
    stmt_list     ::=  simple_stmt (";" simple_stmt)* [";"]
    

    请注意语句总是以 NEWLINE 结束,之后可能跟随一个 DEDENT。 还要注意可选的后续子句总是以一个不能作为语句开头的关键字作为开头,因此不会产生歧义(‘悬空的 else’问题在 Python 中是通过要求嵌套的 if 语句必须缩进来解决的)。

    为了保证清晰,以下各节中语法规则采用将每个子句都放在单独行中的格式。

    if 语句

    if 语句用于有条件的执行

    if_stmt ::=  "if" assignment_expression ":" suite
                 ("elif" assignment_expression ":" suite)*
                 ["else" ":" suite]
    

    它通过对表达式逐个求值直至找到一个真值(请参阅 布尔运算 了解真值与假值的定义)在子句体中选择唯一匹配的一个;然后执行该子句体(而且 if 语句的其他部分不会被执行或求值)。 如果所有表达式均为假值,则如果 else 子句体如果存在就会被执行。

    while 语句

    while 语句用于在表达式保持为真的情况下重复地执行:

    while_stmt ::=  "while" assignment_expression ":" suite
                    ["else" ":" suite]
    

    这将重复地检验表达式,并且如果其值为真就执行第一个子句体;如果表达式值为假(这可能在第一次检验时就发生)则如果 else 子句体存在就会被执行并终止循环。

    第一个子句体中的 break 语句在执行时将终止循环且不执行 else 子句体。 第一个子句体中的 continue 语句在执行时将跳过子句体中的剩余部分并返回检验表达式。

    for 语句

    for 语句用于对序列(例如字符串、元组或列表)或其他可迭代对象中的元素进行迭代:

    for_stmt ::=  "for" target_list "in" expression_list ":" suite
                  ["else" ":" suite]
    

    表达式列表会被求值一次;它应该产生一个可迭代对象。 系统将为 expression_list 的结果创建一个迭代器,然后将为迭代器所提供的每一项执行一次子句体,具体次序与迭代器的返回顺序一致。 每一项会按标准赋值规则 (参见 赋值语句) 被依次赋值给目标列表,然后子句体将被执行。 当所有项被耗尽时 (这会在序列为空或迭代器引发 StopIteration 异常时立刻发生),else 子句的子句体如果存在将会被执行,并终止循环。

    第一个子句体中的 break 语句在执行时将终止循环且不执行 else 子句体。 第一个子句体中的 continue 语句在执行时将跳过子句体中的剩余部分并转往下一项继续执行,或者在没有下一项时转往 else 子句执行。

    for 循环会对目标列表中的变量进行赋值。 这将覆盖之前对这些变量的所有赋值,包括在 for 循环体中的赋值:

    for i in range(10):
        print(i)
        i = 5             # this will not affect the for-loop
                          # because i will be overwritten with the next
                          # index in the range
    

    目标列表中的名称在循环结束时不会被删除,但如果序列为空,则它们根本不会被循环所赋值。 提示:内置函数 range() 会返回一个可迭代的整数序列,适用于模拟 Pascal 中的 for i := a to b do 这种效果;例如 list(range(3)) 会返回列表 [0, 1, 2]。

    注解 当序列在循环中被修改时会有一个微妙的问题(这只可能发生于可变序列例如列表中)。 会有一个内部计数器被用来跟踪下一个要使用的项,每次迭代都会使计数器递增。 当计数器值达到序列长度时循环就会终止。 这意味着如果语句体从序列中删除了当前(或之前)的一项,下一项就会被跳过(因为其标号将变成已被处理的当前项的标号)。 类似地,如果语句体在序列当前项的前面插入一个新项,当前项会在循环的下一轮中再次被处理。 这会导致麻烦的程序错误,避免此问题的办法是对整个序列使用切片来创建一个临时副本,例如
    for x in a[:]:
        if x < 0: a.remove(x)
    

    try 语句

    try 语句可为一组语句指定异常处理器和/或清理代码:

    try_stmt  ::=  try1_stmt | try2_stmt
    try1_stmt ::=  "try" ":" suite
                   ("except" [expression ["as" identifier]] ":" suite)+
                   ["else" ":" suite]
                   ["finally" ":" suite]
    try2_stmt ::=  "try" ":" suite
                   "finally" ":" suite
    

    except 子句指定一个或多个异常处理器。 当 try 子句中没有发生异常时,没有异常处理器会被执行。 当 try 子句中发生异常时,将启动对异常处理器的搜索。 此搜索会依次检查 except 子句,直至找到与该异常相匹配的子句。 如果存在无表达式的 except 子句,它必须是最后一个;它将匹配任何异常。 对于带有表达式的 except 子句,该表达式会被求值,如果结果对象与发生的异常“兼容”则该子句将匹配该异常。 一个对象如果是异常对象所属的类或基类,或者是包含有兼容该异常的项的元组则两者就是兼容的。

    如果没有 except 子句与异常相匹配,则会在周边代码和发起调用栈上继续搜索异常处理器。 1

    如果在对 except 子句头中的表达式求值时引发了异常,则原来对处理器的搜索会被取消,并在周边代码和调用栈上启动对新异常的搜索(它会被视作是整个 try 语句所引发的异常)。

    当找到一个匹配的 except 子句时,该异常将被赋值给该 except 子句在 as 关键字之后指定的目标,如果存在此关键字的话,并且该 except 子句体将被执行。 所有 except 子句都必须有可执行的子句体。 当到达子句体的末尾时,通常会转向整个 try 语句之后继续执行。 (这意味着如果对于同一异常存在有嵌套的两个处理器,而异常发生于内层处理器的 try 子句中,则外层处理器将不会处理该异常。)

    当使用 as 将目标赋值为一个异常时,它将在 except 子句结束时被清除。 这就相当于

    except E as N:
        foo
    

    被转写为

    except E as N:
        try:
            foo
        finally:
            del N
    

    这意味着异常必须赋值给一个不同的名称才能在 except 子句之后引用它。 异常会被清除是因为在附加了回溯信息的情况下,它们会形成堆栈帧的循环引用,使得所有局部变量保持存活直到发生下一次垃圾回收。

    在一个 except 子句体被执行之前,有关异常的详细信息存放在 sys 模块中,可通过 sys.exc_info() 来访问。 sys.exc_info() 返回一个 3 元组,由异常类、异常实例和回溯对象组成(参见 标准类型层级结构 一节),用于在程序中标识异常发生点。 当从处理异常的函数返回时 sys.exc_info() 的值会恢复为(调用前的)原值。

    如果控制流离开 try 子句体时没有引发异常,并且没有执行 return, continue 或 break 语句,可选的 else 子句将被执行。 else 语句中的异常不会由之前的 except 子句处理。

    如果存在 finally,它将指定一个‘清理’处理程序。 try 子句会被执行,包括任何 except 和 else 子句。 如果在这些子句中发生任何未处理的异常,该异常会被临时保存。 finally 子句将被执行。 如果存在被保存的异常,它会在 finally 子句的末尾被重新引发。 如果 finally 子句引发了另一个异常,被保存的异常会被设为新异常的上下文。 如果 finally 子句执行了 return, break 或 continue 语句,则被保存的异常会被丢弃:

    >>> def f():
    ...     try:
    ...         1/0
    ...     finally:
    ...         return 42
    ...
    >>> f()
    42
    

    在 finally 子句执行期间,程序不能获取异常信息。

    当 return, break 或 continue 语句在一个 try…finally 语句的 try 子语句体中被执行时,finally 子语句也会‘在离开时’被执行。

    函数的返回值是由最后被执行的 return 语句所决定的。 由于 finally 子句总是被执行,因此在 finally 子句中被执行的 return 语句总是最后被执行的:

    >>> def foo():
    ...     try:
    ...         return 'try'
    ...     finally:
    ...         return 'finally'
    ...
    >>> foo()
    'finally'
    

    有关异常的更多信息可以在 异常 一节找到,有关使用 raise 语句生成异常的信息可以在 raise 语句 一节找到。

    展开全文
  • 今天小编就为大家分享一篇对Python中for复合语句的使用示例讲解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • 主要介绍了批处理命令教学之复合语句连接符(&、&&和||)的相关资料,需要的朋友可以参考下
  • mysql复合语句

    2021-02-06 14:28:14
    1 索引create index ondrop index on2 视图 view 虚表 存放某一个查询的结果create view 视图名称 as select 语句对视图进行操作1查询 select * from 视图名称更新操作时候需要判断以下条件1 不能有聚集函数 不能有 ...

    1 索引

    create index on

    drop index on

    2 视图 view 虚表 存放某一个查询的结果

    create view 视图名称 as select 语句

    对视图进行操作

    1查询 select * from 视图名称

    更新操作时候需要判断以下条件

    1 不能有聚集函数 不能有 group by

    create view v1 as select max(age) from emp

    2 不能有子查询

    3 不能有计算结果列

    2 执行 更新操作

    insert

    delete

    update

    3 drop view 视图;

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

    复合语句 (必须放在存储过程或者函数里面)

    存储过程 实现特定功能的一组SQL语句 根据需要可以传参数

    语法

    BEGIN

    复合语句

    END;

    #1 声明变量

    # 声明变量 declare 变量名称 变量类型

    # 变量声明必学写在 其他复合语句之前

    declare i int; #定义一个int的变量i

    declare name varchar(20);#定义一个varchar的变量name

    #声明变量的时候指定默认值

    declare address varchar(50) default '无锡';

    #2 赋值

    set i = 100;

    set name = '蔡亦超';

    #3 分支语句

    #1) if-else-then

    if i > 90 then

    # 结果设置为 优

    set result = '优';

    end if;#注意结束

    if i > 90 && i <100 then

    # 结果设置为 优

    set result = '优';

    else if i > 80 then

    set result = '良';

    else

    set result = '及格';

    end if;

    end if;#注意结束

    # 2) case when

    select

    address as '目的地',

    case address

    when '重庆' then '火锅'

    when '海口' then '水果'

    when '贵阳' then '丝娃娃'

    end

    as '特产'

    from emp;

    BEGIN

    declare emp_id int; # 临时变量存放id

    declare emp_salary int;# 临时变量存放salary

    declare done int default false;# done表示还有没有数据

    BEGIN

    循环

    #1)while 循环

    declare i int;

    declare sum int;

    declare temp_salary int;

    # 获取当前工资 存入 temp_salary

    select salary into temp_salary from emp where id=1001;

    while temp_salary <1000000 do

    set temp_salary = temp_salary +5000;

    end while;

    # 更新最新的工资

    update emp set salary = temp_salary where id=1001;

    #2)loop 循环 temp_salary=1000000

    loop1 : loop # loop1 是循环的标签

    set temp_salary = temp_salary -2000;# 循环的内容

    if temp_salary > 500000 then

    iterate loop1; # temp_salary > 500000 继续循环 让代码再回到loop1位置

    end if;

    leave loop1; # 结束循环

    end loop;

    update emp set salary = temp_salary where id=1001;

    #3)repeat

    set i=1;

    set sum=0;

    repeat # 重复执行以下代码

    set i = i+1;

    set sum = sum +i;

    until i>10 # 直到 i>10为止

    end repeat;

    END

    BEGIN

    #异常处理

    # 1 sqlstate 标准SQL的错误代码 5

    展开全文
  • C语言中复合语句的使用。


    前言

    如果多条语句的目的是解决一个独立的问题,这些语句可以构成一个相对独立的个体,这就是复合语句。


    一、复合语句的使用

    复合语句是由一系列语句组成,它们放在一对大括号中形成一个整体。其语句的基本形式:

    {
    语句1;
    语句2;
    ;
    ;
    语句n;
    }

    在形式上看,一对大括号中含有多条语句,但是在C语言的语法规则上是作为一条语句来处理,称为复合语句。复合语句可以出现在任何数据操作语句可以出现的地方,整体作为一条语句来处理和使用。

    二、程序实例

    代码如下

    #include <stdio.h>
    void main()
    {
    	int a=11,b=21,c=31;
    	printf("a=%d\tb=%d\tc=%d\n",a,b,c);
    	{   int b=22;
    		float c=3.3;
    		printf("a=%d\tb=%d\tc=%f\n",a,b,c);
    		a=b;
    	}
    	printf("a=%d\tb=%d\tc=%d\n",a,b,c);
    }
    

    运行结果

    复合语句的应用

    结果分析

    程序代码中主函数中定义了a,b,c三个整型变量,并赋初值。在复合语句中又定义了两个变量b,c,两个变量,在复合语句中输出变量a,b,c三个变量的结果中a的值为在复合语句之外的值,而b和c的值则是在复合语句中被赋予的新值,同时在复合语句最后将新申明的b的值赋值个变量a。由输出的结果可以看到,在复合语句外由main()定义的b、c起作用,而在复合语句内则由在复合语句内定义的b、c起作用。
    程序中第一个和第三个printf()函数不在复合语句内,其输出的b、c为main()所定义,第二个printf()函数在复合语句内,由复合语句内定义的b、c起作用,其输出的b、c为复合语句所定义,变量a在整个程序中有效。

    拓展应用

    • 复合语句中声明的变量,仅在复合语句中起作用。外部的同名变量在复合语句中被屏蔽,不同名的变量没有影响。
    • 复合语句是作为一个语法整体出现的,全部包括在花括号中。
    • 复合语句中的每条语句后面的分号不能够省略。

    总结

    以上就是今天要讲的内容,本文仅仅简单介绍了C语言中复合语句的使用和使用过程中容易出现差错的地方。

    展开全文
  • C语言的复合语句表达式

    千次阅读 2020-07-26 20:10:48
    看一个例子 int main(void) { int x = 10; int y = 1; int c = ({x;y;}); printf("c = %d\n",c); } 第 5 行,这样写合法吗? 答案是合法,结果输出 1 再比如 ({ int y = foo();...这就是复合语句表达式。
  • 简单语句与复合语句 c++中大多数的语句都是简单语句,简单语句基本都以分号结尾。而为了实现条件控制和循环控制等功能,我们也需要借助复合语句复合语句与其说是语句,不如说是结构化的代码块,一般都有一个或数个...
  • ORACLE复合语句 1、用户数据复合语句: 隐式复合语句 update = delete+insert 显式复合语句 merge=insert +update 2、元数据复合语句: 隐式复合语句 truncate table = drop table+create table;
  • 复合语句中定义变量

    2022-02-05 00:58:47
    在C语言的同一函数中,各复合语句内可以定义变量,其作用域仅为本复合语句
  • 主要介绍了Java编程中复合语句,结合相关的具体实例介绍了其用法,需要的朋友可以参考下
  • python有几种类型的复合语句:if、for、while、def、class、try/except、with/as等。这些复合类型的语句在编写时,要遵循python的语法风格:1.冒号结尾复合语句的声明,如if expr:、def f():2.通过缩进数量决定代码...
  • C语言复合语句

    千次阅读 2020-02-13 23:07:02
    复合语句内的变量定义是独立的,即复合语句内定义的变量不影响复合语句外的同一个标识符的变量,且复合语句内定义的变量不能供复合语句外调用,只能在复合语句外单独定义,单独使用。 但是复合语句外定义的变量可以...
  • 主要介绍了C++编程中标记语句与复合语句的写法,是C++入门学习中的基础知识,需要的朋友可以参考下
  • 正确的有,语言中语句语句关于预算,表述中...复合不一类岩定在化石沉积才可存在岩中三大石中。语言中语句语句物化特征古生构造沉积岩独有的石是。而滑面或坡多定的带运动沿固,系列崩塌不沿固定的面和带运动。...
  • 【多选题】关于RAT倒车盲区提醒系统说法正确的是()...【单选题】执行下列语句后的显示结果是什么 ? >>> s = ”GOOD MORNING” >>> print s[3:-4]【单选题】一汽-大众品牌首款SUV是()【单选题】...
  • 复合语句在语法上被看作一条语句C.空语句出现在任更多相关问题[问答题,简答题] 使用砂轮切割机时有哪些安全要求?[填空题] 两器中一般主要是在()位置发生催化剂水热失活。[填空题] 两器中一般主要是在()位置发生...
  • 1. 表达式语句 在表达式的后边加一个分号“;”就构成了表达式语句 ,如: a=++b*9; x=8;y=7; ++k; 可以一行放一个表达式形成表达式语句,也可以一行放多个表达式形成表达式语句,这时每个表达式后面都必须带...
  • 前言 ...本期是关于C语言输入输出语句相关的格式与复合语句,如有错误迎您提出您的看法。 目录 什么是赋值、什么是赋值语句? 数据的输入语句 例1:字符串原样输出 例2.指定宽度输出 数据的.
  • C程序中,用一对大括号{}括起来的多条语句称为复合语句复合语句在语法上被认为是一条语句。序中“经”是一种在理论体系建构上从现象界到本体界反推的逻辑。()用对语句条语句《中华人民共和国网络安全法》是我国第...
  • 复合语句以整个块为单位,能够用在任何一个单独语句可以用到的地方,并且在复合语句中还可以嵌套复合语句 在使用复合语句时要注意,复合语句为局部变量创造了一个作用域,该作用域为程序的一部分,在该作用域中的某...
  • 计算机二级C语言考点归纳:复合语句.docx
  • 【单选题】C语言中,可将一系列语句置于( )从而构成复合语句。A. 一对尖括号\"< >\"之间 B. 一对圆括号\"( )\"之间 C. 一对花括号 { } 之间 D. 一对方框号 [ ] 之间A. 一对尖括号\"< >\"之间 B. 一对圆...
  • C中的复合语句总结

    千次阅读 2017-12-02 10:15:19
    C中表达式和复合语句的如下: ({exp1; exp2; exp3;}) 其值等于exp3的值。如果exp3不能求值,得到的结果就是void。 如下: ( {int a = 2+1; int b = 0; b;} ) // 0 ( {int a = 2+1; int b = 0; int c = 0;} ) // ...
  • 55-C++复合语句(语句块)

    千次阅读 2018-09-07 23:46:24
    方法是用两个花括号来构造一条复合语句(代码块)。代码块由一对花括号和它们包含的语句组成,被视为一条语句,从而满足句法的要求。例如,下列程序使用花括号将3条语句合并为一个代码块。这样,循环体...
  • Java语言基础(四)-复合语句

    千次阅读 2017-03-09 23:43:44
    复合语句、条件语句、循环语句、循环控制

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 152,342
精华内容 60,936
关键字:

复合语句