一道C语言题(在线等)

来源:百度知道 编辑:UC知道 时间:2024/06/07 23:26:59
分析以下程序:
#include “string.h”
main(){
char c,string[81];
int i,a=0,b=0;
gets(string);
for(i=0;(c=string[i])!='\0';i++)
if (c==' ')
a=0;
else if (a==0){
a=1;b++;
}
printf("%d\n",b);
}
若输入:a b c,则程序运行后,输出结果为______,
且c的值为______,a的值为______.

解释一下哦
我需要解释。。。

输出结果:3
c:'\0',即c为空格
a:1

输入字符串:a b c,在string字符数组中存储的是a b c,
for循环遍历字符串,直到遇到'\0',

当c取a时,c不为空格,if (c==' ') a=0; 不执行,但a为0,else if (a==0)成立,a变为1,b变为1

当c取空格时,c为空格,if (c==' ') a=0; 执行,a变为0

当c取b时,c不为空格,if (c==' ') a=0; 不执行,但a为0,else if (a==0)成立,a变为1,b变为2

当c取空格时,c为空格,if (c==' ') a=0; 执行,a变为0
当c取c时,c不为空格,if (c==' ') a=0; 不执行,但a为0,else if (a==0)成立,a变为1,b变为3

c取完'c'后,再取就是'\0',循环结束

这样,最后,a变为1,b变为3,c为最后取的字符'\0'

输出3
c='\0'
a=1

自己单步执行看看就知道了

string 内容和下标:
a b c
01234

每次循环执行完时的值:
i a b c
0 1 1 a
1 0 1 空格
2 1 2 b
3 0 2 空格
4 1 3 c
5 1 3 \0

输出结果要看你输入的字符串也就是你输入的句子有多少个空格的地方 如果有3个空格的地方则输出结果为4(结果加上了字符串最后的回车)因为c==‘ ’时a被赋值为0 了 所以到第二次循环时 就可以执行else里面的语句了 所以b++

如果c为' '时a=0,如果c不等于‘ ’时a=1