首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

哪位高手帮小弟我解释一下这段代码的意思

2013-09-06 
谁帮我解释一下这段代码的意思#includestdio.h#includeconio.h#define BUFFSIZE 100int main(){char n

谁帮我解释一下这段代码的意思


#include<stdio.h>
#include<conio.h>
#define BUFFSIZE 100
int main()
{
char name[5][10],buff[BUFFSIZE];
int i,j,k,n;
n=0;
for(i=0;i<5;i++)
{
printf("Please input the name of %dth student:\n",i+1);
gets(buff);
if(strlen(buff)>10)
{
printf("the length of the name if larger than 10\n");
continue;
}
strcpy(name[i],buff);
}
for(j=0;j<5;j++)   //采用选择排序的方法对学生名字进行排序
{
k=5-j;
for(i=0;i<5-j;i++)
if(strcmp(name[i],name[k])>0)
k=i;
if(k!=5-j)
{
strcpy(buff,name[k]);
strcpy(name[k],name[5-j]);
strcpy(name[5-j],buff);
}
}
for(i=0;i<5;i++)//这里也明白
printf("%s\n",name[i]);
return 0;
}

就是从“//采用选择排序的方法对学生名字进行排序”那里开始,我就不太懂了
前面的都看的七七八八了
后面的输出名字排序也明白了
中间那段有点绕哈哈


[解决办法]
引用:
就是分开不是很理解
那个k=i是什么意思?
可能是才开始学所以还不是太理解吧


里面 在j =0时全时越界行为啊,
重写了下 冒泡

 for(j=0;j<5;j++)   
    {   
        for(i = 0;i<5-1 -j; i++)
        {   
            if(strcmp(name[i],name[i+1])>0)
            {   
                strcpy(buff, name[i]);
                strcpy(name[i], name[i+1]);
                strcpy(name[i+1], buff);
            }   
        }   
    }   

------解决方案--------------------


这是交换排序,排序思想就是对排序序列指定一个最开始的位置,然后每个元素都跟这个指定的元素比较,如果比他大(或者小,取决于想升序还是降序),就交换

编程思想如下:
//伪代码
for(i=0; i++; i<end)
{
    k = i;
    for(j=i+1; j++; j<end)
        if(array[j] > array[k])
       k = j;//也就是k = i那一步,此步骤是为了记录哪个元素比k大,此步保证了一轮循环后k记录着最大的那个元素的位置

    if(k != i)//一轮过去后这说明出现了比k元素大的元素,k变化了,说明上边循环的那个if为真过
    {
        交换;
    }
}

其中的k = i就是为了先记录比k位置的元素大的元素的位置,其实有些交换排序没有这一步,遇到比k大的就先交换,也是可以实现功能的,但是会多交换几次,效率会下降,有这一步,就会等第二个循环完了,交换一次就好了。

我写的那个排序思想k的初值是0,降序排序,你的那个程序k的初值是5,都是一样的,只不过开始端不一样而已

热点排行