谁能告诉我这个基础C语言错在哪里啊?(在线等。。。)

来源:百度知道 编辑:UC知道 时间:2024/09/23 14:31:37
/*****************************************

编号0255:键盘输入两个分数,编程比较这两个分数的大小

******************************************/
#include<stdio.h>
main()
{
int a,b,c,d,i,j;
if((b!=0)&&(d!=0))
{
printf("输入分数i中分子a的值和分母b的值以及输入分数j中分子c的值和分母d的值:");
scanf("%d%d%d%d",&a,&b,&c,&d);
i=a/b;
j=c/d;
if(i>j)
{
printf("i>j\n");
}
else if(i=j)
printf("i=j");
else
printf("i<j\n");
}
else
printf("出错啦,0不可以当分母!");
}

我不知道怎么定义分数,就想这么个土办法,可不知道怎么处理分母为零的情况。。。
根据4个人的说法。。。好像还是不行。。输入1,2,3,4 显示i<j.....(复制了5楼的代码,执行时输入1,0,2,0还是显示i<j,也是不对啊。。。不过还是谢谢5楼的,至少知道了这一点:因为没有在b和d的变量声明中初始化,因为C编译器在编译的时候,自动对未在声明中进行初始化的变量赋0,所以在判断if中的条件为假。 )

首先我看了你的程序,要指出几点:
1、int a,b,c,d,i,j;
if((b!=0)&&(d!=0))
这样的写法,程序是直接跳过这个if去执行你程序中的printf("出错啦,0不可以当分母!");,,,,,原因是因为没有在b和d的变量声明中初始化,因为C编译器在编译的时候,自动对未在声明中进行初始化的变量赋0,所以在判断if中的条件为假。
2、你对i,j都声明成了int类型,所以你这里的a/b和c/d的值是整型的数据,如果a=1,b=2,c=3,d=4,那么你执行i=a/b,i的值是0,j=c/d,j的值也为0,,,,因为你这里需要把i和j声明成float类型就可以了。

下面是我修改好的程序(注意程序的顺序和一些条件的判定书写):
#include<stdio.h>
void main(void)
{
int a,b,c,d;
float i,j;
printf("输入分数i中分子a的值和分母b的值以及输入分数j中分子c的值和分母d的值:");
scanf("%d%d%d%d",&a,&b,&c,&d);
if((b!=0)&&(d!=0))
{
i=a/b;
j=c/d;
if(i>j)
{
printf("i>j\n");
}
else if(i==j) //注意这里的判定条件书写
printf("i=j");
else
printf("i<j\n");
}
else
printf("出错啦,0不可以当分母!");
}

楼主你为什么不试验一下我的程序呢?我的程序在输入分数时你需要输入分数线“/”,这样更好看一些。还有,i=a/b这种式子需要先把a或b转换成float型的,才能对i正确赋值。
请楼主验