1、变量:
- 在程序执行过程中值可以被改变的量
- 变量代表内存中具有特定属性的一个储存单元,用来储存数据,也就是存放变量的值
- 变量有一个名字,以便于可以通过名字访问变量
例如:
#include <dtdio.h>
int main()
{
//①:声明变量并初始化
int age = 21; //这里的 = 是赋值
int count;
count = 10;
//②:初始化并修改变量的值
int number = 12;
printf("%d\n",number);///12, %d是十进制int的格式化符
number = 22;
printf("%d\n",number);//我们对同一个变量进行赋值的时候,后面赋的值会覆盖掉前面赋的值
}
变量的命名规则:
- 变量名必须以字母(a-z)或者下划线(_)开头,后面可以跟若干个字母、数字或下划线;
- 变量名不能与C语言中已经存在的标识符(如:int,float,void,if,break等)重名;
- 变量名、变量值以及变量所占存储单元之间的联系:
标识符:
- 用来表示对象名字的有效字符。对象包括变量、处理、数组、函数、类型等。也就是标识符就是对象的名字
- C语言规定标识符只能由字母、数字和下划线3种字符 构成,且第⼀个必须为字母或者下划线。举例:number,_int
- 编译系统对大小写很敏感。变量名和函数名⼀般用小写字母+下划线,常量名和枚举名⼀般⽤大写字母+下划线。 举例:变量(set_count)函数(set_count())常量(SET_COUNT)
c语言有三类标识符:
- 关键字:有32个,系统有特定的含义和用途:如:float,int,if,else等,不能用作自定义表示符(变量和函数)
- 系统预定义的标识符:如系统提供的库函数名sim,printf,main,scanf以及预处理命令define,include等
用户标识符:
用户定义的标识符,、用来给程序的变量、自定义函数、符号常量、数组、结构体、共用体、文件等命名
在c语言,要求对所用到的变量使用前必须先强制定义,先定义在使用 。
c语言中右32个关键字,不允许用户来定义标识符
12个预处理命令:
⼀个类型说明语句可以同时定义多个类型的变量,各个变量之间使用逗号","分隔,多个同类型的变量也可以用多个类型说明语句定义:
// 一个类型说明语句可以同时定义多个类型的变量
int a,b,c,d;// 同类型
int a1 = 3,b1 = 4,c1 = 5, d1 = 6;
// 多个同类型的变量也可以用多个类型说明语句
int a;
int b;
int c;
int d;
int a1 = 3;
int b1 = 4;
int c1 = 5;
int d1 = 6;
用类型说明语句定义的变量只是说明了为这些变量分了存储空间。以便于存放与之相同类型的数据,在未对这些变量赋值前,这些变量中的值是随机的 ;
C语言允许在定义变量的同时为变量赋初始值;
在为长整型变量初始化或者赋值时,如果被赋值数据为基本整型常量,则C编译系统自动将被赋值数据转换成与相应变量类型⼀致。
例如:
long a = 12;// 左边是long类型变量,右边是int常量,当完成赋值操作后,右边的12的类型转换为long
2、基本数据类型(整形、浮点型、字符型)
2.1:数据在内存中的存放方式
- 数据都是运行在内存中
- 数据在内存中是以二进制的形式存放
int i;//定义i为存储整形变量
i =10;//给i赋整数值为10
例如:10 的二进制数是:1010 、则内存中实际存放形式为
- 实际上,数据在内存中是以补码的形式表示的。
- 正数的补码和原码是相同的(该数的二进制形式)
- 负数二点补码是将该数
绝对值
的二进制形式按位取反+1(按位取反是反码,一个一个的取反0变1,1变0),也就是反码右端+1变补码
在内存中最终储存是变量的补码
反码就是中间量用来转换原码和补码(原码针对应用层)
在存放整数的存储单元 ,⼀般情况下,最左边的⼀位应用来表示符号位,符号位为0表表示正数,符号位为1表示负数。
2.2、浮点型数据
浮点型数 也是 实数、小数
2.21:浮点型变量的分类
- 单精度浮点型(float):在64为系统中是4个字节,精确到小数点后6位,%f
- 双精度浮点型(double):在64位系统中典型是8字节,精确到小数点后15-16位 ,%lf
- 长双精度浮点型:(long double):16个字节
占用内存越多,能表达精度越高
2.22:浮点型数据在内存中的存放形式
浮点型数据在内存中按照指数形式存放,系统将一个浮点数分成 小数部分和指数部分,分别存放。
2.3:字符型数据
字符型变量用来存放字符常量。char c ='A'
char 变量列表;
#include <dtdio.h>
int main()
{
char c1,c2;
c1 = 'a';
c2 = 'b';
printf("c1=%c\n",c1);//输出字符本身
printf("c2=%c\n",c2);//输出字符本身
printf("c1=%d\n",c1);//输出对应的ASCII表编号 c1 =97
printf("c2=%d\n",c2);//输出对应的ASCII表编号 c2 =98
}
ps:在
ascll码表中小写大写差32 小-大-32 大-小+32
一个字符变量只能存放一个字符。c编译系统都规定以一个字节的存储空间来存放存放一个字符,因此,一个字符变量在内存中的大小是1字节(占一个字节)
2.32:字符数据在内存中的存储形式
将一个字符常量存入一个字符变量,实际上并不是把该字符本身存入内存单元中,而是将该字符对应的ASCII码存入内存单元。
'a'的ASCII码为97、'b'的ASCII编为98,他们在内存中的存放形式如下所示:
实际上是按照二进制存放,形式为:
由此可见,在内存中字符数据的存储形式与整型数据类似,这就使得字符型数据和整型数据之间可以通用。也就是1个字符数据既可以字符形式输出,也可以以整数形式输出。
以字符形式输出时,编译系统将内存单元中的ASCII码转换成相应的字符,然后输出。
以整数形式输出时,直接将ASCII码作为整数输出。
因此,可以对字符数据进⾏算术运算,这时相当于对其ASCII码进行算术运算。
例如:
#include <stdio.h>
main() // 此时默认返回值类型是int
{
char c1,c2;
c1 = 97;
c2 = 98;
printf("%c %c \n",c1,c2);// 以字符形式输出,a b
printf("%d %d \n",c1,c2);// 以整数形式输出,97 98
}
char类型大小写字母的转换:
#include <stdio.h>
int main()
{
char c1,c2;
c1 = 'a';// 97
c2 = 'b';// 98
// 转大写
c1 = c1 - 32;// 赋值运算,运算规则是,由右到左
c2 = c2 - 32;
printf("%c %c \n",c1,c2);// ① A B ② 65 66 ③ 'A' 'B'
}