一维数组的思维导图详细介绍:
一、宏定义、宏函数
1、语法:#define 标识符 常量表达式或常量
注意:始终只能占一行,后面没有;表示符全大写
删除宏定义格式:#undef 标识符
#define PI 3.1415
#undef PI
2、宏定义函数名
#define TOTAL(x) x*x*x+1
3、宏函数
格式:#define 宏名(参数表)字符串
宏定义不只是进行简单的字符串替换,还可以进行参数替换
宏函数调用:宏名(实参列表)
//宏函数
int main(){
int a;
a = TOTAL(3); //TOTAL(3) = 3*3*3+1
printf("%d",a);
}
4、多行宏函数
如果宏函数有多行,可以使用\、(转义字符)来进行多行定义
\ 表示多行还没有结束
#define IS_SUCCESS(code) if((code)==200) printf("200\n") //方法一
//方法二、
#define IS_SUCCESS(code)\
if((code)==200)\
printf("200\n")\
二、数组越界
数组下标变量的取值超过了初始定义时的大小,导致对数组元素的访问出现在数组的范围之外
1、数组是有固定长度的,如果获取超出数组的长度,就称为数组越界;
2.、越界的结果:会拿到不确定的值或程序报错
//数组越界
int arr[6] = {11,12,13,14,15,16};
int i;
for(i=0;i<6;i++)
{
scanf("%d",&arr[i]);
}
for(i=0;i<6;i++)
{
printf("%d ",arr[i]);
}
三、数组名的用途
1、利用sizeof(数组名)可以统计出整个数组占用内存空间大小
2、可以计算出数组元素个数
3、可以利用数组名,获取数组首地址
4、数组名是常量不可以修改
四、将数组传递给函数
语法:主调函数里面:被调函数(实参数组名,实参数组大小);
intput(a,N)
被调函数实现:被调函数名(形参函数名[],形参数组大小);函数名(形参 类型 ,形参类型)
#include<stdio.h>
int swap(int a,int b)
{
int temp;
temp = a;
b = temp;
return 0;
}
int main()
{
int arr[6] = {1,2,3,4,5,6};
int i;
printf("交换前:\n");
for(i=0;i<6;i++)
{
printf("%d",arr[i]);
}
swap(arr[1],arr[2]); //数组的元素和变量的用法是一样的 ,值是单向传递的,实参传给形参。
printf("\n");
printf("交换后:\n");
for(i=0;i<6;i++)
{
printf("%d",arr[i]);
}
return 0;
}
#代码是上面,但是结果没有交换
五、修改数组
跟交换基本上结果是一样的;
#include<stdio.h>
//将数组传递给函数 ,
//函数是属于形参,主调函数属于实参
int modify_arr(int a[],int length,int num) {
//将一个数组修改为11 这里的11可以直接赋值,或者写num,在主调函数中赋值
a[0] = num;
return 0;
}
int modify_all(int a[],int length)
{
//在函数里运用for循环将整个数组的各个值+10
int i;
for(i=0;i<length;i++){
a[i] += 10;
}
return 0;
}
int printf_arr(int a[],int length){
int i;
//打印出这个数组值
for(i=0;i<length;i++){
printf("%d ",a[i]);
}
printf("\n");
return 0;
}
int main(){
int arr[6] = {1,2,3,4,5,6};
//上面函数返回的打印值
printf_arr(arr,6);
//修改的意思
modify_arr(arr,6,·);
//将第一个修改的数组的值打印出来
printf_arr(arr,6);
modify_all(arr,6);
//打印出+10之后的值
printf_arr(arr,6);
return 0;
}
六、逆置数组
将整个数组中的元素逆置,并无关数组中元素自身的大小顺序
例如输入1 3 2 则输出2 3 1,并不会输出1 2 3或3 2 1
#include<stdio.h>
//逆置数组
//第一种
int printf_nizhi(int a[],int length)
{
int i;
for(i=4;i>=0;i--){
printf("%d ",a[i]);
}
printf("\n");
return 0;
}
int main()
{
int i;
int q;
int arr[5] = {10,11,12,13,14};
printf_nizhi(arr,5);
//第二种方法
int all[5] = {14,13,12,11,10};
for(i =0;i<5;i++){
arr[i] = all[i];
printf("%d ",arr[i]);
}
return 0;
}
七、冒泡排序
是一种计算机科学领域较简单的排序算法,例如将5个数字,按由小到大排列
//冒泡排序
#include<stdio.h>
#define N 6
int pop_arr(int a[],int length)
{
int i,j;
int temp;
for(i=0;i<length-1;i++)
{
for(j=0;j<length-1-i;j++)
{
if(a[j]>a[j+1])
{
temp = a[j];
a[j] = a[j+1];
a[j+1] = temp;
}
}
}
return 0;
}
int printf_arr(int a[],int length)
{
int i;
for(i=0;i<length;i++)
{
printf("%d ",a[i]);
}
return 0;
}
int main(){
int arr[N] = {9,2,1,4,7,3};
pop_arr(arr,N);
printf_arr(arr,N);
return 0;
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。