标识符
命名规则:
- 由字母、数字、下划线组成
- 开头不能是数字
- 不能和关键字重复
- 最好见名知意
练习:x y sum a100 _A7b_3x 3’a x*y @ b.8 while
运算符
算术运算符、逻辑运算符、位运算符、关系运算符、赋值运算符、条件运算符
算术运算符
+ | 加 |
- | 减 |
* | 乘 |
/ | 除 |
% | 取余 |
++ | 自增 |
-- | 自减 |
/ 整数相除,结果会向下取整
int a=5/2;
printf("%d\n",a); //2
float a=5/2;
printf("%f\n",a); //2.000000
float a=5/2.0;
printf("%f\n",a); //2.500000
float a=(float)5/2; //强制转换,只在当前这个位置进行转换
printf("%f\n",a); //2.500000
注:%f默认显示小数点后六位
逻辑运算符
&& | 逻辑与 | 全真则真,一假则假 |
|| | 逻辑或 | 一真则真,全假则假 |
! | 逻辑非 | 取反 非真即假,非假则真 |
0假 1真
printf("%d\n",15>9&&9>11); 0
printf("%d\n",15>9||9>11); 1
printf("%d\n",15>9&&!(9>11)); 1
截断法则:
逻辑与运算:当前边的表达式结果为假,后边表达式不再执行,直接返回假。
逻辑或运算:当前边的表达式结果为真,后边表达式不再执行,直接返回真。
#include <stdio.h>
int main()
{
int a=5,b=6,c=7,d=8,m=2,n=2;
(m=a<b)||(n=c>d);
printf("%d %d",m,n);
}
//m=1,n=2
位运算符
& | 位与 | 全1则1,有0则0 |
| | 位或 | 有1则1,全0则0 |
^ | 异或 | 相同为0,不同为1 |
~ | 取反 | 0-->1 1-->0 |
关系系运算符
> | 大于 |
< | 小于 |
>= | 大于等于 |
<= | 小于等于 |
== | 等于 |
!= | 不等于 |
=赋值 ==等于
赋值运算符
= | a=b ----->a=b |
+= | a+=b ----->a=a+b |
-= | a-=b ------>a=a-b |
*= | a*=b ----->a=a*b |
/= | a/=b ----->a=a/b |
%= | a%=b ----->a=a%b |
条件运算符(三目运算符)
表达式1?表达式2:表达式3;
运算法则:先判断表达式1是否成立,如果成立则执行表达式2,不成立则执行表达式3;
a=6,b=3;
a>b?a:b == 6
运算符优先级
单算移关与,异或逻条赋
单目运算符 ! ++ -- ~
算术运算符 * / % + -
移位运算符 << >>
关系运算符 < <= > >= == !=
位与运算符 &
异或运算符 ^ |
逻辑运算符 && ||
条件运算符 ? :
赋值运算符 = += -= *= /= %=
int x = 2 , y = 3 , z = 4;
则表达式 x + ( y > !z ) 的值为
3
变量
概念:程序运行过程中发生变化的量
格式:存储类型 数据类型 变量名;
auto int a;
存储类型:决定变量存储位置
数据类型:决定开辟的空间大小
变量名:遵循标识符的命名规则
(auto不用写出)
名称 | 字节大小 | 取值范围(了解) | |
int | 整型 | 4 | |
char | 字符型 | 1 | -2^7~2^7-1 |
short | 短整型 | 2 | |
long | 长整型 | 4 | |
float | 单精度浮点型 | 4 | 有效位数6-7位 |
double | 双精度浮点型 | 8 | 有效位数15-16位 |
局部变量和全局变量
局部变量 | 全局变量 | |
定义位置 | 函数体内部 | 函数体外部 |
初值 | 未初始化时值为随机值 | 未初始化时值为0 |
存储位置 | 栈区 | 全局区 |
生命周期 | 同函数体共存亡 | 同程序共存亡 |
作用域 | 当前函数体内部 | 整个程序 |
常量
概念: 常量在程序运行过程中不会发生变化
字符常量
用单引号包裹
char a='w';
'w'--->字符
a---->变量
'n'字符n '\n'换行 \转义 \\:\
char w='A';
char w1='\071'; 八进制(八进制的71在ASCII表中代表的字符)
char w2='\x42'; 十六进制(十六进制的x42在ASCII表中代表的字符)
printf("%c %c %c\n",w,w1,w2);
A 9 B
字符串常量
用双引号包裹,以'\0'作为结束标志
char a[]="hello";
里面有六个字符,还有一个'\0'
整型常量
八进制 十进制 十六进制
浮点型常量
float 4字节 double 8字节
标识常量
格式:#define 宏名 常量或表达式或代码段
特点:只是单纯的替换,不进行运算
宏定义:起标识的作用,宏名遵循标识符命名规则,一般用大写表示
#include<stdio.h>
#define N 5
#define M N+2
#define NUM 2+M*2+1
int main(int argc, char const *argv[])
{
printf("%d\n",NUM);
return 0;
}
//NUM = 2 + 5 + 2 * 2 + 1 = 12
输入输出
按字符输入输出
输入
int getchar(void);
功能:向终端输入一个字符
参数:无
返回值:输入字符的ASCII值
int res=getchar();
printf("%d\n",res);
输出
int putchar(int c);
功能:向终端输出
参数:输出字符的ASCII值
返回值:输出字符的ASCII值
int res=getchar();
putchar(res);
按格式输入输出
输出
int printf(const char *format, ...);
功能:按格式向终端输出
参数:多参
返回值:输出数据个数
格式:
%d int
%c char
%f float
%lf double
%s 字符串
%p 地址
%o 八进制
%#x 十六进制
浮点型,默认打印小数点后六位
float a=2.3;
printf("hello %.2f\n",a); //保留2位小数
输入
int scanf(const char *format, ...);
功能:按格式向终端输入
参数:多个
返回值:正确输入数据的个数
int a;
scanf("%d",&a);
printf("hello %d\n",a);
垃圾字符回收机制
1.通过空格回收
可以回收一个或多个空格、tab
char a,b;
scanf("%c %c",&a,&b);
printf("hello %c %c\n",a,b);
2.*抑制符,可以回收任意一个字符 (了解)
3.getchar
while(1)
{
char a;
scanf("%c",&a);
printf("%c\n",a);
getchar();
}