程序设计与问题求解 实验三 有序数据程序设计

目录

引言

  一.实验目的:

二、实验内容和步骤:

三、实验小结


引言

我想把大学期间写的材料挑选一些发上来保存一下,这是本人大学期间做的一次实验作业。

  一.实验目的:

  1. 掌握循环程序设计思路;
  2. 能熟练使用3种循环结构对问题进行求解;
  3. 掌握穷举法、递推法等在工程问题中的应用。

二、实验内容和步骤:

1. 改正下列程序错误,使之完成规定的功能:

错误代码:该程序统计数组元素之和并输出。

#include <stdio.h>

int  main(void)

{

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

int i;

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

{

sum=sum+a[i];

}

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

return  0;

}

编译环境中正确代码、运行结果截图及错误原因分析如下:

错误原因:

1.sum未定义。2.数组越界。3.sum输出为整形。

2. 编写程序实现以下功能

(1) 输入N 个不大于100的正整数(Ν  ≤10 )存入数组 a 中,输出 a 中的最大值,最小值及求出其平均值(保留两位小数),其中N的值由用户输入。

编译环境中正确代码、运行结果截图如下:

/*

本关任务:用户输入测试集中所给的N 个正整数存入数组 a 中,输出 a 中的最大值,最小值及求出其平均值(保留两位小数)。

测试时请注意:请用平台给的测试集的格式输入,对你编写的代码进行测试,请在输入时,用第一个数代表你要输入几个整数,

后面每一行的值(即每个数据输完即回车占一行)依次为你给的若干正整数。

遇到没输入完毕就结束的情况,可以在scanf语句前加个语句:fflush(stdin);

*/

#include <stdio.h>

int  main(void)

{

    int n,i,j,max,min,sum=0;

    float average;

    scanf("%d",&n);

    int nums[n];

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

    {

        scanf("%d",&nums[i]);

        sum=sum+nums[i];



    }

    for(i=0;i<n;i++){

        for(j=0;j<n;j++){

            if(nums[j]<nums[i])

            {

                int temp;

                temp=nums[j];

                nums[j]=nums[i];

                nums[i]=temp;

            }

        }

    }

    max=nums[0];

    min=nums[n-1];

    average=(float)sum/n;

    printf("%d %d %.2f",max,min,average);

    return  0;

}

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

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

Grade       Count Histogram

1          5 *****

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

3          7 *******

...

       10            3      ***

编译环境中正确代码、运行结果截图如下:

/*

某公司的主管需要了解一年来公司的营业状况,比较一下各月份的销售收入状况。如果仅给出一大堆数据,这显然太不直观了,

如果能将这些数据以条形图(直方图)的形式表示,将会大大增加这些数据的直观性,也便于数据的分析与对比。下面以顾客

对餐饮服务打分为例,练习这方面的程序编写方法。假设有40个学生被邀请来给自助餐厅的食品和服务质量打分,分数划分为

1~10这10个等级(1表示最低分,10表示最高分),试统计调查结果,并用*打印出统计结果直方图。

请注意左边题目中对测试集格式的特别说明:每行第一列表示分值,第二列表示该评分的数量,第三列表示结果统计图,每列

数据之间以TAB符分隔,即使该评分值的个数为0,第二列的评分数量值0的后面仍有一TAB符,测试用例的最后一行后面有一回车(\n)

*/

#include<stdio.h>

int main()

{

    int score[40];

    int i,j;

    int score2[10][1]={1,2,3,4,5,6,7,8,9,10};

    int nums[10][1]={0,0,0,0,0,0,0,0,0,0};

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

    {

        scanf("%d",&score[i]);

        nums[score[i]-1][0]++;

    }

    for(i=0;i<10;i++){

        printf("%d\t%d\t",i+1,nums[i][0]);

        for(j=0;j<nums[i][0];j++){

            printf("*");

        }

        printf("\n");

    }

}

3.检验并打印魔方矩阵

在下面的5×5阶魔方矩阵中,每一行、每一列、每一对角线上的元素之和都是相等的,试编写程序将这些魔方矩阵中的元素读到一个二维整型数组中,然后检验其是否为魔方矩阵,并将其按如下格式显示到屏幕上。

17

24

1

8

15

23

5

7

14

16

4

6

13

20

22

10

12

19

21

3

11

18

25

2

9

编译环境中正确代码、运行结果截图如下:

#include<stdio.h>

int main()

{

int cube[5][5];

int i,j,sum=0,sum2=0,k=0;

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

{

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

{

scanf("%d",&cube[i][j]);

}

}

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

{

for(j=0;j<i;j++){

if(cube[i][0]+cube[i][1]+cube[i][2]+cube[i][3]+cube[i][4]==cube[j][0]+cube[j][1]+cube[j][2]+cube[j][3]+cube[j][4])

{

k++;

}

if(cube[0][i]+cube[1][i]+cube[2][i]+cube[3][i]+cube[4][i]==cube[0][j]+cube[1][j]+cube[2][j]+cube[3][j]+cube[4][j])

{

k++;

}

}

}

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

{

sum=sum+cube[i][j];

}

for(i=4,j=0;i>=0,j<5;i--,j++)

{

sum2=sum2+cube[i][j];

}

if(sum==sum2)

{

k++;

}

if(k==21)

{

printf("该矩阵为魔方矩阵。\n");

}

else{

printf("该矩阵不为魔方矩阵。\n");

}

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

{

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

{

printf("%d",cube[i][j]);

if(j==4)

{

printf("\n");

}

else{

printf(" ");

}

}

}

}

三、实验小结

本次实验工作量小,难度适中,自我感觉良好。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值