一.常量与变量
1.字符串常量:字符串末尾都有一个用来表示结尾的的“\0"字符
“ab”
"hello world"
‘a’与”a”的区别:
‘a’:字符常量,只有一个字符a
“a”:字符串常量,有俩个字符‘a’+‘\0‘
例:“ab\0”有四个字符
“ab\\\123ab"有七个字符
2.标识常量
#define M 5
宏只是代码的替换,中间不进行任何数据计算的操作
宏名一般都是大写,用来和变量进行区分,但也可以小写,但一般不推荐
3.变量:
数据类型 变量名:
int Num1,Num2,Num3;
初始化:定义变量的时候对变量赋初值
赋值:定义变量后,对变量赋的值
初始化!=赋值
注意:1.未经初始化的变量值为随机值
2.定义变量时最好对变量初始化
二.类型转换:
1.显示类型转换(强制类型转换,但只会转换一次)
例如:(int)3.14+3.14=6.14
2.隐式类型转换:
低精度转换高精度:
浮点型精度 > 整形精度
同种类型所占内存空间越大精度范围越高
无符号精度 > 有符号精度
float类型进行数据运算和数据处理时会转换为double类型
short、char类型进行数据运算和数据处理时会转换为int类型
char + char == int
char + short == int
float + float == double
float + double == double
float + int == double
三.运算符:
1.算术运算符:+ - * / % ++ --(其中/不能除以0;%不能对浮点数操作)
2.赋值运算符:= += -= *= /= %=(表示运算结果后结果对变量进行一次对应操作)
例如:int a = 2
a -= 5 -1
a = a - (5 - 1)
左值:允许放在赋值运算符左边的值
变量
常量、表达式均不能作为左值
右值:允许放在赋值运算符右边的值
常量、变量、常量变量组成的表达式
左值为浮点数类型,右值为整形,会将值扩展精度
左值为整数类型,右值为浮点数类型,会舍弃精度
左右两边均为整形:将右值直接拷贝到左值空间中
小数据放入大空间:数据扩展,有符号数高位补符号位,无符号高位补0
大数据放入小空间:直接截取数据低位放入小空间
例题:
char ch = 300;
printf("ch = %d\n", ch); 结果为44
计算过程: char为一字节0000 0000
300对应二进制 0001 0010 1100 原码
对应8位 0010 1100 对应结果为44
char ch = 130;
printf("ch = %d\n", ch); 结果为-126
计算过程: char为一字节0000 0000
130对应二进制 1 000 0010 原码(char内存范围-128 -- 127)
(符号位) -> 1 111 1101 反码
1 111 1110 补码 对应结果(-126)
3.三目运算符(特殊运算符)
表达式 ? 表达式1 : 表达式2
4.逗号运算符
从左到右依次执行表达式,并将最后一个逗号表达式的结果作为整体逗号表达式的结果
5.sizeof运算符
sizeof (数据类型/变量名) 获得数据类型/变量在内存中所占的字节数
四.C语言中常用的输入输出函数:
1.getchar putchar
2.scanf printf
3.gets puts
puthar的功能:在终端打印一个字符
注意:
1.putchar只能打印一个字符,想打印多个字符需要多次调用putchar
2.putchar只能打印字符
getchar的功能:从终端接收一个字符
注意:
1.getchar会将程序阻塞,直到用户输入数据,程序才能继续向下执行
2.getchar只能接收一个字符,想要接收多个字符需要多次调用
3.getchar只能接收字符
printf的功能:
1.打印非输出控制符:
\n 换行符
\t 横向制表符
\v 纵向制表符
\b 退格符
\r 回车符
\\ \字符
\" "字符
2.打印单个输出控制符:
int Num = 0;
double f = 3.14;
printf("Num = %d\n", Num);
%d 按照十进制打印
%o 按照八进制打印
%x 按照十六进制打印
%c 按照字符打印
%f 按照浮点数类型打印
%s 按照字符串打印
%p 按照指针类型打印
%u 按照无符号类型打印
%e 按照科学计数法打印浮点数类型
%% 打印%号
int %d
unsigned %u
char %c
float double %f
3.打印多个输出控制符
int Num1 = 100;
int Num2 = 200;
printf("Num2 = %d, Num1 = %d\n", Num2, Num1);
注意:
输出控制符的个数必须与后面的表达式个数一一匹配
4.printf格式化打印
%nd n:域宽,数据不足域宽,高位用空格补齐
%0nd 0:数据不足域宽,高位用0补齐
%-nd -:左对齐
%.mf m:保留小数点后m位有效数字
scanf 的功能:
1.接收非输入控制符
scanf("m");
非输入控制符需要原封不动的从终端输入
2.接收输入控制符
%d 按照有符号十进制接收数据
%c 按照字符接收数据
_%c 接收一个' '和'\n'的字符
%f 按照float接收数据
%lf 按照double接收数据
%s 按照字符串接收数据
3.接收多个输入控制符:
int Num1 = 0;
int Num2 = 0;
float f = 0;
scanf("%d %d", &Num1, &Num2);
scanf("%d %f", &Num2, &f);
注意:
1.scanf如果输入数据与想要接收的数据不匹配,从不匹配的位置开始不再向后读取
2.scanf除了%s形式外,都需要加 &
3.scanf除了%c形式外,均无法接收' '和'\n'字符
4.scanf中_%c可以接收非' '和'\n'字符
5.scanf中严禁\n
puts的功能:在终端打印一行字符串
注意:
puts会在字符串末尾多打印一个\n字符
gets的功能:从终端接收一行字符串
注意:
1.gets会去掉从终端接收的\n字符
2.gets可以接收带' '的字符串,scanf无法接收带' '的字符串