c语言问题为啥没错误却运行结果与预计不相符

供稿:hz-xin.com     日期:2025-01-14
c语言运行结果问题

j+10这个语句是错误的,不存在这种用法,要写成j=j+10,否则j永远是10


for(i=1,p=a,p1=p;i<=15/2;i++,p++,p1--)
修改为
for(i=1,p=a,p1=p+14;i<=15/2;i++,p++,p1--)

  其实,十进制整数转二进制最简单的办法我觉得是利用移位操作,和按位与,因为数据在计算机里是二进制的形式。当然,如果是大数的问题就不好这样做,我觉得还是写个通用的函数方便点,然后递归,迭代,都可以。看你的输入应该不是大数。
  然后,看你复杂的for循环处理我看了半天感觉是想要处理输出格式。话说,你的代码我已经无力吐槽了。
  例如:
  for( ; p < k; p++, q--)
  d[q]=b[p];
  for( p = 0; p < k; p++)
  b[p]=d[p];
  这一段我想,你是要把顺序倒回来。
  这里你可以用
  for(i= 0; i < k / 2; i++ )
  {
  temp = b[i];
  b[i] = b[ k - i - 1];
  b[k - i - 1] = temp;
  }
  这样子看的懂点。
  然后
  m=k%4;
  n=4-m;
  j=k+n;
  这一段你应该是想要取4的整倍数这样写也是没问题的
  不过,要是我的话,会这样写 ceil(n / 4.0) * 4,用数学函数库里的取上底函数。
  还有就是这一段了:
  for(i=0;i<j;i++) // 这里我觉得既然要利用数组c输出,那么还是从0到j置零的好。
  c[i]=0;

  i = 0; // 这里你 i没有重新赋值,倒置下面for循环出问题了。
  for(s=0;i<j;i++,s++)
  c[i]=b[s];
  for(i=0;i<j;i++)
  {
  if( i && i % 4 == 0 ) // 四个一组。
  printf("\t"); //你确定你这里要的不是\t而是 \b?
  printf("%d",c[i]);// 最后这里看你的题目应该是%d输出,而不是%c
  }
  以下是完整代码:
  #include "stdio.h"
  #include <math.h>
  int main()
  {
  int k=0;
  int x, r,b[99],d[99],p,q;
  int m,n,j;
  int c[99],i,s;
  printf("please input a single number:\n");
  scanf("%d",&x);
  do
  {
  r=x%2;
  b[k++]=r;
  x/=2;
  }while(x);
  p=0;
  q=k-1;
  int temp;
  for(i= 0; i < k / 2; i++ )
  {
  temp = b[i];
  b[i] = b[ k - i - 1];
  b[k - i - 1] = temp;
  }
  j = ceil( k / 4.0) * 4;

  for(i=0;i<j;i++)
  c[i]=0;

  i = 0;
  for(s=0;i<j;i++,s++)
  c[i]=b[s];
  for(i=0;i<j;i++)
  {
  if( i && i % 4 == 0 )
  printf("\t");
  printf("%d",c[i]);
  }
  printf("\n");
}
附上一段代码
#include "stdio.h"
#include <math.h>
int main()
{
int k;
const int bit = 31; // 假设四个字节。
printf("please input a single number:\n");
while( scanf("%d",&k) )
{
int i = 0;
do
{
printf("%d",(k & 0x80000000) >> bit); // 从高位开始输出。
i++;
if( i % 8 == 0 )
{
printf(" "); //格式控制。
}
k <<= 1;
}while( i != 32 );
putchar('\n');
}
}

何必如此麻烦,十几行代码就能解决的事情
# include <stdio.h>
main()
{
int k=0, x, b[99]={0};
printf("Please enter a number:\n");
scanf("%d",&x);
if (x == 0) //如果x==0,后面将不会有输出,所以先输出一个0
printf("0");
for(; x; x/=2,k++) //b[0]是二进制右起第一位,b[1]是第二位,以此类推
if(x%2) b[k]=1; //如果x%2==1,二进制的右起第k+1位变成1
for(k--; k>=0; k--) //在第一个k--之前,k是二进制数的位数,先减1才能正确输出
printf("%d", b[k]); //将二进制数的每一位输出
printf("\n");
}
在VC++6.0中运行,结果完全正确。

