常量:程序运行中不能改变的量
一、整型常量:int型常量、短整型、长整型、无符号型
二、实型常量:浮点数
三、字符常量:两个单引号引起来的一个字符(char常量)
‘a’的Ascll码97,‘A’ 的Ascll码65
普通字符:单引号所引的单个字符
转义字符:以\开头的字符序列,用于表示特殊形式的字符常量
‘\a’:响铃 ‘\n’:换行 ‘\t’:相当于tab
‘\b’:退格(删除) ‘\r’:回车(顶替第一个字符) ‘\?’:问号
‘\\’:反斜线 ‘\’’:单引号 ‘\”’:双引号
‘\ddd’:八进制字符 ‘\xhh’:十六进制字符
四、字符串常量:双引号括起来的一个字符序列(所含字符个数为字符串长度)
注:’\0’为字符串的结束标志;
字符串常量在内存中所占字节数是字符串长度加1;
字符串常量中的字符可以是转义字符,但只代表一个字符;
不能将字符串常量赋给字符变量。
五、符号常量:宏定义 定义方法:在函数前面定义
格式:#define 标识符 常量值 例:#define PI 3.1415926
注:用大写字母命名;初始化赋值后,不能重新赋值或修改 。
变量:程序运行过程中值可以改变的量
变量说明格式:<类型名> <变量名表> 先说明后使用
一、整型变量(int):二进制存放,分为基本型、短整型、长整型和无符号型。
二、实型变量:指数形式存储,分为单精度(float)、双精度(double)和长双精度(long double)。
(float)只能存放实型数
三、字符型变量(char):存储字符常量,只能放一个字符,不能放字符串。
允许对整型变量赋以字符值,也允许对字符变量赋以整型值
运算符和表达式
(记述运算的字符)(操作数:利用运算符进行运算的对象)
单目运算符:只有一个操作数的运算符
双目运算符:有两个操作数的运算符
三目运算符:有三个操作数的运算符
表达式:操作数和运算符连接形成表达式
一、算数运算符:+、-、*、/、%(求模运算或求余数,主要用于整型数值计算)
算术表达式:用算术运算符和一对圆括号将运算量连接的、符合C语言语法的表达式。
优先级:单目+和单目-(从右到左)>*、/、%(从左到右)>+、-(从左到右)
注:两运算量应为同一类,若不同,遵循类型转换原则,即charàintàfloatàdouble
两int型数据相除,结果应为int型,若商不是整数,也要取整。
int型与float或double型相除,结果应为float或double型。
C表达式中乘号不能省略,只能使用系统允许的标识符。
C表达式中内容须写在同行,不许有分子分母形式,可利用圆括号保证运算顺序。
C表达式只能使用圆括号来限定运算顺序,可以使用多层圆括号。
二、自加自减运算符:++i(--i)先加(减)1,后代入
i++(--i)原始值代入后变化
优先级高于算术运算符的优先级,从右到左。
三、强制类型转换运算符:
自动转换:发生混合类型数据运算时,会自动进行转换,将数据容量小的数据类型转化成运算表达式所出现的容量最大的数据类型。charàintàfloatà double
强制类型转换:在临时存储单元中将运算量转换成强制类型运算符所规定类型(不安全转换) (<数据类型>)<表达式>
四、赋值运算符: “=”为赋值运算符,从右到左
1.简单赋值运算符 <变量名>=<表达式>
2.复合赋值运算符 <变量名> 双目运算符=<表达式>
等效于<变量名>=<变量名> 运算符 <表达式>
例:加赋值+=、减赋值-=、乘赋值*=、除赋值/=、求余赋值%=
3.赋值表达式:<变量名>=<表达式> 左侧只能为变量,优先级仅高于逗号运算符
五、关系运算符:<、<=、>、>=、== 、!= 从左到右,“真”返回1,“假”返回0
字符则比较ASCLL值
关系表达式:用关系运算符将两表达式连接的式子
六、逻辑运算符:&& 逻辑与运算 从左到右 一假则假
|| 逻辑或运算 从左到右 一真则真
! 逻辑非运算 从右到左 真变为假,假变为真
使用格式:< !> <运算量> <运算量> &&或|| <运算量>
优先级:!>算数运算符>关系运算符>&&和||>赋值运算符
逻辑表达式:由逻辑运算符和运算量组成的表达式
短路现象:a&&b&&c或a||b||c
七、逗号运算符:“ ,” 优先级别最低
运算过程:先计算表达式1,最后计算表达式n
运算结果:逗号表达式中最后一个表达式n的值。
八、条件运算符:<表达式1>?<表达式2>:<表达式3>(唯一三目运算符)
表达式1为数值表达式,表达式2和表达式3为任意表达式。
当表达式1为“真”(非0)时,返回表达式2的值;否则返回表达式3的值。
输入输出
输入 数据:外部设备→RAM
输出 数据:RAM→外部设备
标准库函数 #include <stdio.h> 或#include “stdio.h”
本身无输入输出语句,通过调用标准库函数中提供的输入和输出函数来实现
一、字符的输入输出:putchar() 输出单个字符
getchar() 输入多个字符,按enter结束且只接收第一个
getch() 不带回显,不按enter
getche() 带回显,不按enter
二、格式化数据的输入与输出:格式化输出printf()函数 输出若干任意类型数据
printf(<% >,<输出列表>) m.n 最小宽度.精度(多则截断,少则补零)
数据输入scanf()函数 从终端键盘读入数据
scanf(<% * >,<变量地址列表>)
注:flushall(); 清空键盘缓冲区
选择结构
一、if语句:(1)if(表达式) (2)if(表达式)
单个语句; {
() 多个语句;
}
if(表达式1)语句1;
else if(表达式2)语句2;
……
else if(表达式m)语句m;
else 语句n;
二、switch语句(开关语句): 比较E与C1到Cn值,相等则一直向后执行直至遇到break语句
switch(<表达式E>)
{
case<常量表达式C1>: <语句序列S1>
···
case<常量表达式Cn>:<语句序列Sn>
[default: <语句序列Sn+1>]
}
注:Case后必须为整型常量或字符常量(单引号引起),且值不同;
Case后允许多语句(不用{}),无法匹配case则执行default
循环语句
goto语句:无条件转移语句
goto 标号;
······
标号:语句;
while语句:先判断再循环(表达式值为真则循环,假则跳出)
while(<表达式>) 语句S 可能不执行就跳出
do while语句:先循环再判断(表达式值为真则循环,假则跳出)
do <语句S> while(<表达式>) 至少执行一次
for 语句:先判断后循环
for([<表达式1>];[<表达式2>];[<表达式3>]) 语句S
表达式1:循环变量赋初值(整个循环只执行一次)
可省略语句但不能省略分号
表达式2:循环条件
表达式3:循环变量增值
break continue语句:
break语句:结束整个循环过程,只用于switch语句和循环语句
continue语句:只结束本次循环,只用于for、while、do while等循环体中
数组
先定义后引用
数组:一系列具有相同数据类型的相关数据的有序集合。
数组元素(下标变量):数组中的数据元素。(可做普通变量使用)
数组下标:数组元素的位置索引(从0开始取值)。
数组维数:数组元素下标的个数。
一维数组(可看作一个数列或向量)
数据类型 数组名[整型常量表达式];
注:数组名按照标识符规则命名
下标一定从0开始,类型说明符可为任意基本类型
数组大小绝对不能为变量
初始化:定义数组的同时赋初值。
所有元素赋初值 int a[5]={1,2,3,4,5}
部分元素赋初值 int b[5]={1,2,3}
则b[0]=1,b[1]=2,b[2]=3,其余元素为0
所有元素赋零值 int c[10]={0},所有元素为0
省略数组大小 int d[ ]={1,2,3},表示d数组的大小为3
引用:只能引用数组中元素,不能整体引用。
下标可为整型常数、已赋值变量或含变量表达式。
下标不能超界(超界程序仍可运行但结果不正确)。
对变量的操作也适用于数组元素。
排序算法:冒泡:两两比较,大数调后
选择:找出最大数位置,与前面元素调换
插入,筛选
二维数组(可看作矩阵)
数组类型 数组名[整型常量表达式1][整型常量表达式2];
注:均有两下标,不能写作[1,2]
1维下标为行数,2维下标为列数,两下标之积为数组元素个数
每个数组元素数据类型相同,只能存放双精度数据(占8个字节)
可看作若干一维数组
初始化:定义时可赋初值(一维长度可省略)
所有元素赋初值
按行赋值 inta[2][4]={{1,2,3,4},{5,6,7,8}}
不按行赋值 inta[2][4]={1,2,3,4,5,6,7,8}
部分元素赋初值
按行赋值 inta[3][5]={{1,2},{5},{6}},其余元素为0
不按行赋值 inta[2][4]={1,2,3}
引用:数组名 [下标1][下标2],常与双重循环配合,不能整体引用
多维数组(数组元素下标)(维数无限制)
数据类型 数组名[整型常量表达式1][整型常量表达式2]······[整型常量表达式k];
存储顺序从右至左,引用形式:数组名[下标1][下标2]······[下标k]
字符数组(存放字符型数据,均为单个字符)
C语言中无字符串类型,用字符数组实现字符串类型操作
字符串结束标志(串结束符):‘\0’ ASCII码值为0 不可显示空操作字符,系统
自动加入,占据一个字节
定义:char 数组名字[整形常量表达式] 一维字符数组
char 数组名字[整型常量表达式1][整型常量表达式2] 二维字符数组
初始化:(完整给出所有元素值时可省略数组大小)
以字符常量的形式初始化 char s1[6]={‘s’,’t’,’r’,’i’,’n’,’g’};
以字符串常量形式初始化 char s2[7]={“string”}; (自动加入了‘\0’所以为7)
输入输出:
(1)逐个字符 格式化输入输出函数的“%c”格式符与循环配合
格式:scanf(“%c”,&字符数组元素)和printf(“%c”,&字符数组元素)
注:读字符数据时,回车、空格都将作为普通字符对待
逐个读入时不会自动加入‘\0’
(2)整个字符串 格式化输入输出函数的“%s”格式符
格式:scanf(“%s”,字符数组名字)和printf(“%s”,字符数组名字)
注:字符串长度不要超界,不要忘记‘\0’占一个字节
不能采用赋值语句将一个字符串直接赋给一个数组
如char c[10];c[ ]=“good”;是错误的
(3)字符串处理函数 想输入字符串中包含空格使用gets函数
单个字符输入输出使用getchar()和putchar()
字符串整体输入输出使用gets(str)和puts(str)
字符串处理函数:(都带有参数)
(1)字符串输入输出函数 调用时预处理命令为#include <stdio.h>
字符串输入函数gets()
调用格式:gets(str);
功能:输入字符串
参数:存放字符串的字符数组的首地址,通常为字符数组名,也 可为字符型指针变量。
字符串输出函数puts()
调用格式:puts(str);
功能:输出字符串
参数同上
(2)字符串处理函数 调用时预处理命令为#include <string.h>
求字符串长度函数strlen()
调用格式:strlen(str);
功能:统计实际长度不包含‘\0’,只计算第一个‘\0’之前的字符个数
字符串连接函数strcat()
调用格式:strcat(str1,str2);
功能:自动连接两字符串,str2覆盖str1的‘\0’
注:该函数返回值为str1串首地址
Str1串所在字符数组空间需足够大,确保连接后不越界
参数str1必须为字符数组名
字符串复制函数strcpy()
调用格式:strcpy(str1,str2)
功能:将str2字符串复制到str1字符数组中,字符数组之间不能直接赋值,必须通过此函数达到间接赋值功能
字符串比较函数strcmp()
调用格式:strcmp()
功能:逐个比较字符的ASCII值大小
若字符串1大于字符串2,返回1;小于返回-1,;等于返回0
注:比较结果为第一个不相同字符的ASCII值
大写字母转小写字母函数strlwr()
调用格式:strlwr(str)
功能:大写转小写
小写字母转大写字母函数strupr()
调用格式:strupr(str)
功能:小写转大写
函数
一、基本知识:
1、函数是C程序的基本单位,C语言程序是函数式语言。
2、C程序必包含main函数。
3、通常将调用其他函数的函数称为主调函数,被调用函数称为被调函数。Main函数只能是主调函数。
4、函数之间相互独立,可以单独编译但不能单独运行。
5、函数按照使用角度来分可分为标准函数(系统函数、库函数)和用户自定义函数;按照有无参数来分可分为无参函数和有参函数;按照作用范围来分可分为外部函数和内部函数;从返回值来分可分为无返回值函数和有返回值函数。
二、函数定义:(先定义后调用,除非进行函数声明)
无参函数定义格式:
函数返回值类型 函数名()
{
[变量声明部分]
[语句执行部分]
[return表达式;|return(表达式);]
}
有参函数定义格式:
函数返回值类型 函数名(参数类型,形参名1[······参数类型,形参名n])
{
[变量声明部分]
[语句执行部分]
[return表达式;|return(表达式);]
}
1、函数定义包括函数体(花括号部分)和函数头(函数体前面的部分)
2、函数头包括函数说明和参数说明
函数返回值类型:用来指定函数返回值的数据类型,省略后默认int
三、函数调用:
四、函数的参数传递方式:
五、变量的作用域:
六、变量的存储方式:
七、内外函数:
tips
9种控制语句:
If()~else()~ for() while() do~while()
continue break switch goto return
格式特点:
习惯小写;无程序行;可使用空行和空格;常用锯齿形书写格式(使用tab缩进)
结构特点:
必须有且只有一个主函数main(),可放在程序任意位置,从main开始在main中结束
“;”为语句终止符
注释: /* */为块注释, //为单行注释
预处理命令: 以#开始的指令(#include语句非必须若有必在开头)
以.h为后缀的文件称为头文件(stdio.h包含有关输入输出语句函数)
关键字:预先定义好的有特定含义的符号
标识符:自定义字符
语句: 以“;”结束,可跨越多行
块: { }将多条语句组合形成一个语句块
方法: 一组程序代码的组合,有一个方法名和方法体
方法名:函数标识名 方法体:实际执行语句