c语言小白,请问为什么我的这段代码输出结果不正确?应该怎么改呢?求具体分析我的代码,谢谢您!

Num[]是用来储存连续1的个数的,num是计算一共有多少个1,当遇到0的时候就在Num[]里面写入一个数,最后找出Num中最大的那个就是最长连续1的个数,请问问题出在哪... Num[ ]是用来储存连续1的个数的,num是计算一共有多少个1,当遇到0的时候就在Num[ ]里面写入一个数,最后找出Num中最大的那个就是最长连续1的个数,请问问题出在哪里呢? 展开
 我来答
澈丶233
2019-10-24 · TA获得超过169个赞
知道小有建树答主
回答量:446
采纳率:94%
帮助的人:103万
展开全部

你的算法问题有两点:

1、

这一块统计数量的代码其实老实说我都没看懂是什么意思,但是我测试了,输入13能统计出来是2,但是输入12345的时候统计就错了,这段并不能数出3来。

2、

第17行有问题,你每次循环都把max赋值为Num[0],按照你的代码来,输入13时,Num[0]的值为0,所以max初始值总是0,而且Num[9]也是0,所以循环到最后一次的时候,整个过程是:

max=Num[0];=>max->0

if(Num[9]>max)=>Num[9]->0,max->0,结果为false

循环结束,返回max=>返回0

所以你输入13的时候输出结果为0。


针对这两点我做出如下改动:

1、大改了统计个数的代码块,修改为:

思想:当arr[i]为1时,计num为1,循环遍历当前元素之后的元素arr[i+1],如果arr[i+1]也是1,则计数num+1,i也+1,再次while循环,此时就是相当于看arr[i+1+1],如果还是1,则再重复前面的步骤,直到出现0为止。出现0后,while循环结束,把本次统计得到的num存到Num[]数组中,p++。最终整个for循环结束后,就能得到计数数组Num[]了。


2、删除你的第17行,max初始值赋为:


整体代码修改为:

运行结果:


具体代码为:

#include<stdio.h>

int main(){

int x;

scanf("%d",&x);

int arr[32],num=0,i,p=0;

int Num[10]={0},max=0;

for(i=31;i>=0;i--){

arr[31-i]=(((x>>i)&1u)?1:0);

}

for(i=0;i<32;i++){

   if(arr[i]==1){

           num=1;

       while(arr[i+1]==1){

        num++;

        i++;

    }

   Num[p]=num; 

   p++; 

        }

    }

for(i=0;i<10;i++){

if(Num[i]>max){

max=Num[i];

}

}

printf("%d\n",max);

}

童之新
2019-10-24 · TA获得超过228个赞
知道小有建树答主
回答量:289
采纳率:60%
帮助的人:81.2万
展开全部
在for(i=0;i<32;i++)这个for语句里面有很多问题,比如你输入13即0x0000000d,从第4位开始后面全是0,你会进入else里面的语句,那么p=p+1,这里没什么,但Num[p]就会数组越界。
可以这样for(i=0;i<32;i++){if(arr[i]==1)num++; else{if(num!=0){num[p++]=num;num=0;}}}
在这里补充一点,一个32位的int变量,1010这样子间隔的话,你也得把Num这个数组至少留16个空间。
还有你获取最大值啊,max=Num[0];这语句放在for里面干嘛,Num[0]=0,这是导致你结果为0的原因,这条语句要放在for语句的上面嘛
另外主函数里改成unsigned int x较为稳妥
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
楣书园6191
2019-10-23 · 超过64用户采纳过TA的回答
知道答主
回答量:646
采纳率:32%
帮助的人:53.2万
展开全部
首先,你的证词是错的。它应该是:scanf(%LF),&;a,&;b),正确的格式是:scanf(\"<格式化字符串>\",<地址表>);您的printf语句应为:printf(\"得到%f+%f=%fn\",a,b,a+b);,正确的格式是:printf(“输出格式类型”,变量),以前输出格式类型的数目,与变量的数目相同
追问
什么是证词?看不懂你写的啥?好像和我的这道题没什么关系呀
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式