C语言---一维数组、二维数组:基本用法、初始化案例;冒泡排序法、简单排序法。
1.数组的引用,及基本用法
#include<stdio.h>
/*
数组的引用,及基本用法
*/
int main(){
int a[10];//数组的空间大小;
int data;//定义一个变量;
for(data=0;data<10;data++){
a[data] = data+2023;
}
puts{"数组初始化完毕"};
for(data=0;data<10;data++){
printf("%d",a[data]);
}
puts("done");
return 0;
}
2.数组计算大小和各种初始化
#include<stdio.h>
/*
数组计算大小和各种初始化
*/
int main(){
int data;
int array[]={11,20,30,55,85,66};
int size;
//把整个数组的大小,除以数组中的一个元素的大小,就可以获得总个数
size = sizeof(array)/sizeof(array[0]); //sizeof是一个关键字,能计算对应括号内数据的内存空间大小
printf("array的个数有:%d\n",size);
for(data=0;data<size;data++){
printf("address:%p, data:%d\n",&array[data],array[data]);
}
return 0;
}
3.对十个数组元素依次赋值为:0,1,2,3,4,5,6,7,8,9;要求按顺序和逆序输出。
#include<stdio.h>
/*
对十个数组元素依次赋值为:0,1,2,3,4,5,6,7,8,9;要求按顺序和逆序输出
*/
int main(){
int arr[10];
int i;
for(i=0;i<10;i++){
printf("顺序输出为:%d\n",arr[i]);
}
for(i=9;i>=0;i--){
printf("逆序输出为:%d\n",arr[i]);
}
return 0;
}
4.利用冒泡排序法,对一维数组的数据进行排序
要求:从大到小、从小到大
#include<stdio.h>
/*
利用冒泡排序法,对一维数组的数据进行排序
要求:从大到小、从小到大
*/
int main(){
int array[] = {1,5,3,7,9,0,6,4,2,8,0,0};
int i;
int j;
int tamp;
int len = sizeof(array)/sizeof(array[0]); //进行for循环之前,先把它计算好,这样可以提高计算效率;
for(i=0;i<len-1;i++){
for(j=0;j<len-1-i;j++){
if(array[j]>array[j+1]){ // if(array[j]<array[j+1]) 从小到大排序的写法;
tamp = array[j];
array[i] = array[j+1]; /*利用tamp作为第三方桥梁,进行数据对比大小,然后进行排序*/
array[j+1] = tamp;
}
}
}
for(i=0;i<len;i++){
printf("%d ",array[i]);
}
return 0;
}
5.利用简单排序法,对数组进行排序。
对于题目的要求,可以先画个草图进行分析,接着再写逻辑原理。
#include<stdio.h>
/*
利用简单排序法,对数组进行排序。
对于题目的要求,可以先画个草图进行分析,接着再写逻辑原理
*/
int main(){
int arr[] = {11,63,56,21,51,00,820,33};
int i;
int j;
int tamp;
int len = sizeof(arr)/sizeof(arr[0]);
//利用简单选择排序法,对数组进行排序;从大到小、从小到大
for(i=0;i<len-1;i++){
for(j=i+1;j<len;j++)
//从大到小排序
if(arr[i] < arr[j]){ //从小到大的写法:if(arr[i] > arr[j])
tamp = arr[i];
arr[i] = arr[j];
arr[j] = tamp;
}
}
//显示题目要求的效果
for(i=0;i<len;i++){
printf("%d ",arr[i]);
}
return 0;
}
6.二维数组基本用法
#include<stdio.h>
/*
二维数组基本用法
*/
int main(){
int arr[2] = {1,2};//这是一维数组
int arr[2][3] = {{111,222,333},{444,555,666}};//这是二维数组
int arr2[2][3] = {1,2,3,4,5,6};//这是二维数组的另一种写法
int i,j;//定义两个变量
for(i=0;i<2;i++){
for(j=0;j<3;j++){
printf("%d %p\n",arr[2][3],&arr[2][3]); //arr数组取值,&取地址
printf("%d %p\n",arr2[2][3],&arr2[2][3]);//arr2数组取值,&取地址
}
putchar('\n');//换行显示,注意用的是:'英文单引号'
}
return 0;
}
7.二维数组初始化:(注意可以不写行,但是不能不写列)
它的作用是只对各行的第1列的元素赋初值,其余元素自动为0。
案例一 ;例如:int[3][4]={{1},{2},{3}};
赋初值后的元素显示效果:
1 0 0 0
2 0 0 0
3 0 0 0
#include<stdio.h>
/*
二维数组初始化:(注意可以不写行,但是不能不写列)
它的作用是只对各行的第1列的元素赋初值,其余元素自动为0。
案例一 ;例如:int[3][4]={{1},{2},{3}};
赋初值后的元素显示效果:
1 0 0 0
2 0 0 0
3 0 0 0
*/
int main(){
int i,j;//定义两个变量
int[3][4]={{1},{2},{3}};
for(i=0;i<3;i++){
for(j=0;j<4;j++){
printf("%d ",arr[3][4]); //arr数组取值
}
putchar('\n');//换行显示,注意用的是:'英文单引号'
}
return 0;
}
8.案例2:二维数组中找出最大值,并说明它在第几行第几列;
意思就是:找出最大值以及下标
#include<stdio.h>
/*
案例2:二维数组中找出最大值,并说明它在第几行第几列;
意思就是:找出最大值以及下标
*/
int main(){
int arr[3][4] = {11,45,26,91,120,630,520,554,21,511,996,23};
int hang,lie;
int i,j;
int max;
for(i=0;i<3;i++){
for(j=0;j<3;j++){
printf("%d \t",arr[i][j]); // \t
}
printf("\n");
}
max = arr[0][0];//数值最大的那个数,先记录第一个数值最大的数在纸上
for(i=0;i<3;i++){
for(j=0;j<4;j++){
if(max < arr[i][j]){ //如果纸上记录的数小于当前的数,则重新写入.
max = arr[i][j];
hang = i;
lie = j;
}
}
}
printf("其中在第%d行第%d列的数%d最大\n",hang+1,lie+1,max);
return 0;
}