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;

}

}

相关推荐
qianyanwanyv3 分钟前
数据结构概念
数据结构
Logic1018 分钟前
C语言/数据结构位运算题解:异或XOR找出英雄升级系统中的“独特经验值“——只出现一次的数字
c语言·数据结构·数组·位运算·时间复杂度·算法题·异或性质
不会就选b13 分钟前
算法日常・每日刷题--<贪心>15
算法
鹿角片ljp26 分钟前
Prompt Cache、Token 成本与 Plan Compiler 的工程设计
java·python·算法
萧西待水7 小时前
奥赛一本通 1447 靶形数独
算法·深度优先
梦帮科技9 小时前
AI 音乐产品的发布工程:验证门、数据发布、回滚与生产运维纪律
数据结构·数据库·架构·node.js·音视频·动态规划·推荐算法
泯泷9 小时前
那段文字是谁删的?Yjs 14 正式版之前,一套删除归属方案的实现与边界
前端·javascript·算法
hold?fish:palm9 小时前
34 合并K个升序链表
javascript·算法·链表
C++ 老炮儿的技术栈10 小时前
我们在设计tcp协议时,要传一个字符串过去,报文:头十长度十内容,是否要把‘\0‘也填入,长度是否包含‘\0‘
开发语言·数据结构·c++·mfc·c
Navigator_Z11 小时前
LeetCode //C - 1252. Cells with Odd Values in a Matrix
c语言·算法·leetcode