C语言实验(八):求方差、杨辉三角形、螺旋矩阵

【实验内容】
1.1 编写函数计算: ,其中x为x1,x2,……xn(5<=n<=10)的平均数,使用数组。

在这里插入图片描述

1、由所给通式得知,这个算法要实现求若干个数的方差。用数组的形式储存这组数。
2、由于求10个数以内的数组方差,所以根据C语言数组的性质定义一个长度为10的数组用于储存这组数。
3、计算方差,需要先求出这组数之和和平均数。所以需要累加求和,并求得平均数。再用所给的式子进行方差计算。求方差的功能封装成函数。
4、在输出结果时,需要注意按照保留一位小数格式化输出。

实验代码
#include <stdio.h>
#include <stdlib.h>

float variance(float arr[],int n); //求方差函数

int main()
{
    int n,i;
    float var;
    float arr[10];
    printf("Input n (Integer,5<=n<=10):");
    scanf("%d",&n);
    printf("输入n个浮点数:");
    for(i=0;i<n;i++)
    {
        scanf("%f",&arr[i]); //输入数组元素
    }
    var = variance(arr,n);
    printf("计算结果为(浮点型,保留一位小数):%.1f",var); //格式化输出
    return 0;
}

float variance(float arr[],int n)
{
    int i;
    float sum = 0,var = 0,x;
    for(i = 0; i < n; i++)
    {
        sum += arr[i];
    }
    x = sum / n;
    for(i = 0; i < n; i++)
    {
        var += (arr[i] - x) * (arr[i] - x);
    }
    return var;
}

运行结果

在这里插入图片描述

1.2 编程输出要求格式的杨辉三角形(输出10行,使用数组)。

1、杨辉三角形的特点是每个数等于它上方两数之和,第n行的数字有n项。
2、如上图所示的格式,第一列都为1。先给第一列赋值为1。再利用杨辉三角形的性质,确定剩余后面的数的值。
3、确定好杨辉三角形的形状后,要将其按照格式每行输出。

实验代码
#include <stdio.h>
#include <stdlib.h>

int main()
{
    int i,j,s[10][10]={0};
    for(i=0;i<10;i++)
    {
        s[i][0]=1;
    }
    for(i=1;i<10;i++) //实现杨辉三角形格式
        for(j=1;j<=i;j++)
        {
            s[i][j]=s[i-1][j-1]+s[i-1][j];
        }

    for(i=0;i<10;i++) //按照要求输出
    {
        for(j=0;j<=i;j++)
            printf("%4d",s[i][j]);
        printf("\n");
    }
}
运行结果

在这里插入图片描述

1.3 .编程输出如下螺旋矩阵图形,使用数组实现。

1、观察这个图形为一个六阶矩阵,并且数字依次螺旋递增。递增的方向有向右、向下、向左、向上,可以分别通过四个循环实现。
2、先定义一个变量n,n从0开始计数,每次执行完一圈,加1。向右,从左到右,行数不变,列数从n增加到N-n-1;向下,列数向右多一个,j–,行数从n+1增加到N-n-1(因为第i行的所有数字,向右完成);向左,行数向下多一个,i–,列数减小到n。向上,列数向左多一步,j++,行数减小到n+1.不能到n,因为不能到第n行(同上)。
3、需要对实现的矩阵(二维数组)进行格式化输出。

实验代码
#include <stdio.h>
#include <stdlib.h>

int main()
{
    int N,i,j,n,num=1;
    int a[10][10]={0};
    printf("输入行数:");
    scanf("%d",&N);//确定矩阵阶数

    for(n=0;n<=N/2;n++)
     {
         for(j=n;j<=N-n-1;j++)//从左到右赋值
         a[n][j]=num++;

         for(i=n+1;i<N-n-1;i++)//从上到下赋值
         a[i][N-n-1]=num++;

         for(j=N-n-1;j>n;j--)//从右到左赋值
         a[N-n-1][j]=num++;

         for(i=N-n-1;i>n;i--)//从下到上赋值
         a[i][n]=num++;
     }

     for(i=0;i<N;i++) //输出螺旋矩阵

     {
         for(j=0;j<N;j++)
         printf("%2d ",a[i][j]);

         printf("\n");
      }
    return 0;
}
运行结果

在这里插入图片描述

【总结与反思】

这次实验主要运用数组的知识进行实现三个算法。分别实现了求方差、输出杨辉三角形及输出螺旋矩阵的算法。实验中运用了数组的知识,并且了解了几种经典的算法。
求方差的实验,数组定义时按照最长定义,保证不会溢出。同时可以通过一个变量,控制输入已知数组的元素的数量。还操作了在数组作为函数参数使用时的方法。在编程的过程中,出现由于没有进行函数声明导致的报错,已记录。
输出杨辉三角形的实验,主要通过观察输出示例中的杨辉三角形,确定要定义一个二维数组,并利用它实现杨辉三角。实现杨辉三角形需要了解杨辉三角的规律,并用循环给数组元素赋值实现。输出时,仅输出一个下三角形即可。
输出螺旋矩阵的实验,其数组的使用方法与杨辉三角的实验类似。但是螺旋矩阵的算法实现分析比较困难。通过查阅相关示例,分为四个方向循环实现,比较复杂,已经记录下来。
这次实验主要练习数组的知识,学习数组作为参数的使用方法、二维数组的使用等。实验过程中,主要遇到的问题有两个:一是对算法不熟悉,分析螺旋矩阵算法时没有自己去画一画思路图;二是在写代码时容易出现语法错误,例如忘记在输入函数中加上“&”、忘记变量声明等。但是语法错误记录多了,解决起来快了很多。通过实验操作,提高编程能力。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值