95005 “请你编程”讲评 河南 刘卫东 1995-05-26 以答卷的情况看主要有三种思路。 思路一:给每个候奖人一个随机的编号,然后按编号从大到小或从小到大选出前N名作为获奖者。 思路二:给每个候奖人一个随机的编号,此编号和候奖人姓名组合成新的字符串。然后比较各字符串的大小以确定前N名获奖者。 思路三:候奖人姓名存放于一个字符串数组中。随机产生N个整数作为数组的下标,根据这些下标就可以索引出全部N名获奖者。 我们来看一下怎样用C语言实现第三种思路。选定义要用到的几个变量: int t,w,i,r; char (*name)[9],n[9]; 其中T存贮候奖人数,W存贮获奖人数。name被定义为指针,这个指针指向一个字符数组。这个定义比较难理解些,属于比较复杂的指针说明。这时可按如下原则来理解:以标识符为中心,一对方括号一般表示数组,一对圆括号一般表示函数或强调某一优先顺序。方括号对和圆括号对为同一优先级,且比*号为高。如int *(*lpfn)(),lpfn是一个指针,这个指针指向一个函数,这个函数返回一个指向整数的指针。 如下程序段实现由用户输入数据: printf("请输入候奖人数:"); scanf("%d",&t); printf("请输入获奖人数:"); scanf("%d",&w); name=(char(*)[])malloc(t*9*sizeof(char)); for(i=0;i