希望对你有帮助!

for(;p<k;p++,q--)
d[q]=b[p];
for(p=0;p<k;p++)
b[p]=d[p];
//这样的代码,真的能把人弄晕 ,你不适当加点注释,都不知道有些语句的目的是什么

楼上说的是

c语言问题为啥没错误却运行结果与预计不相符
其实,十进制整数转二进制最简单的办法我觉得是利用移位操作,和按位与,因为数据在计算机里是二进制的形式。当然,如果是大数的问题就不好这样做,我觉得还是写个通用的函数方便点,然后递归,迭代,都可以。看你的输入应该不是大数。然后,看你复杂的for循环处理我看了半天感觉是想要处理输出格式。话说...

C语言里,为啥这个程序运行的结果和预期不符合?
因为是小数,即浮点数,精度有可能会不准,所以是会有误差的

一个C语言的错误 warning C4700: local variable 'n' used without havi...
警告,编译器的警告,说明程序没有错误,可以运行,但是有小问题。当然很可能这个小问题会导致运行结果完全和想象的不一样。你这个应该就是了。n和p没有被初始化。虽然程序照样可以运行,但是n和p的值,估计不是你想要的inta,b,c;floatd,e,f;longg,h,i;cin>>a>>b>>c;cin>>d>>e>>f;cin...

为什么C语言没有出现错误却执行不了?
在C语言中,程序没有报错并不意味着程序一定是正确的。有时候,程序可能会出现逻辑错误或者运行时错误,导致程序无法执行或者输出不符合预期。以下是一些常见的导致程序无法执行的原因:1. 程序陷入死循环:程序在某个地方出现了死循环,使得程序无法继续向下执行。如果程序似乎无法结束,可以检查程序是否存在...

什么是逻辑错误?
逻辑错误是相对于编译错误来说的,例如程序代码的语法有问题,编译时就会出错。而逻辑错误在语法上是正确的,程序能够编译并运行,但是运行的结果与预想的不同。比如你想判断一个人的名字是不是叫Jill,但编写程序时却少写了一个l,变成了Jil,在运行时就会发生逻辑错误。更隐蔽的逻辑错误的例子还有很多...

c语言编译无错误,运行结果错误
",a[j]); }}几点注意事项:如果不是没有其他方法的情况下,不要使用全局变量,这是一个良好的习惯 数组定义是必须定义大小,不能用变量定义,如果数组需要在运行时动态分配,请使用malloc动态申请内存(注意使用后用free释放内存)你的截图不是该程序运行截图,如果上课交作业时会很容易看出来 ...

语义错误是什么意思?
逻辑错误在编译语言和解释语言中都可能出现。与语法错误的程序不同的是,逻辑错误的程序从语法上来说是正确的一段程序,但其运行结果却与预期不符。逻辑错误的唯一表现就是错误的运行结果。在 C++ 语言中,逻辑错误是一种特殊的异常。逻辑错误的原因可能是语句中出现了差错(比如公式写错)、算法中的错误...

为什么C语言程序代码输出结果与预想结果不一样
scanf的格式和你输入的不一样,把他改成scanf("%f %f",&a,&b); 逗号改成空格就行了。或者输入1.2,1.3也一样。

为什么我的C语言程序没有错误却总是不能运行
不过,这通常是因为程序并未成功构建,具体来说是在链接阶段出现了问题。这种错误往往源于类库文件的一些重要部分被意外修改,导致无法进行有效的构建。因此,确保所有依赖的文件没有被意外更改,是解决这一问题的关键。在构建过程中,程序需要将多个编译单元链接成一个可执行文件。如果在链接阶段出错,通常...

明明程序没有错啊但是运行不了 #include<studio.h> main() { int x...
如果你遇到一个程序明明没有写错,却无法正常运行的情况,可能是一些细微的地方出现了问题。我注意到你提到的代码中,头文件包含了“studio.h”,但实际上,标准的C语言程序通常会使用“stdio.h”这个头文件。确保你使用的头文件是正确的,因为这可能会导致编译错误或运行错误。让我们一起来看看你的代码...