目录
1.数据类型框架
其中,布尔类型的使用要包含头文件<stdbool.h>;布尔类型变量的取值为:true或者false。
2.数据类型长度
2.1.sizeof操作符
(1)sizeof的操作数可以是类型也可以是表达式(后面的括号可省略):sizeof(类型)/sizeof 表达式;
(2)sizeof的计算结果是size_t类型的,size_t类型的返回值可能是unsigned int/unsigned long long;
(3)sizeof后面的表达式不参与真实计算,根据表达式类型得到计算结果大小;
(4)C语言中规定:sizeof(long)>sizeof(int);
2.2.signed和unsigned
(1)使用signed和unsigned修饰字符型和整型;
(2)signed:一个类型带有正负号,包含负值;
(3)unsigned:该类型不带有正负号,只能表示零和正整数;
(4)如果要用int只表示非负整数,则必须使用unsigned声明变量;unsigned int中int可省略;
(5)int(默认带有正负号)==signed int;char则可能为signed/unsigned char;
3.变量
3.1.变量的创建
类型是用于创建变量的;经常变化的值就是变量,不变的值就是常量。
(1)语法形式:
data_type name
| |
| |
数据类型 变量名
(整型变量、字符变量、浮点型变量)
(2)初始化:创建时给变量赋一个初始值。
3.2.变量的分类
(1)全局变量:大括号外部定义的变量;
作用范围:整个项目;
(2)局部变量:大括号内部定义的变量;
作用范围:函数内部的局部范围;
(3)当全局变量与局部变量同名时,局部优先;
(4)内存中的三个区域:栈区、堆区、静态区:
1>局部变量储存在栈区;
2>全局变量储存在静态区;
3>堆区用于动态内存管理。
4.算术操作符
4.1.双目操作符
两端有两个操作数(位于操作符两端的就是操作数)为双目操作符。
(1)加法:+
(2)减法:-
(3)乘法:*
(4)除法:/
1>除号两端均为整数,执行整数除法,结果也为整数(舍弃小数部分);
2>除号两端至少有一个为浮点数,则执行浮点数除法;
3>%f——float; %lf——double
(5)取模:%
返回值为两个整数相除所得的余数,结果正负号由第一个运算数的正负号决定。
(6)赋值操作符:变量创建时给一个初始值叫做初始化;变量创建完再给一个值叫做赋值。
4.2.复合赋值符
+= %= >>= <<= ^=
-= &= |= *= /=
4.3.单目操作符
(1)++:前置++:先+1后使用;后置++:先使用后+1;
(2)--:前置--:先-1后使用;后置--:先使用后-1;
(3)+:表示一个数为正数;
(4)-:表示一个数为负数;
5.强制类型转换
两边类型不同时再使用:
int a = 3.14;//a为int整型类型,而3.14为浮点数double类型,两边类型不同会报警告
int a = (int)3.14//将3.14强制转换为int类型,这种强制类型转换只取整数部分
6.scanf和printf
6.1.占位符
(1)printf()和scanf()的参数与占位符一一对应;
(2)占位符举例:
1>%c :字符
2>%d :⼗进制整数
3>%i :整数,基本等同于 %d
4>%f :⼩数(包含 float 类型和 double 类型)
5>%hd :⼗进制 short int 类型
6>%Lf :long double 类型浮点数
7>%p :指针
8>%s :字符串
9>%u :⽆符号整数(unsigned int)
10>%zd : size_t 类型
6.2.printf
(1)限定宽度:允许限定占位符的最小宽度;
printf("%5d\n",123);//此处%5d表示至少占5位,如果不满足则会补空格
//%5d默认为右对齐,如果希望是左对齐则为%-5d
若对于小数,则会限制所有数字的最小显示宽度:
printf("%12f\n",123.45);
//输出的浮点数最少占12位,由于小数的默认精度为小数点后6位
//故输出结果为__123.450000
printf("%2f\n",123.45);
//由于此时已经超过了2f,故会按照实际情况打印
//输出结果为123.450000
(2)总是显示正负号:printf只对负数输出负号,若要对正数输出正号,则应输出%+d
%+d可以保证输出的数值总是带有正负号;
(3)限定小数位数: 希望保留几位小数,就写成%.数字f;
printf("%6.2f\n",0.5);
//总共打印6位,小数点后为2位
//故输出结果为:__0.50
(4)最小宽度和小数位数都可以用*代替,通过printf()参数传入:
printf("*.*f\n",6,2,0.5);//等同于printf("6.2f\n",0.5);
(5)输出部分字符串:
printf("%.5s\n","hello world");//表示只输出前5个字符,即hello
6.3.scanf
(1)语法跟printf类似,但变量前必须加上&(指针变量除外),因为scanf传递的是地址;
(2)scanf处理数值占位符时,会自动过滤空白字符,包括空格、制表符、换行符等;
(3)所有占位符中除%c之外都会自动忽略起首的空白字符;如果要强制跳过字符前的空白字符,可以写成scanf(" %c",&ch);
(4)%s从第一个非空白字符读起,直到空白字符(空格、换行符、制表符)为止;
#include<stdio.h>
int main()
{
char name[11];
scanf("%10s",name);
//name是一个长度为11的字符数组,%10s表示只读取10个字符,留一个给\0,避免数组溢出
return 0;
}
6.4.赋值忽略符
为了避免因为采用形式不同导致解析数据出错的情况,赋值忽略符*加在任何占位符的百分号后面,解读后不会返回值。