为大家介绍一维数组的定初始化方法、一维数组中数据的输入和输出方法、一维数组有关的程序和算法、数组处理大量数据时的优越性
在 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
#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]);
}
#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]);
}
#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");
}
通过对一维数组的输入输出来实现;逆序输出,可以通过输出时,在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");
}
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)
{
m=a[i];
p=i;
}
printf("%d,%d\n",a[p],p);
/* 输出一维数组a中最小值及其下标 */
}
#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]);
}
分析:
#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;
}
分析:
#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;
}
分析:
首先要知道将十进制怎么才能转换成其他的进制,首选方法还是与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;
}
分析:
仍然是对数组的循环遍历,可以先选定第一个数作为最大值和最小值,对每个数组元素和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++)
{
if (a[i]<a[min])
{
min=i; //如果当前元素小于a[i],更新最小值下标
}
if (a[i]>a[max])
{
max=i; //如果当前元素大于a[i],更新最大值下标
}
}
tmp=a[min];
a[min]=a[max];
a[max]=tmp; //交换最大最小值
for (i=0; i<10; i++)
printf("%d ",a[i]); //全部输出
return 0;
}
分析:
#include
int main()
{
int a[18]={1,2,3,4,5,6,7,8},i,j=0; //只写八个数字,默认前八个赋值
for(i=8;i<18;i++)
scanf("%d",&a[i]); //循环赋值
for(i=17;i>=0;i--)
{
printf("%5d\t",a[i]); //放一个制表符\t整齐一点儿
j++; //j用于计数,换行输出
if(j%5==0)
printf("\n");
}
return 0;
}
分析:
宏定义介绍
#include
#define N 12
//这里用到了一个宏定义,也可以不用
int main()
{
int i,a[N];
float av; //平均数一般不是整数,定义成浮点数
printf("*** 请输入12个数组元素:***\n");
for(i=0;i<N;i++)
scanf("%d",&a[i]); //依次赋值
for(i=0;i<N;i++)
{
printf("%d ",a[i]); //%d后面留一个空格
av+=a[i];
if((i+1)%3==0)
printf("\n"); //直接用i作为计数变量,被3整除则输出换行
}
av /= N;
printf("av=%.2f\n",av); // %.2f小数点后保留两位小数输出
return 0;
}
分析:
#include
#include
//含有生成随机数函数的头文件
int main()
{
int a[50],i,m,j=0,k=0;
for(i=0;i<50;i++)
a[i] = rand()%100 + 1; //rand()%100表示0-100的随机数,+1则是1-100
for(i=0;i<50;i++)
{
if(a[i]%3==0) //判断是否可以整除
{
j++; //计数,后面计算数组长度
for(m=i;m<50-j;m++)
a[m]=a[m+1]; //从当前位置开始,后面向前覆盖
}
}
for(i=0;i<50-j;i++) //50-j就是数组长度
{
k++;
printf("%d ",a[i]);
if(k%5==0)
printf("\n");
//规整输出数组
}
return 0;
}
int a[10],i;
for(i=0;i<10;i++)
scanf("%d",&a[i]);
不能通过如下的方法对数组中的全部元素赋值。
int a[10],i;
scanf("%d",&a[i]);