}PRO;
PRO sell[MAX];
解题:这类题一律用冒泡法排序,但要注意(1)冒泡法排序要使用交换变量,这里的交换变量类型应和被排序的数组的类型一致,本类题中应使用结构体类型的变量。(2)本题中的产品名称和产品代码都为字符串,对其进行比较时,应使用strcmp函数。(3)本类题的排序都是用两个关键字排序的,分为第一关键字(如上题中的“产品名称”)和第二关键字(如上题中的“金额”),这种排序都是先按第一关键字排序,如果第一关键字相同,再按第二关键字排序,这时即可以写成两个排序过程,也可以写在一起,我们为了简略,把两个排序写成一个排序过程,不过这时排序的条件稍有写复杂,应该注意。
(4)排序条件由两部分构成,请注意看代码中的括号。
(5)题目说明中斜体部分就是本类题经常变化的地方。
好了,排序的代码如下:
void SortDat()
{int i,j;
PRO t;
for(i=0;i<100;i++) /* 这里的100也可以写成MAX */
for(j=i;j<100;j++)
if( strcmp(sell[i].mc,sell[j].mc)>0||( strcmp(sell[i].mc,sell[j].mc)==0&&sell[i].je
{t=sell[i];sell[i]=sell[j];sell[j]=t;} /* 交换sell[i]和sell[j] */
}
好了,再说一道难一些的题,本题是100道题中的第57题,俗称“猴子选王”的题,但“猴子选王”注重于结果,即最后出圈的是谁,而这道题注重于过程,即要将出圈的顺序放在一个指定的数组中。虽然要点不同,但编程的思路和方法确是相同的。
本题的说明如下:
设有n个人围坐一圈并按顺时针方向从1到n编号,从第s个人开始进行1到m的报数,报数到第m个人,此人出圈,再从他的下一个人重新开始1到m的报数,如此进行下去直到所有的人都出圈为止。现要求出圈次序,每10人为一组,给出这n个人的顺序表。请编制函数Josegh()实现此功能并调用函数Writedat()把编号按照出圈的顺序输出到文件OUT.DAT中。
设n=100,s=1,m=10进行编程。
注意:部份源程序已在程序PROG1.C中给出。