C语言复习--数组,函数

数组基本概念

数组 -- 连续的内存空间

变量四要素:类型 变量名 /标识符  值 内存地址

//注:数组=每个元素没有变量名,只有数组名 -- 用下标法访问他的具体元素

赋值:


全部赋值:
a[5]={1,2,3,4,5}

部分赋值 :
a[10]={1,2,3,4,5} -- 只给了前面5个 赋值,后面的没赋值的都赋值为0
a[10]={0} --全部初始化为0

a[]={45,55,5,667,98,88}   -- 自动分配内存空间

-- 可以用  关键字  sizeof()   求出他的额数组大小 -- size=sizeof (a)/sizeof(a[0]),单位是字节,比如int -- 4 bit

case:
斐波那契数列:a[n]=a[n-1]*a[n-2]

-------------------------------------
数组经典应用 -- 冒牌排序

 核心 -- 两层循环比较  --每一轮比较拿到一个最值,经过n-1轮就得到所有的排序

#include<stdio.h>

int len,i,j,t;
int main()
{
int arr[]={8,663,9852,45,3,48};
len= sizeof(arr)/sizeof(arr[0]);
for(i=0;i<len-1;++i)
    for(j=0;j<len-1-i;++j)
        if(arr[j]<arr[j+1])
        {
            t=arr[j];
            arr[j]=arr[j+1];
            arr[j+1]=t;
            
        }
    
for(i=0;i<len;++i)
    printf("%d ",arr[i]);
puts("");

    
return 0;
}


---------------------------------------


二维数组:


int arr[2][3]={{1,2,3},{10,20,30}};
也可以 arr[2][3]={1,2,3,10,20,30};


【初始化问题】


 1.可以不写行,但是一定要写列 -- a[][4] --这样是可以的
 2.二维数组也可以向一维数组一样部分赋值,其他用0补全

test:3*4的矩阵 编程求出其中最大的元素的值已经他的行号列号
/t  -- 水平制表符

 

函数:

为什么要用函数:

1.避免代码冗长
2.模块化的设计思路
3.按照功能划分

报错undefine  -- 函数未定义


函数三要素:

函数名 -- 体现功能

参数列表  -- 类型和个数根据 需求来定义  

返回值 --  业务需求

int func(int x) //形式参数 -- 需要包含变量名,类型
{}


定义空函数  -- 占位置 --先把大概用到的功能函数都写出来,然后完善函数 (功能)


函数定义上 -- 可以当成他的表达式 -- 利用函数的返回值
------------------------------------------------------------------------------

形参和实参


形参和实参 -- 值相同但是地址不同  -- 修改是形参,实参不受影响

形参 -- 只传递数值

实参 -- 传递地址


#include<stdio.h>

void sSwitch(int *x,int *y)
{
    int t=*x;
    *x=*y;
    *y=t;    
}
int main()
{
   int x,y;
   scanf("%d%d",&x,&y);
   sSwitch(&x,&y);
   printf("x=%d, y=%d",x,y);
    return 0;
}

------------------------------------------------------------------------------

局部变量  -- 在{}内的变量  -- 存放在栈空间 -- 
生命周期 -- 只有被调用的时候才为形参申请内存,调用结束就释放内存


注意 -- if实现的函数部分在被调用之后,会触发警报 ,要在调用前面声明即可


函数的嵌套 -- 函数调用过程也调用其他函数

case1: 输入4个数字,返回他们的最大值

int getMaxFromTwo(int x,int y)
{
    return x>y?x:y;
}

int getMaxFromFour(int x,int y,int a,int b)
{
    int max =getMaxFromTwo(x,y);
    max=getMaxFromTwo(max,a);
    return getMaxFromTwo(max,b);
    
}


//函数递归 -- 自己调用自己 
需要有一个退出条件
//递归求阶乘
int jic(int a)
{
    if(a==1)return 1;
    return jic(a-1)*a;    
}


//注意 -- long int 也是 4个字节

#include<stdlib.h>

int jic(int a)
{    
    if(a>=17)
    {
        printf("越界\n");
        exit(-1);
    }
    if(a==1)return 1;
    return jic(a-1)*a;    
}

函数打印数组

//注意 -- 形参中不存在数组的概念  -- 即便约定了(arr[3]) --也是传递首地址 --8字节

//数组传参都是传数组的首地址 --  数组名对应数组的首地址 ||  数组的第一个元素地址也是数组的首地址
    printArr(arr,len);
    printArr(&arr[0],len);

test: A,B两班同学,分别求出平均分

//API -- 函数

//局部变量要 初始化,不然编译器可能会默认大数

---------------------------------------------------------------
二维数组的数据类型   -- 特殊的一维数组 --这个一维数组的每一个元素就是-一个数组
作为参数时候 -- 需要大小确定  -
- 合法写法: arr[][2]  arr[3][2]
**延伸  -- 多维数组必须对第一个数组之外的所有元素都有边界

---------------------------------------------------------------

局部变量 和 全局变量(外部变量)
局部变量  -- 只能在函数体里面操作

全局变量  -- 在整个程序都可操作  -- 提供便捷性,但是有一定风险

//注意: 全局变量一般写在所有函数之前,不然会前面的函数调用报错

test1:-班级10个同学,封装一个函数  -- 获得班上同学的平均分,最高分,最低分

要求输入10个数,找出最大,最小值的下标


冒泡排序和选择排序


void bubbleSort(int arr[],int len)
{
    int i,j,t;
    for(i=0;i<len-1;++i)
    {
        for(j=len-1;j>i;--j)
            if(arr[j]>arr[j-1])
            {
                t=arr[j];
                arr[j]=arr[j-1];
                arr[j-1]=t;
            }
        
        
    }
    
    
}

void selectSort(int arr[],int len)
{
    int i,j,k,minn;
    for(int i=0;i<len-1;++i)
    { minn=arr[i];
      j=i;
        for(int j=i+1;j<len;++j)
        {
            if(minn<arr[j])
            {
                minn=arr[j];
                k=j;                
             }        
        }
        int t=arr[i];
        arr[i]=arr[k];
        arr[k]=t;
                
    }
    
    
}


 

  • 25
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值