c语言的一道题 答案k=4 a=12 为什么

#include<stdio.h>
main()
{
char *s="12134";
int k=0, a=0;
while(s[k+1])
{
k++;
if(k%2==0)
{
a=a+(s[k]-'0'+1);
continue;
}
a=a+(s[k]-'0');
}
printf("k=%d a=%d\n",k,a);
}

我来回答一下吧。
首先进入循环前k=0,a=0
第一次循环:K++后,K=1,不满足if语句执行条件,所以a=a+(s[1]-'0'),a=0+(32-30)=2
第二次循环:K++后,K=2,满足if语句执行条件,所以a=a+(s[2]-'0'+1),a=2+(31-30+1)=4
第三次循环:K++后,K=3,不满足if语句执行条件,所以a=a+(s[3]-'0'),a=4+(33-30)=7
第四次循环:K++后,K=4,满足if语句执行条件,所以a=a+(s[4]-'0'+1),a=7+(34-30+1)=12
第五次循环时:后,由于循环条件s[5]为“\0”,不满足循环执行条件
所以k=4,a=12

char *s="12134",是字符型数组,其实里面的12134分开表示应该是‘1’ ‘2’ ‘1’ ‘3’ ‘4’,ASCII要换成十进制数据31 32 31 33 34 ,这样其实你就会做了。

continue的作用是跳出本次循环。

希望能够帮到你。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-12-24
while(s[k+1])
{
k++;
{
当s[k+1]为真k++,s里面有5个元素,k从0开始因为s[5]不存在,所以k=4
第2个回答  2015-10-28
变量k,a的值为4 ,12
第3个回答  推荐于2016-07-28
第1次循环:k=0,s[k+1]=s[1]='2',a=0+(2+1)=3;
第2次循环:k=1,s[k+1]=s[2]='1',a=3+(1+1)=5;
第3次循环:k=2,s[k+1]=s[3]='3',a=5+(3+1)=9;
第4次循环:k=3,s[k+1]=s[4]='4',a=9+(4+1)=14;
第5次循环:k=4,s[k+1]=s[5]='\0',while条件不满足,while循环结束。
所以k=4;a=14。
while循环中的continue导致后面那句a=a+(s[k]-'0');从没执行过。追问

不对吧 k=0,s[k+1]=s[1]='2',a=0+(1+1)=2 while(s[k+1]) a=a+(s[k]-'0'+1); 二者一个是s[k+1]一个是s[k] k不一样 我想问的是 if(k%2==0)这一句有什么用啊

追答

你刚刚是不是修改了题目代码啊。
if(k%2==0)是判断奇偶数的,当k为偶数,执行a=a+(s[k]-'0'+1);之后continue进入下一次循环;当k为奇数,执行a=a+(s[k]-'0');

本回答被提问者采纳