江苏省2级C的一题选择题

来源:百度知道 编辑:UC知道 时间:2024/05/15 07:26:18
设有如下程序:
# include<stdio.h>
main( )
{ char s[128]={'\0'},*p=s;
while( strcmp(s ,"END") )
{ gets(s); while(*p) putchar(*p++);}
}
以下关于该程序运行结果叙述正确的是( )
A所有输入的字符串都能被完整地输出
B所有输入的字符串都不能被完整地输出
C.只能完整输出第一个字符串
D.只能完整输出最后一个字符串
答案是C 这个程序怎么运行的啊 strcmp(s ,"END") 这个语句怎么比较啊,假如它进去了,那再判断不是还是进去么?怎么会停啊?而且什么叫第一个字符串和最后一个字符串?
还是不懂啊?照你这麽说,\0和END先比较进入循环,这时有个新的字符串输入,之后进入内层循环,P最后指着\0,那不又和开始的循环情况一样了?那每次都输出啊!

# include<stdio.h>
main( )

{ char s[128]={'\0'},*p=s; /*定义部分*/

while( strcmp(s ,"END") )
/*比较字符串S和字符串,当S!="END"时,执行循环*/

{
gets(s);
/*读如字符串s*/

while(*p) putchar(*p++);
/*从s的首地址开始打印字符串s,输出完之后,p并未指向s的首地址,而是停留在s的'\0'位置,所以 外面的while第二次循环时候,当第一个字符串长度<128时,此时候不输出任何东西,但是当第一个字符串长度>128时,会输出乱码,直到遇见'\0'*/

}

}

选C

如果程序改成:
# include<stdio.h>
main( )
{ char s[128]={'\0'},*p=s;
while( strcmp(s ,"END") )
{ gets(s);
while(*p)
putchar(*p++);
p=s;
}
}
这样就可以完整输出每个字符串。

第一个while是判断前一个数组S如果不等于END时进行循环,里面的while是为了输出字符串,之所以选C是因为当把第一个数组输完以后,p不是指向数组的第一个地址,p此时的地址是第一次时的‘\0’的位置,所以下次输出时不是一个完整的字符串