变量
变量是唯一用来存储数据的工具
不同的变量应该使用不同的名称命名
一个变量只能用来存储某种特定类型的数据
变量必须先声明然后再使用
变量声明语句格式如下
int num;
其中num是变量名,int表示变量类型,整数类型
赋值操作符(=)用于对变量进行赋值操作。要求左边是一个变量,右边是一个可以当成数字使用的内容。
赋值语句中的数字如果和变量的类型不一致,则计算机会自动调整类型。
在程序中变量可以当成数字使用
变量名在程序中的作用由环境决定
同类型的多个变量可以在一条变量声明语句中声明。
在变量声明语句中可以直接对变量进行赋值操作,这叫做变量的初始化。
变量练习:
代码演示:交换两个变量内容
#include <stdio.h>
int main()//主函数,一个程序的入口
{
int var1 = 10; //变量的初始化
int var2;
var2 = 20;//变量的赋值
int var3; //定义并未初始化,是一个随机值
/*交换两个变量的值*/
var3 = var1; //把var1放进var3
var1 = var2; //把var2放进var1
var2 = var3; //把var3放进var2
printf("var1=%d,var2=%d\n",var1,var2);
return 0;
}
printf函数
printf函数可以把信息打印在屏幕上
需要在文件开头加入如下一行语句
#include <stdio.h>
如果不写这句,编译器不知道printf是怎么实现的,而printf的功能实现,都写在了头文件stdio.h中。
使用格式为: printf("要输出的内容",变量名1,变量名2,...);
这里有三个注意点:
1 “要输出的内容” 里写什么,屏幕就输出什么
2 %d叫做格式字符,也叫占位符,它的作用是把后面变量的值转移过来然后输出。不同类型的变量,有不同的格式字符。比如
数据类型 占位符
int %d
float %f/%g
double %lf/%lg
比如输入一个双精度浮点类型double变量
double var = 1.4;
printf("%lg\n",var);
所以就是这样的,一一对应
printf("占位符1,占位符2,占位符3...",变量1,变量2 ,变量3...);
3 \n表示换行符,在屏幕输出的时候会换到下一行,从行首输出“”里的内容,可放在“”里的任意位置
练习:输出如下格式的数据
1 X 9 = 9
2 X 8 = 16
3 X 7 = 21
4 X 6 = 24
5 X 5 = 25
54321
5432
543
54
5
54321
65432
76543
87654
98765
12345
12435
14235
scanf函数
scanf函数可以从键盘上读取信息并记录到变量中。
在使用scanf函数的时候需要使用变量的地址数据来表示变量。
为了使用scanf函数需要在文件前加上如下一条语句
#include <stdio.h>
使用scanf函数的时候不要在格式字符串中加入\n或其他内容。
如果用户在键盘上输入的格式与格式字符串要求不一致则可能导致后面的所有读取工作都失败。
scanf函数可以一次读取多个数据
/*声明两个变量,从键盘输入2个数保存到其中*/
int var;
float var2;
scanf("%d%f",&var,&var2);//双引号里不能写\n
数据类型
C语言中把所有数字进行分组,每个分组叫做一个数据类型。不同数据类型之间有重叠,有些数据可能属于多个分组。
字符类型是一种数据类型,使用char表示。
ASCII码表用来记录字符和数字之间的对应关系。
'a' -- 97
'A' -- 65
'0' -- 48
ASCII码表中的所有字符构成char类型的所有数据
一共256个字符分成两组,一组对应从0到127这些数字,另外一组可以对应从-1到-128这组数字也可以对应从128到255这组数字。
unsigned char也是一种数据类型(叫做无符号字符类型),同样对应ASCII码表中所有字符。这个类型中的所有数据转换成数字以后一定是非负的。
'c' - 'a' 等于 'C' - 'A' 等于‘2’ - ‘0’
'\n' 换行(换到下一行)
'\r' 回车(换到行首)
'\t' 制表符
'\\' 代表\
'\'' 代表'
'\"' 代表"
short代表短整数数据类型。
一共包含65536个不同的整数数字,从-32768到32767为止。
unsigned short代表无符号短整数类型,从0到65535为止。
long代表长整数数据类型。
long类型包含2的32次方个不同的数字,一半是负的,另一半是正的。
unsigned long代表无符号长整数,同样包含2的32次方个不同的数字,从0开始。
在我们使用的计算机和编译器环境下int和long是一样的.
float表示单精度浮点数。
double表示双精度浮点数。
在整数数字后加小写u表示数字来源于无符号整数类型,例如7u表示无符号整数的数字7。
带小数点的数字缺省当成double类型,例如3.5是双精度浮点类型的数字。在数字后面加小写字符f则表示数字是单精度浮点类型,例如3.5f表示单精度浮点类型数字。
不同数据类型对应的占位符
char -- %c
short -- %hd
unsigned short -- %hu
long -- %ld
unsigned long -- %lu
int -- %d
unsigned int -- %u
float -- %f或%g
double -- %lf或%lg
多种占位符的灵活使用
%3d,%03d,%-3d, %7.2f
计算机的内存被划分成很多字节,任意两个字节大小一样。
一个变量由内存中一个或多个连续字节来存储 。
一个变量所占字节个数必须是2的整数次方
sizeof关键字可以用来计算某个数据类型或某个变量所占空间的大小
char,unsigned char 1个字节
short,unsigned short 2个字节
long, unsigned long 4个字节
int,unsigned int 4个字节
float 4个字节
double 8个字节
sizeof语句中对变量所做的修改不会真正发生
int var = 10;
sizeof(var=20);//不会改变var值
所有正整数一定可以拆分成多个正整数之和,而且这些拆分出来的正整数都是2的整数次方
二进制是一种表示数字的方式,每个数位上只能是0或者1,每个数位上的1都对应2的整数次方。
二进制转换十进制:
1011 0011 = 1000 0000 + 0010 0000 + 0001 0000 + 0000 0010 + 0000 0001 = 128 + 32 + 16 + 2 + 1 = 179
0100 1100 = 0100 0000 + 0000 1000 + 0000 0100 = 64 + 8 + 4 = 76
十进制转二进制
79 % 2 1 79 / 2 = 39
39 % 2 1 39 / 2 = 19
19 % 2 1 19 / 2 = 9
9 % 2 1 9 / 2 = 4
4 % 2 0 4 / 2 = 2
2 % 2 0 2 / 2 = 1
1 % 2 1 1 / 2 = 0
0100 1111
103 % 2 1 103 / 2 = 51
51 % 2 1 51 / 2 = 25
25 % 2 1 25 / 2 = 12
12 % 2 0 12 / 2 = 6
6 % 2 0 6 / 2 = 3
3 % 2 1 3 / 2 = 1
1 % 2 1 1 / 2 = 0
0110 0111
97 = 64 + 32 + 1 = 0100 0000 + 0010 0000 + 0000 0001 = 0110 0001
103 = 64 + 32 + 4 + 2 + 1 = 0100 0000 + 0010 0000 + 0000 0100 + 0000 0010 + 0000 0001 = 0110 0111
一个字节可以存储八个二进制位
任何数据类型所能表示的数字个数由变量可以转换成的二进制位数决定。
八进制是二进制的一种简写方式
二进制数字从右向左每三位合并成一个0到7之间的数字,合并后的结果就是数字的八进制表示形式。
程序中八进制表示数字必须以0开头
八进制的占位符是%o
十六进制也是二进制的一种简写方式
每个分组包含四个二进制位
a == 10
b == 11
c == 12
d == 13
e == 14
f == 15
程序中十六进制的数字必须以0x开头
十六进制对应的占位符是%x或%X。