c语言初学者
这段代码看不懂,请帮我分析一下,谢谢
#include<stdio.h>
int main(void)
{
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;
}
printf("\n");
return 0;
}
输入2473,结果为668977
这个涉及到2个概念,
一个是ascii和数字转换的问题,在ascii中,0 1 2 3 4 5 6 7 8 9 是连续排列的
所以 '2' - '2' = 0 '4'-'2' = 2 '4' + '4' = 8 等等
一个是switch如果case后没有break,会贯通到下面的一个标签。比如第一个,走到了case0 1 2,所以输出66
综上,
c = 2: 66
c = 4: 8
c = 7: 9
c = 3: 77
所以结果668977
swtich(表达式)
{
case 常量1:语句1:break;
case 常量2:语句2:break;
case 常量3:语句3:break;
case 常量n:语句n:break;
defualt: 语句n+1;break;(此处break可有可无)
}
说明:
1、switch后面括号内的表达式必须为整数类型(包括字符)。
2、case后面的必须为常量或者常量表达式且常量或常量表达式不可以相等。
(敲黑板)3、case标号只起标记作用,在寻找的匹配的之后,不在进行此检查,既找到标号后,就从此标号开始执行,不在进行表达式和常量表达式的判断。(这也是为什么在case语句后面必须要加break 的原因,在下面的代码中会进行解释)
break的作用是跳出当前循环,或者switch语句。
我们可以用上述的两种选择语句做一个简单的四则运算计算器,代码如下
int ADD_INT(int a, int b)//加法
{
return a + b;
}
int DIV_INT(int a, int b)//除法
{
if (0 == b) return false;
return a / b;
}int REC_INT(int a, int b)//减法
{
return a -b;
}int MUL_INT(int a, int b)//乘法
{
return a * b;
}
void main()
{
int a, b, z;
char c;
printf("请输入你所要进行的操作\n");
scanf("%d%c%d",&a,&c,&b);
bool tag = 0;//计算成功与否判断标记
if (c = '+')
{
z = ADD_INT(a, b);
}
else if (c = '-')
{
z = REC_INT(a, b);
}
else if (c = '*')
{
z = MUL_INT(a, b);
}
else if (c = '/')
{
z = DIV_INT(a, b);
tag = 1;
}
if (tag = 0)
{
printf("输入错误");
}
printf("=%d\n", z);
}
tag的作用是:如果在程序输入运算符错误时,计算无法进行则z无值,在输出z时编译器会发生错误,无法输出z的值。
用switch语句实现
int calc()
{
int a, b; char c;
printf("请输入你所要进行的操作\n");
scanf("%d%c%d", &a,&c,&b);
switch (c)
{
case '+':printf("计算结果为%d", a + b); break;
case '-':printf("计算结果为%d", a - b); break;
case '*':printf("计算结果为%d", a * b); break;
case '/':if (0 != b)
return false;
else
return a / b;
break;
default:printf("计算失败");
}
return 0;
}