代码改变世界

学习C++ -> 选择结构程序设计

2012-11-12 16:03  wid  阅读(3932)  评论(6编辑  收藏  举报

学习C++ -> 选择结构程序设计
=======================

一、 语句
    语句是程序的基本组成单位, 每条语句都以分号(;)结尾表示该语句的结束。
    
    1. 表达式语句
        运算符、 常量、等可以组成表达式, 而表达式后加分号就构成了表达式语句。
            例如: i = 10 是赋值表达式, 而 i = 10 ; 加上分号就构成了表达式语句。
            
    2. 复合语句
        用一对大括号括起来的一条或多条语句, 称为复合语句。
        例如: { i = 10; n = 20; m = 30; } 是复合语句, 它只是算是一条语句, 而不是三条。
        注意: 大括号后面无需分号。
        
    3. 空语句
        仅由一个分号构成的语句称为空语句, 空语句什么都不执行, 当某处需要一条语句而又可以什么也不做时使用空语句。
        
    4. 赋值语句
        赋值语句由表达式后跟分号组成。
        例如:

        i = 10 ;
        a = b + c ;

        赋值语句首先会计算等号(=)右边的表达式的值, 然后将其赋值给左边的内存单元。
        说明: 赋值语句中, "="左边是以变量名标示的内存存储单元, 程序在编译时会为变量分配存储单元, 也就是说, 变量名代表着内存单元。
    
    5. 流程控制语句
        1>. if语句
            if语句的一般使用形式:

          if(表达式)
            语句块

            功能: 当if后面括号中表达式的值为真时执行语句块中的语句, 否则跳过语句块(复合语句)执行语句块的下一跳语句。
            
            使用举例:

            if( 10 > 5 )
            {
                cout<<"Yes." ;
            }

            编译运行后输出Yes., 说明if下面的语句块被执行了, 因为10大于5是成立的, 为真, 所以语句块将会被执行。
            上面也讲到, 所谓的语句块就是一条复合语句, 当仅有一个语句时你可以不使用大括号将一个语句括起来。
        
        2>. if-else语句
            仅有一个if语句只能告诉程序当表达式成立时做什么, 而不能告诉程序当表达式不成立时我们应该做什么, if-else正是用来解决该问题的。
            使用形式:

            if(表达式)
                当表达式成立时执行的语句块
            else
                当表达式不成立时执行的语句块

            功能: 首先计算表达式式的值, 当表达式的值为真时执行if后面的语句块, 当表达式的值为假(不成立)时执行else后面的语句块。
            使用举例:

            if( 10 < 5 )
                cout<<"Yes." ;
            else
                cout<<"No." ;

            程序输出No., 因为10 < 5是不成立的, 所以需要执行else后面的语句。
            
        3>. 嵌套的if语句
            嵌套的if语句常用来处理有多种情况时, 嵌套一般有三种形式:
                形式一:

            if(表达式1)
            {
                if(表达式2)
                    语句块1
            }
            else
                语句块2

                    注意, 这里使用了大括号将第二个if语句括起来了, 否则第二个if就会跟下面的if结合, 每个if与和他最近的else结合。
                    
                形式二:

            if(表达式1)
              if(表达式2)
                 语句块1
               else
                 语句块2
            else
               语句块3                    

                    在这个嵌套中, 当表达式1成立时将执行表达式2的if语句, 否则执行表达式1的else语句。
                    
                形式三:

           if(表达式1)
             语句块1
             else if(表达式2)
                语句块2
                   else
                     语句块3

                C++没有对if语句嵌套层数的限制, 这也就是说你可以嵌套任意层if-else语句, 但从程序代码的可读性以及健壮性来说, if-else嵌套请不要嵌套超过5层
        
        4>. switch语句
            switch语句用于实现多分枝结构的程序, 举个简单的例子, 我们在程序上提供了10个序号用来表示菜单, 当用户按下1时就代表选择了功能1, 当按下0-9之外的序号时, 我们提示他选择错误, 没有这个选项后, 10个选项用if结构显然很费力, 这时用switch语句是个很好的选择。
            
            switch语句的一般形式:

            switch(表达式)
            {
                case 常量表达式1: 语句块1
                case 常量表达式2: 语句块2
                case 常量表达式3: 语句块3
                ...
                case 常量表达式n: 语句块n
                default:语句n+1
            }

            功能: 首先在switch处计算表达式的值, 然后依次与下面的case后面的常量表达式比较, 当表达式的值与常量表达式的值相等, 那么就从这个case处作为语句的入口, 将下面的case以及case后面的语句全部执行, 若表达式的值与常量表达式的值没有一个相同的则执行default后面的语句块。
            
            说明:
                ①. switch的表达式只能为int或char型数据, 当为char型数据时会将字符转化为相应的ASCII码值, 对于字符串、浮点型等不能作为switch的表达式;
                ②. 常量表表达式中不能出现变量, 只能是有确定值得常量;
                ③. case后面的语句块可以是一条或多条语句, 且无需用大括号{}括起来, 因为他会自动从符合结果的case处自动向下执行;
                ④. default语句是可选的, 并且对出现的位置没有要求, 可以在case之前, 也可以在case之间, 或者最后。
            
            case语句允许嵌套, 一般的嵌套形式为:

            switch(表达式1)
            {
                case 常量表达式1: switch(表达式2)
                                  {
                                    case 常量表达式2: 语句块
                                    case 常量表达式3: 语句块
                                    ...
                                  }
                case 常量表达式4:语句块
                ...
            }

            switch语句的嵌套同样没有层数限制。
            switch语句使用举例:

#include<iostream>

using namespace std ;

int main()
{
    int n ;
    cin >> n ;
    switch(n)
    {
        case 0:
            cout<<"press 0." ;    break ;
        case 1:
            cout<<"press 1." ;    break ;
        case 2:
            cout<<"press 2." ;    break ;
        case 3:
            cout<<"press 3." ;    break ;
        default:
            cout<<"error!" ;
    }

    return 0 ;
}

            break语句是用来停止switch继续执行下面的语句的, 当执行到break时下面的语句就不会再被执行而是跳出switch结构, 对于break;语句的详细用法到学习循环结构程序设计时再具体讲解。

            
        5>. gtot语句
            goto语句成为无条件跳转语句, 在同一个函数内, 它可以从一个位置跳到任意一个位置.
            goto语句的一般使用形式:

            goto 语句标识 ;
            ...
            ...
            ...
            语句标识 : 语句

                功能: 使用goto语句后它将会将下一条需要执行的代码转到语句标识所在的位置。
                
                说明: goto语句与相应的标识符必须在同一个函数中, 不允许跨函数使用。对于goto的使用一直以后就有很大的争议, 有人说, goto的使用会破坏程序的结构, 从而使程序代码变得难以理解且当出错时不容易查找错误, 这些人认为应该彻底取消goto语句, 还有一部分人认为goto使用灵活, 恰当使用可以提高程序的灵活性, 对于是否使用goto语句还请读者自己权衡, 如果能够恰当使用goto那就更好了, 不过笔者建议在不是必要使用goto时最好不要使用。

                
二、基本输入输出
在C++中常用的标准输入输出函数有cin(用于输入)和cout(用于输出), 这两个函数位于头文件iostreamstd命名空间中, 所以要使用这两个函数首先我们要

#include<iostream>

将这个头文件包含进来, 然后使用命名空间机制

using namespace std ;

这个就可以自由使用cin和cout进行输入输出了, 当然, 你也可以不使用using namespace std ;这句, 如果不使用这句在调用cin和cout函数前你需要像这样使用:

std::cin>>变量名 ;
std::cout<<变量名 ;

注意: 不要将输入符号(>>)和输出(<<)弄混了, 输入是尖括号指向它, 输出尖括号的方向与其相反。

例如我们现在要输入一个整形变量并将其输出:

#include<iostream>

using namespace std ;

int main()
{
    int n ;         //定义一个变量名为n的整形变量
    cin >> n ;      //输入数字n, 输入后按回车键
    cout<<n ;       //输出n

    return 0 ;
}


输入一个字符并将其输出:

#include<iostream>

using namespace std ;

int main()
{
    char c ;            //定义一个变量名为n的字符型变量
    cin >> c ;          //输入c
    cout << c ;         //输出c

    return 0 ;
}


cin和cout一次还可以输入输出多个数据:
例如:

#include<iostream>

using namespace std ;

int main()
{
    int a, b, c ;           //定义三个整型变量
    cout<<"Please input three number:" ;    //提示输入三个数
    cin >> a>> b >> c ;     //输入a, b, c
    cout <<"You input: " << a <<"," << b << "," << c;             //输出c, 逗号隔开

    return 0 ;
}


对于较为复杂的数据输入输出等使用到时再讲。

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


wid, 2012.11.12

 

上一篇: 学习C++ -> 变量、常量与运算符