C语言是一种高级语言
一.理论知识
1.C程序:
函数是C语言的基本组成单位
能完成某个任务的,有始有终的C语言序列称为C程序
用来编写程序的计算机语言称为程序设计语言
一段C语言代码被保存后会生成三个程序文件
1)源程序
扩展名是 .c ,不能直接在计算机上与执行,需要将其编译为二进制带代码。
2)目标程序
扩展名是 .obj 由源程序经过编译得到的二进制代码文件。还是不能运行。
3)可执行程序
扩展名是 .exe 目标函数与库函数连接,可以在操作系统运行。
2.main主函数:
一个源程序有且仅有一个main主函数,程序必须从主函数main()开始执行,并且在main()函数中结束
#include<stdio.h>
int main(int argc,char *argv[])
{
printf("Hello,world!");
return 0;
}
以上main函数括号里的参数int argc与char *argv[]一般省略。
在C语言里,我们把以一个分号结尾的一句话叫做C语言语句,分号是语句结束的标志
以#开头的叫做预编译处理命令
注释可以加在任何位置
3.C语言里的词语
1)标识符:
标识符由字母、数字、下划线组成,其中一个字符必须是字母或者下划线。标识符可以区分大小写,标识符主要以下两种。
- 关键字,又称保留字,C语言规定赋予专门用途的标识符,主要与数据类型和语句有关,如int、float、char、typedef(自定义类型),以及语句相关的if、else、while、for、break等
- 用户自定义标识符。一般包括程序中定义的变量名、数据类型名、函数名和符号常量
2)常量和变量:常量是有数据类型的,例如123,12.34,‘a’,"hello world"等。
3)运算符
(运算符专栏)
4)分隔符
;、[、]、(、)和#都是分隔符。
5)结构
- 顺序结构:从上往下,从左往右执行
- 选择结构:if()…else();switch;break(单支,双分支,多分支)
- 循环结构:for();while();do…while();continue;goto转向语句;return;(当型循环,直到型循环,次数型循环)
4函数的定义与调用
int max(int a,int b)------//函数头:函数类型 函数名(函数参数列表)
{ ---------------------//函数体开始
int x;---------------//函数中要用到的临时变量
if(a>b) x=a;---------//函数语句
else x=b-----------//
return x;-----------// 结束函数调用并且返回x的值
}------------------------//函数体结束
定义函数后,就可以在程序其他地方调用函数,函数名(传入参数)
5)输入与输出:C语言没有输入输出语句,它通过调用系统库函数有关函数printf()和scanf();
二.数据类型(1字节=8位)
1.基本数据类型
(有道题说最基本数据类型:字符,整型,实型)
数据名称 | 类型名 | 数据长度 | 取值范围 |
---|---|---|---|
[有符号]整型 | int | 32位 | -231~231-1 |
[无符号]整型 | unsigned int | 32 | 0~232-1 |
短整型 | short | 16 | -215~215-1 |
unsigned shor | 16 | 0~216-1 | |
长整型 | long | 32 | -231~231-1 |
unsigned long | 32 | 0~232-1 | |
单精度浮点型 | float | 32位 | ±10-38~1038 |
双精度浮点型 | double | 64位 | ±10-308~10308 |
字符型 | char | 8位 | 0~255 |
输出数据类型格式
格式 | 含义 |
---|---|
%d | 以十进制输出一个整数 |
%u | 以十进制输出一个无符号整数 |
%o | 八进制 |
%#o | 带前导的八进制 |
%x | 十六进制 |
%#x | 带前导的十六进制 |
%f | 保留6位小数的浮点数 |
%e | 以指数形式输出浮点数(小数点前仅有一位非零数字) |
%p | 输出地址值 |
printf("%2d",123);---指定输出2位,原数据3位,所以原样输出,不够前面补空格
printf("%8f",1.38)---指定输出8位,小数位为6位不够用0补充,小数点也算一位
printf("x.y%f",1.25)----x-->整个位数;y-->小数位数,需要四舍五入
2.构造类型
- 数组
- 结构体
- 联合体
3.枚举类型
4.指针类型
三.运算符
- 逻辑运算符
- 算术运算符
- 关系运算符
- 条件表达式
- 位运算符
- 赋值运算符
- 杂项运算符
优先级从高到低
算术运算符
运算符 | 名称 | 解释 |
---|---|---|
(单目)++ | 自增 | ++a(先赋值),a++(先运算再赋值):a=a+1; a=1;输出a++为1;而++a为2; |
- - | 自减 | - -a;a- -:a=a-1;同上 |
(双目)+ | 加 | |
- | 减 | |
* | 乘 | |
/ | 除 | |
% | 取余 | 两边必须是正整数 |
关系运算符
若A=10,B=20
运算符 | 描述 | 实例 |
---|---|---|
== | 检查两个数的值是否相等, 若相等,返回1否则0 | (A==B)返回0 |
!= | 检查两个数是否相等, 若不等返回1 | (A!=B)返回1 |
>;< | 判断运算符两边大小 | (A>B)返回0 |
>=;<= | … | (A>=B)返回0 |
逻辑运算符
A=1,B=0;
运算符 | 描述 | 实列 |
---|---|---|
&& | 逻辑与运算符,若两个操作数都非零, 则条件为真 | (A&&B)=0 |
|| | 逻辑或运算符,若两个操作数任意一个非零, 则条件为真 | (A||B)=1 |
! | 逻辑非运算符,逆转操作数 | !A=0; !(A&&B)=1; |
位运算符
以二进制进行的
A=60;B=13
运算符 | 描述 | 实例 |
---|---|---|
& | 按位与操作 0&0=0; 0&1=0; 1&1=1;` | (A&B)将得到12, 即00001100 |
| | 按位或运算;有1则1 | (A|B)=61,00111101; |
^ | 异或运算符;相同则0,不同则1; | (A^B)=49;00110001 |
~ | 按位取反 | (~A)=-61;11000011; |
<< | 左移,左边的二进制丢弃,右边补0; | A<<2;得到240;即11110000 |
>> | 右移,正数左边补0; 负数左边补1,右边丢弃 | A>>2;得到15;00001111 |
方便计算左移,右移,移动n位,左移则乘以2n,右移则除以2n;
按位取反比较有意思,这里贴个连接,感觉讲得比较详细易懂
按位取反的理解
赋值运算
运算符 | 描述 | 实例 |
---|---|---|
= | 等于 | |
+= | 加等于 | C+=A; 理解成C=C+A; |
-= | 减等于 | 同上 |
*= | ||
/= | ||
%= | ||
<<= | 左移且赋值 | |
>>= | 右移且赋值 | |
&= | ||
^= | ||
|= |
杂项运算符
运算符 | 描述 | 实例 |
---|---|---|
sizeof() | 返回变量大小 | sizeof(变量)返回变量类型大小; 若变量为int值,则返回4; |
type | 强制类型准换 | char(a);将a转为char型 |
& | 返回变量地址 | &a[0];返回数组a[0]元素的地址值 |
* | 指向一个变量 | *a将指向一个变量 |
?: | 条件表达式 | a?b:c 若条件a为真则返回b的值,否则返回c |
(a,b,c) | 逗号表达式 | 三个式子都计算,最后结果返回c |
运算符优先级
指针>单目运算符>双目运算符
乘除加减,
i++优先级大于++i;
类别 | 运算符 | 结合方向 |
---|---|---|
后缀 | ();[ ];++;- - | 从左到右 |
一元 | +;-:!;~;++;- -; (type);*;&;sizeof | 从右到左 |
乘除 | *;/;% | 从左到右 |
加减 | +;- | 从左到右 |
位移 | <<; >> | 从左到右 |
关系 | < <= > >= | 从左到右 |
相等 | ==;!= | 从左到右 |
位与AND | & | 从左到右 |
位异或XOR | ^ | 从左到右 |
位或OR | | | 从左到右 |
逻辑与AND | && | 从左到右 |
逻辑或OR | || | 从左到右 |
条件 | ?: | 从右到左 |
赋值 | =;+=;-=;*=;/=;%=;等等 | 从右到左 |
逗号表达式 | , | 从左到右 |