C语言一/二维数组经典例题及解析

这篇博客详细介绍了C语言中一维和二维数组的基本知识,并通过实例讲解了包括攻擂法求最值、数组逆置、循环移动、折半查找、进制转换、斐波那契数列、冒泡排序等经典算法。同时,还探讨了二维数组的遍历、转置、杨辉三角及数组求平均值等问题,是学习C语言数组操作的好资料。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、一维数组基本知识

基本格式:

数据类型  数组名[常量表达式];  eg.int a[5];  

格式要求:

常量表达式必须是整形常量(表达式)或字符常量(表达式),但不可为实型或变量也不可以为空。

注意事项:

  • 数组元素个数等于数组长度
  • 元素引用时从0开始
  • 赋值后面跟的是大括号
  • 数组不可整体赋值
  • 引用数组元素时,数组下标可以是变量
  • a[0]叫做该数组的首元素,a[n]叫做尾元素
  • 初始化时直接赋值可以使常量表达式为空
  • 赋值位数不可多余规定位数,但是可以少(未赋值默认为0)

二、一维数组经典例题讲解

1.攻擂法求最值

#include <stdio.h>
int main()
{
   
    int a[5],i,x=0;
    int max=a[0];    //首先定义a[0]为最大值
    for (i=0;i<5;i++)
    {
   
        printf("请输入第%d个值:\n",i+1);
        scanf("%d",&a[i]);
        if (a[i]>max)    /*利用循环依次和定义的最大值进行比较*/
        {
   				//若求最小值,将>改为<即可
            max=a[i];    //若大于则该值取代原先最大值,并且将新的最大值的下角标赋值给x
            x=i;
        }
    }
    printf("最大值为:%d\n",max);
    
    printf("最大值下角标为:%d\n",x);
}

运行结果:
在这里插入图片描述

2.一维数组的逆置

#include <stdio.h>
int main()
{
   
    int a[5]={
   1,2,3,4,5};
    int i,j,t;
    for (i=0,j=4;i<j;i++,j--)      //核心代码,作用为依次交换中间值两边的数值达到逆置的作用
    {
   
        t=a[i];a[i]=a[j];a[j]=t;     //利用第三变量实现指定数值的交换
    }
    printf("该数组的逆置为:\n");
    for (i=0;i<5;i++)            //输出语句
    {
   
        printf("%d",a[i]);
    }
}

运行结果:
在这里插入图片描述

3.循环左/右移动

循环右移:若该数组元素为1,2,3,4,5 经过循环右移后数组元素将会变成 5,1,2,3,4

#include <stdio.h>
int main()
{
   
    int a[5]={
   1,2,3,4,5};
    int i,k;
    k = a[4];      //因为最右值将会被覆盖,所以先赋值给第三方变量进行保存
    for (i=3;i>=0;i--)
    {
   
        a[i+1]=a[i];    //将所有值都向右移动一位
    }
    a[0] = k;          //再将刚才保存的数组尾元素赋值给首元素从而完成右移
    for (i=0;i<5;i++)
    {
                              
        printf("%d",a[i]);       //输出语句
    }
}

运行结果:
在这里插入图片描述

循环左移:若该数组元素为1,2,3,4,5 经过循环右移后数组元素将会变成 2,3,4,5,1

//向右移动 若该数组元素为1,2,3,4,5 经过循环右移后数组元素将会变成 2,3,4,5,1
#include <stdio.h>
int main()
{
   
    int a[5]={
   1,2,3,4,5};
    int i,k;
    k = a[0];         //因为最左值将会被覆盖,所以先赋值给第三方变量进行保存
    for (i=1;i<5;i++)
    {
   
        a[i-1]=a[i];     //将所有值都向左移动一位,需要注意覆盖方向
    } 
    a[4] = k;             //再将刚才保存的数组尾元素赋值给尾元素从而完成左移
    for (i=0;i<5;i++)
    {
   
        printf("%d",a[i]);
    }
}

运行结果:
在这里插入图片描述

4.查找数组元素(折半查找法)

前提:原数组条件元素必须是有序的(升序降序都可以),局限性特别大,但思想可以借鉴

//前提:原数组条件元素必须是有序的(升序降序都可以)
//局限性特别大,但思想可以借鉴
#include <stdio.h>
int main()
{
   
    int a[10]={
   1,2,3,4,5,6,7,8,9,10};
    int i=0,j=9,m,k=0,num;
    printf("请输入您想要查找的数值:\n");
    scanf("%d",&num);
    while (i<=j)
    {
   
        m=(i+j)/2;
        if (num < a[m]) j=m-1;    //如若小于中间的数值,那末下一次循环最大值则直接为平均数下一位数值
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

秦同学学学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值