目录
一、数组的概念
二、数组的类型
三、一维数组
3.1 一维数组的创建
#include <stdio.h>
int main()
{
int arr1[10];//定义可存放10个整型的一维数组
char arr2[4];//定义可存放4个字符的一维数组
float arr3[6];//定义可存放6个单精度浮点型的一维数组
//...
return 0;
}
3.2 一维数组的初始化
#include <stdio.h>
int main()
{
int arr1[10] = { 1, 2, 3, 4, 5, 6 ,7, 8, 9,10 };//完全初始化
int arr2[10] = { 0 };//不完全初始化
int arr3[] = { 1, 2, 3, 4 };//省略数组大小的初始化,数组大小为4
return 0;
}
3.3 一维数组的访问
//一维数组的输入和输出
#include <stdio.h>
int main()
{
int arr[10] = { 0 };
int sz = sizeof(arr) / sizeof(arr[0]);
int i = 0;//循环变量
for (i = 0; i < sz; i++)
{
scanf("%d", &arr[i]);
printf("%d ", arr[i]);
}
return 0;
}
3.4 一维数组在内存中的存储
//验证一维数组在内存中的存储方式
#include <stdio.h>
int main()
{
char arr[5] = { '0', '1', '2', '3', '4'};//字符数组,每个元素占一个字节
int sz = sizeof(arr) / sizeof(arr[0]);
int i = 0;//循环变量
for (i = 0; i < sz; i++)
{
printf("arr[%d]=%p\n", i, &arr[i]);
}
return 0;
}
四、二维数组
4.1 二维数组的创建
#include <stdio.h>
int main()
{
int arr[3][5];//定义三行五列的整型二维数组
char arr2[4][6];//定义4行6列的字符二维数组
float arr3[2][4];//定义2行4列的浮点数二维数组
//...
return 0;
}
4.2 二维数组的初始化
#include <stdio.h>
int main()
{
int arr1[3][4] = { { 1, 2, 3, 4 }, { 2, 3, 4, 5 }, { 3, 4, 5, 6 } };//完全初始化
int arr2[3][4] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };//完全初始化
int arr2[3][4] = { { 1 }, { 2, 3 }, { 4, 6, 8 } };//不完全初始化
int arr3[3][4] = { 0, 1, 2 };//不完全初始化
int arr4[][4] = { 1, 2 };//数组为1行4列
int arr5[][4] = { { 1 }, { 3 }, { 2 , 5 } };//数组为3行4列
return 0;
}
4.3 二维数组的访问
//二维数组的输入和输出
#include <stdio.h>
int main()
{
int arr[3][4] = { 0 };
int i = 0;//循环变量
for (i = 0; i < 3; i++)
{
int j = 0;//循环变量
for (j = 0; j < 4; j++)
{
scanf("%d", &arr[i][j]);
printf("%d ", arr[i][j]);
}
//换行
printf("\n");
}
return 0;
}
4.4 二维数组在内存中的存储
//验证二维数组在内存中的存储方式
#include <stdio.h>
int main()
{
char arr[2][3] = { { '1', '2', '3' }, { '2', '3', '4' }};//字符数组,每个元素占一个字节
int i = 0;//循环变量
for (i = 0; i < 2; i++)
{
int j = 0;//循环变量
for (j = 0; j < 3; j++)
{
printf("arr[%d][%d]=%p\n", i, j, &arr[i][j]);
}
}
return 0;
}
五、变长数组
六、sizeof计算数组的大小
七、字符串数组
7.1 字符串数组的创建
7.2 字符串数组的初始化
#include <stdio.h>
int main()
{
//一维字符串
//方法一:用双引号初始化
char arr1[4] = "abc";//完全初始化 a b c \0
char arr2[4] = "ab";//不完全初始化 a b \0
char arr3[] = "ab"//字符串数组大小为3
//方法二:用大括号的初始化
char arr4[4] = { 'a', 'b', 'c', '\0' };//完全初始化
char arr5[4] = { 'a', 'b', '\0'};//不完全初始化
char arr6[] = { 'a', 'b', '\0'};//字符串数组大小为3
char arr7[4] = { 'a', 'b', 'c', 'd' };//不是字符串数组,因为数组中没有\0
char arr8[4] = { 'a', 'b'};//不是字符串数组,因为数组中没有\0
char arr9[] = { 'a', 'b'};//不是字符串数组,因为数组中没有\0
return 0;
}
7.3 字符串数组的输入
#include <stdio.h>
int main()
{
char arr1[10] = { '0'};
//输入方法一:
scanf("%s", arr1);//"hello world",只会读取hello
//输入方法二:
gets(arr1);//"hello world",全部读取
return 0;
}
7.4 字符串数组的输出
#include <stdio.h>
int main()
{
char arr1[10] = "abcde";
//输出方法一:
printf("%s\n", arr1);//不会自动换行,打印时加\n
//输出方法二:
puts(arr1);//会自动换行
return 0;
}
7.5 字符串数组经典应用
//【实现:多个字符从两端移动,向中间汇聚】
//##########################
//Y########################!
//Yo######################!!
//You####################!!!
//You ##################!!!!
// ...
//You are the best!!!!!!!!!!
#include <stdio.h>
#include <windows.h>
#include <stdlib.h>
int main()
{
char arr1[] = "You are the best!!!!!!!!!!";
char arr2[] = "##########################";
//计算数组arr2的元素个数
int sz = sizeof(arr2) / sizeof(arr2[0]);
//再屏幕上先打印数组arr2的内容
printf("%s\n", arr2);
int left = 0;
int right = sz - 2;//字符串的末尾隐藏着一个\0
while (left <= right)
{
//睡眠1000毫秒
Sleep(700);//sleep的第一个字母大写!
arr2[left] = arr1[left];
arr2[right] = arr1[right];
//清屏
system("cls");//system函数是库函数,执行系统命令,cls清理控制台屏幕
//再次在屏幕上打印数组arr2
printf("%s\n", arr2);
//调整
left++;
right--;
}
return 0;
}
八、指针数组
8.1 指针数组
#include <stdio.h>
int main()
{
int arr1[] = { 1, 2, 3 };
int arr2[] = { 2, 3, 4 };
int arr3[] = { 3, 4, 5 };
int* arr[3] = { arr1, arr2, arr3 };//一维指针数组
//由于数组名是数组首元素的地址,每个数组首元素的地址是int*类型的
//所以arr指针数组语法中的tpye部分要写成int*
return 0;
}
8.2 指针数组模拟实现二维数组
#include <stdio.h>
int main()
{
int arr1[] = {1,2,3,4,5};
int arr2[] = {2,3,4,5,6};
int arr3[] = {3,4,5,6,7};
int* parr[3] = {arr1, arr2, arr3};//一位指针数组
int i = 0;
int j = 0;
for(i=0; i<3; i++)
{
for(j=0; j<5; j++)
{
printf("%d ", parr[i][j]);
}
printf("\n");
}
return 0;
}
九、函数指针数组
9.1 函数指针数组
#include <stdio.h>
int Add(int x, int y)
{
//...
return x + y;
}
int Sub(int x, int y)
{
//...
return x - y;
}
int Mul(int x, int y)
{
//...
return x * y;
}
int main()
{
int (*arr[3])(int, int) = { Add, Sub, Mul };//函数指针数组
//arr是数组名,[3]表示数组大小
//int ret = (arr+1)(2, 3);//err
//int ret = (*(arr + 1))(2, 3);
int ret = arr[1](2, 3);//下标直接访问
printf("%d\n", ret);
return 0;
}
9.2 转移表
#include <stdio.h>
int add(int a, int b)
{
return a + b;
}
int sub(int a, int b)
{
return a - b;
}
int mul(int a, int b)
{
return a * b;
}
int div(int a, int b)
{
return a / b;
}
int main()
{
int x, y;
int input = 1;
int ret = 0;
int(*p[5])(int x, int y) = { 0, add, sub, mul, div }; //转移表
do
{
printf("*************************\n");
printf(" 1:add 2:sub \n");
printf(" 3:mul 4:div \n");
printf(" 0:exit \n");
printf("*************************\n");
printf("请选择:");
scanf("%d", &input);
if ((input <= 4 && input >= 1))
{
printf("输⼊操作数:");
scanf("%d %d", &x, &y);
ret = p[input](x, y);
printf("ret = %d\n", ret);
}
else if (input == 0)
{
printf("退出计算器\n");
}
else
{
printf("输⼊有误\n");
}
} while (input);
return 0;
}
十、结构体数组
//首先声明结构体类型
struct stu
{
char name[20];
int age;
};
//定义结构体数组,并初始化
struct stu mate[3]={{"Allen",18},{"Smith",19},{"Grace",18}};
十一、一维数组_例题
[NOIP2013]记数问题_牛客题霸_牛客网 (nowcoder.com)
逆序输出_牛客题霸_牛客网 (nowcoder.com)
N个数之和_牛客题霸_牛客网 (nowcoder.com)
最高分与最低分之差_牛客题霸_牛客网 (nowcoder.com)
争夺前五名_牛客题霸_牛客网 (nowcoder.com)
有序序列合并_牛客题霸_牛客网 (nowcoder.com)
有序序列判断_牛客题霸_牛客网 (nowcoder.com)
有序序列插入一个整数_牛客题霸_牛客网 (nowcoder.com)
序列中删除指定数字_牛客题霸_牛客网 (nowcoder.com)
序列中整数去重_牛客题霸_牛客网 (nowcoder.com)
小乐乐查找数字_牛客题霸_牛客网 (nowcoder.com)
筛选法求素数_牛客题霸_牛客网 (nowcoder.com)
十二、二维数组_例题
回型矩阵_牛客题霸_牛客网 (nowcoder.com)
蛇形矩阵_牛客题霸_牛客网 (nowcoder.com)
井字棋_牛客题霸_牛客网 (nowcoder.com)
扫雷_牛客题霸_牛客网 (nowcoder.com)
十三、字符数组_例题
[NOIP2018]标题统计_牛客题霸_牛客网 (nowcoder.com)
[NOIP2008]笨小猴_牛客题霸_牛客网 (nowcoder.com)
添加逗号_牛客题霸_牛客网 (nowcoder.com)
字符串操作_牛客题霸_牛客网 (nowcoder.com)
简写单词_牛客题霸_牛客网 (nowcoder.com)
十四、图片
本篇已完结。。。。。。