数据类型
内置类型
字符型
char
【signed】char 有符号的
unsigned char 无符号的
整型
短整型
short【int】
【signed】short int
unsigned short int
整型
int
【signed】int
unsigned int
长整型
【signed】 long int
unsigned long int
更长的整型 c99中引入
long long 【int】
【signed】long long int
unsigned long long int
浮点型
float 单精度浮点型
double 双精度浮点型
long double
布尔类型
_Bool
表示真假的变量
使用得包含头文件<stdbool.h>
布尔类型变量的取值是true或者false
sizeof操作符
sizeof是一个关键字,也是操作符,专门计算sizeof的操作符数的类型长度 单位是字节
sizeof的操作数可以是类型、变量、表达式
如果不是类型是表达式,可以省略后面的括号
后面的表达式不真实参与运算,是根据表达式的类型来得出大小
计算结果是size_t类型的
signed和unsigned
signed和unsigned是关键字,在C语言中用来修饰字符型和整数型
对于int类型,默认是带有正负号,即 int = signed int 所以signed可以省略
当int类型不带正负号,只表示非负整数,此时就必须用unsigned声明变量,此时,因为不显示负数,所以同样长度能够表示的最大整数值增大了一倍,范围是从零开始。
而char类型是不确定的,可能是signed char 也可能是unsigned char
signed
表示一个类型带有正负号,包含负值
unsigned
表示该类型不带有正负号,只能表示零和正整数
main函数
每个C语言程序不管有多少行代码,都是从main函数开始执行的,main函数是程序的入口,也被叫做主函数。
main函数有且仅有一个
即使一个项目中有多个.c文件,但是只能有一个main函数,因为程序的入口只有一个
scanf函数
scanf函数用于读取用户的键盘输入
scanf函数后面输入的是地址,scanf("%d",&[x]) [x]表示用户从键盘输入的整数存入这个变量中
scanf函数在处理占位符时,会自动过滤空白字符,包括空格,制表符,换行符等
scanf中的占位符与printf中的占位符基本相同,如%c,%f,%lf,%Lf,%s,%[]
%[]:在方括号中指定一组匹配的字符(如[0~9]),遇到不在集合中的字符,匹配会停止
除%c以外都会忽略起手的空白字符
%s:规则有点不同,是从当前第一个非空白字符开始读起,直到遇到空白字符(即空格,换行符,制表符等)为止 。%s不包含空白字符,所以无法用来读取多个字符除非多个一起使用,而且scanf在遇到%s时会在字符串变量末尾存储一个空字符\0
scanf将字符读入字符数组时,不会检测是否超出数组长度,为了防止超出,在使用%s占位符时,应该指定读入字符串的最长长度,即写成%[m]s,其中[m]是一个整数,表示读取字符的最长长度,后面的字符会被丢弃
%c不忽略空白字符,总是返回当前第一个字符,无论该字符是否为空格
如果要强制跳过字符签的空白字符,可以写成scanf(" %c",&ch),即%c前加上一个空格,表示跳过0个或多个空白字符
scanf的解读:用户在键盘输入的先放入缓存区,按下回车键后,按照占位符对缓存进行解读。解读用户输入时,会从上一次解读遗留的第一个字符开始,直到读完缓存,或者遇到第一个不符合条件的字符为止
scanf的返回值:返回值是一个整数,表示成功读取的变量个数,如果没有读取任何项,或者匹配失败,则返回0
如果在成功读取任何数据之前,发生了读取错误,或者遇到读取文件结尾,则返回常量 EOF(-1)
EOF - end of file 文件结束标志
注意:scanf在VS中会报错,其他的不一定会出现这种问,
需要加上 #define _CRT_SECURE_NO_WARNINGS 1
赋值忽略符
符号为* 为了避免用户输入格式错误导致scanf解析失败,可以将复制忽略符*加在%后面
加了之后,该占位符就不会返回值,解析后被丢弃
printf函数
C语言的标准库中提供的现成函数
能够在屏幕上打印信息
printf 是 print format 即按照格式来打印信息
printf()不会在结尾自动添加换行符 可以在字符结尾添加 \n 来实现换行
允许限定占位符的最小宽度,例如%5d 表示这个占位符宽度至少五位,不满会在前面加空格
输出默认右对齐,就是会在输出的内容前面加空格,如果想改成左对齐,在输出内容后面加空格,可以在占位符的%前面加一个 -
占位符
占位符的第一个字符一律为% 第二个字符表示占位符的类型
以下是几个常用的占位符
%c 打印字符 %d 打印整数 %f打印小数(默认打印后六位,double:%lf,保留两位可以写为%.2f,三位就是%.3f) %s打印字符串
既限制宽度又限制小数位数(%6.2f既表示输出字符最小宽度为6,小数位数为2)
还可以写为printf("%*.*d",6,2,0.5) 表示输出0.5,最小宽度为6,小数位数为2
一般情况是默认全部输出,如果只想输出开头的部分可以用%.[m]s输出指定的长度其中[m]代表一个数字表示要输出的长度
要想多个占位符一起用 直接在需要的位置写占位符即可,注意在后面要按顺序写出要在占位符输出的数值或者字符,用逗号隔开(如果没有会输出任意值)
赋值操作符
= 是给变量进行赋值的操作符
也可以进行连续赋值,例如a = b = c+1,但是不建议这样做,容易出错
单目运算符
单目操作符 即 只对一个变量进行了操作
!(逻辑非) ~(按位取反) ++(自增) --(自减)
前置++ 例如 ++a 前置就是将变量a先自加再使用 当++与=同时存在时,例如b = ++a 就是先进行自加,再赋值
后置++ 例如a++ 后置就是先使用,后自加 当与=同时使用时,b = a++ 就是先将a的值赋值给b a再自加
--同上
算数运算符
也叫双目运算符 即只对两个变量进行了操作
算数操作符 + - * / %
前四个就是正常数学运算符,就不赘述 不过注意,要想除法结果有小数,得让除数或者被除数有一个为小数
% 即返回两个整数相除的余值,只能用于整数,不能用于浮点数。其结果的正负号由第一个运算数的正负号决定