有序数据【C语言程序设计】

来源:互联网 发布:知乎 日本研究生申请 编辑:程序博客网 时间:2024/05/24 02:37

一.实验目的:

1.掌握数组的定义、赋值和输入输出方法

2.学习使用数组实现相关算法

二、实验内容和步骤

1.分析并修改下面程序错误,使之能够正常运行。

错误代码一:

该程序统计数组元素之和并输出。

#include <stdio.h>

 

int main(void)

{

  inta[5]={5,4,3,2,1};

  inti;

  for(i=1;i<=5;i++)

  {

         sum=sum+a[i];

  }

  printf("sum=%f\n",Sum);

  return  0;

}

 

错误分析:

1.Sum没有定义

2.i的值只从0到4

3.整型格式改%f为%d

4.Sum改为sun

正确代码:、

#include<stdio.h>

void main()

{

  int a[5]={5,4,3,2,1};

  int i,sum=0;

  for (i=0;i<5;i++)

  {

         sum=sum+a[i];

  }

  printf("sum=%d\n",sum);

 

}


2.(1) 随机产生N 个正整数(10 < Ν  ≤20 )存入数组 a 中,输出 a 中的最大值,最小

值及求出其平均值(保留两位小数)。

代码:

#include<stdio.h>

#include<time.h>

void main()

{

       inti,N,rand_num[20],max,min,sum;

       srand((unsigned)time(NULL));

 

       N=(rand()%10+11);

 

       for(i=0;i<N;i++)

       {

              rand_num[i]=rand();

       }

 

       max=min=rand_num[0];

       sum=0;

 

       while(i--)

       {

              sum+=rand_num[i];

              if(i)

              {

                     if(rand_num[i]>rand_num[i-1])

                            max=rand_num[i];

                     if(rand_num[i]<rand_num[i-1])

                            min=rand_num[i];

              }

       }

       printf("max:%d\nmin: %d\naverage: %.2f\n",max,min,sum/(N*0.1));

 

}

 

(2) 餐饮服务质量调查打分

某公司的主管需要了解一年来公司的营业状况,比较一下各月份的销售收入状况。如果仅给出一大堆数据,这显然太不直观了,如果能将这些数据以条形图(直方图)的形式表示,将会大大增加这些数据的直观性,也便于数据的分析与对比。下面以顾客对餐饮服务打分为例,练习这方面的程序编写方法。假设有40个学生被邀请来给自助餐厅的食品和服务质量打分,分数划分为1~10这10个等级(1表示最低分,10表示最高分),试统计调查结果,并用*打印出如下形式的统计结果直方图。

Grade       Count        Histogram

1                 5           *****

2                10           **********

3                 7           ******* 

...

      10            3      ***

提示:

–         定义数组score存放打的分数

–         定义数组count为计数器(count[0]不用)

–         计算统计结果:设置一个循环,依次检查数组元素值score[i],是1则将数组元素count[1]加1,是2则将数组元素count[2]加1,依此类推

       for(i=0; i<STUDENTS; i++)

       {

                     count[score[i]]++;

       }

–         打印统计结果,设置一个循环,按count数组元素的值,打印相应个数的符号’*’

提示:输入40个数据太多,进行测试的时候,可以让计算机生成随机数代替手工输入数据。

代码:

#include<stdio.h>

void main()

{

       intscore[40],count[11]={0},i=40,k;

       srand((unsigned)time(NULL));

 

       while(i--)

       {

              score[i]=rand()%10+1;

       }

 

       for(i=0;i<40;i++)

       {

              count[score[i]]++;

       }

 

       printf("Grade       Count      Histogram\n");

 

       for(i=1;i<11;i++)

       {

              printf("%d%15d          ",i,count[i]);

              k=i;

              while(k--)

              {

                     printf("*");

              }

              printf("\n");

       }

}