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

数组基本概念

数组 -- 连续的内存空间

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

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

赋值:

全部赋值:

a5={1,2,3,4,5}

部分赋值 :

a10={1,2,3,4,5} -- 只给了前面5个 赋值,后面的没赋值的都赋值为0

a10={0} --全部初始化为0

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

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

case:

斐波那契数列:an=an-1*an-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(arr0);

for(i=0;i<len-1;++i)

for(j=0;j<len-1-i;++j)

if(arrj<arrj+1)

{

t=arrj;

arrj=arrj+1;

arrj+1=t;

}

for(i=0;i<len;++i)

printf("%d ",arri);

puts("");

return 0;

}


二维数组:

int arr23={{1,2,3},{10,20,30}};

也可以 arr23={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;

}

函数打印数组

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

//数组传参都是传数组的首地址 -- 数组名对应数组的首地址 || 数组的第一个元素地址也是数组的首地址

printArr(arr,len);

printArr(&arr0,len);

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

//API -- 函数

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


二维数组的数据类型 -- 特殊的一维数组 --这个一维数组的每一个元素就是-一个数组

作为参数时候 -- 需要大小确定 -

  • 合法写法: arr\[\]2 arr32

**延伸 -- 多维数组必须对第一个数组之外的所有元素都有边界


局部变量 和 全局变量(外部变量)

局部变量 -- 只能在函数体里面操作

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

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

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(arrj>arrj-1)

{

t=arrj;

arrj=arrj-1;

arrj-1=t;

}

}

}

void selectSort(int arr\[\],int len)

{

int i,j,k,minn;

for(int i=0;i<len-1;++i)

{ minn=arri;

j=i;

for(int j=i+1;j<len;++j)

{

if(minn<arrj)

{

minn=arrj;

k=j;

}

}

int t=arri;

arri=arrk;

arrk=t;

}

}

相关推荐
handler0114 分钟前
【算法】并查集(普通/扩展/带权)模板与例题
数据结构·c++·笔记·算法·c·图论·查并集
ss27327 分钟前
【入门OJ题解】分苹果问题(Python/Java/C 实现)
java·c语言·python
qq74223498430 分钟前
从“感知”到“决断”:测评百度伐谋产业决策智能体的端到端推理与行动机制
人工智能·算法·百度·大模型·运筹优化
你怎么知道我是队长44 分钟前
CRC校验C语言实现-CRC8、CRC16、CRC16的直接计算法、查表法
c语言·前端·javascript
淘源码d1 小时前
医院专业级PACS系统完整源码(C+VC+MSSQL)
c语言·数据库·sqlserver·源码·pacs系统·医学影像系统
huohaiyu1 小时前
深入解析Java垃圾回收机制
java·开发语言·算法·gc
LONGZETECH1 小时前
汽车仿真教学软件技术实现深度解析:从三维建模到学情数据闭环
c语言·3d·unity·架构·汽车
浮芷.1 小时前
鸿蒙PC端 TTS 并发调用问题详解:资源竞争与队列管理
算法·华为·开源·harmonyos·鸿蒙·鸿蒙系统
装不满的克莱因瓶2 小时前
掌握感知器的学习原理
人工智能·python·神经网络·算法·ai·卷积神经网络
Lsk_Smion2 小时前
力扣实训 _ [994].腐烂的橘子/图论
算法·leetcode·图论