| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 580 人关注过本帖
标题:如何解决程序报错
只看楼主 加入收藏
小武哥253
Rank: 2
等 级:论坛游民
帖 子:14
专家分:10
注 册:2013-7-27
收藏
 问题点数:0 回复次数:6 
如何解决程序报错
一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
#include "stdafx.h"
#include "stdio.h"
#include "math.h"
int main(int argc, char* argv[])
{long int i;long double j,k;
for(i=1;i<=1000;i++)
{
j=sqrt(i+100);
k=sqrt(i+268);
if((j*j==i+100)&&(k*k==i+268))                     出错语句
printf("%ld\n",i);
}
    return 0;
}

D:\vc++6.0\Microsoft Visual Studio\MyProjects\test6\test6.cpp(14) : error C2106: '=' : left operand must be l-value

[ 本帖最后由 小武哥253 于 2013-7-27 22:41 编辑 ]
搜索更多相关主题的帖子: Microsoft include double return 
2013-07-27 17:50
小小程序猿
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:1
帖 子:755
专家分:2785
注 册:2013-7-18
收藏
得分:0 
很明显是第二个只有一个等于号嘛k*k=i+268

孤独与寂寞是催化一个人迅速成长的良药,没有之一
2013-07-27 18:40
小武哥253
Rank: 2
等 级:论坛游民
帖 子:14
专家分:10
注 册:2013-7-27
收藏
得分:0 
回复 2楼 小小程序猿
谢谢你,那个是一时不小心弄错了,都是==的,但是还出错,请你帮忙找下原因
2013-07-27 22:40
guhemeng
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:100
专家分:165
注 册:2013-7-27
收藏
得分:0 
  sqrt 函数里面的数据都必须是float 或者 double 型,另外你还可以看下运算符的优先级看有没有问题,我忘了。 你改下试一把,如果还出问题,那需要你把问题贴上来看下了。
2013-07-27 23:17
woshiluoyei
Rank: 1
等 级:新手上路
帖 子:6
专家分:5
注 册:2013-7-25
收藏
得分:0 
程序代码:
#include<stdio.h>
void main()
{
int i,j,k;
for(i=0;i<1000;i++)
for(j=10;j<100;j++)
  for(k=13;k<100 ;k++)
  if(i+100==j*j&&i+168==k*k)
  {
  printf("%d\n",i);
  break;
}
输出为156
问题:一整数,它加100后是完全平方数,再加168还是完全平方数,求该整数
解题思路:设该数为x,它加100后是A,再加168为B。
则因为A是完全平方数,
所以A为正数,且A=y*y,y为正整数或0。
同理,B为正数,B=z*z,z为正整数。
因为B=A+168>A,所以,我们可设z=y+n,n为正整数,n>0。
由B=A+168,有:(y+n)(y+n)=y*y+168,即:y=84/n-n/2。
又y为正整数,所以84/n-n/20,则得出n≤13
所以,编程时可用的条件有:
0<n≤13
y=84/n-n/2
x=y*y-100,当y为整数时,就是符合题目的y。
*/
#include <stdio.h>
int main()
{
     int n,x;
     float y;
     for(n=1;n<=13;n++)
     {
          y=84.0/n-n/2.0;
          //这里用84.0和2.0,是因为整数用“/”时,结果会取整,用这种浮点型数才不会直接取整数。
          if(int(y) == y)//当y是一个整数时,求出对应x,并输出。
          {
              x=(int)(y*y-100);
              printf("%d\n",x);
          }
     }
    return 0;
}
输出为1581、26121、-99 

    #include "stdio.h"
#include "math.h"
int main(int argc, char* argv[])
{
    long int i;long double j,k;
    for(i=1;i<=1000;i++)
    {
        j=(int)sqrt(i+100);
        k=(int)sqrt(i+268);
        if((j*j==i+100)&&(k*k==i+268))                     
        printf("%ld\n",i);
    }
     return 0;
 }
这是改你的,输出为21,261                 
2013-07-27 23:28
小小程序猿
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:1
帖 子:755
专家分:2785
注 册:2013-7-18
收藏
得分:0 
#include "stdio.h"
#include "math.h"
int main(int argc, char* argv[])
{long int i, j,k;
for(i=1;i<=1000;i++)
{
j=sqrt(i+100);
k=sqrt(i+268);
if((j*j==i+100)&&(k*k==i+268))                     
printf("%ld\n",i);
}
    return 0;
}


修改了两处就完全可以了
一、头文件的第一个删掉,因为用不到
二、把 j 和 k  的类型变成long int型;因为完全平方数开方是个正数或者是0

孤独与寂寞是催化一个人迅速成长的良药,没有之一
2013-07-28 06:50
小武哥253
Rank: 2
等 级:论坛游民
帖 子:14
专家分:10
注 册:2013-7-27
收藏
得分:0 
谢谢大家!获益匪浅
2013-08-06 17:22
快速回复:如何解决程序报错
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.064076 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved