这个循环怎么解释啊??计算机二级
答案:6 信息版本:手机版
解决时间 2019-10-01 19:57
已解决
2019-10-01 16:29
有以下程序段
int k,j,s;
for(k=2;k<6;k++,k++)
{s=1;
for(j=k;j<6;j++)s+=j:
}
printf("%d";s);
请问这个循环是怎么计算的?为什么答案是10,而不是24,请解释一下循环过程
最佳答案
2019-10-01 16:40
for(k=2;k<6;k++,k++) //k只循环了两次即k=2和k=4
{s=1; //每次循环s的初始值都是1
for(j=k;j<6;j++)s+=j; //j循环了6-k次每次循环s的值都加上j
}
printf("%d",s); //将s的值打印出来
当k=2时s=1 j=2,s=2+1=3 j=3,s=3+3=6 j=4,s=6+4=10 j=5,s=10+5=15
当k=4时s=1 j=4,s=4+1=5 j=5,s=5+5=10
所以最后s的值就是10
全部回答
1楼
2019-10-01 23:25
k之前的循环式没必要的,因为下面设置s总从1开始,真正有用的是k等于4,因为连续两个k++超过6,所以该退出,现在看k=4时,j可以取4和5,而s=1,s的值就是1+4+5,所以等于10.
2楼
2019-10-01 21:52
修改的话将s=1放在for(k=2;k<6;k++,k++)上面即可。
3楼
2019-10-01 20:25
for(k=2;k<6;k++,k++)进行一次循环之后,k=4;
s=1;
for(j=k;j<6;j++)s+=j:即
s=1;
for(j=4;j<6;j++)
{
s+=j:
}
s总共加了2次,即1+4+5 = 10;
4楼
2019-10-01 19:01
2',在abcll表中可以看到整数0所对应的ascll码是48,所以循环还是执行的。 2.当然是v[i]++;结束才可以,要是循环要是成立的话:i=2,在ascll表中可以看到null对应的ascll码是0、、:i=0,要是字符数组:char *s="12134211";1'.for(k=0,由于后面没有break,你要知道字符数组的结标志是‘\0’; 代码: #include改为char *s="! 1: switch(s[k]) {case':i=2; case' } 结果;:i=3; } v[i]++;:i=1; case'3',v[0],v[1];:i=3;; case' case'2' case'4';,同样还得执行case',0;s[k];k++)循环结束的表示是s[k]=='的时候;:i=0; case',0},k,i; for(k=0;s[k],那么v[i]++;自加的是数组v的4个元素 :i=3;2':i=1;; main() {char *s="12134011",v[k]);12130211",即最后i的值是3,那么v[i]++; int v[4]={0;:i=3;} 要是s[k]=':i=2; case',即null,执行的是{}内的所有语句 还有就是关于break的用法,要是没有break:看看你的程序;4'由于后面没有break;k++)printf("%d ",0:i=0; #include<:i case for switch>的话,会执行case'1',v[2]还是0,会执行case'自加的是数组v的4个元素, 当s[k]=',那么还得执行case'2',这才是使循环结束的标志!!
5楼
2019-10-01 17:35
你好!!!
1.for(k=0;s[k];k++)循环结束的表示是s[k]=='/0',你要知道字符数组的结标志是‘\0’,即NULL,在ascll表中可以看到null对应的ASCLL码是0,这才是使循环结束的标志,要是字符数组:char *s="12134211";改为char *s="12130211";程序还是循环到最后,读到字符0的时候,在ABCLL表中可以看到整数0所对应的ascll码是48,所以循环还是执行的。
2.当然是v[i]++;结束才可以,要是循环要是成立的话,执行的是{}内的所有语句
还有就是关于break的用法,要是没有break:看看你的程序:
switch(s[k])
{case'1':i=0;
case'2':i=1;
case'3':i=2;
case'4':i=3;}
要是s[k]='1'的话,会执行case'1':i=0;由于后面没有break,那么还得执行case'2':i=1;,同样还得执行case'3':i=2;
case'4':i=3;,即最后i的值是3,那么v[i]++;自加的是数组v的4个元素,
当s[k]='2'的时候,会执行case'2':i=1;,由于后面没有break,那么还得执行同样还得执行case'3':i=2;
case'4':i=3;,即最后i的值还是是3,那么v[i]++;自加的是数组v的4个元素
、、、、
由此可以每次循环后i的值都是3,那么自加的始终是v[3]的值,v[0],v[1],v[2]还是0;
代码:
#include
#include
main()
{char *s="12134011";
int v[4]={0,0,0,0},k,i;
for(k=0;s[k];k++)
{
switch(s[k])
{case'1':i=0;
case'2':i=1;
case'3':i=2;
case'4':i=3;
}
v[i]++;
}
for(k=0;k<4;k++)printf("%d ",v[k]);
}
结果:0 0 0 8 Press any key to continue
我要举报
如果感觉以上信息为低俗/不良/侵权的信息,可以点下面链接进行举报,我们会做出相应处理,感谢你的支持!
大家都在看
推荐资讯