目录
一:C语言数据结构
1.1数据结构
1.2C语言两种注释方式
1.3标识符
1.4变量和常量
常变量与符号常量:
1.5数据类型
基本数据类型
字符型数据
2C语言运算符
1.6格式化输出语句
二。分支结构之语句
1.控制语句
2.1if语句
2.2用while和do...while语句实现
2.3for语句实现
2.4用switch语句实现多分支选择结构
2.5结束语句
一:break语句
二:continue语句
2.6循环语句之多重循环
三.用函数实现模块化程序设计
3.1定义函数的方法
1.定义无参函数
2.定义有参函数
3.定义空函数
3.2调用函数
1.函数调用的形式
2.形参与实参
3.函数的返回值
1.include
2.C程序是执行主函数源码,主函数main是C语言入口
int是main前面的主函数类型,在执行主函数之后会得到一个函数值,其值为整型
3花括号{}表示函数体,在{}输入函数
4.printf()是格式输出函数,在run中输出的信息
5.return 0是函数的返回值,函数数据不同返回值不同
6.\n是换行符即在输出"hello world"之后,显示屏上的光标移到下一行开头,光标位置称为输出位置开头
注意:1.,一个说明或一个语句占一行
2.函数语句有明显缩进,用Tab键进行缩进
3.括号要成对写,删除要成对删除
4.每当一个可执行语句结束以后都要用分号;隔开
5.代码中的所有符号均为英文半角符号
(1)以//开始单行注释。注释可以单独占一行,也可以在一行中其他内容的右侧。该注释从//开始,以换行符结束。该注释不能跨行,也只一行内容写不下,用多个单行注释
(2)以/*开始,以*/结束注释,该注释包含多行内容
或
两种形式
C语言可以是英文字符,数字,下划线_组成的字符串,开头必须为字母或下划线
注:严格区分大小写
标识符是有意义的英文,不要使用中文
常量含义:在执行过程中不可改变的量称为常量,常量分为直接常量和符号常量
直接常量:
(1)整型常量:100,268
(2)实型常量:a十进制小数形式:123.658,751.725
b指数形式:12.4e5,-72.74e4
(3)字符常量:用单撇号括起来的字符:'A','3’,'&'
(4)字符串常量:“I love zhuzhu!”
变量含义:是可以变化的量,每一个变量都有赋值,变量必须先定义,后使用,定义时区分变量名和变量值
变量一般形式:变量名。数据类型
常变量:方法在定义变量时,前面加上关键字const
定义符号常量:#define指令为与编译指令,他只是用符号常量代表一个字符串,在预编译时进行字符替换,在预编译后,符号常量不存在
常变量:占用储存单元,有变量值
类型是对数据分配储存单元的安排,包括储存单元长度(占多少字节)以及数据储存形式。不同类型的分配不同长度和储存形式
数据类型 | 字节 | 应用 | 示例 |
int(基本整型) | 4 | 用于存储整数 | int weight=45 |
char(字符型) | 1 | 用于存储单个字符 | char me=M |
float(单精度浮点型) | 4 | 用于存储小数 | float x=1.3 |
double(双精度浮点型) | 8 | 用于存储位数的多位小数 | double pi=3.1415 |
数据·常见的储存空间及值的范围
扩展八种整型数据类型
注:int ,short int , long int根据编译的环境不同,所取范围也不同
1.字符与字符代码
字母:大写字母A~Z,小写字母a~z
数字:0~9
专门符号:29个包括> ,= + - ; : "" ''~!$%^
空格符:空格,水平制表符(tab),垂直制表符,换行,换页(form feed)
1.基本运算符
(1)算数运算符(+ - * / % ++ --)
&#xff08;2&#xff09;关系运算符&#xff08;> < &#61;&#61; >&#61;<&#61; !&#61;)
(3)逻辑运算符&#xff08;&#xff01;&& ||&#xff09;
&#xff08;4&#xff09;位运算符&#xff08;<< >> ~| ^&)
(5&#xff09;赋值运算符&#xff08;&#61;及其扩展赋值运算符&#xff09;
&#xff08;6&#xff09;条件运算符&#xff08;&#xff1f;&#xff1a;&#xff09;
&#xff08;7&#xff09;逗号运算符&#xff08;&#xff0c;&#xff09;
&#xff08;8&#xff09;指针运算符&#xff08;*和&&#xff09;
&#xff08;9)求字节数运算符&#xff08;sizeof&#xff09;
&#xff08;10&#xff09;强制类型转换运算符&#xff08;&#xff08;类型&#xff09;&#xff09;
&#xff08;11&#xff09;成员运算符&#xff08;. ->)
(12)下标运算符([ ])
(13&#xff09;其他(如函数调用运算符&#xff09;
2.自增&#xff08;&#43;&#43;&#xff09;&#xff0c;自减&#xff08;--&#xff09;运算符
作用&#xff1a;使变量的值加或减1
&#43;&#43;i,--i(在使用i之前&#xff0c;先使用i的值加/减1&#xff09;
i&#43;&#43;,i--(在使用i之后&#xff0c;使i的值加/减1&#xff09;
printf(输出格式符&#xff0c;输出项&#xff09;
(1)if()...else...(条件语句)
(2)for()...(循环语句)
(3)while()...(循环语句)
(4)do...while()(循环语句)
(5)continue(结束本次循环语句)
(6)break(中止执行switch或循环语句)
(7)switch(多分支选择语句)
(8)return(从函数返回语句)
(9)goto(转向语句,在结构化程序中基本不用goto语句)
&#xff08;1&#xff09;if语句的一般形式
if(表达式&#xff09;
{
执行代码块
}
注:if后面没有分号&#xff1b;直接加{}
if-else语句的三种形式&#xff1a;
1&#xff09;if&#xff08;表达式) 语句1 &#xff08;没有else子句成分&#xff09;
2&#xff09;if&#xff08;表达式) &#xff08;有else子句成分&#xff09;
语句1
else
语句2
3&#xff09;if&#xff08;表达式1&#xff09; 语句1 &#xff08;在else部分又嵌套多层的if语句&#xff09;
else if(表达式2&#xff09; 语句2
else if&#xff08;表达式3) 语句3
语义是依次判断表达式的值&#xff0c;当出现某个值为真时&#xff0c;则执行对应代码块
注&#xff1a;当某个条件为真时&#xff0c;则不会向下执行该分支结构的其他语句
输出结果&#xff1a;
do...while实现一般形式
do
语句
while&#xff08;表达式&#xff09;
例&#xff1a;
int i&#61;1 ; //设变量i的初始值为1
do //循环结构开始
{
printf("%d",i&#43;1) &#xff1b; //循环体&#xff0c;输出i的量&#xff0c;然后使i加1
while&#xff08;i<100); //当i小于或等于100时&#xff0c;继续执行循环体
注&#xff1a;while语句一般表现形式是关系表达式或逻辑表达式&#xff0c;当表达式的结果为假时结束循环
在循环体中改变循环变量值&#xff0c;否之一直执行&#xff08;进入死循环&#xff09;&#xff08;只要当循环条件为真&#xff1a;给定的条件成立&#xff0c;就执行循环体语句&#xff09;
循环体中包括一个以上的语句&#xff0c;则必须用{}括起来&#xff0c;组成复合语句
do...while语句先执行循环中的执行代码块&#xff0c;然后判断while语句中表达式是否为真。如果为真继续循环&#xff1b;如果为假&#xff0c;终止循环&#xff0c;do...while 一定要执行一次循环语句
例&#xff1a;while循环
输出结果
例二&#xff1a;do...while实现形式
输出形式&#xff1a;
&#xff08;1&#xff09;for语句一般形式&#xff1a;
for&#xff08;表达式1&#xff1b;表达式2&#xff1b;表达式3&#xff09;
{
执行代码块
}
注&#xff1a;1.执行表达式1&#xff0c;对循环变量做初始化
2.判断表达式2&#xff0c;若其值为真&#xff08;非0&#xff09;&#xff0c;则执行for循环体中执行代码块&#xff0c;然后向下执行&#xff0c;如果其值为假&#xff08;0&#xff09;&#xff0c;则中止循环
3.执行表达式3&#xff0c;&#xff08;i&#43;&#43;&#xff09;对于循环变量进行操作语句
4.执行for循环中的循环代码&#xff0c;第一步初始化执行一步
5.循环结束&#xff0c;程序继续向下执行
语句可改写while的循环形式&#xff1a;
表达式1&#xff1b;
while表达式2
{
语句
表达式3
}
&#xff08;2)"表达式1”可以省略&#xff0c;即不设置初值&#xff0c;但表达式1后的分号不能省略&#xff0c;例&#xff1a;
for(;i<&#61;100;i&#43;&#43;)sum&#61;sum&#43;i&#xff1b;
&#xff08;3&#xff09;表达式2可以省略&#xff0c;即不用表达式2作为循环条件表达式&#xff0c;不设置和检查循环的条件。
for(i&#61;1;;i&#43;&#43;)sum&#61;sum&#43;i;
(4)表达式3可以省略
for(i&#61;1;i<&#61;100;)
{
sum&#61;sum&#43;i;
i&#43;&#43;;
}
注&#xff1a;1表达式1是一个或多个赋值语句&#xff0c;用来控制变量的初始值
2.表达式2是关系表达式&#xff0c;其决定什么时候退出循环
3.表达式3是循环变量的步进值&#xff0c;定义控制循环变量每一次循环循环后按什么方式来循环
4.循环结束&#xff0c;程序继续向下执行
例&#xff1a;for语句
switch一般形式&#xff1a;
switch(表达式&#xff09;
{
case 常量1&#xff1a;语句1&#xff1b;
case常量2&#xff1a;语句2&#xff1b;
...........
case常量n&#xff1a;语句n&#xff1b;1
default&#xff1a; 语句n&#43;1
}
注&#xff1a;1.在case后的的各常量表达式不能相同&#xff0c;否则出现错误
2.在case子句后如果没有break&#xff1b;会一直往后执行&#xff0c;直到遇见break&#xff0c;才会跳出switch语句
3.switch后面的表达式只能是整型或字符类型
4.在case后允许多个语句&#xff0c;可以不用{}括起来
5.各case和default子句的先后顺序可以变动&#xff0c;不会影响程序结果
6.default子句可以不用省略
输出函数&#xff1a;
1.在没有循环结构的情况下&#xff0c;break不能用在单独的if-else语句
2.在多层循环中&#xff0c;一个break语句只挑出当前循环&#xff08;break是跳出当前整个循环&#xff09;
continue语句是结束本次循环&#xff0c;开始执行下一次循环
多重循环在循环结构的循环中又出现循环结构&#xff0c;一般最多三层循环结构
类型名 函数名()
{
函数体
}
或
类型名 函数名&#xff08;void&#xff09;
{
函数体
}
类型名 函数名&#xff08;形式参数表列&#xff09;
{
函数体
}
类型名 函数名&#xff08;&#xff09;
{}
有参函数更为灵活&#xff0c;输出内容随n的改变而改变&#xff0c;只要在main函数中传递一个参数即可
无参函数的输出相对稳定&#xff0c;需要改动时还需要到自定义的方法内改变循环变量的值
函数调用一般形式&#xff1a;函数名&#xff08;[实参表列]&#xff09;
注&#xff1a;1.对无参函数的调用&#xff0c;可以将[]包含的省略
2.[]可以是常数&#xff0c;变量或构造其他数据及表达式&#xff0c;多个参数之间用逗号&#xff0c;分开
实际参数&#xff1a;在主调函数中调用一个函数&#xff0c;函数名后面括号中的参数&#xff0c;实参可以是常量&#xff0c;变量&#xff0c;表达式
形式参数:在定义函数时后面括号中的变量&#xff0c;调用该函数传入时的参数。
形参只有在被调用时才分配内存单元&#xff0c;在调用结束后&#xff0c;即刻释放所分配的内存单元&#xff0c;形参只有在函数内部有效
例&#xff1a;
输出函数&#xff1a;
&#xff08;1&#xff09;函数返回值一般是通过函数中的return语句实现的&#xff0c;函数返回一般形式&#xff1a;return&#xff08;表达式&#xff09;或return 表达式。
&#xff08;2&#xff09;函数类型&#xff0c;函数有返回值&#xff0c;这个值属于某种类型&#xff0c;应当在定义函数时指定函数值的类型
例&#xff1a;
(3)在定义函数时指定的函数类型一般和return语句的表达式类型一致
输出&#xff1a;
&#xff08;1&#xff09;函数类型 函数名&#xff08;参数类型1 参数名1&#xff0c;参数类型2 参数名2&#xff0c;参数类型3 参数名3&#xff0c;...参数类型n 参数名n&#xff09;
&#xff08;2&#xff09;函数类型 函数名&#xff08;参数类型1&#xff0c;参数类型2&#xff0c;....参数类型n&#xff09;
&#xff08;1&#xff09;被调用函数为已经定义的函数
&#xff08;2&#xff09;如果使用库函数&#xff0c;在文本开头#include指令调用有关库函数所需要的信息包含到文本中来&#xff1a;
#include
(3)如果使用用户自己定义的函数&#xff0c;而该函数的位置在调用的函数后面&#xff0c;应该在主调函数中对被调用的函数作声明。
例&#xff1a;输入两个实数&#xff0c;用一个函数求出他们的和
输出结果
函数定义&#xff1a;指对函数功能确立&#xff0c;包括指定函数名&#xff0c;函数值类型&#xff0c;形参及其类型以及函数体&#xff0c;是一个完整独立的函数单位。
函数声明&#xff1a;把函数名字&#xff0c;函数类型以及形参的类型&#xff0c;个数和顺序通知编译下来&#xff0c;以便在函数调用时进行对照检查。
1.函数递归调用含义&#xff1a;在调用一个函数过程中直接或间接地调用该函数本身
执行递归函数强调其自身&#xff0c;每调用一次就进入新的一层
例;用递归方法求n&#xff01;
公式表示&#xff1a;n&#xff01;&#61;n&#xff01;&#xff08;n&#61;0,1)
n!&#61;n(n-1)! &#xff08;n>1)
输出结果&#xff1a;
2.递归函数的特点
&#xff08;1&#xff09;每一级函数调用时都有自己的变量&#xff0c;但是函数代码不会得到复制
&#xff08;2&#xff09;每次调用都有一次返回
&#xff08;3&#xff09;递归函数中&#xff0c;位于递归调用前的语句和各级被调用函数具有相同的执行顺序
&#xff08;4&#xff09;递归函数中&#xff0c;位于递归调用后的语句的执行顺序和各个被调用函数的顺序相反
&#xff08;5&#xff09;递归函数中一定有中止语句
数组元素&#xff0c;数组名可以做函数参数&#xff08;注&#xff1a;用数组元素作实参时&#xff0c;向形参变量传递的是数组元素的值。数组名作函数实参时&#xff0c;向形参传递的是数组元素的地址。
例&#xff1a;计算5人成绩的平均分
输出函数&#xff1a;
可以用多维数组名作为函数的实参和形参&#xff0c;在被调用函数中对形参数组定义时可以指定每一维的大小。
多维数组格式&#xff1a;数组类型 数组名称[常量表达式1][常量表达式2]...[常量表达式n]&#xff0c;例&#xff1a;
int array[4][6];
注&#xff1a;
多维数组的初始化与一维数组的初始化两种情况&#xff1a;
1.数据类型 数组名称[常量表达式1][常量表达式2]…[常量表达式n] &#61; {{值1,…,值n},{值1,…,值n},…,{值1,…,值n}};
2.数据类型 数组名称[常量表达式1][常量表达式2]…[常量表达式n]; 数组名称[下标1][下标2]…[下标n] &#61; 值;
多维数组初始化要注意以下事项&#xff1a;
1.采用第一种始化时数组声明必须指定列的维数。mtianyan: 因为系统会根据数组中元素的总个数来分配空间&#xff0c;当知道元素总个数以及列的维数后&#xff0c;会直接计算出行的维数&#xff1b;
2.采用第二种初始化时数组声明必须同时指定行和列的维数。二维数组定义的时候&#xff0c;可以不指定行的数量&#xff0c;但是必须指定列的数量
例&#xff1a;有一个4*5的矩阵&#xff0c;求所有元素中最大值
&#xff1a;
定义变量的情况&#xff1a;
&#xff08;1&#xff09;在函数开头定义
&#xff08;2&#xff09;在函数内的复合语句内定义
&#xff08;3&#xff09;在函数外部定义
局部变量&#xff1a;也称为内部变量&#xff0c;局部变量在函数内作定义说明&#xff0c;其作用局限于函数内&#xff0c;在复合语句中也可以定义变量&#xff0c;其作用在复合语句的范围内
全局变量&#xff1a;也称为外部变量&#xff0c;它是在函数外部定义的变量&#xff0c;不属于哪一个函数&#xff0c;属于源程序文件。
变量的范围和作用&#xff1a;
注&#xff1a;a主函数中定义变量只在主函数中有效
b不同函数中可以使用同名的变量&#xff0c;他们代表不同的对象&#xff0c;互不干扰
c形式参数也是局部变量
全局变量程序段&#xff1a;
动态存储&#xff1a;
存储数据&#xff1a;1.&#xff09;函数形式参数。在调用时给形参分配储存空间
2.&#xff09;函数定义的没有用关键字static声明变量&#xff0c;即自动变量
3&#xff09;函数调用时的现场保护和返回地址
函数调用开始时分配储存空间&#xff0c;函数结束时释放空间。动态存储区中存放的变量是根据程序运行的需要而建立和释放的&#xff0c;通常包括&#xff1a;函数形式参数&#xff1b;自动变量&#xff1b;函数调用时的现场保护和返回地址等。
静态储存&#xff1a;在程序运行期间分配固定的存储空间的方式。静态存储区中存放了在整个程序执行过程中都存在的变量&#xff0c;如全局变量。
1.自动变量&#xff08;auto变量&#xff09;
在调用函数时&#xff0c;系统会给这些变量分配储存空间&#xff0c;在函数调用结束时会自动释放这些储存空间&#xff0c;例&#xff1a;
s
2.静态局部变量&#xff08;static局部变量&#xff09;
用static修饰的为静态变量&#xff0c;如果定义在函数内部的&#xff0c;称之为静态局部变量&#xff1b;如果定义在函数外部&#xff0c;称之为静态外部变量。例&#xff1a;
输出结果&#xff1a;
3.寄存器变量&#xff08;register变量&#xff09;
register int f&#xff1b; //定义f为寄存器变量