C++学习第4讲:程序的流程控制[讲义]

要点:
1、条件分支
2、循环
3、嵌套运用

一、条件分支
if语句:
if(条件)
  do something;
[else [if(条件)
    do something;]
  do something;

]

拿一个实例来讲吧:


#include
#include
using namespace std;

int main()
{
  int MagNum;  //保存产生的随机数
  MagNum=rand();
  cout<<"请输入你的猜测数字:";
  int GueNum;
  cin>>GueNum;  //你猜测的数字

  if(GueNum==MagNum)
    cout<<"You Are Right!\n"<  else
    cout<<"Sorry,You're wrong.\n";

  return 0;

}

这只是一个简单的提示,如果我们想提示的更详细些呢?
我们可以在上面的代码上继续完善!


#include
#include
using namespace std;

int main()
{
  int MagNum;  //保存产生的随机数
  MagNum=rand();
  cout<<"请输入你的猜测数字:";
  int GueNum;
  cin>>GueNum;  //你猜测的数字

  if(GueNum==MagNum)
    cout<<"You Are Right!\n"<  else{
    //这里进一步嵌套了一个IF条件语句
    if(GueNum>MageNum)
      cout<<"Sorry,Guessed number is high.\n";
    else
      cout<<"Sorry,Guessed number is low.\n";
  }
  return 0;

}

switch语句:
switch(表达式){
  case 表达式:
    do something;
    //break;
  case 表达式:
    do something;
    //break;
  …………
  default:
    do something;
    //break;
}
这里的break;是用来打破程序流程,跳出switch语句!

如果大家了解用WIN32 API来编程,就会发现太多的switch语句了,随便来找一个:


INT_PTR CALLBACK MainDlgProc(HWND hDlg,UINT uMsg,WPARAM wParam,LPARAM lParam){
  switch(uMsg){
    case WM_INITDIALOG://对对话框进行初始化设置
      {
      return TRUE;
      }
    case WM_DROPFILES: //对拖拽事件进行处理
      {  
      return FALSE;  
      }
    case WM_COMMAND:  //对按钮事件的处理
      switch(LOWORD(wParam)){
        case IDCANCEL:
          return TRUE;
        case IDC_ABOUT:
          return TRUE;
        case IDC_BROWSER_SRC:
          return TRUE;
        case IDC_BROWSER_DEST:
          return TRUE;
        case IDC_RENAME:
          return TRUE;
      }
  }
  return FALSE;
}

总结:
通常来说,当控制选择的条件不依赖单一的数值时,应该使用if语句;
switch语句的表达式必须为整数型或者字符型。

二、循环
for循环
for(表达式1;表达式2;表达式3){
  [循环体]
}
最简单的代码示例就是求和了:


#include
using namespace std;

int main()
{
  int sum=0;//定义一个整形变量,并初始化为0,以保存和
  int n=0;    //保存奇数和
  int m=0;    //保存偶数和
  for(int i=1;i<=100;i++){
    if(i%2 ==0)
      n+=i;
    else
      m+=i;
    sum+=i;
  }

  cout<<"The Sum is "<  cout<<"The n+m is:"<  return 0;

}

下面再讲个双重循环的,来打印99乘法表:


#include
using namespace std;

int main()
{  
  for(int i=1;i<=9;i++){    //外循环,用于控制行数
    for(int j=1;j<=i;j++)  //内循环,用于控制列数
      cout<    cout<  }
  return 0;

}

上面的这个例子,大家还要注意一下两个变量的作用域:i和j的作用域,只局限于自身的循环体内。
i只在内循环与外循环里有效,出来了,则无效,如果引用,则会出现“未定义的”的错误提示!
j则只在内循环里有效。

while循环:
有两种形式:
while(条件){
  [循环体]
}  //注意这里没有分号

do{
  [循环体]
}while(条件);  //注意,这里需要添加上“;”

通常,针对这三个循环结构,一般:
1、在已知循环次数时,通常使用for循环
2、当需要至少执行一次遍历时,使用d0-while循环
3、当循环次数未知,通常使用while循环。

这里让我们来完善一下上面的那个猜数游戏吧:


#include
#include
#include
using namespace std;

int main()
{
  int MagNum;  //保存产生的随机数
  cout<<"请输入你要猜测的最大值:";
  int Max;
  cin>>Max;
  srand((unsigned)time(NULL));
  MagNum=(((double) rand() / (double) RAND_MAX) * Max + 0);
  
  cout<<"请输入你的猜测数字:";
  int GueNum;
  do{
    cin>>GueNum;  //你猜测的数字
    if(GueNum==MagNum){
      cout<<"OK,你猜中了,恭喜一下!\n"<        "你是否还想继续?(按Y继续,按任意键退出):";
      char ch;
      cin.get(ch);
      cin.get(ch);
      if(ch=='Y'){
        cout<<"你是否需要调整一下范围?(按Y调整,按任意键保持):";
        cin.get(ch);
        cin.get(ch);
        if(ch=='Y'){
          cout<<"请输入你要调整的范围:";
          cin>>Max;
        }
        //cout<        MagNum=rand()%Max;
        cout<<"请输入你猜测的数字:";
        continue;
      }
      else
        break;
    }
    else{
      if((GueNum-MagNum)>5)  //当所猜数字比MagNUm大过5时,提示太大了
        cout<<"Sorry,你输入的数字太大了.\n";
      else if((MagNum-GueNum)>5)  //当所猜数字比MagNUm小过5时,提示太大了
        cout<<"Sorry,你输入的数字太小了.\n";
      else if((GueNum-MagNum)>5)
        cout<<"Sorry,你输入的数字还是有点大.\n";
      else  if((MagNum-GueNum)>5)
        cout<<"Sorry,你输入的数字还是有点小.\n";
      else
        cout<<"快了,呵呵,要有耐心哦\n";
    }
    cout<<"请继续输入你猜测的数字:";

  }while(1);

  return 0;

}

[img][attach]197[/attach][/img]

发表评论