有以下程序main(){ char str[]="xyz" *ps=str; while(*ps) ps++; for(ps--; ps-str>=0; ps--) p
程序
已帮助 人
有以下程序main(){ char str[]="xyz",*ps=str; while(*ps) ps++; for(ps--; ps-str>=0; ps--) puts(ps);} 程序的运行结果是A.yz B.z C.z D.x xyz yz yz xy xyz xyz
-
参考答案:B本题主要考查循环结构和字符串的存储结构。在C语言中,为了方便确定字符串的长度,编译系统在字符串后增加了一个结束标识‘’,即ASCII码的0。在程序中,首先定义了一个字符型数组str,并赋初值,然后定义一个同类型的指针变量ps,并使ps指向字符数组str。在while循环中,循环结束的条件是*ps的值为0,由于循环开始前,指针变量ps是指向数组的第一个元素,即*ps等价于str[0],值为x,其ASCII码值不为0,循环继续,使ps指向数组的第二个元素,很明显,结果不为0,第三个元素也不为0,而第四个元素才为0,循环结束,此时ps指向数组中的结束标识符。在for循环中,首先将指针变量ps做自减运算,即使指针变量ps执行数组的最后一个元素值,即第三个元素z,然后用输出函数puts输出,该输出函数的功能是输出字符串或字符数组到终端上,一次只能输出一个字符串,输出时,遇到字符串结束标志符结束,并自动换行。第一次for循环时,由于ps指向z,输出的结果为z,换行。第二次for循环时,由于ps指向y,那么输出的结果为yz,换行。第二次for循环时,由于ps指向x,那么输出的结果为xyz,换行。因此,本题的正确答案是B。
