关于冒泡法的一个问题?

来源:百度知道 编辑:UC知道 时间:2024/06/11 11:30:08
这是一个字符反序输出的冒泡法,但有几个地方我不懂。
代码是:
#include "stdio.h"
main()
{
char c,stmp,array[80];
int i=0,j;
while((c=getchar())!='\n')/*这的意思是不是若输入的字符不等于回车*/
array[i++]=c;
array[i]='\0'; /*为什么要加'\0'*/
for(j=i-1;j>=i/2;j--)/*这里我就不明白了,i-1不就=-1了吗?还有为什么i要/2*/
{
stmp=array[j];
array[j]=array[i-1-j];/*这个我也不懂,array[i-1-j]这个数组代表的是哪一段排序的?*/
array[i-1-j]=stmp;
}
for(i=0;array[i]!='\0';i++) printf("%c",array[i]);
printf("\n");
}
积分不是很多,(俺穷啊~~问了几个问题就花完了)谢谢先哈..

while((c=getchar())!='\n')
意思是当输入会车时while循环结束,不是会车时循环继续,即将输入的字符依次赋值给c,然后将c的值赋给数组。
array[i]='\0'
因为array[80]是字符数组,\0是字符串结束标志,也就是说,在遇到字符\0是,表示字符串结束,由他前面的字符组成字符串,array[i]='\0'是在while循环结束后执行的。
for(j=i-1;j>=i/2;j--)
因为i在整个程序内可共用,你看一下while循环,array[i++]=c语句,i是随循环自增的,i++是i先用后加,即当i值为0时执行array[i++]=c,即array[0]等于c代表的值,i此时值自增为1,以此类推,明白?当执行到for循环时i的值就不会为0了,假如你在输入回车前输入了10个字符,那么到for循环时i的值为10,即字符数组中有10个字符,在字符后是\0。
这个for循环的作用是将字符数组中的字符逆序。算法是这样的:假如此时i=10,即array[0]到array[9]这10个元素的值为输入的字符,array[10]='\0'。for循环开始时,j初始值为i-1即9,循环条件是j大于等于i/2即5,每执行一次循环语句j就自减,第一次执行循环语句时,即
stmp=array[9];
array[9]=array[0];/*i-1-j=10-1-9=0*/
array[0]=stmp;
即将array[0]与array[9]换了位置,以后的循环将array[1]与array[8],array[2]与array[7],array[3]与array[6],array[4]与array[5],此时j=5,执行j=4,循环结束。
好了目标达到了,做C程序一定要好好把程序看看,仔细一点,其实这个程序不难,只是难于描述。
你要知道这些编程知识一定要厚积薄发,多看一些基础的编程的书籍,是很有帮助的。融汇贯通,一通百通!好好学吧!

给你个完整的C++版的例子,加油!
#inc