C语言之数组
一、数组之一维数组
1、一维数组的定义
int array[3]; //定义了一个一维数组,名字叫array,一共有三个元素,每个元素都是int类型。
array[0] = 10;
array[1] = 20;
array[2] = 30;
array[3] = 40; //错误,,没有array[3]这个元素,切记
printf("%d",array[0]); // 10
2、数组在内存的存储方式
数组在内存中就是一段连续的空间,每个元素的类型都是一样的。
3、一维数组初始化
int array[3] = {1,2,3,};//定义的同时为数组成员赋值
int array[5] = {1,3,4}; //未赋值的元素自动补0。
int array[5] = {0};//所有元素均为0。
循环遍历赋值
for(i=0;i<10;i++)
{
printf("array[%d]=%d\n",i,array[i]);
}
for(i=0;i<10;i++)
{
scanf("%d",&array[i]); //循环输入来赋值
}
4、实例:
1、求数组中最大元素的值
#include<stdio.h>
int main(void)
{
int array[6] = {2,3,-1,4,1513,5}; int max=array[0]; int i; for(i=1;i<7;i++) { if (max<array[i]) { max = array[i]; } } printf("最大值:%d",max);
return 0;
}
2、求数组中最小元素的值和其下标
#include<stdio.h>
int main(void)
{
int array[6] = {2,3,-1,4,1513,5};
int max=array[0];
int index = 0;
int i;
for(i=1;i<7;i++)
{
if (max>array[i])
{
max = array[i];
index = i;
}
}
printf("最大值:%d,下标:%d",max,index);
return 0;
}
3、将数组元素逆置
#include<stdio.h>
int main(void)
{
// for循环版
int array[6] = {2,3,-1,4,1513,5};
int temp;
int i;
for(i=0;i<=2;i++)
{
temp = array[i]; //中间变量实现两者的互换
array[5-i] = array[i];
array[i] = temp;
}
for(i=0;i<6;i++)
{
printf("array[%d] = %d\n",i,array[i]);
}
return 0 ;
}
while循环版
#include<stdio.h>
int main(void)
{
// while循环版
int array[6] = {2,3,-1,4,1513,5};
int temp;
int max = 5;
int min = 0;
while(min<max)
{
temp = array[min];
array[min] = array[max];
array[max] = temp;
max--;
min++;
}
for(i=0;i<6;i++)
{
printf("array[%d] = %d\n",i,array[i]);
}
return 0 ;
}
4、水仙花数:一个n位数,它的每个位上的n次幂的和,等于这个数本身。
如:153、370
实例:求100到999之间的所有水仙花数。
#include<stdio.h>
#include<math.h>
int main(void)
{
int i,g,s,b;
int sum = 0;
for(i=100;i<1000;i++)
{
g = i%10; // 个位
s = i/10%10; // 十位
b = i/100; // 百位
//sum = g*g*g+s*s*s+b*b*b;
sum = pow(g,3)+pow(s,3)+pow(b,3); // pow(a,b) a为底数,b为 指数
if(sum==i)
{
printf("水仙花数:%d\n",i);
}
}
return 0;
}
答案在这里:
水仙花数:153
水仙花数:370
水仙花数:371
水仙花数:407
5、求3到100的素数(素数是除了1和自己以外,不能被其他整数整除的整数。)
#include<stdio.h>
int main(void)
{
int i,j;
for(i=3;i<100;i++)
{
int flag = 0; //标志位
for(j=2;j<i;j++)
{
if(i%j==0)
{
flag = 1; // 不为素数
break; // 跳出循环
}
}
if (flag==0)
{
printf("%d是素数!\n",i);
}
}
return 0;
}
答案:
3是素数!
5是素数!
7是素数!
11是素数!
13是素数!
17是素数!
19是素数!
23是素数!
29是素数!
31是素数!
37是素数!
41是素数!
43是素数!
47是素数!
53是素数!
59是素数!
61是素数!
67是素数!
71是素数!
73是素数!
79是素数!
83是素数!
89是素数!
97是素数!
二、数组之二维数组
1、二维数组的定义
int array[2][3];//定义了一个二维数组,有两个array[3],即2行3列,更像一个表格
printf("%d\t%d\n",sizeof(array),sizeof(array[0])); // 24个字节 12个字节
array[0][0] = 0; //给第1行第1列赋值
array[0][1] = 1; //给第1行第2列赋值
array[1][2] = 2; //给第2行第3列赋值
2、二维数组的初始化
int b[2][3] = {{1,2,3},{5,6,7}}; //定义了一个二维数组同时初始化成员
int b[2][3] = {0}; //定义了一个二维数组同时初始化成员都为0
#include<stdio.h>
int main(void)
{
int b[2][3];
int i,j;
for(i=0;i<2;i++)
{
for(j=0;j<3;j++)
{
printf("b[%d][%d]=%d\n",i,j,b[i][j]);
}
}
return 0 ;
}
//输出
/*
b[0][0]=1
b[0][1]=2
b[0][2]=3
b[1][0]=5
b[1][1]=6
b[1][2]=7
*/
3、实例:
1、分别求二维数组行、列的和
#include<stdio.h>
int main(void)
{
int a[2][3] = {{1,2,3},{6,7,8}};
int i,j;
for(j=0;j<3;j++)
{
int sum1= 0;
for(i=0;i<2;i++)
{
sum1+=a[i][j];//每一列的值的和
}
printf("%d\n",sum1); // 7
}
for(i=0;i<2;i++)
{
int sum2 = 0;
for(j=0;j<3;j++)
{
sum2+=a[i][j];//每一行的值的和
}
printf("%d\n",sum2); // 6
}
return 0;
}
2、冒泡排序
#include<stdio.h>
int main(void)
{
int a[10] = {1,4,2,5,6,21,7,0,32,3};
int i,j,temp;
for(i=0;i<10;i++)
{
for(j=1;j<10-i;j++)
{
if(a[j-1]>a[j])
{
temp = a[j-1];
a[j-1] = a[j];
a[j] = temp;
}
}
}
for(i=0;i<10;i++)
{
printf("a[%d]=%d\n",i,a[i]);
}
return 0;
}
答案:
a[0]=0
a[1]=1
a[2]=2
a[3]=3
a[4]=4
a[5]=5
a[6]=6
a[7]=7
a[8]=21
a[9]=32