c语言出错invalid operands to binary %

程序功能:输入两个正整数m和n(m≥100,n<1000),输出m和n之间的满足如下条件的三位正整数:它是某整数的平方,它的三位数码有两位是相同的。(如100是10的平方... 程序功能:输入两个正整数m和n(m≥100,n<1000),输出m和n之间的满足如下条件的三位正整数:它是某整数的平方,它的三位数码有两位是相同的。(如100是10的平方,它有两个0,225是15的平方,它有两个2),每行输出4个,字符宽度为5个左对齐。
如输入:(下划线部分表示输入)
Input m: 100
Input n: 500
则输出
100 121 144 225
400 441 484

int main()
{
int m,n,i,a[100],k;
k=0;
printf("Input m: ");
scanf("%d",&m);
printf("Input n: ");
scanf("%d",&n);
for(i=sqrt(m);i<=sqrt(n);i++)
if(pow(i,2)%10==(int)(pow(i,2)/100)||pow(i,2)%10==(int)(pow(i,2)/10)%10)
a[k++]=pow(i,2);
a[k++]='\0';
for(i=1;a[i]!='\0';i++)
if(i%4==0) printf("\n%d ",a[i]);
else printf("%d ",a[i]);
return 0;

}

编译不过去。提示说
fenjieshuwei.c:10: error: invalid operands to binary %
fenjieshuwei.c:10: error: invalid operands to binary %
为什么?
展开
 我来答
高启强聊情感
高粉答主

2020-12-01 · 关注我不会让你失望
知道大有可为答主
回答量:5789
采纳率:100%
帮助的人:212万
展开全部

double类型不能使用%操作符作取余运算。浮点数没有%运算符,%只能运用于整数。

双精度浮点型,此数据类型与单精度数据类型(float)相似,但精确度比float高,编译时所占的内存空间依不同的编译器而有所不同,是doublefloat数据类型,C/C++中表示实型变量的一种变量类型。

扩展资料:

C语言中,双精度浮点(double)型,占8个字节(64位)内存空间。其数值范围为-1.7E308~1.7E+308,双精度完全保证的有效数字最高是15位。

浮点型从狭义上说就是科学记数法。双精度,即double。double有二,两个的意思。

C标准要求float类型精度7位,并且整数部分的表示范围至少要达到-1.0E37--1.0E+37。float一般是32位的。

C标准规定double类型的整数部分的最小表示范围和float一样,都是-1.0E37到1.0E+37,但是它要求double类型精度15位~16位。double通常是64位的。输出doublefloat类型的控制符为%lf。

变量定义时,可以简写为double。

longdouble

C还提供了longdouble类型,目的是提供一种比double更加精确的类型。然而,C标准仅仅规定longdouble至少要和double一样精确。

百度网友72165e1
推荐于2017-09-06 · TA获得超过2170个赞
知道大有可为答主
回答量:1369
采纳率:100%
帮助的人:518万
展开全部
错在第一个if语句上。这个句中有两个错误,改正后即可正确运行:
前面的pow(i,2)返回的是一个浮点数,不能进行取模运算;所以应加上(int)修饰
后面的(int)(pow(i,2)/10)%10中,强制转换错误,应改为((int)pow(i,2)/10)%10即可,
综上所述,整个句子修改成即可:
if((int)pow(i,2)%10==(int)(pow(i,2)/100)||pow(i,2)%10==((int)pow(i,2)/10)%10)
更多追问追答
追问
能具体讲讲这句话吗。
后面的(int)(pow(i,2)/10)%10中,强制转换错误,应改为((int)pow(i,2)/10)%10即可,

这个强制转换错误是怎么回事?不可以转换(pow(i,2)/10)吗?这样((int)pow(i,2)/10)先装换pow再/10不会出小数吗?
追答
不是强制转换本身有错,而是说因为格式的错误造成了类型转换时出现的错误。
原if语句的开始处if(pow(i,2)%10==.....这一节,错误很容易说明:因为pow()的值是浮点数,所以不能进行取模运算(%)
后面那个==(int)(pow(i,2)/10)%10一节,其错误就是将(pow(i,2)/10)整个结果计算出来后,再取模,再被10整除;你原本的意思是将十位上的数分离出来,所以应该在得到pow()的值后,就立即取整,这样就可过滤掉个位以下数,然后再除以10,就能保证个位数是原数的十位上的数,现通过%取余,就得到原十位上的数了。
不知这样的解释能否使你理解?
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
李示羊
2013-05-09 · TA获得超过1053个赞
知道小有建树答主
回答量:291
采纳率:0%
帮助的人:391万
展开全部
浮点数不可用%计算
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
chr1999
2013-05-09 · TA获得超过1056个赞
知道小有建树答主
回答量:2462
采纳率:0%
帮助的人:1346万
展开全部
多加点括号
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
木子思曰
2013-05-09 · TA获得超过145个赞
知道小有建树答主
回答量:279
采纳率:28%
帮助的人:88.9万
展开全部
pow()函数是一个形参和返回值都 加float类型的函数 怎么能%呢
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 3条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式