框架
#include <stdio.h>//头文件
int main()//main是主函数,只有一个,所有程序都从main开始
{
printf("Hello Word!\n");//输出内容。每一句结束都有“分号”(main函数外的不加)
return 0;
}
//代码加缩进,保证代码的易读性
字符类型
整型
类型名 | 类型标识符 | 占用字节数 | 取值范围 | 取值范围 |
---|---|---|---|---|
短整型 | short[int] | 2 | -215~215-1 | -32768~32767 |
基本整型 | int | 4 | -231~231-1 | -2147483648~2147483647 |
长整型 | long[int] | 4 | -231~231-1 | -2147483648~2147483647 |
无符号短整型 | unsigned short | 2 | 0~216-1 | 0-65535 |
无符号基本整型 | unsigned[int] | 4 | 0~232-1 | 0-65535 |
无符号长整型 | unsigned long | 4 | 0~232-1 | 0-4294976295 |
C语言并未规定数据类型所占字节数,由编译环境和系统决定
可用sizeof()测量所占字节
实型类型(浮点型)
3.4E-38:3.4*10-38
字符必须加单引号''
'a' 'A'是字符
'123'不是字符
ASCII码值
ASCII码值用来统一编码
?:34
A,a相差:32
标识符的命名规则
只能用字母、数字、下划线构成,第一个字符必须是字母或下划线
可用单词命名,如:end,flag_1
定义变量不能用符号
常量的分类
整型(int、long、short)
字面常量
直接以值的形式出现的常量 ,无需声明
- 整型:100,125,-100,0
- 浮点型:3.14,0.125,-3.789
- 字符型:'a','b','2'
字符串:"a","ab","1234"
编译器可自动判断类型#define BOOK 160//全局函数,写在main函数之外
//160是常量
//BOOK 等价于 160符号常量
#define 标识符 常量值(预处理命令)
例:#define PI 3.14159
PI就是一个符号常量,在编译程序时,程序中所出现PI的地方都会被替换成3.14159
含义清楚,一改全改
浮点型(float,double)
float对应%f,double对应%lf
- 十进制数形式:由数字和小数点及正负号组成。(必须有小数点)
例如:23.678 0.678 23. - 指数形式:由数字、小数点、字母e或E及正负号组成(字母e或E之前必须有数字且字母e或E之后必须为整数)
例如:3.5E-5 2e3 - 浮点常量只有在数值后加后缀“f”,才是float型,否则默认为double型。
实例
3.14159E-5L /*合法的*/
510E /*非法的:不完整的指数*/
210f /*非法的:没有小鼠或者指数*/
.e55 /*非法的:缺少整数或小数*/
E2 3.6e3.5 .e6 e /*非法的*/
E/e是科学计数法,在此记为10
2e3:2*103
210f不对,210.0f才是浮点型
字符型常量(char)
- 字符型常量:用单引号括起来的一个字符。例如:'a','A','$'。
特殊的字符常量(转义字符):当字符前面有反斜杠时,他们就具有特殊含义,被用来表示如换行(\n)等其他功能。
例如:'\n' (单个字符) '\ddd'(1~3位八进制数所代表的字符) (参照ASCII字符编码表) '\xhh' (1~2位十六进制数代表的字符)
说明
'a' 与 'A' 是不同的字符常量
单引号中的大小写代表不同的字符常量
' ' 也是一个字符常量
单引号中的空格字符也是一个字符常量
'abc' 是非法的
字符常量只能包含一个字符,除转义字符外
字符串
双引号""
包围
变量赋初值
所有的变量都是类型,如:int,char...
数据类型[=初值1]
int x = 10声明变量的同时,赋初值
一般格式:
数据类型 变量名1[=初值1],变量名2[=初值2],....
int x = 10; //整型变量 x 初始化为 10
float pi = 3.14; //浮点型变量 pi 初始化为3.14
char ch = 'A'; //字符型变量 ch 初始化为字符'A'
int d= 3,f = 5; //定义并初始化 d 和 f
注
1. 在声明时不允许连续赋值,如r=l=area=2.5是不合法的。
2. 等号的使用规则
可以先定义,后赋值。
如:
int x;
x = 20;
数据溢出:
数据过大超出范围,在最大值的基础上+1,然后取负,进入循环。
例:
#include <stdio.h>
int main()
{
short a,b;
a = 32767;
b = a + 3;
printf("%d,%d\n",a,b);
return 0;
}
运行结果:32767, -32768
说明:short型的范围:
-32768~32767,加1发生溢出。
为确保结果的正确性,请注意变量类型的选则。
(可以将b改成int型或者long型)
字符型变量
- 分类:
char型 和 unsigned char型
- 储存:
字符型变量在内存中储存的是该字符的ASCII码值的二进制形式
字符数据与整形数据可以相互赋值,直接运算
例:
char ch1,ch2; char ch1,ch2;
ch1 = 'a'; 等价于 ch1 = 97; //97 = 'a'
ch2 = 'b' ch2 = 98; //98 = 'b'
储存情况:
0 | 1 | 1 | 0 | 0 | 0 | 0 | 1 |
---|
97 |
0 | 1 | 1 | 0 | 0 | 0 | 0 | 1 |
---|
98 |
注释:char类型可以把字母当作ASCII码值
数据类型转换(不建议用!容易出错)
隐式(计算机内部运算)
混合运算
整型、实型和字符型数据可以混合运算,如果参加运算的两个数据类型不同,则先将其类型转换成一致再运算。
注:
1. char,short必须转换成int型;float型必须转换成Double型
2. 箭头只是表示转换方向
例:int型和double型进行运算,int直接转换成double型,不经过中间几个类型,结果为double类型
记忆技巧
char,short必须转换为int
float必须转换成double
低级转成高级
显式(只第一步显式,后面都是隐式)
强制转换
(要转换成的数据类型)(被转换的表达式)
如:
(int)(x+y)
(double)a
(float)5/2 //将5转换成浮点型再除2
(float)(5/2) //先5除2,再转换成浮点型
注释:5/2 = 2 因为是整型,c语言中没有四舍五入
注:
强制转换类型得到的是一个所需类型的中间量,原表达式的类型并不发生改变。
int a = 10;
double b = 0;
b = (double)a/2; //此时的a的数值是多少
printf("a的数值为%d\n",a);
printf("b的数值为%d\n",b);
//上机验证一下
基本算术运算符(双目运算符)
+(加法)
-(减法)“-”可作为单目运算符,放在运算量的前面。
*(乘法)
/(除法)两个整数相除,其商为整数;相除的两个数中有一个是浮点型,结果为浮点型
%(求余数)要求两侧的操作均为整数
求余数
5%2,商2,余1
5%5,商1,余0
2%10,商0,余2
除法
5/2=2
5/2.0=2.5(5是int。2.0是double。5转换成double——2.0。变成5.0/2.0=2.5)
计算优先级
先乘除,后加减
优先级(由高到低)
-(负号)-----> *、/、% ------> +、-(减法)
- 表达式中,运算符优先级较高的先于优先级较低的进行运算。
- 在一个运算量两侧的运算符优先级相同时,则按运算符的结合性所规定的结合方向处理。
- 例如:x = 7+32,在这里,x被赋值为13,而不是20,因为运算符 比 + 更高的优先级,所以先计算乘法3*2,然后再加上7。
综合性
从左至右(“-”当作符号使用时,右结核性)
综合性又称为计算顺序,他决定组成表达式的各个部分是否参与计算以及什么时候计算。
例如:3+2-1先算什么?
先+后-,原因:2两侧级别相同,看结合性
自增、自减运算(单目运算)
自增
++i:i = i + 1
i++:i = i + 1
自减
--i:i = i - 1
i--:i = i - 1
区别
i++:后++,先计算,后++
++i:先++
举例
int i,j; i = 5 + j;
i = 5 + j++; ==> j = j + 1;
--------------------------------------
i = 5+ ++j; ==> j = j + 1; i = 5 + j;
算术表达式
复合赋值运算符(双目运算符)(赋值运算符)
赋值运算符(部分)
在赋值运算符前加上其他运算符,组成复合赋值运算符
+= “加且赋值运算符”
-= “减且赋值运算符”
*= “乘且赋值运算符”
/= “除且赋值运算符”
%= “求模且赋值运算符”
注意:如果 “=” 右侧是包含若干项的表达式,则相当于他有括号。
体现C语言简介,使用方便灵活的特点
先把等式右边加括号,看作一个整体
逗号表达式
逗号运算符
,
逗号也是一种运算符,用它对两个表达式实现连接运算
逗号表达式
用逗号运算符将表达式连接起来的式子
表达式1,表达式2,......,表达式3
从左到右依次计算,表达式n的值为整个逗号表达式的值
(多个逗号相连中,最后一个表达式的值)
例题:
3 + 5,6 + 8 ===> 结果是14
计算
a = 3 * 5,a * 4 //a = 3 * 5是第一个表达式,a * 4是第二个表达式
a = 15;15 * 4 = 60
(a = 3 * 5,a * 4),a + 5 //a=3*5是表达式1-1,a*4是表达式1-2,a+5是表达式2
//表达式1为60,表达式2为 15+5
注意:
- 逗号运算符的优先级最低,且是左结合性。
- 逗号运算符只起连接作用,没有实际操作。
- 很多情况下,逗号仅用作分隔符。
优先级与结合性
优先级:赋值运算符的优先级低于算术运算符,结合性为自右至左
进制
C可以表示:十六进制、八进制、十进制,但 不能 表达二进制