1.一维数组的概念、定义及注意事项
1.1数组:相同类型的若干个数据组成的一个有序的集合。
1.2一维数组:数组的每个元素都是基本数据类型的变量。
1.3一维数组的定义: 数组类型 数组名[数组长度];
int a[3]; //定义了一个数组,数组名是a,数组的长度是3,这个数组只能存放3个int类型的数据。
1.4注意事项:
1)数组的长度可以是常量,也可以是常量表达式。
2)数组名的命名规则:严格按照标识符的命名规范。
3)数组名不能和其他变量同名。
4)数组的长度不可以为一个变量(C99标准要求的,Xcode编译器做了优化)。
5)数组的长度可以使用宏定义。
6)同一类型的数组和普通变量可以一起定义。
什么是初始化:给数组的元素赋初始值。
数组的初始化方法:
1)定义的同时进行初始化
格式: 数据类型 数组名[长度] = {值1,值2,……};
1)定义的同时完全初始化
int a[3] = {1,2,3};
int a[] = {2,4,6}; //数组长度根据后面大括号中数值个数决定
2)定义的同时进行部分初始化
int a[3] = {1,2};
int a[3] = {[0] = 1,[2] = 4}; // [0]表示下标为0的元素赋初值1。
2)先定义数组,后初始化
int a[4];
a[0] = 1;
a[1] = 4;
注意:1)如果定义数组后,没有进行初始化,数组中是有值的,是随机的垃圾数,所以如果想要正确使用数组应该要进行初始化。
2)对于数组来说,如果定义的同时进行了部分初始化,那么剩下的其他元素都被赋值为0。
假设有数组int a[10] = {1,2,3,4,5,6,7,8,9,10};分别正序和逆序遍历数组。
#include <stdio.h>
int main(int argc,const char * argv[]) {
//定义并初始化数组
int a[10] = {1,2,3,4,5,6,7,8,9,10};
// 正序遍历
for (int i =0; i < 10; i ++) {
printf("%d, ",a[i]);
}
printf("\n");
// 逆序遍历
for (int i =0; i < 10; i ++) {
printf("%d, ", a[9 - i]);
}
return 0;
}
// 从键盘输入数组的长度,构建一个数组,然后通过for循环从键盘接收数字给数组初始化,并使用for循环输出查看。
#include <stdio.h>
int main(int argc,const char * argv[]) {
//定义变量,储存数组长度
int len;
//提醒用户输入数组长度
printf("请输入数组长度:");
//接收用户输入的数据,赋值给数组长度
scanf("%d",&len);
// 构建一个数组
int a[len];
// 用for循环进行初始化
for (int i =0; i < len; i ++) {
// 提示用户输入数组的值
printf("\n请输入数组的第%d个值:",i + 1);
//接收用户输入的值给数组初始化
scanf("%d", &a[i]);
}
// 用for循环输出查看
for (int i =0; i < len; i ++) {
printf("%d\t", a[i]);
}
return 0;
}
1.数组在内存中占用的字节数:sizeof(数组名)
2.数组的长度 =整个数组占用的字节数 / 数组的任何一个元素在内存中占用的字节数
= sizeof(数组名) / sizeof(数组类型)
通过for循环,从键盘获取10个数,存放到数组中。然后找出10个数的最大值。
#include <stdio.h>
int main(int argc,const char * argv[]) {
// 定义数组
int a[10];
//用for循环获取10个数,放倒数组中
for (int i =0; i < 10; i++) {
// 提示用户输入
printf("请输入第%d个数:\n", i + 1);
//获取用户输入的数据并存放到数组中
scanf("%d", &a[i]);
}
// 找出最大值
//定义变量,储存最大值
int max = a[0];
for (int i =1; i <10; i ++) {
if (a[i] > max) {
max = a[i];
}
}
// 打印出最大值
printf("数组中的最大值是:%d",max);
return 0;
}
判别一个整数数组中各元素的值,若大于0,则输出该值,若小于0则输出0(判断过程用函数实现)。
#include <stdio.h>
// 定义函数,判断参数是否大于0
void isBiggerThan0(int n){
if (n > 0) {
printf("%d\t",n);
}else {
printf("0\t");
}
}
int main(int argc,const char * argv[]) {
//定义并初始化一个数组
int a[5] = {12,-87,0,23,-7765};
//判断数组中各元素是否大于0,若大于0,则输出该值,若小于0,则输出0
for (int i =0; i < 5; i ++) {
// 判断数组元素是否大于0
isBiggerThan0(a[i]);
}
return 0;
}
数组名作为函数的参数的注意点:
1.形参数组的类型和长度要和实参一致。
1)如果类型不一致,会造成错误。
2)如果形参数组的长度和实参的长度不一致,虽不会报错,但运行的结果可能与实际不相符。
2.形参数组的长度可以不写。
3.数组名作为函数参数后,数组的长度信息会丢失。
实例:数组a中存放了一个学生5门课程的成绩,求平均成绩。
#include <stdio.h>
// 定义函数,求平均值
float avg(float arr[5]){
float sum = 0;
for (int i =0; i <5; i ++) {
sum += arr[i];
}
return sum / 5;
}
int main(int argc,const char * argv[]) {
//定义成绩数组,并初始化
float score[5] = {23.4,99.5, 78, 56.43, 75};
// 求平均成绩
printf("平均成绩为:%.2f",avg(score));
return 0;
}