• C语言求数组最大值和最小值、总和、平均值以及数组正序和逆序的输出


    示例1:顺序和逆序依次输出数组中的元素

    示例2:求数组的和和平均值

    示例3:求数组的最大值和最小值

    示例4:求方差和标准偏差

    示例5:计算二维数组相加生成另外一个二维数组

    示例6:交换数组的行与列

    最后附上完整源码。

    下面就是实现代码:

    示例1:顺序和逆序依次输出数组中的元素

    首先在main函数外部定义一个常量,代表数组长度;

    1. //切记一定不能在结尾带分号,否则会报错
    2. #define LEN 5

    然后在main函数中声明一个数组,这三个示例使用同一个数组就行;

    int array1[LEN] = {1,2,3,0,-1};

    接下来使用for循环来实现顺序输出数组中的每一个元素:

    1. printf("示例1:正序或者逆序依次输出数组中的元素\n");
    2. for(int i = 0; i < LEN; i++)
    3. {
    4. printf("正序,输出数组第%d个元素:%d\n",i,array1[i]);
    5. }

    接下来使用for循环来实现逆序输出数组中的每一个元素:

    1. printf("\n");
    2. for(int j = LEN; j >= 0; j--)
    3. {
    4. printf("逆序,输出数组第%d个元素:%d\n",j,array1[j]);
    5. }

    自己运行后,查看一下效果吧,这里就不截图了。

    示例2:求数组的和和平均值

    声明两个变量,用来存放和/平均值;

    1. int sum = 0;//和
    2. float ave = 0.0;//平均值

    使用for循环遍历数组:

    1. printf("示例2:求数组的和以及平均值\n");
    2. for(int i = 0; i < LEN; i++)
    3. {
    4. sum += array1[i];
    5. }
    6. ave = (float)sum / LEN;
    7. printf("数组的和为:%d",sum);
    8. printf("数组的平均值为:%.2f",ave);

     自己运行后,查看一下效果吧,这里就不截图了。

    示例3:求数组的最大值和最小值

    声明两个变量表示最大值和最小值;

    int max,min;//最大值和最小值

    接下来就是最关键的一步,指定数组中第一个元素暂时为最大值和最小值,根据第一个元素就可以遍历整个数组,依次与这个值进行比较。

    1. printf("示例3:求数组的最大值和最小值\n");
    2. max = array1[0];//默认数组的最大值和最小值均为数组的第一个元素
    3. min = array1[0];
    4. for(int i = 0; i < LEN; i++)
    5. {
    6. if( max < array1[i])
    7. {
    8. max = array1[i];
    9. }
    10. if(min > array1[i])
    11. {
    12. min = array1[i];
    13. }
    14. }
    15. printf("数组的最大值为:%d,数组的最小值为:%d",max,min);

    自己运行后,查看一下效果。

    示例4:求方差和标准偏差

    声明一个函数,用来实现方差和标准偏差的计算。

    float calculateSD(int arr[],float ave);

    如果不知道方差公式的,可以自行百度https://baike.baidu.com/item/%E6%96%B9%E5%B7%AE%E5%85%AC%E5%BC%8F/3638551

    不想百度的,可以看下图: 

     下面就是函数实现:

    1. float calculateSD(int arr[],float ave)
    2. {
    3. printf("%.f\n",ave); /* 输出平均值 */
    4. float s = 0.0; /* 方差 */
    5. float total = 0.0; /* 平方和 */
    6. float SD = 0.0; /* 标准偏差 */
    7. for(int i = 0;i < LEN; i++)
    8. {
    9. total += pow(arr[i] - ave,2);
    10. printf("%d\n",arr[i]); /* 输出每一项 */
    11. }
    12. s = (float) total / LEN; /* 方差 */
    13. printf("方差为:%.2f\n",s);
    14. SD = (float)sqrt(s); /* 标准偏差 */
    15. printf("标准偏差为:%.2f\n",SD);
    16. return s;
    17. }

    下面附上完整代码:

    1. #include
    2. /* 需要用到数学公式,所以添加头文件 */
    3. #include
    4. //定义常量,数组长度
    5. #define LEN 5
    6. //计算方差
    7. float calculateSD(int arr[],float ave);
    8. int main()
    9. {
    10. int array1[LEN] = {1,2,3,0,-1};
    11. int sum = 0;//和
    12. float ave = 0.0;//平均值
    13. int max,min;//最大值和最小值
    14. printf("示例1:正序或者逆序依次输出数组中的元素\n");
    15. for(int i = 0; i < LEN; i++)
    16. {
    17. printf("正序,输出数组第%d个元素:%d\n",i,array1[i]);
    18. }
    19. printf("\n");
    20. for(int j = LEN; j >= 0; j--)
    21. {
    22. printf("逆序,输出数组第%d个元素:%d\n",j,array1[j]);
    23. }
    24. printf("***********************************************\n");
    25. printf("示例2:求数组的和以及平均值\n");
    26. for(int i = 0; i < LEN; i++)
    27. {
    28. sum += array1[i];
    29. }
    30. ave = (float)sum / LEN;
    31. printf("数组的和为:%d",sum);
    32. printf("数组的平均值为:%.2f",ave);
    33. printf("***********************************************\n");
    34. printf("示例3:求数组的最大值和最小值\n");
    35. max = array1[0];//默认数组的最大值和最小值均为数组的第一个元素
    36. min = array1[0];
    37. for(int i = 0; i < LEN; i++)
    38. {
    39. if( max < array1[i])
    40. {
    41. max = array1[i];
    42. }
    43. if(min > array1[i])
    44. {
    45. min = array1[i];
    46. }
    47. }
    48. printf("数组的最大值为:%d,数组的最小值为:%d",max,min);
    49. printf("示例4:数学中的方差计算\n");
    50. calculateSD(arr,ave);
    51. return 0;
    52. }
    53. //函数实现
    54. float calculateSD(int arr[],float ave)
    55. {
    56. printf("%.f\n",ave); /* 输出平均值 */
    57. float s = 0.0; /* 方差 */
    58. float total = 0.0; /* 平方和 */
    59. float SD = 0.0; /* 标准偏差 */
    60. for(int i = 0;i < LEN; i++)
    61. {
    62. total += pow(arr[i] - ave,2);
    63. printf("%d\n",arr[i]); /* 输出每一项 */
    64. }
    65. s = (float) total / LEN; /* 方差 */
    66. printf("方差为:%.2f\n",s);
    67. SD = (float)sqrt(s); /* 标准偏差 */
    68. printf("标准偏差为:%.2f\n",SD);
    69. return s;
    70. }

    真实可运行,结果也是正确的。

     示例5:计算二维数组相加生成另外一个二维数组

    首先声明两个变量表示行数和列数

    int r = 2, c = 3;   /* r:行数,c:列数 */

    然后声明三个数组,2个是已知数组,这两个二位数组用来相加,一个是用来保存结果的数组

    int a[2][3] = {{1,2,3},{2,2,3}}, b[2][3] = {{1,2,3},{1,2,3}}, sum[2][3];

    依次输出数组中的元素

    1. for(int i = 0; i < r; ++i)
    2. {
    3. for(int j = 0; j< c; ++j)
    4. {
    5. //依次输出各数组中的元素,
    6. printf("a[%d][%d]:%d\n",i,j,a[i][j]);
    7. printf("\n");
    8. printf("b[%d][%d]:%d\n",i,j,b[i][j]);
    9. }
    10. }

    开始计算两个二维数组相加操作:

    1. printf("计算二维数组相加:\n");
    2. for(int i = 0; i < r; ++i)
    3. {
    4. for(int j = 0; j < c; ++j)
    5. {
    6. sum[i][j] = a[i][j] + b[i][j]; /* */
    7. }
    8. }

    显示相加的结果:

    1. // 显示结果
    2. printf("\n二维数组相加结果: \n\n");
    3. for(int i = 0; i < r; ++i)
    4. {
    5. for(int j = 0; j < c; ++j)
    6. {
    7. printf("%d ",sum[i][j]);
    8. //换行
    9. if(j == c - 1)
    10. {
    11. printf("\n\n");
    12. }
    13. }
    14. }

    示例6:交换数组的行与列

    声明一个数组,用来存放交换后的数组

    int Reverse[3][2] ;

    交换时,行变成列,列变成行:

    1. //交换,列变成行,行变成列
    2. for(int i = 0; i < r; ++i)
    3. {
    4. for(int j = 0; j < c; ++j)
    5. {
    6. Reverse[j][i] = sum[i][j];
    7. }
    8. }

    显示交换后的结果:

    1. //结果,列数变成行数,行数变成列数
    2. for(int i = 0; i < c; ++i)
    3. {
    4. for(int j = 0; j < r; ++j)
    5. {
    6. printf("%d ", Reverse[i][j]);
    7. //换行
    8. if(j == r - 1)
    9. {
    10. printf("\n\n");
    11. }
    12. }
    13. }

    相加的结果:

    交换的结果:

    最后附上完整代码,亲测可运行,结果正确!

    1. #include
    2. int main()
    3. {
    4. printf("示例1:计算二维数组相加生成另外一个二维数组\n");
    5. int r = 2, c = 3; /* r:行数,c:列数 */
    6. int a[2][3] = {{1,2,3},{2,2,3}}, b[2][3] = {{1,2,3},{1,2,3}}, sum[2][3];
    7. for(int i = 0; i < r; ++i)
    8. {
    9. for(int j = 0; j< c; ++j)
    10. {
    11. //依次输出各数组中的元素,
    12. printf("a[%d][%d]:%d\n",i,j,a[i][j]);
    13. printf("b[%d][%d]:%d\n",i,j,b[i][j]);
    14. }
    15. }
    16. printf("计算二维数组相加:\n");
    17. for(int i = 0; i < r; ++i)
    18. {
    19. for(int j = 0; j < c; ++j)
    20. {
    21. sum[i][j] = a[i][j] + b[i][j]; /* */
    22. }
    23. }
    24. // 显示结果
    25. printf("\n二维数组相加结果: \n\n");
    26. for(int i = 0; i < r; ++i)
    27. {
    28. for(int j = 0; j < c; ++j)
    29. {
    30. printf("%d ",sum[i][j]);
    31. //换行
    32. if(j == c - 1)
    33. {
    34. printf("\n\n");
    35. }
    36. }
    37. }
    38. printf("示例2:交换数组的行与列\n");
    39. int Reverse[3][2] ;
    40. //交换,列变成行,行变成列
    41. for(int i = 0; i < r; ++i)
    42. {
    43. for(int j = 0; j < c; ++j)
    44. {
    45. Reverse[j][i] = sum[i][j];
    46. }
    47. }
    48. //结果,列数变成行数,行数变成列数
    49. for(int i = 0; i < c; ++i)
    50. {
    51. for(int j = 0; j < r; ++j)
    52. {
    53. printf("%d ", Reverse[i][j]);
    54. //换行
    55. if(j == r - 1)
    56. {
    57. printf("\n\n");
    58. }
    59. }
    60. }
    61. return 0;
    62. }

  • 相关阅读:
    Spring Boot 3.2发布:大量Java 21的支持上线,改进可观测性
    华为ensp单臂路由及OSPF实验
    MATLAB算法实战应用案例精讲-【回归算法】XGBoost算法(附Java、Python和R语言代码)
    关于 Vue 中 h() 函数的一些东西
    编译器优化等级对程序性能的影响
    C++精通之路:红黑树的应用(模拟实现map/set)
    过来人:玩游戏不如做游戏,会上瘾的建模工作
    重载PreTranslateMessage响应CTreeCtrl控件的回车键后运行程序出现中断ASSERT(::IsWindow(m_hWnd));
    Run ORB_SLAM2 Under ROS/Example
    Qt QObject::connect: Cannot queue arguments of type ‘***’
  • 原文地址:https://blog.csdn.net/m0_49456900/article/details/125910226