一维数组
mind:
数组是一组变量
1.初始化:
- 省略[]:sizeof array/sizeof array[0]
- 补0
- 定位
2.输入,输出,赋值:for循环
3.数组大小:数组大小是一个数(非负整数)
二维数组
mind:
1.二维数组是 数组的数组/一个矩阵的变量
2.二维数组在内存中顺序存储
1.初始化:
- 一组变量的初始化–>一组数组的初始化
- 顺序初始化
/*二维数组的初始化*/
#include <stdio.h>
int main(void)
{
// int rain[2][3]={
// {1,3,2},
// {4},
// };
int rain[2][3]={
1,3,2,4
};
int i,j;
for(i=0;i<2;i++){
for(j=0;j<3;j++){
printf("%d\n", rain[i][j]);
}
}
return 0;
}
2.输入,输出,赋值:for双重循环
/*针对若干年的降水量数据,计算年降水总量,年降水平均量,月降水平均量*/
#include <stdio.h>
#define YEARS 5
#define MONTHS 12
int main(void)
{
const float rain[YEARS][MONTHS]={
{4.3,4.3,4.3,3.0,2.0,1.2,0.2,0.2,0.4,2.4,3.5,6.6},
{8.5,8.2,1.2,1.6,2.4,0.0,5.2,0.9,0.3,0.9,1.4,7.3},
{9.1,8.5,6.7,4.3,2.1,0.8,0.2,0.2,1.1,2.3,6.1,8.4},
{7.2,9.9,8.4,3.3,1.2,0.8,0.4,0.0,0.6,1.7,4.3,6.2},
{7.6,5.6,3.8,2.8,3.8,0.2,0.0,0.0,0.0,1.3,2.6,5.2},
};
printf("YEARS RAINFULL(inches)\n");
int years, months;
double subtot, total;
for(years=0,total=0;years<YEARS;years++) {//1.外层循环进入一次,出去一次
for(months=0,subtot=0;months<MONTHS;months++){
subtot+=rain[years][months];//内层循环进入五次,出去五次
} //2.一次for循环:初始条件执行一次,判断条件执行很多次,动作也会执行很多次; 3.双重循环的几何意义:先定行/列,再定列/行
printf("%d %.1f\n", years+2000, subtot);
total+=subtot;
}
printf("\n");
printf("年降水平均量是%.1f\n", total/YEARS);
printf("\n");
int index;
printf("MONTHS MONTHLY AVERAGE\n");
for(months=0,index=0;months<MONTHS;months++,index++){
for(years=0,subtot=0;years<YEARS;years++){
subtot+=rain[years][months];
}
printf("%d %.1f\n", index+1, subtot/YEARS);
}
printf("\n");
return 0;
}
指针和数组
mind:
1.数组名是指向数组类型的指针,是指向数组首元素的指针
- dates+i==&dates[i]
- (dates+i)==dates[i]
2.数组==数组名,数组元素
函数和数组
mind:
用函数处理数组,函数接收的是(/数组)地址/指针
用函数处理数组的工具就是指针,调用函数的过程就是让指针指向数组
- declaration中:int *ar==int ar[ ] , int ==int ar , int ar[ ]==int [ ]
- int *ar表示ar是指向int的指针,在函数声明中,int ar[ ]也表示ar是指向int的指针
eg1.
/* 用函数处理数组 对数组进行求和(单指针参数-->表明起点) */
#include <stdio.h>
#define SIZE 10
int sum(int ar[], int n);//函数declaration在main函数之前
int main(void)
{
int marbles[SIZE]={20,10,5,39,4,16,19,26,31,20};
int answer;
answer=sum(marbles, SIZE);//调用过程中:int *ar=marbles,int n=SIZE(ar-->marbles,n=SIZE)
printf("the total number of marbles is %d", answer);
return 0;
}
int sum(int *ar, int n)//函数head,body在main函数之后
{
int i;
int total;
for(i=0,total=0;i<n;i++){
total+=ar[i];//求和 total+=ar[i];
}
return total;
}
eg2.
/* 用函数处理数组 对数组进行求和(双指针参数-->表明起点和终点) */
#include <stdio.h>
#define SIZE 10
int sum(int *, int *);
int main(void)
{
int marbles[SIZE]={20,10,5,39,4,16,19,26,31,20};
int answer;
answer=sum(marbles, marbles+SIZE);//调用过程中:int *start=marbles,int *end=marbles+SIZE(start-->marbles,end-->marbles+SIZE)
printf("the total number of marbles is %d", answer);
return 0;
}
int sum(int *start, int *end)//已经定义了两个指向int类型的指针start和end
{
int total=0;
while(start<end){
total+=*start++;
}
return total;
}