广州软件学院c语言—实验8 数组(1)

实验8  数组1

一、实验目的

1、理解数组的作用、特点;

2、掌握一维数组、二维的定义、引用、初始化,能够与循环结合实现批量数据处理(如输入、输出,比较大小,交换等);

3、熟悉打擂台等典型算法。

二、实验内容

1、(基础题)有一个斐波那契数列(Fibonacci sequence)它的第一项为1,第二项为1以后每一项都等于它的前项之和。使用一维数组编程实现功能:计算该数列的前20项并赋值给数组,然后每一行5个数据的形式输出。程序运行截图如下图所示:

#include<stdio.h>
int main ()
{
	int i,a[20]={1,1};
	for(i=2;i<=19;i++)
		a[i]=a[i-1]+a[i-2];
		for(i=0;i<=19;i++)
	{
	if(i%5==0)printf("\n");
	printf("%d\t",a[i]); 
}
	return 0;
 } 

2、(基础题)青年歌手大奖赛,有7名评委进行打分,分数取值范围:0.0~10.0,试编程实现如下功能:从键盘输入7位评委给某一选手的评分,之后计算、输出该选手的平均得分(计算规则:去掉一个最高分和一个最低分,求出剩余5个得分的平均值)。程序运行截图如下图所示:

#include<stdio.h>
int main ()
{
int i;
float sum,average,max,min,a[7];
printf("请输入7位评委的给分:\n");
for(i=0;i<=6;i++)scanf("%f",&a[i]);
max=min=sum=a[0];
for(i=1;i<=6;i++)
{
if(a[i]>max)max=a[i];
if(min>a[i])min=a[i];
}
for(i=1;i<=6;i++)sum=sum+a[i];
sum=sum-max-min;
average=sum/5;
printf("去掉一个最高分:%.4f,去掉一个最低分:%.4f\n该选手最后得分是:%.4f",max,min,average);
return 0;
 } 

 

(提示:使用一维数组来保存7位评委的给分,先计算所有评委给分总和,并找到最高分、最低分(可用“打擂台”算法求最高最低分),然后用给分总和-最高分-最低分,再除5得到选手的平均得分,最后输出。)

要求:请按照上图的输入输出样式编写程序。

3(基础题)计算矩阵之和:

 

先输出这两个矩阵,再输出求和后矩阵。

(提示:(1)可第定义两个二位数组分别存储两个矩阵中的元素;(2)矩阵之和是对应元素相加,如c[0][0]=a[0][0]+b[0][0],c[2][1]=a[2][1]+b[2][1],可用一个二维数组保存两矩阵对应元素的和)。程序运行效果如下图所示:

#include<stdio.h>
int main ()
{
int i,j,c[3][4];
int a[3][4]={{3,0,4,5},{6,2,1,7},{4,1,5,8}};
	int b[3][4]={{1,4,0,3},{2,5,1,6},{9,3,6,0}};
	printf("array a:\n");
	for(i=0;i<=2;i++)
{
	for(j=0;j<=3;j++)
			printf("%d\t",a[i][j]);
			printf("\n");
}
	printf("array b:\n");
	for(i=0;i<=2;i++)
{
	for(j=0;j<=3;j++)
			printf("%d\t",b[i][j]);
			printf("\n");
}
printf("array c:\n");
for(i=0;i<=2;i++)
{
	for(j=0;j<=3;j++)
	{
		c[i][j]=a[i][j]+b[i][j];
		printf("%d\t",c[i][j]);
	}
		printf("\n");
}
return 0;
 } 

 

 

4、(提高题)已知学生成绩如下表,要求用二维数组保存学生成绩,并计算每个学生的平均成绩以及各门课程的平均成绩。

 

(提示:(1)可定义一个二维数组存储学生成绩;(2)定义两个一维数组分别存储学生的平均成绩和课程的平均成绩;(3)某个学生的平均成绩是二维数组中某行元素的平均值;某门课程的平均成绩是二维数组中某列元素的平均值)

程序运行效果如下图所示:请完善代码。

 

#include <stdio.h>

#define M 4

#define N 3

int main()

{

    int i,j;//定义行,列两个控制变量

    float average_stu[M]={0.0};//存放每个学生的平均成绩

    float average_sc[N]={0.0};//存放每门课程的平均成绩

     //二维数组赋初值 成绩表数据存入sc数组中

    float sc[M][N]=__________________;

    //输出二维数组中的元素

    printf("学生成绩表为:\n");

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

    {

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

            printf("%.0f\t",sc[i][j]);

        printf("\n");

    }

     printf("\n");

    //计算每个学生的平均成绩

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

    {

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

          average_stu[i]+=sc[i][j];

        —————————;//第i个学生平均成绩存入average_stu[i]数组

    }

    //计算每门课程的平均成绩存入average_sc数组

    /*

        代码块1:请补充。

    */

    // 输出每个学生的平均成绩

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

        printf("第%d个学生的平均成绩为:%.1f\n",i+1,average_stu[i]);

    printf("\n");

    // 输出每门课程的平均成绩

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

        printf("第%d门课程的平均成绩为:%.1f\n",j+1,average_sc[j]);

    return 0;

}

#include <stdio.h>
#define M 4
#define N 3
int main()
{
    int i,j;//定义行,列两个控制变量
    float average_stu[M]={0.0};//存放每个学生的平均成绩
    float average_sc[N]={0.0};//存放每门课程的平均成绩
     //二维数组赋初值 成绩表数据存入sc数组中
    float sc[M][N]={{85,73,92},{76,89,75},{93,95,91},{60,55,48}};
    //输出二维数组中的元素
    printf("学生成绩表为:\n");
    for(i=0;i<M;i++)
    {
        for(j=0;j<N;j++)
            printf("%.0f\t",sc[i][j]);
        printf("\n");
    }
     printf("\n");
    //计算每个学生的平均成绩
    for(i=0;i<M;i++)
    {
        for(j=0;j<N;j++)
          average_stu[i]=average_stu[i]+sc[i][j];
        average_stu[i]=average_stu[i]/N;//第i个学生平均成绩存入average_stu[i]数组
    }
    //计算每门课程的平均成绩存入average_sc数组
       for(j=0;j<N;j++)
    {
    for(i=0;i<M;i++)
          average_sc[j]=average_sc[j]+sc[i][j];
         average_sc[j]=average_sc[j]/M;
    }
    // 输出每个学生的平均成绩
    for(i=0;i<M;i++)
        printf("第%d个学生的平均成绩为:%.1f\n",i+1,average_stu[i]);
    printf("\n");
    // 输出每门课程的平均成绩
    for(j=0;j<N;j++)
        printf("第%d门课程的平均成绩为:%.1f\n",j+1,average_sc[j]);
    return 0;
}

填的空:

     float sc[M][N]={{85,73,92},{76,89,75},{93,95,91},{60,55,48}};

  average_stu[i]=average_stu[i]/N;

     for(j=0;j<N;j++)
    {
    for(i=0;i<M;i++)
          average_sc[j]=average_sc[j]+sc[i][j];
         average_sc[j]=average_sc[j]/M;
    }

 

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值