从键盘输入2473<CR>,则程序的输出结果是:668977(具体解释)拜托了!

#include<iostream.h>
void main()
{ char ch;
while(cin.get(ch)&&ch!='\n')
switch (ch-'2')
{ case 0:
case 1: cout<<(char)(ch+4);
case 2: cout<<(char)(ch+4); break;
case 3: cout<<(char)(ch+3) ;
default : cout<<(char)(ch+2); break; }
cout<<endl; }

第1个回答  2012-11-02
  switch (ch-'2') //第一个2 那么ch-'2' = 0;
  { case 0: //所以case 0: 执行.执行完了,没有break;语句。故继续下一条语句,case 1:
  case 1: cout<<(char)(ch+4); //执行case 1:,输出 字符 ‘6’。同理没有break;继续下一条
  case 2: cout<<(char)(ch+4); break; //这里又是输出字符‘6’,接着break.退出了switch语句。
  case 3: cout<<(char)(ch+3) ;
  default : cout<<(char)(ch+2); break; }
其他的一样分析就得出了:66897
第2个回答  2012-11-02
switch (ch-'2')
{ case 0:
case 1: cout<<(char)(ch+4); //若结果为1,这个执行过后 不会跳出 执行下一句
case 2: cout<<(char)(ch+4); break; //结果为2 执行后跳出
case 3: cout<<(char)(ch+3) ;
default : cout<<(char)(ch+2); break; //这两句跟上面执行方式相同
}
switch 下面的case 如果不跟break的话 会一直执行下去 直到遇到break 或判断结束
当 ch-'2' 为 0的时候 程序执行 case 0、case 1 、case 2
当 ch-'2' 为 1的时候 程序执行 case 1 、case 2
当 ch-'2' 为 2的时候 程序执行 case 2
当 ch-'2' 为 3的时候 程序执行 case 3、default
当 ch-'2' 为 其他的时候 程序执行 default

ch-'2' 其实是 两个ascII码在做减运算
例如 输入'2' ascII为50
则 ch-'2' 就相当于 50-50 结果为0
相似回答