C语言B站学习之路 (二)关系运算与数组和函数

关系运算符和表达式

关系运算符是双目运算符,有两个量比较的,结合性均为左结合,低于算术运算符,高于赋值运算符

逻辑运算符

&&与运算,左结合性
|| 或运算,左结合性
!非运算,右运算
优先级:!>&&>||

if语句

if(表达式)语句
if-else:
if(表达式)
语句1
else
语句二
if-else-if形式
if(表达式1)
语句一
else if(表达式2)
语句2
else if

else

if语句注意问题

if关键字之后均为表达式,通常是逻辑表达式或关系式表达式,也可以是赋值表达式甚至是一个变量。
条件判断表达式必须需用括号括起来。

if语句的嵌套

当if语句中的执行语句又是if语句时,则构成了if语句嵌套的情形。

条件表达式 ? :

表达式1?表达示2:表达式3
如果表达式1为真,则取表达式2,否则取表达式3。右结合性,是三目运算符。

switch语句

switch(表达式)
{
case 常量表达式:语句,允许有多个语句不用大括号括起来
}

循环控制结构程序

C语言常用的程序设计模型,打扎实。
在给的条件成立时,反复执行某程序段,直到条件不成立为止。
1)goto语句和if语句
2)while语句
3)do-while语句
4)for语句
goto 语句标号:
while语句中的表达式一般是关系表示或逻辑表达式,只要表达式的值为真(非0)即可继续循环
do
语句
while(表达式);
for语句使用最为灵活,for(循环变量赋初值;循环条件;循环变量增量)语句
for循环中的表达四1,2,3都可以省,但是分号不能省。
for(;;)相当于while(1)死循环
表达式1和表达式3可以实一个简单表达式也可以是多个表达式,表达式2可以是关系表达式或逻辑表达式或数值表达式或字符表达式

循环的嵌套,循环里面有循环,先执行哪一步,再执行哪一步

break和continue语句

break语句不能用于循环语句和switch语句之外的任何语句中。程序是调试出来的。例如windows系统打了10年的补丁还是有漏洞,没有完美的程序,要修正和改出来。
break是结束整个循环不在判断是否成立,continue只结束本次循环。

#include"conio.h"

getch()//让程序停一下,拍任意键继续
putch()//显示输入的字符

fabs()是求绝对值

数组

具有相同类型,保留原来的数据,有序的集合。数组中的每一个数据称为数组元素和下标变量。下标从0开始。数据数组,字符数组,指针数组。

一维数组

int a [10];
定义了一个整型数组,数组名为a,有10个元素,都是整型变量。

一维数组在内存中的存放

CPU从内存调用数据,内存从硬盘调用数据。

一维数组元素的引用

下标可以是整型常量或整型表达式。,只能逐个使用下标变量,不能一次使用整个数组。

一维数组元素的引用

int a[10];
t=a[6];
引用数组a中序号为6不是数组的长度是下标变量。

一维数组元素初始化

类型说明符 数组名[常量表达式]={值,值,…,值}这种在编译时赋值,节省运行时间。可以只给一部分元素赋值,未赋值的全为零,若都不赋初值,则赋乱码。也可以写成
int a []={1,2,3,4,5}

动态赋值

让用户赋值。

冒泡法(起泡法)

如果有n个数,则要进行n-1躺比较。在第一趟比较重要进行n-1次。一般要用两趟循环。

二维数组

float a [3] [4]
类型说明符 数据名 [常量表达式] [常量表达式]
3X4,三行四列的二维数组。
在硬件储存器中,二维数组按行排列,先存第一行,再存第二行,地址上是连续的。
(1)直接分行给二维数组赋初值:
int a [3] [4] ={{1,2,3,4},{5,6,7,8},{9,10,11,12}};
(2)可以将所有数据写在一个花括弧内,按数组排列顺序对各元素赋初值。
int a [3] [4] ={1,2,3,4,5,6,7,8},9,10,11,12};
(3)可以对部分元素赋初值。
(4)如果对全部元素都赋初值,则定义数组时对第一维的长度可以不指定,但第二维的长度不能省。

多维数组的定义

float a [2] [3] [4];
多元数组元素在内存中的排列顺序:第一维的下标变化最慢,最右边的下标变化最快。

二分法

对于函数f(x)如果存在实数c,当x=c时,若f©=0,那么把x=c叫做函数f(x)的零点。
适用情况:在一批有序数据中查找某数。
Tips:
第一步:设low,mid,high三个变量,分别指示数列中的起始元素、中间元素与最后一个元素位置,
第二步:确定新的查找区间
一个程序在编译运行时,普通变量是存放在栈区;
我们还会学习堆,而这个static会使得变量存放在data;
这个内存主要分为四大区:CODE,DATA(常量区,数据区,不能改变)(永不释放),STACK(栈区)(用完释放),HEAP(自己规定该区多大);

函数

C语言除了指针,就是函数。一个较大的程序可分为若干个程序模块,子程序实现模块的功能。main函数最大,可以调用子函数,孙函数。函数之间可以任意调用多次但不能调用main()函数。函数不能嵌套定义,定义函数时是平级的。
函数有两种:
1)标准函数:即库函数,由系统提供。
2)用户自己定义的函数:解决用户的需求。
3)无参函数:主调函数不向被调用函数传递数据,不得出现return。
4)有参函数:主调函数在调用被调用函数时,通过参数向被调用函数传递参数,返回的值必须是确定的值,可以实一个表达式只要最后是一个确定的值,函数类型决定返回值的类型。

无参:
类型标识符 函数名()
{
声明部分
语句部分
}

有参:
类型标识符 函数名(形式参数表列)
{
声明部分
语句部分
return 返回值;
}

形式参数和实际参数

1)定义函数时括弧中是形参,主调函数调用被调函数括弧里是实参。
2)在定义函数中指定的形参不占用内存空间,在调用时才占用内存。
3)实参可以是常量,表达式,但要求有具体的值,实参的值赋给形参,单向传递,称为“值传递”。
4)实参与形参的类型应相同或赋值兼容。否则将按不同类型数值的复制规则进行转换。字符型和整型可以互相通用,两者兼容。
5)调用结束后,形参可能改变,但实参不会改变,会释放栈。除非“址传递”“传引用”。

函数的调用

函数名(实参表列),如果调用无参函数,可以没有实参,括弧就行。函数语句,函数表达式,函数参数。

被调用的函数需要已经存在

如果被调用的函数在主函数后面,则需要在主调函数声明被调用函数,声明不占内存。而被调用的函数需要被定义,会被转化为二进制代码。delaration 声明。

递归调用

在调用一个函数的过程中出现直接或间接地调用该函数本身。递归必须有推出条件!

数组作为函数参数

1)数组元素就是下标变量,与普通变量并无区别。值传递
2)用数组名做函数参数,要求形参和实参都必须是类型相同的数组。址传递。因为形参数组并不存在。数组名就是数组的首地址。形参只须知道数组第一个地址就行。形参只要是数组就行,不规定长度。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值