目录
语句分类
(标红的为三种基本的顺序语句)
1.数据声明语句 :说明变量的数据类型,也可同时完成变量的初始化。
2.表达式语句:进行数据运算或处理的语句。
3.控制语句:完成一定的控制功能,常用于规定语句执行的顺序。
4.特殊语句:空语句。仅由一个分号构成,表示什么也不做。复合语句。由花括号括起来的在逻辑上相关的一组语句。
表达式语句
1.表达式:
由运算符连接运算对象(操作数)所组成的式子。
·单个的常量、变量、函数也是表达式;
·算数表达式;(由算数运算符号和括号将运算对象(也称操作数)连接起来的、符合C语法规则的式子。)
eg:
num*money //进行乘法运算的表达式
·赋值表达式;(一般形式:变量=表达式)
注:赋值表达式中“=”右边也可以是赋值表达式,“=”具有右结合性。
2.算数运算符
+:加法,用于将两个值相加。
-:减法,用于将一个数从另一个数中减去。
*:乘法,用于将两个值相乘。
/:除法,用于将一个数除以另一个数得商。(若a,b是整数,则为整除)
%:求余,用于计算一个数除以另一个数的余数(a,b都必须为整数)
++/--:自增自减符(只能对变量处理)
注:
·操作数有一个是浮点型,结果也是浮点型。除法操作符 / 在整数运算时会进行截断,丢弃小数部分。如果需要得到浮点型的结果,应该使用浮点型变量或者强制类型转换。
·使用变量之前必须先定义;变量不能没赋值就使用;变量名要符合变量命名规则;变量名不能重名;语句不能漏掉分号。
3.赋值语句
赋值语句由赋值表达式加分号构成,一般形式为:变量名=表达式;
注:
·变量初始化时不允许给多个变量赋初值,可用逗号间隔给多个变量赋初值。
·语句不可以出现在表达式中。
·支持“+=,-=,*=,/=”等复合赋值运算符。
a+=b; /*等同于 a=a+b*/
a-=b; /*等同于 a=a-b*/
a*=b; /*等同于 a=a*b*/
a/=b; /*等同于 a=a/b*/
a%=b; /*等同于 a=a%b*/
数据类型
变量与常量
常量:其值保持固定不变;变量:随着程序的运行发生变化,长度用字节来描述。
8bit(位)=1byte(字节),1024byte=1KB,1024KB=1MB,1024MB=1GB,1024GB=1TB.
·整型变量与整型常量
整型变量:
定义大于0的整数类型,用到类型说明符unsigned
类型 | 存储空间大小 | 最小值 | 最大值 |
---|---|---|---|
char | (与 signed char 或 unsigned char 相同) | ||
unsigned char | 1个字节 | 0 | 255 |
signed char | 1个字节 | -128 | 127 |
int | 2个或4个字节 | -32 768 或 -2 147 483 648 | 32767 或 2 147 483 647 |
unsigned int | 2个或4个字节 | 0 | 65 535 或 4 294 967 295 |
short | 2个字节 | -32 768 | 32 767 |
unsigned short | 2个字节 | 0 | 65 535 |
long | 4个字节 | -2 147 483 648 | 2 147 483 647 |
unsigned long | 4个字节 | 0 | 4 294 967 295 |
long long (C99) | 8个字节 | -9 223 372 036 854 775 808 | 9 223 372 036 854 775 807 |
Unsigned long long (C99) | 8个字节 | 0 | 18 446 744 073 709 551 615 |
整型常量:
十进制常量:由0-9组成的数字序列。例如:123
八进制常量:以0(零)开头,后跟0-7的数字序列。例如:0123
十六进制常量:以0x或0X开头,后跟0-9或A-F的数字序列。例如:0x7B
除此之外,还可以在整型常量末尾加上一个后缀,表示变量的类型。例如:
10L表示长整型常量
10U表示无符号整型常量
10UL表示无符号长整型常量
其中,L表示long,U表示unsigned,UL表示unsigned long。如果没有后缀,则默认为int类型的整型常量。
·浮点型变量与浮点型常量
浮点型变量:有两种类型,即float、double。
float类型:存储单精度浮点数,占用4个字节的空间,范围约为±3.4e-38至±3.4e+38,精度约为7位小数。
double类型:存储双精度浮点数,占用8个字节的空间,范围约为±1.7e-308至±1.7e+308,精度约为15位小数。
注:
浮点型变量应该用%f格式化输出。
浮点型变量不应该直接与0比较,因为浮点数存在精度误差,应该用fabs函数判断一个浮点型变量是否等于0。
在计算时应该考虑到浮点数的精度问题,避免出现精度误差过大的结果。
浮点数的运算速度比整数慢,因此在需要高效运算的情况下应该尽可能使用整数运算。
浮点型常量:默认类型为double,和整型常量有后缀一样,浮点型常量末尾也可加上浮点型后缀,后缀f或F表示float型。
·字符变量与字符常量
字符变量:指被定义为 char 类型的变量。可以使用赋值运算符将一个字符值赋给一个字符变量。例如:
char ch;
ch = 'a';
这里定义了一个名为 ch 的字符变量,并将小写字母“a”赋给它。字符变量可以用于存储任何单个字母、数字或符号。
字符常量:指一个已知的、固定的字符值。在C语言中,字符常量用单引号('')括起来。例如:
char ch = 'a';
这里定义了一个名为 ch 的字符变量,并将小写字母“a”赋给它。在这种情况下,“a”被视为一个字符常量。
字符常量可以是任何单个字母、数字或符号。字符常量只能包含单个字符,而字符变量可以存储任何单个字符。
ASCII码:
ASCII码(American Standard Code for Information Interchange,美国信息交换标准代码)是一种将字符编码成数字的标准系统。它共定义了128个字符,包括数字、字母、符号和控制字符等。
在C语言中,每个ASCII字符都有一个对应的整数值:
0~9:48~57
大写字母A~Z:65~91
小写字母a~z:97~123
·变量类型的转换
自动类型转换:当表达式中包含不同数据类型的变量时,编译器会自动根据一定规则进行类型转换,使得表达式计算结果的类型与所赋值的变量类型相同。例如:
int a = 10;
double b = 3.14;
double c = a + b; // a会被自动转换为double型再与b相加得到c的值
转换规则如下
降级:等级较高的类型被转换成等级较低的类型。
强制类型转换:可以通过在变量前加上需要转换的类型来进行强制类型转换。
一般形式:(类型说明符)(表达式)
例如:
int a = 10;
double b = 3.14;
int c = (int)(a + b); // 将a+b的结果强制转换为int型再赋值给变量c
注:在“降级”或强制类型转换时可能会造成精度损失或者溢出现象,编译器会把高位部分截断。
库函数(生成随机数)
C语言提供了rand()和srand()两个库函数用于生成伪随机数。
·rand()
rand()函数生成一个0到RAND_MAX(在stdlib.h头文件中定义)之间的伪随机整数。(每次生成随机数相同)
用法:
void rand(void)
设定范围:从X到Y,有Y-X+1个数,所以要产生从X到Y的数 k=rand()%(Y-X+1)+X
·srand()
srand()函数用于初始化rand()函数生成随机数所使用的种子值。如果不设置种子值,则每次程序运行时都会生成相同的随机数序列。
用法:
#include <stdlib.h>
void srand(unsigned int seed);
通常情况下,可以使用time()函数作为srand()函数的种子值,以确保每次生成不同的随机数序列:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
srand(time(NULL)); // 使用当前时间作为种子值
int random_num = rand() % 10; // 生成0-9之间的随机数
printf("The random number is: %d", random_num);
return 0;
}
设定范围:从X到Y,有Y-X+1个数,产生从X到Y的数 k=rand()%(Y-X+1)+X,从0开始则可省略“+”以及后续内容。
指针变量
定义指针变量:一般形式为 类型名 *指针变量名
eg:
int *pa;
指针变量赋值:定义后不能直接使用,先给它赋值为某个变量的内存地址,然后使用。
eg:
int a=0;
int *pa;
pa=&a; //给pa赋值为a变量的内存地址
指针变量初始化:定义指针变量的同时完成赋值称。
eg:
int a=0;
int *pa=&a;
通过指针间接访问变量:建立指向关系后,用间接访问符“*”作用与指针变量来得到需要的值。