C语言中一维数组的定义,初始化,遍历循环赋值、按要求插入、删除、换位,十进制转换成n进制
为大家介绍一维数组的定初始化方法、一维数组中数据的输入和输出方法、一维数组有关的程序和算法、数组处理大量数据时的优越性
一、理解数组的概念利用数组存放数据有何特点
二、一维数组的定初始化方法
在 C 中,可以逐个初始化数组,也可以使用一个初始化语句,如下所示:
double balance[5] = {1000.0, 2.0, 3.4, 7.0, 50.0};
如果省略掉了数组的大小,数组的大小则为初始化时元素的个数。因此,如果:
double balance[] = {1000.0, 2.0, 3.4, 7.0, 50.0};
因此它与前一个实例中所创建的数组是完全相同的。 为数组中某个元素赋值的实例如下:
balance[4] = 50.0;
所有的数组都是以 0 作为它们第一个元素的索引,上述的语句把数组中第五个元素的值赋为 50.0
三、一维数组中数据的输入和输出方法
1. 在定义数组的同时对数组初始化。
#include "stdio.h"
void main() {
int a[4]= {0,1,2,3};
printf("\n%d %d %d %d\n",a[0],a[1],a[2],a[3]);
}
运行截图:
2. 不使用循环对单个数组元素赋值。
#include "stdio.h"
void main() {
int a[4];
a[0]=2;
a[1]=4;
a[2]=6;
a[3]=8;
printf("\n%d %d %d %d\n",a[0],a[1],a[2],a[3]);
}
运行截图:
3. 用循环结构,从键盘输入为每个数组元素赋值,输出各数组元素。
#include "stdio.h"
void main() {
int i,a[4];
for (i=0; i<4; i++)
scanf("%d",&a[i]);
printf("\n");
for (i=0; i<4; i++)
printf("%d ",a[i]);
printf("\n");
}
运行截图:
四、为一维数组a中的元素赋值,并按照逆序输出
通过对一维数组的输入输出来实现;逆序输出,可以通过输出时,在for语句中利用循环变量递减的方法来实现
#include "stdio.h"
void main(){
int i,a[10];
/* 定义循环变量i和一维数组a */
for (i=0;i<=9;i++)
scanf("%d",&a[i]);
for (i=0;i<=9;i++)
printf("%d ",a[i]);
/* 按照逆序输出 */
printf("\n");
}
运行截图:
五、输出一维数组a中的元素最小值及其下标
定义一个整型变量存放最小值下标,将其初始化为0 ,例如:int p=0;即从数组第零个元素开始判断。通过循环,依次判断数组中的每一个元素a[i]是否小于a[p],如果是,则将p和a[p]的值作相应的改变。
void main() {
int i,m,p,a[10]= {9,8,7,6,1,3,5,18,2,4};
/* m为最小值,p为其下标 */
m=a[0];
p=0;
for (i=1;i<10;i++)
if(a[i] { m=a[i]; p=i; } printf("%d,%d\n",a[p],p); /* 输出一维数组a中最小值及其下标 */ } 运行截图: 六、创建一个长度为10的整型数组a,并初始化前8个元素,输入一个整数x,将x插入到a[3]位置(原有的数据往后“移动”)。要求改变数据元素值这部分功能由函数arraymove( )完成。 #include "stdio.h" void arraymove(int *p,int x) //指针指定实参数组 { int i; for(i=8;i>=4;i--) p[i]=p[i-1]; //原有的数据往后移动 p[3]=x; //a[3]空出来了 } void main() { int i,x; int a[10]={1,2,3,5,6,7,8,9}; printf("请输入待插入x的值:"); scanf("%d",&x); arraymove(a,x); for(i=0;i<9;i++) printf("%d ",a[i]); } 运行截图: 七、输出长度为20的斐波拉契数列 分析: 斐波拉契数列只要求从第三个数字开始都是前两个数字的和第一个for循环使数组从第三个元素开始,变成自己和前两个元素的和第二个循环再将改变过的数组依次输出,输出长度为5个字符长,元素间有间隔 #include int main() { int a[20] = {0,1},i; //用一维数组存储斐波拉契数列,只为前两个数字赋值 for(i=2; i<20 ;i++) a[i] = a[i-1] + a[i-2];//实现特殊赋值 for(i=0 ;i<20; i++) printf("%5d",a[i]);//全部输出 return 0; } 八、将一串数字序列的最后一个数字换到第一个位置并输出,再次循环如此过程,直到回到初始状态 分析: 第一个for循环用来录入键入的值第二个主for循环用来重复对数组元素换值,换值的过程注意对值的暂存保留,防止丢失,for循环里面分别对每次变换输出 #include int main() { int a[10],i,j,k,m; //数组存储数字串,k用于暂存调换的数字 for(i=0; i<10; i++) scanf("%d",&a[i]); //键入全部数字 for(i=9; i>=0; i--) //10个数字,一共要调换位置10次 { k = a[9]; //暂存调换的数字 for(j=8; j>=0; j--) a[j+1] = a[j]; //数字迁移位置,实现调换 a[0] = k; //为空位a[0]补上k值 for(m=0; m<10; m++) printf("%d ",a[m]); //全部输出 printf("\n"); } return 0; } 运行: 九、将十进制整数b转换成n进制 分析: 首先要知道将十进制怎么才能转换成其他的进制,首选方法还是与n相除取余,整数部分逆序输出,小数部分正序输出,题目是整数,直接取余放进一维数组后逆序输出即可。 #include int main() { int i=0,b,n,j,num[20]; //n表示将要转换成的进制,num[20]存储余数,自定义20长度,够用 scanf("%d",&n); scanf("%d",&b); //接收要转换的整数b do { num[i]=b%n;//整数b对n取余赋给数组 b=b/n;//更新b的值,b/n直接是整数部分 i++; } while (b!=0); //当b被n除尽,则退出循环 for(j=i-1;j>=0;j--) printf("%d",num[j]); //全部逆序输出 return 0; } 以八进制转换为例,运行演示: 十、输入一串数字,找出最大值和最小值所在的位置,并把两者对调,然后输出调整后的数字串,以长度10为例 分析: 仍然是对数组的循环遍历,可以先选定第一个数作为最大值和最小值,对每个数组元素和max,min比较,更新下标,一次遍历即可完成,最后将max和min的下标对换。 #include int main() { int a[10],max,min,i,tmp; //max,min最大值最小值下标,tmp用于对换 for (i=0; i<10; i++) scanf("%d",&a[i]); //输入一串数字 max=min=0; //默认设置 for (i=1; i<10; i++) {