C语言的语句分为五类:
- 表达式语句
- 函数调用语句
- 控制语句
- 复合语句
- 空语句
C语言是结构化的程序设计语言,存在三种结构顺序结构、选择结构、循环结构。
; 再C语言表示语句的结束
分支语句
if条件控制语句:
0表示假,1表示真
当要执行多条语句时,使用代码块(用{ }括起来)。
讯享网switch语句
case只是一个入口,没有终止执行的能力,需要break来跳出当前的switch。
!!!没有break或者default,switch只会不断进行!!!
多个case公用一个break,可以实现同一句的执行效果。
switch允许嵌套使用。
形成良好习惯:
- 在最后一个case后加上一个break。
- 在每个switch最后都加一个default。
switch的条件必须是整型表达式,case必须是整型常量表达式。
- 这里的整型包括char(存放的是ASCII码值,本质上是整型)和int。java和c语言的基础语法
讯享网
循环语句
while循环
break:会跳出本层循环。是永久的终止循环。在嵌套循环中,break打破的是break所在的循环。
continue:跳过本次循环,直接去判断部分。是跳过本次循环后面的代码,直接进行下一次循环的判断。


while和getchar清理缓冲区
getchar(),是从缓冲区中读取一个字符。可以是空格、换行、回车等。
putchar(),是输出读取的字符。
讯享网
eg:输入密码
此时,getchar从缓冲区读取的是 ' ' ,此时没有第二次输入。
若缓冲区是一串字符,则不能用getchar直接清理。应用上述清理缓冲的循环清理。
scanf 和 printf 函数,只是在初识C语言中,对代码进行测试的输入输出语句,在以后得开发中并不重要。(不需要花费太大精力)。
通过scanf函数的%m格式控制可以指定输入域宽,输入数据域宽(列数),按此宽度截取所需数据;通过printf函数的%0格式控制符,输出数值时指定左面不使用的空位置自动填0。
for循环
初始化:初始化循环变量。
判断:循环的终止条件,判断循环的下一步操作。
调整:变更循环变量。
- 不可在for循环更改循环变量,防止for循环失去控制。
- 建议for循环控制变量的取值采用“前闭后开”的写法。
for循环的变种
省略
省略会带来一些意想不到的后果,尽量避免省略。
循环变量的初始化最好放在for循环的外面:一些编译器不支持该操作。
可以多个变量控制一个循环。

do while 循环
do while循环先执行一次在判断循环条件。
利用循环查找有序数列数据
折半查找就是利用循环实现的,每次查找数据减少一半。
- 循环的终止条件:必须含有等号。
- mid的值必须定义在循环里面。
- mid=(left+right)/2,可能会越界(mid的最终值超过数组长度)
数组传参时传递的是数组首元素的地址。

利用循环猜数字
时间戳:是从1970年1月1日(UTC/GMT的午夜)开始所经过的秒数(不考虑闰秒),用于表示一个时间点。然而,这种格式对于人类阅读并不友好,因此需要转换成可读的日期和时间格式。
利用时间戳使用随机数:
time函数的头文件:<time.h>
rand、srand的头文件:<stdlib.h>
time函数每次使用时,最好使用空指针参数;
srand函数的参数是unsigned int 型的,利用时间戳要强制转换;
goto语句

goto语句不能跨函数跳跃,在实践中尽量避免goto语句(容易大量报错)。
goto语句常用于终止深层的嵌套循环;(break只能一层层的跳出循环)。
debug是调试版本——是程序调试的版本;
release是发布版本——是发布用户使用的版本;
函数
- 在计算机科学中,函数是一个子程序,有一个或多个语句块组成,完成某项特定的任务,具有相对的独立性。
- 一般有输入参数和返回值,提供对过程的封装和细节的隐藏。
一个工程里面,可以有多个.c文件,但只能有一个main函数。
函数的分类:

1、库函数:
C语言封装的函数,方便程序员的使用。(IO函数、字符串操作函数、字符操作函数、内存操作函数、时间日期函数等)。
库函数的使用必须使用 #include 包含对应的头文件。
库函数的学习利用:https://cplusplus.com/ 或 msdn 或 cppreference.com
虚拟机:虚拟出来一台电脑。
虚拟出来的电脑(.vmk文件)。
2、自定义函数
程序员自己设计的函数,函数的基本组成包含函数名、函数体、函数参数、返回类型。
实参和形参
函数传参时,可以是表达式:
(2,3)是一个逗号表达式,表示一个数组。
实参:真是传给函数的参数。实参可以是常量、变量、表达式、函数。
形参:函数名后括号内的参数。在函数调用完后就自动销毁了。
当实参传递给形参时,形参是实参的一份拷贝--->形参的改变不会影响实参

当函数传递的参数是指针--->改变实参
px、py是指针变量,也是形参。它们存放的是啊a、b的地址。
&px、&py才是形参的地址。
*px、*py是对a、b地址的的解引用。

函数调用
1.传值调用
函数的形参和实参分别占用不同的内存块,对形参的修改不会影响实参。
2.传址调用
把函数外部创建的变量的地址传给函数参数,使得在函数内部可以直接操作函数外部的变量。
C语言在C99之后引入布尔类型 bool ,在头文件#include<stdbool.h>中。
bool类型不是C语言的内置类型,本质上是0和1的封装,只占1个字节。
函数嵌套
函数可以嵌套调用,不能嵌套定义。
链式访问
把函数的返回值作为另一个函数的参数。
若函数没有返回类型(void),则没有办法实现链式访问。

main函数本质上还是有参数的:
函数声明
函数定义放在调用的后面,则需要在调用前声明。
- 函数声明:是告诉编译器函数叫什么,参数是什么,返回类型是什么。函数声明不能决定该函数具体是否存在。
- 函数的声明一般在函数使用之前,满足先声明后使用。
- 函数的声明一般放在头文件。
- 函数的定义指函数的具体实现。

将函数的声明、函数的实现、主函数分开存放,可以提高程序的可读性、实现程序模块化、方便多个程序员的协作完成。
声明和定义的分割:可以使程序以静态库的形式出售项目。


静态库和动态库:静态库与动态库的区别与优缺点_静态库和动态库的优缺点-CSDN博客
函数递归
程序调用自己
递归的核心思想:大事化小。
函数的调用都会在栈上申请空间:函数栈帧的创建和销毁。
当递归没有出口时,会产生如下报错,表示:栈溢出。

递归的必要条件:
- 存在限制条件,当满足限制条件时,递归不再继续。
- 每次递归调用后,越来越接近该限制条件。
不用创建变量的方法求字符串的长度:
递归与迭代
循环是一种迭代,而迭代不等于循环。
递归如果没有明显的缺陷,而且代码简洁,就不用考虑迭代。
当递归栈溢出时,解决的方法:
- 将递归改写为非递归
- 使用static对象(堆对象)替代nostatic局部对象(栈对象),减少每次递归调用和返回是产生和释放的nostatic对象的开销(减少栈的开销)。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/4113.html