c算法真题

用键盘输入n个学生的名字,然后根据字典排列输出结果。

算法设计:

(1)定义一个二维字符数组来存储n个学生的名字。

字符名称[N][13];

(2)使用选择性排序方法,通过比较函数strcmp()对N个字符串进行排序。

(3)输出结果

选择性排序思想

(1)第一遍,从n条记录中选择关键字值最小的记录作为第一条记录;

k = 0;

for(j = 0+1;j if(k!= 0){ t = a[k];a[k]= a[I];a[I]= t;}/*单元K和单元0的交换*/

(2)在第二遍中,从剩余的N-1条记录中选择具有最小关键字值的记录作为第二条记录;

k = 1;

for(j = 1+1;j if(k!= 1){ t = a[k];a[k]= a[I];a[I]= t;}

(3)一般在第I遍中,选择关键字值最小的记录作为第I条记录(I = 1,2,...,n-1)从剩余的n-I+1。

k = I-1;

for(j = I;j if(k!= 1){ t = a[k];a[k]= a[I];a[I]= t;}

对于n个元素的数组A,用C语言选择排序的程序段是:

for(I = 0;i { k = i

for(j = I+1;j if(k!= I){ t = a[k];a[k]= a[I];a[I]= t;}

}

完全类似,我们把二维字符数组char name[N][13]看成N个一维字符数组:

姓名[0],姓名[1],姓名[2],…,姓名[N-1]。

在选择排序程序部分,比较两个数字:

If(a[j]改为:if (strcmp (name [j],name [k])

以及数据交换语句:{ t = a[k];a[k]= a[I];a[I]= t;}

更改为:{strcpy(t,name[k]);strcpy( name[k],namea[I]);strcpy(name[i],t);}

完整的程序列表

#包含“stdio.h”

#包含" string.h "

主()

{cahr name[10][13],temp[13];int I;

for(I = 0;我& lt10;i++){

Printf("请输入%d学生的姓名:\n ",I+1);

获取(name[I]);

}

for(I = 0;我& lt9;i++)

{ k = I;

for(j = I+1;j & lt10;j++)if(strcmp(name[j],name[k])& lt;0)k = j;

如果(k!=i){strcpy(temp,name[k]);

strcpy(name[k],name[I]);strcpy(name[i],temp);

}

}

printf(" 10学生姓名按字典排列:\ n ");

for(I = 0;我& lt10;i++)printf("\n %s ",name[I]);

}