给徒弟写的一道作业题(C语言)

Posted by zhang on

总体要求:

一般每题要求四个函数,输入函数可以从in.dat中读数据,也可用rand()函数自行产生,输出函数完成把结果输出到屏幕或文件的任务,核心处理函数完成题目规定的要求,main()函数要求以尽可能友好、对程序使用安全的界面完成调用其它函数的任务。

一.排序求平均值(包括将数拆散,求奇偶数、求最大最小值)。

1.该程序设计四个函数:ReadDat()随机产生100个学生成绩存放到数组aa中,随机产生100个相应的学号存放到bb数组中,jsSort()函数的功能是:对aa数组进行降序排列。最后调用函数WriteDat()输出排序后的成绩和相应的学号。在main()函数中调用以上函数。

这道题在我看来主要有两点:1.随机数的产生

                                       2.排序问题

对于这两个问题,分别通过伪随机数发生器和冒泡排序来解决

#include
#include /*包含伪随机数发生器的库 */
#include /*包含time函数的库*/
/*伪随机数发生器每次生成的随机数不同应结合srand函数和time函数。*/
int aa[100];
int bb[100]; /*全局变量,aa数组:成绩;bb数组:学号 */

void ReadDat(int arr[], int nlen)/*产生100个随机成绩 */
{
    int i;
    srand( (unsigned)time( NULL ) );/* srand()函数产生一个以当前时间开始的随机种子.应该放在for等循环语句前面 不然要很长时间等待*/
     for (i=0; i    {
      arr[i] = rand() % 100;/*rand 功 能::伪随机数发生器;所属库:stdlib.h;需要先调用srand初始化,一般用当前日历时间初始化随机数种子,这样每次执行代码都可以产生不同的随机数。*/
    }                            /*rand()%max ,max为最大值,其随机域为0~max-1*/
 
}

void RANDNUM(int arr[], int nlen)/*产生100个随机学号 */
{
   int i;
   srand( (unsigned)time( NULL ) );
   for (i=0; i    {
    arr[i] = rand() % 100;/*希望产生形如2011**的学号,所以要求其产生100以内随机数 */
   }
}

void jsSort(int arr[], int nlen)/*降序排列 这里用了冒泡排序。 时间复杂度为O(n^2)*/
{
    int i,j;
    for (i=0; i          for (j=0; j            {
              if (arr[j] < arr[j+1])
                {
                  int nTemp = arr[j];
                  arr[j] = arr[j+1];
                  arr[j+1] = nTemp;
                }
            }
}
/*在这里写下感受,为什么用冒泡,而不是用时间复杂度为O(nlogn,底数为2)的快排,主要是因为冒泡简单,稳定*/
void WriteDat()/*输出排序后的成绩和相应的学号 */
{
   int i;
   printf(“学号:  成绩:
“);
   for (i=0; i<100; i++)
      {
       printf(” %5d %d
“, bb[i]+201100, aa[i]);/*bb[]+201100可以形成形如2011**的学号样式,此步骤可以放在 产生随机学号那里
                                                ,代码可做如下修改arr[i] = rand() % 100+201100;*/
      }
/* while(1);死循环,为了在DEV-C++下看到结果,运行是注释掉 */
}

main()/*主函数,四次函数调用 */
{
  ReadDat(aa, 100);/*成绩 */
  jsSort(aa, 100);/*排序 */
  RANDNUM(bb, 100); /*学号 */
  WriteDat();/*输出 */
}

DEV-C++ 4.9.9.2编译通过

#About Me

张小璋,野蛮生长成世界500强企业供应链金融产品经理的法语毕业生。微信公众号:张小璋碎碎念(ID: SylvainZhang )。
一直在互联网金融公司从事产品经理工作并负责互联网金融产品线,深耕互联网金融和区块链领域。「PMCAFF」、「人人都是产品经理」专栏作家、「PmTalk」签约作家。