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”这个头文件。确保你使用的头文件是正确的,因为这可能会导致编译错误或运行错误。让我们一起来看看你的代码...