C语言,程序问题,求大神解释。谢谢

问题:编写人机对话形式进行加减乘除的运算。用户没输入一次运算数和运算符,系统输出相应的计算结果。当输入运算符为“#”时结束循环

以下是老师给的答案:
#include<stdio.h>
main()
{
int i=1;
int flag=0;
char sym='\0';
float a=0,b=0,result=0;

printf("please input the faction (%d):\n",i);
scanf("%f%c%f",&a,&sym,&b);

while(sym!='#')
{
switch(sym)
{
case '+':result=a+b;break;
case '-':result=a-b;break;
case '*':result=a*b;break;
case '/':result=a/b;break;
default:flag=2;
}
i++;
if(flag==0)
printf("%f%c%f=%f\n",a,sym,b,result);
else
printf("%c is an illegal character.\n");
printf("please input the faction (%d):\n",i);
scanf("%f%c%f",&a,&sym,&b);
}
}

我的问题是,为什么i=++要写在现在的位置,不可以写在switc语句里面吗???求指点,谢谢

i++;可以写在switc语句里面,但是如果写在switc语句里面,就要在每一个case、default中都加上i++;
你可以用很简洁的方式解决问题,也可以用很繁琐的方式解决问题,就是这个区别。追问

哦哦,谢谢,那么这个程序可以可以完善一下吗?完善“case‘/’”的分支,即如果除数为0,给flag赋值1,否则才计算两个数的商,退出switch语句后,如果flag的值为1,显示除数为0的错误信息?

追答

可以。编程就是把正确的思路,用正确的代码表示出来。
case '/':
{
if (b == 0)
{
flag = 1;
}
else
{
result = a / b;
}
break;
}

if (flag == 0)
printf("%f%c%f=%f\n", a, sym, b, result);
else if (flag == 1)
printf("除数为0.\n");
else
printf("%c is an illegal character.\n");

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-04-02
什么意思?当然可以啊,上面的代码等价于:
while(sym!='#')
{
switch(sym)
{
case '+':result=a+b;i++;break;
case '-':result=a-b;i++;break;
case '*':result=a*b;i++;break;
case '/':result=a/b;i++;break;
default:flag=2;i++;

}
if(flag==0)
。。。。。追问

我们老师给我们提的问题,问我们为什么i=++要写在这,不能这样写:

……
witch(sym)
{i=++
case '+':result=a+b;break;
case '-':result=a-b;break;
case '*':result=a*b;break;
case '/':result=a/b;break;
default:flag=2;
}
……

谢谢谢谢

追答

switch case 的语法就是:
switch(...)
{
case 1:...;
.....

}

语法规定!!!
你把i++写在那个位置就破坏了语法了,编译不过的

第2个回答  2014-04-02
i用来标识执行的动作是第几次,而i定义的位置是在while外面,所以i的作用域是整个main函数,而i++,是执行一次运算,i就加1,表示又执行了一次运算,而后面需要对i进行输出,所以i++的操作在while循环内,在输出前都是可以的,所以放在switch语句中也一样,但是要每个case都要加上这个语句,比较麻烦。
另外,你定义i的时候,要初始化为0,否则它里面存的值是随机的,这样进行++后输出的值也不正确。
希望对你帮助,如果还有疑问,请继续提问。
第3个回答  2014-04-02
看似这个程序是用来计算一个整数里面有几个2
int main()
{
int x,number,digit;
int countdigit(int number,int digit);
scanf("%d",&number); //输入一个值付给变量number
digit=2;
x=countdigit(number,digit); //调用countdigit函数
printf("%d",x); //输出x的值
return 0;
}
int countdigit(int number,int digit)
{ int s;
s=0;
do
{
if(number%10==digit) //如果number除10的余数是2,执行s=s+1语句
s=s+1; //s加1
number=number/10; //number除10
}while(number!=0); //判断语句,如果number不等于0,重复执行do语句
return s; //返回s的值。
}

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网