一、一维数组基本知识
基本格式:
数据类型 数组名[常量表达式]; 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