c语言四则运算不知哪儿错了

来源:百度知道 编辑:UC知道 时间:2024/05/30 22:42:02
没分奖励了,抱歉#include<stdio.h>
#include<stdio.h>
void main()
{
int a,b,c,d,m,n,i; char x;
scanf("%d/%d%c%d/%d",&a,&b,&x,&c,&d);
if(x=='+'){n=a*d+c*b;m=b*d;}
if(x=='-'){n=a*d-b*c;m=b*d;}
if(x=='*'){n=a*c;m=b*d;}
if(x=='/'){n=a*d;m=b*c;}
if(n<=m){for(i=n;i>=2;i--)
if(m%%i==0&&n%%i==0)
{m=m/i;n=n/i;}break;}
if(n>=m){for(i=m;i>=2;i--)
if(m%%i==0&&n%%i==0){
m=m/i;n=n/i;}break;}
printf("%d/%dx%d/%d=%d/%d",a,b,x,c,d,n/m);
}

if(n<=m){for(i=n;i>=2;i--)
if(m%%i==0&&n%%i==0)
{m=m/i;n=n/i;}break;}
if(n>=m){for(i=m;i>=2;i--)
if(m%%i==0&&n%%i==0){
m=m/i;n=n/i;}break;}
这里,当m = n时两个if 都要执行,还有m%%i这种语法是错的.break语句位置也是错的.
还有输出格式是错的.就是要改成
printf("%d/%d%c%d/%d=%d",a,b,x,c,d,n/m);
就没什么问题了,再有就是算法和风格的问题了.
在此说两句关于printf();这个的问题,也就是%d(a)/%d(b)%c(x)%d(c)/%d(d)%d(n/m)括号内为输出相对应的值(在此程序里).
如果按printf("%d/%dx%d/%d=%d/%d",a,b,x,c,d,n/m);
你这里的写法,就是%d(a)/%d(b)%d(x)%d(c)/%d(d)%d(n/m);
这里有个%d(x)将会输出(x值对应的十进制数),因为在(ASCII码里如+号值就是43,这里的写法就是将字符+以字数形式输出).结果就是
a/bx(x符号转成对应数)/c=d/n/m.
注意上面的输入语句不可能如编程者所愿,能正确读入abcd及符号x.因为当输入ab值后将会带有回输或空格作为输入间隔,而这个正好被x当作自己的内容.

if(x=='//'){n=a*d;m=b*c;}
应该是//,因为在C语言里‘/’算是一个保留字