1.数值数据
1.1 十进制
基数:10
eg:
1234=1*10^3+2*10^2+3*10^+4*10^0;
1.2 二进制
基数:2
取值: 0~1
eg:
00001010=0*2^0+1*2^1+1*2^3
二进制转换为十进制:加权
十进制转二进制:除2取余
eg:
10 --->1010
1.3 八进制
基数:8
取值:0~7
前导: 以0开头
eg:
023-->19 八进制转换为十进制:加权求和
八进制转化为二进制:
(1)先转换为10进制再转为十进制
(2)八进制的一个数用3位二进制代替(从低位往高位写,不足3位补0)
1.4 十六进制
基数:16
取值:0~F
前导:0x
eg:0xab
转换为10进制:加权求和
转换为二进制:(每一位16进制数由4位二进制数表示)低位往高位写,不足4位补0
2.非数值数据
1.ASCII码
常用部分:128个 man ASCII查看ASCII码)
'\0'--->0
'\n'--->10
' '--->32 (space)
'0'--->48(字符0)
'A'--->65
'a'--->97
'F'+' '='f'
3.词法符号
3.1 关键字
c语言中有32个关键字
1.存储类型:auto static extern register const volatile(修饰)
2.数据类型: void char short int long float double enum(枚举)
3.符号:sigend unsigned
4.求字节长度:sizeof/整型数组也能使用。
5.宏定义:define
6.取别名:typedef
7.结构体 联合体:struct union
8.控制语句:if else switch case default do for while goto
9.辅助控制语句:break continue return
3.2 标识符
命名规则:字母、数字、下划线 只能以字母或下划线开头,且不能与关键字重复
4. 运算符(算术/逻辑运算符)
算术运算符:+ - * / %(取余)
逻辑运算符:
A&&B 都为真才为真
A||B 都为假才为假
! 取反
(与(且) 或 非)运算结果是一个逻辑值
短路法则:当表达式得到值的时候,可能就不会往后运行了
eg:
A&&B A的逻辑值为假,那么B的值就不关心了
A||B A的逻辑值为真,那么B的值就不关心了
^--->异或:不同为1,相同为0 ^= a^=b--->a和b的值交换--->a被赋予数值a与数值
b的差异值
4.1 关系运算符
> < >= <= == !=(判断是否不相等,不相等返回true 相等返回false)
4.2 赋值运算符
= += -= *= /= |= &= >>= <<=
a+=b --> a=a+b;
4.3 递增递减运算
++ --
a++ --> a=a+1
++a --> a=a+1
a-- --> a=a-1
--a --> a=a-1
加加(减)在前,先加(减)后用。加加(减减)在后,先用后加(减)。eg:
a =10:
printf("%d %d %d %d\n",a++,a++,++a,a);//结果:12 11 13 13
printf从右往左执行,a值不确定,++a先加等语句执行完后再用,a++先用(11)后加,a++先用,(12)后加,此时以执行完 则++a的用可以用了为(13)此时 a=13
4.4 地址运算符
& --->取变量的地址
4.5 逗号运算符
(表达式1,表达式2,表达式3,...) 取最后一个表达式的值
eg:
int a=1,b=2;
int c=(a+2,b+3);
printf("%d\n"c);--->c=5
4.6 三目运算符
(表达式1?表达式2:表达式3)
表达式1成立执行表达式2,不成立执行表达式3
4.7 sizeof()运算符
求整型的所占字节数
sizeof(int);---->4
4.8 位运算
位与:&
2&3--->2 转换为二进制进行位与
位或:|
2|3==3 转换为二进制进行位或
异或:^
1^1 --->0
0^0 --->1
1^0 --->1
取反:~
左移:<<
右移:>>
5.有符号和无符号
有符号:数的最高位为符号位,0:正数 1:负数
正数在内存中是以原码存储的,负数是以补码存储的
原码:一个数的二进制
反码:原码取反(符号位不变)
补码:反码加一(符号位不变)
注意:在定义变量的时候没有说明有无符号,都默认为有符号
有符号和无符号的数在运算的时候,都会转成无符号来运算;
eg:
unsigned int a=10;
signed int b=-20;
if(a<b){
printf("a<b\n");
}else
{
printf("a>b\n");
}
printf("%d\n",a+b);
6. 数据类型
6.1.基本类型
int (4个字节) short(2) char(1) float(单精度)(4) double(双精度)(8) long(8) longlong(8) enum(枚举)
6.2.构造类型
数组 结构体 共用体
6.3.指针类型
int * 、char**
6.4.空类型
void 用于描述空值,主要用于说明不返回值的函数或指向任一类型的指针等
6.5.char
char 值域:一个字节
有符号:-128~127 -0<-->-128
无符号:0~255
6.6. 逻辑类型
#include <stdboo1.h>
boo1 var =true
7.常量
1.整型常量
23 023 0x23
2.字符常量:由单个字符组成,单引号引起来
'A' '0' '\n'
3.字符串常量:
由多个字符组成,用双引号引起来
有一个结尾的标志'\0'
"hello" "A"
4.浮点常量
12.234
5.指数常量
1.2234*10^1-->1.2234e+1
1.2234*10^-1-->1.2234e-1
6.标识常量
#define N 100 ---> 表示N被100替代
8.变量
1.定义变量的目的:系统为其分配空间,可以保存数据;
2.变量的一般形式:
<存储类型> <数据类型> <变量名>;
(1)存储类型:
autu:自动存储(一般默认为自动存储,可以省略)
extern:外部存储,一般用作变量的说明(外部引用)
* static:静态存储
作用:1.修饰局部变量,延长生命周期(放在静态数据区)
2.修饰一个未被初始化的局部变量值为0
3.修饰全局变量,函数限制作用域(只能被本文件使用)
register:寄存器存储(运行速率很高,数量少)
const 修饰的变量只能使用(只读)不能修改
(2)数据类型:
一般根据要存储的数据来确定类型
(3)变量名:遵循标识符的命名规则一般见名知意
初始化:给变量一个初值
9.强制类型转换
将某个类型的数据转换为指定的类型
两种方式:1.显式的数据类型转换
(数据类型名称)<表达式>eg:
int main()
{
int var=100;
float a=(float)var;
printf("%f\n",a);
return 0;
}2.隐式转换
eg:
int main()
{
int var=100;
float a=var;
}
10.输入输出语句
1.格式输入:scanf()
格式输出:printf();
2.字符的输入:getchar()
字符的输出:putchar();
3.字符串的输入:gets()
字符串的输出:puts();
10.1 格式输入,输出
scanf()格式输入
函数原型:
#include<stdio.h>
int scanf(const char*format,...);
{
功能:从终端上以某种格式输入;
参数:
format:格式符
... 地址表;(如果有多个用逗号隔开)
返回值:成功返回世纪输入的个数,失败返回-1 (ctrl+d)--->结束输入
}
修饰符:'*':跳过第一个赋值
scanf("%*d%d",&var);
格式输出:printf()
函数原型:int printf(const char *format,...);
参数:
格式控制串 输出表
格式符与scanf大致相同 多:%e指数的输出 %g:e和f输出简短的一种 %p:打印地址
10.2 垃圾字符的处理
1.加抑制符(第二次赋值不要)
int ret=scanf("%c%*c%c",&ch1,&ch2);
2.加空格
int ret=scanf("%c %c",&ch1,&ch2);
3.getchar()
scanf("%c",&ch1);
getchar();
scanf("%c",&ch2);
10.3 字符的输入输出
1.getchar() 字符的输入
头文件:
#include<stdio.h>
函数原型:
int getchar(void);
{
功能:从终端上输入一个字符;
返回值:返回获取到的字符;
}
2.putchar()字符的输出
头文件:
#include<stdio.h>
函数原型:
int putchar(int var);
{
功能:把一个字符输出到终端;
参数:var:要输出的字符
}
10.3 字符串的输入和输出
1.puts(); 自带换行功能
头文件:
#include<stdio.h>
函数原型:
int puts(const char *s);
功能:输出一个字符串到终端;
参数:s:指向一个串的首地址;
返回值:输出的字符个数+一个'\0'(结束符号)
2.gets():字符串的输入
头文件:
#incldue<stdio.h>
函数原型:
char *gets(char *s);
参数:s:指向一片空间的首地址,用来保存输入的字符串;
返回值:返回s;
注意:在输入字符串的时候保证s指向的空间足够大,gets得到的字符串总会在末尾加上'\0'
eg: math.c
输入a,b,c的值,求一个一元二次方程ax^2+bx+c的根;
一元二次方程的函数:(-b+sqrt(b*b-4*a*c))/2*a sqrt(开方函数)#include<math.h>需要连接库
编译时:gcc test.c -lm
未完待续.......