数组
有一维数组和二维数组
具体有哪些呢,且听我娓娓道来
一维数组
这些想必大家都不是想看到的吧:
一维数组是一种数据结构,它由相同数据类型的元素组成,并且这些元素在内存中是连续存储的。每个元素可以通过索引来访问,索引从0开始递增。它们经常用于存储和处理大量的数据
所以直接看代码:
int a[]; \\是的你看懂了吗?
char a[]; \\没看懂没关系,这些都不重要
double a[]; \\框框([])里面的是要放你数组的大小,比如 double a[32];
....... \\
上面的看懂了我们再看一下数组的遍历 不知道你们看懂没,我自己是懂得
#include <stdio.h>
int main() {
int arr[5] = {1, 2, 3, 4, 5} \\我定义了一个数组 并给他赋值 数组大小为5
int i; \\定义一个变量i,用来遍历数组
for (i = 0; i < 5; i++) { \\ 通过for循环遍历数组中的每一个值
printf("%d ", arr[i]); \\打印遍历过的每一个值
}
return 0; \\ 返回值
}
为了验证最上面的一段干干的文字 我们继续打印一下数组中的每个值的地址 验证一下是否是连续的:
#include <stdio.h>
int main() {
int arr[5] = {1, 2, 3, 4, 5};
int i;
for (i = 0; i < 5; i++) {
printf(" arr[%d]的地址 = %p\n", i, &arr[i]);
}
return 0;
}
交给你们验证吧 我是验证过 莫得问题啊!!!!!!
这当中还有一些 赋值上的问题,我在这也浅浅的提一下:
讲的很通俗的例子:给大家讲一下,顺带自己加深一下印象,见怪不怪的写法
这里只写部分代码:int i; one:\\第一种方法 int a[7]; for(i=0;i<7;i++){ a[i] = i + 998; } two:\\第二种方法 int arr[7] = {1, 2, 3, 4, 5,6,7}; thre:\\ ...不要慌张 int arr[7] = {1, 2, 3, 4}; \\也是对的哦 ...... int arr[7];\\这个也是对的 里面都是0
冒泡排序法(大至小)
#include <stdio.h>
int main()
{
int i;
int j;
int a[] = {34,5,456,22};
int size;
int tmp;
size = sizeof(a)/sizeof(a[0]);
for(i=0;i<size-1;i++){
for(j=0;j<size-1-i;j++){
if(a[j]<a[j+1]){
tmp = a[j];
a[j] = a[j+1];
a[j+1] = tmp;
}
}
}
for(i=0;i<size;i++){
printf("%d ",a[i]);
}
}
简单排序法(也叫冒泡排序法)(大至小)
#include <stdio.h>
int main()
{
int i;
int j;
int a[] = {34,5,456,22};
int size;
int tmp;
size = sizeof(a)/sizeof(a[0]);
for(i=0;i<size-1;i++){
for(j=0;j<size;j++){
if(a[j]<a[j+1]){
tmp = a[j];
a[j] = a[j+1];
a[j+1] = tmp;
}
}
}
for(i=0;i<size;i++){
printf("%d ",a[i]);
}
}
选择排序法
#include <stdio.h>
int xuanze(int a[],int size)
{
int min;
int i;
int j;
int tmp;
for (i = 0; i < size-1; i++){
min = i;
for (j = i+1; j < size; j++) {
if (a[j] < a[min]){
min = j;
// 交换找到的最小元素和已排序序列的最后一个元素
tmp = a[min];
a[min] = a[i];
a[i] = tmp;
}
}
}
}
int main()
{
int i;
int a[]={23,5,768,2,1235};
int size = sizeof(a) / sizeof(a[0]);
xuanze(a,size);
for(i = 0; i < size;i++){
printf("%d ",a[i]);
}
}
二维数组
现在我们讲讲二维数组:
先上废话:二维数组是由多个一维数组组成的数据结构,每个一维数组称为这个二维数组的行,而每个元素则被称为该行的列。简而言之,二维数组就是一个表格或矩阵,其中的元素可以通过行和列的索引来访问
想必大家不喜欢这种废话
话不多说先上代码:
#include <stdio.h>
int main() {
// 创建一个 3 行 4 列的二维数组
int arr[3][4] = {
{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12}
};
// 访问和输出数组中的元素
printf("数组元素:\n");
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 4; j++) {
printf("%d ", arr[i][j]);
}
printf("\n"); \\换行
}
// 修改数组中的元素
arr[1][2] = 100;
// 再次访问和输出数组中的元素
printf("修改后的数组元素:\n");
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 4; j++) {
printf("%d ", arr[i][j]);
}
printf("\n"); \\换行
}
return 0;
}
这里我们输出二维数组用到了for循环的嵌套,一环套一环,“套马的汉子,你威武雄壮.....”
这里不知道大家理解的怎么样了,没理解,是吧,没关系,去找我的老师,“上官社长”,我会 但是我教不会你,这没关系,可以找我老师😁教。
这里还有一些和一维数组一样的见怪不怪的问题哈,不要慌张往上看 ^
二维数组和一维数组有很多相通的地方,大家遇到了前往不要慌
冲
这里我也是直接copy我老师HuiChang详细
的一小部分资料
这里还有一个非常非常非常重要的知识点
这里的二维数组a[i][j]; i可以不赋值,但是j一定要赋值
这个可不敢忘记哈
最后我把老师给出的题目,在这里给大家做一下,感兴趣的小伙伴可以做一下哦!!
#include<stdio.h>
int main()
{
int i;
int j;
int max;
int hang;
int lie;
int a[5][6] = {
{1, 2, 3, 4},
{5,63, 7, 8},
{9, 10, 311, 12},
{53, 63, 7888, 548},
{95,14,311,122,87}
}; //这个样子大家千万不要觉得奇怪,没有问题的啊!见怪不怪
max = a[0][0];
for(i=0;i<5;i++){
for(j=0;j<6;j++){
printf("%d",a[i][j]);
}
}//不放心我们先打印一下
for(i=0;i<5;i++){
for(j=0;j<6;j++){
if(max < a[i][j]){
max = a[i][j];
hang = i;
lie = j;
}
}
}
printf("最大的数是%d,他在第%d行,%d列", max,hang+1,lie+1);
}
好啦 兄弟们搞起