请教C51单片机编程问题,这是什么原因呢

这些
s=cc/mt;
ct=(uchar)(cd/s); //出错

ct=(uchar)((cd*mt)/cc); //OK
是从函数里抽出来的,
s=cc/mt;
ct=(uchar)(cd/s); 运算结果不对,
而换成ct=(uchar)((cd*mt)/cc); 运算结果就对了,
这是怎么回事呢

难道你程序真的这么写的?下面的三行也不是写在一个主函数里或者一个子函数里吗?最后一行竟然会OK?在说笑话吧。
这样,就能编译通过的。
unsigned int mt;
unsigned char cc,cd,ct;
float s;
void cdt()
{
s=cc/mt;
ct=(unsigned char)(cd/s);
ct=(unsigned char)((cd*mt)/cc);
}
main()
{
cdt();
while(1);
}追问

不好意思,是我没说清楚,前面有定义
#define uint unsigned int
#define uchar unsigned char

追答

你也没看明白,我没说uint和uchar,我知道前面有定义。
我问的是后面三行,那计算赋值语句,就像你那么写的,肯定是不行,要写要主程序中或者写在子函数中的。
都给写出来,那么写,编译是通过的,这都看不明白呀。

追问

明白你的意思,那几句是从函数里抽出来的,编译是能通过,但二者算出来的结果不一样,不知道这是什么原因,还望不吝赐教,谢谢!

追答

问题出在这行:s=cc/mt;
因cc,mt都不是浮点数,计算的结果s是0。
对于keilc,这种浮点数计算,参加运算的数都是浮点数才行。

温馨提示:答案为网友推荐,仅供参考
相似回答