C语言,程序问题,求大神解释。谢谢
问题:编写人机对话形式进行加减乘除的运算。用户没输入一次运算数和运算符,系统输出相应的计算结果。当输入运算符为“#”时结束循环以下是老师给的答案:#include<std...
问题:编写人机对话形式进行加减乘除的运算。用户没输入一次运算数和运算符,系统输出相应的计算结果。当输入运算符为“#”时结束循环
以下是老师给的答案:
#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语句里面吗???求指点,谢谢 展开
以下是老师给的答案:
#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");
展开全部
什么意思?当然可以啊,上面的代码等价于:
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)
。。。。。
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++写在那个位置就破坏了语法了,编译不过的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
i用来标识执行的动作是第几次,而i定义的位置是在while外面,所以i的作用域是整个main函数,而i++,是执行一次运算,i就加1,表示又执行了一次运算,而后面需要对i进行输出,所以i++的操作在while循环内,在输出前都是可以的,所以放在switch语句中也一样,但是要每个case都要加上这个语句,比较麻烦。
另外,你定义i的时候,要初始化为0,否则它里面存的值是随机的,这样进行++后输出的值也不正确。
希望对你帮助,如果还有疑问,请继续提问。
另外,你定义i的时候,要初始化为0,否则它里面存的值是随机的,这样进行++后输出的值也不正确。
希望对你帮助,如果还有疑问,请继续提问。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
看似这个程序是用来计算一个整数里面有几个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的值。
}
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的值。
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询