| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 528 人关注过本帖
标题:帮忙分析一个C语言程序
只看楼主 加入收藏
y175921426
Rank: 1
来 自:湖北黄梅
等 级:新手上路
帖 子:3
专家分:0
注 册:2010-3-5
结帖率:100%
收藏
已结贴  问题点数:10 回复次数:6 
帮忙分析一个C语言程序
#include <stdio.h>

void main()

{

int c;

while ((c=getchar())!='\n')

{

switch (c-'2')

{

case 0:

case 1: putchar(c+4);

case 2: putchar(c+4);break;

case 3: putchar(c+3);

default:putchar(c+2);break;


}

}

}

请帮我分析一下这个程序的意思,主要是黑体字部分看不懂,分析的越详细越好,谢谢
搜索更多相关主题的帖子: C语言 
2010-03-11 18:36
独孤求败1989
Rank: 2
等 级:论坛游民
帖 子:41
专家分:36
注 册:2009-11-8
收藏
得分:0 

呵呵 我也是菜鸟:
while ((c=getchar())!='\n')从键盘输入字符ascii码 把它 给 整型变量c;while 循环语句 ;如果字符不是换行符就执行下面的语句;下面的是switch语句;然后switch (c-'2') 根据结果执行了

2010-03-11 21:48
cedars
Rank: 2
等 级:论坛游民
帖 子:14
专家分:24
注 册:2008-12-4
收藏
得分:10 
#include <stdio.h>

void main()

{

int c;

while ((c=getchar())!='\n')     /*当输入非回车字符时,执行循环*/

{

switch (c-'2')                 /*输入字符的ASCII码减去字符2的ASCII码(50)*/

{

case 0:

case 1: putchar(c+4);         /*当c-'2'的结果为0、1时,先将输入字符的ASCII码加上4,然后输出所得到的新ASCII码值对应的字符*/

case 2: putchar(c+4);break;   /*当c-'2'的结果为2时,先将输入字符的ASCII码加上4,然后输出所得到的新ASCII码值对应的字符*/

case 3: putchar(c+3);        /*当c-'2'的结果为3时,先将输入字符的ASCII码加上3,然后输出所得到的新ASCII码值对应的字符*/

default:putchar(c+2);break;   /*当c-'2'的结果不为0、1、2、3时,就将输入字符的ASCII码加上2,然后输出所得到的新ASCII码值对应的字符*/

}

}

}

ps:case 1后面的那个执行语句没有必要,因为它可以和case2公用一个执行语句;
    case 3的执行语句里最好加一个break,如case 3: putchar(c+3); break;  
2010-03-11 21:53
y175921426
Rank: 1
来 自:湖北黄梅
等 级:新手上路
帖 子:3
专家分:0
注 册:2010-3-5
收藏
得分:0 
回复 3楼 cedars
谢谢!
2010-03-11 22:22
帅超
Rank: 2
等 级:论坛游民
帖 子:25
专家分:23
注 册:2009-9-12
收藏
得分:0 
#include <stdio.h>

void main()

{

int c;

while ((c=getchar())!='\n')     
{

switch (c-'2')                 /*输入字符的ASCII码减去字符2的ASCII码(50)*/

{

case 0:

case 1: putchar(c+4);         /*当c-'2'的结果为0、1时,先将输入字符的ASCII码加上4,然后输出所得到的新ASCII码值对应的字符*/

case 2: putchar(c+4);break;   /*当c-'2'的结果为2时,先将输入字符的ASCII码加上4,然后输出所得到的新ASCII码值对应的字符*/

case 3: putchar(c+3);break;        /*当c-'2'的结果为3时,先将输入字符的ASCII码加上3,然后输出所得到的新ASCII码值对应的字符*/

default:putchar(c+2);break;   /*当c-'2'的结果不为0、1、2、3时,就将输入字符的ASCII码加上2,然后输出所得到的新ASCII码值对应的字符*/

}

}

}
这解释的很清楚咯,当你输入3;3对应的ASC11码是51,51-50=1,就执行case 1,就是51+4=55,55的ASC11码是7,所以输出时7;
按这样算就是了,楼主可以多尝试在编译器上多运行几个数试试。
2010-03-11 22:50
独孤求败1989
Rank: 2
等 级:论坛游民
帖 子:41
专家分:36
注 册:2009-11-8
收藏
得分:0 
三楼的 是回车符还是换行符
2010-03-12 10:38
cedars
Rank: 2
等 级:论坛游民
帖 子:14
专家分:24
注 册:2008-12-4
收藏
得分:0 
是叫做换行符,但是按一下回车键就相当于输入一个换行符,呵呵!之前表达错了
2010-03-12 20:49
快速回复:帮忙分析一个C语言程序
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018725 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved