内存
1byte=8bit
1KB=1024byte
1MB=1024byte
1G=1024MB
1T=1024G
变量
- 变量可以由数字、字母和下划线组成且不能以数字开头
- 任何不满足条件的变量都是非法变量,如含有特殊字符的变量等
- 变量不能含有空白字符,如空格、换行符等
- 变量区分大小写
- 变量不能是c语言中的关键词
变量的命名可以随机,但是要符合命名规则
整数类型
变量拥有三个属性,即变量名、数据类型和值
变量类型 | 类型说明符 | 取值范围 | 所需内存字节数 |
短整型 | short int | -2^15~2^15-1 | 2 |
整型 | int | -2^31~2^31-1 | 4 |
长整型 | Long int | -2^31~2^31-1 | 4 |
无符号短整型 | unsigned short int | 0~66535 | 2 |
无符号整型 | unsigned int | 0~4294967295 | 4 |
无符号长整型 | unsigned long int | 0~4294967295 | 4 |
注:-2^15~2^15-1为-32768~+32767
-2^31~2^31-1为-2147483648~+2147483647
在同一数据类型的前提下,无符号能表示的范围是有符号的二倍
变量的声明和使用
变量要先声明后使用,其中部分情况还需赋初值之后再次使用,否则会参与运算时自动赋予变量一个随机值(垃圾值),从而使结果远远偏离实际数值。若在编译其中未声明就使用,则会编译报错,如devc++中会出现:
‘变量名称’ was not declared in this scope.
赋值运算
在计算机当中,=的使用方法不同于数学,例如a=b,则是把b的值赋给a,即“右赋左”。
当a==b时,才表示为a值与b值相等。
格式化输出、输入函数printf与scanf
因printf函数包含在stdio.h当中
所以使用时要先声明一下
#include<stdio.h>
由于printf输出时对于输出类型已经确定,不同于c++中cout简单暴力的输出方式,所以输出所用时间一般较为短暂,也有利于对于数据类型的准确理解与把握。
输出字符串printf(“字符串内容”)
长度和宽度修饰符
int x;
printf(“%m.nd”,x);
输出宽为m列,长为n位的十进制整数x
转换字符串 | 说明 |
%c | 单个字符 |
%d | 十进制有符号整数 |
%s | 字符串(不含空格) |
%f | 单精度浮点(小数) |
%u | 十进制无符号整数 |
%o | 八进制有符号整数 |
%x或%X | 十六进制有符号整数 |
其中在用%s进行字符串的输入时,若含空格则在空格处自动截断。不截断输入字符串的方法是用gets();
在限定短整型时,加h作为前缀
在限定长整型时,加l作为前缀
其中还有赋值抑制符号*
例如身份证号位46521354200010010089
选择性输入出生年月日
scanf(“%*8d%4d-%2d-%2d%*4d”,&year,&month,&day);
结果输入2000-10-01
选择性输出出生年月日
printf(“%*8d%4d-%2d-%2d%*4d”,year,month,day);
结果输出2000-10-01
左右对齐方式:“左负右正”
单个字符的输入输出:getchar() putchar()
字符串的输入和输出:gets() puts()
关键字
c语言关键字(大小写敏感)
auto | double | int | struct |
break | else | long | switch |
case | enum | register | typedef |
char | extern | union | return |
conest | float | short | unsigned |
continue | for | signed | void |
default | goto | sizeof | volatile |
do | while | stastic | if |
转义字符
常用的转义字符
转义字符 | 意义 | 转义字符 | 意义 |
\n | 回车换行 | \\ | 反斜杠’\’ |
\t | 横向跳到下一制表位置 | \’ | 单号引号符 |
\v | 竖向跳格 | \a | 鸣铃 |
\b | 退格 | \ddd | 1~3位八进制所代表的字符 |
\r | 回车 | \xhh | 1~2位十六进制所代表的字符 |
\f | 走纸换页 |
浮点型数据
变量类型 | 所需内存字节数 | 有效位数 |
float | 4 | 6位有效数字 |
double | 8 | 15位有效数字 |
float对应%f格式的输入与输出
double对应%lf格式的输入与输出
指数的表示方法45x102->45e2
对于指数的表示e前后必须要有数字,且e后数字不能为小数
常量
八进制常量以前缀“0”开头,如071
十六进制常量以前缀“0x”开头,如0x3A
宏常量,即为define定义
#define 标识符常量 替换文本
利用宏定义后的标识符常量在下面的运算当中会自动替换为替换文本的值
conet常量
可以对于定义的常量进行类型的限制,例如定义
conest double PI 3.141592
运算符
在计算机当中运算符的运用不完全等价于数学中的运用
%模运算即为取余运算,取余数
乘号*在乘法运算中绝对不能省略
运算符优先级相等时,结合方向为自左向右
++自增 --自减
如果运算符放在变量前,那么就先自增自减再参与运算
如果运算符放在变量后,那么就先参与运算再自增自减
在计算机中,真为“1”,假为“0”
逻辑运算符
&单个表示取地址,双个表示按位与:有假则假
||表示按位或:有真则真
!表示逻辑非:真为假,假为真
优先级从高到低依次为“!”“&&”“||”
逗号运算符遵循最右原则
例如:a=(2,6,8) a的值为8
优先级 | 运算符 | 名称或含义 | 使用形式 | 结合方向 | 说明 |
1 | [] | 数组下标 | 数组名[常量表达式] | 左到右 | |
() | 圆括号 | (表达式)/函数名(形参表) | |||
. | 成员选择(对象) | 对象.成员名 | |||
-> | 成员选择(指针) | 对象指针->成员名 | |||
2 | - | 负号运算符 | -表达式 | 右到左 | 单目运算符 |
(类型) | 强制类型转换 | (数据类型)表达式 | |||
++ | 前置自增运算符 | ++变量名 | 单目运算符 | ||
++ | 后置自增运算符 | 变量名++ | 单目运算符 | ||
-- | 前置自减运算符 | --变量名 | 单目运算符 | ||
-- | 后置自减运算符 | 变量名-- | |||
* | 取值运算符 | *指针变量 | 单目运算符 | ||
& | 取地址运算符 | &变量名 | 单目运算符 | ||
! | 逻辑非运算符 | !表达式 | 单目运算符 | ||
~ | 按位取反运算符 | ~表达式 | 单目运算符 | ||
sizeof | 长度运算符 | sizeof(表达式) | |||
3 | / | 除 | 表达式/表达式 | 左到右 | 双目运算符 |
* | 乘 | 表达式*表达式 | 双目运算符 | ||
% | 余数(取模) | 整型表达式/整型表达式 | 双目运算符 | ||
4 | + | 加 | 表达式+表达式 | 左到右 | 双目运算符 |
- | 减 | 表达式-表达式 | 双目运算符 | ||
5 | 左移 | 变量 | 左到右 | 双目运算符 | |
>> | 右移 | 变量>>表达式 | 双目运算符 | ||
6 | > | 大于 | 表达式>表达式 | 左到右 | 双目运算符 |
>= | 大于等于 | 表达式>=表达式 | 双目运算符 | ||
小于 | 表达式 | 双目运算符 | |||
小于等于 | 表达式 | 双目运算符 | |||
7 | == | 等于 | 表达式==表达式 | 左到右 | 双目运算符 |
!= | 不等于 | 表达式!= 表达式 | 双目运算符 | ||
8 | & | 按位与 | 表达式&表达式 | 左到右 | 双目运算符 |
9 | ^ | 按位异或 | 表达式^表达式 | 左到右 | 双目运算符 |
10 | | | 按位或 | 表达式|表达式 | 左到右 | 双目运算符 |
11 | && | 逻辑与 | 表达式&&表达式 | 左到右 | 双目运算符 |
12 | || | 逻辑或 | 表达式||表达式 | 左到右 | 双目运算符 |
13 | ?: | 条件运算符 | 表达式1? 表达式2: 表达式3 | 右到左 | 三目运算符 |
14 | = | 赋值运算符 | 变量=表达式 | 右到左 | |
/= | 除后赋值 | 变量/=表达式 | |||
*= | 乘后赋值 | 变量*=表达式 | |||
%= | 取模后赋值 | 变量%=表达式 | |||
+= | 加后赋值 | 变量+=表达式 | |||
-= | 减后赋值 | 变量-=表达式 | |||
左移后赋值 | 变量 | ||||
>>= | 右移后赋值 | 变量>>=表达式 | |||
&= | 按位与后赋值 | 变量&=表达式 | |||
^= | 按位异或后赋值 | 变量^=表达式 | |||
|= | 按位或后赋值 | 变量|=表达式 | |||
15 | , | 逗号运算符 | 表达式,表达式,… | 左到右 | 从左向右顺序运算 |
类型转换
当算术运算、关系运算或逻辑运算的两个操作数类型不同时,精度低的自动向精度高的转换,称为类型提升
char->int->float->double
赋值时的类型转换
若精度高的向精度低的转换,则会丢失部分数据
例如:double a=3.14;int b=a;printf(“%d”,b);
输出结果则为3,自动舍去了小数位。
强制类型转换
例如
double a=3.14;
int b;
b=(int)a;
此时b的值为3,但a的数据类型依然是double型,不发生改变。
注意点
- 在日常的c语言编程之中要养成良好的习惯,适当用好空格与分行
- 语句的结尾不要忘记分号
- 格式化输入的时候切记要加上取地址符&
- 格式化输出的时候不要取地址符
- 在c语言之中,预处理是必须的
- 编程中字符的输入要用英文字符,简单的检查方式就是在devc++之中,若为英文字符,则显示红色或者蓝色,中文字符则会显示黑色,或者与编程的英文看起来极度不协调,编译时报错,此时就应该进行检查
- 良好的编程排版习惯可以更好的使自己和他人理解,也方便自己在调试改错的时候快速找到错误点进行纠正。
- 使用TAB键进行缩进
- 单行注释用//多行注释开头用/*结尾用*/