1、数据类型
例如生活中喝酒不同场合需要不同的杯子,C语言中需要不同的数据类型,
无回显字符:'\n' '\t' ,一般字符里面只包含一个字符,这俩属于特殊情况
整形里short和int有什么区别?(划分都是依据数据范围)
short占用2字节,int占用4字节,char本质是一个字节整型(-128 ~ 127),可表示英文字符
浮点型里面float和double什么区别
C语言中命名规则:字母(a-z,A-Z)数字(0-9),下划线(_)组成
只要保证不溢出的情况,变量可以表示任意值,变量表示的数值可以在任意时刻改变。
赋值:int n; n = 10;
初始化:int n = 10;
赋值和初始化是两个完全不同的操作
!!!强制类型转换:type name = type var;
float f = 3.14;
a = int(f);
printf("%f",f);f值仍为3.14
强制类型转换并不会改变变量的值,只是复制变量值
思考题:
1、大类型杯子里面的水倒给小杯子会发生什么呢
int a = 50000;
short b = 0;//这里默认0是int型(-32768~32767)
b = a;这里B的值为-15536 = 0-32767 + (-15536 - -32768)
结论:大类型给小类型赋值会有风险,如果不超出则不会出错,小类型完全可以赋值给大类型,那如果超出呢?超出部分会重新从负的开始计数
2、浮点类型的数赋值给整型会发生什么呢
int a = 2;
float b = 0.2;
a = b;
a只会保存整数部分,若整型赋值给浮点型,会自动补充.000000
!!!结论:小范围可以赋值给大范围,整型可以赋值浮点型,浮点赋值整数会截断,大范围赋值小范围会超出部分从负计算!
1、四舍五入:
float a = 5.5;
float b = 0;
b = a+0.5; //6.0
b = (int)b;//取整 6
2、对小数点后两位四舍五入:
#include <stdio.h>
int main()
{
float a = 3.23;
float b = 0;
b = a + 0.05;
b =(int) (b/0.1);
b = b/10;
printf("%.2f",b);
return 0;
}
输入规则:scanf("%d",&f);
输入 f = 3.14;
输出f为0;
结论:输入数据不匹配,输出结果就错误
运算:
四则运算:+, -, *,/,%
关系运算:<, >,<=, >=,<=, ==,!=(结果不是1(真)就是0(假))
逻辑运算:&&,||,! 与、或、非(结果为0或者1)只有0或非0
!cc将非0值变为1
位运算:&,|,^,>>,<<,~
&:按位与 1101用于倒数第二位置0
|:按位或 0010用于倒数第二位置1
^:按位异或 00111100用于中间位取反
>>:按位右移
<<:按位左移
~:按位取反
加减法优先级高于关系运算符,程序从左向右运行
当逻辑&左边的数为0时,直接结果为0,跳过右边的运算
数组的大小必须在编译时确定
定义指针必须初始化/申请空间。
运算符优先级:
四则运算>关系运算>赋值
四则运算:·正负号>乘除运算>加减运算
关系运算:·大小比较运算>相等比较运算
运算优先级
1.正负号>逻辑非>按位取反
2.乘除>加减>按位左右移
3.大小比较运算>相等比较运算
4.按位与>按位异或>按位或
5.逻辑与>逻辑或
6.赋值操作
当short与int位操作时,short高位补0.
计算机里0正1负,整型数右移时,低位移出,高位补符号位,
左移时,高位移除,低位补0
按位操作时,最高位默认是符号位
例:char c = 'A';
c = 0x40;
c = c<<1;(10000000)
此时c值为-128,因为最高位为1,解释为负数。
循环结构:
switch:里面没有break则会继续往下执行;
case 1:
case 2:
case 3:
case 4:
prinitf("skl");
break;
'C' - 'B' = 1;
'B' - 'A' = 1;
当不确定循环次数时,就用while()
循环条件必须在循环体里面改变,否则循环永远不会结束
while循环计算π:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int i = 1;
double sum = 0;
double an = 0;
int flag = 1;
while(i<10000000)
{
an = flag * (1.0/(2*i-1));
while(abs(an)<1e-6)
{
break;
}
sum = sum + an;
i++;
flag = flag * -1;
}
printf("%.8lf\n",sum*4);
printf("%.8lf\n",an);
return 0;
}
求质数:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int i = 2;
int j = 2;
int flag;
for(i=2;i<100;i++)
{
flag = 0;
for(j=2;j<=i;j++)
{
if((j<i) && (i%j == 0))
{
flag = 1;
break;
}
}
if(flag == 0)
{
printf("%d ",i);
}
}
}
signed与unsigned的区别
假如char表示-128 ~ 127
unsigned char 表示0~256(相当于把数据范围变为正)
signed:符号数
unsigned:无符号数
!!!变量的生命周期
C语言中变量分为全局变量和局部变量
局部变量:函数内部的变量
全局变量:隶属于全局范围内的函数
同名变量使用规则:优先使用最近定义的变量(可重复定义)
全局变量的作用域可能会被同名局部变量覆盖
全局变量通常以g_开头
#include <stdio.h>
#include <stdlib.h>
int main()
{
int i = 0;
while(i<5)//一直处于死循环,并未改变最近变量的条件
{
int i = 10;
i++;//是给就近变量++的,并不是while()里面的++
printf("%d\n",i);
}
return 0;
}
#include <stdio.h>
int main()
{
int var = 2;
int i;
for(i=0;i<5;i++)
{
int var = 4; //局部变量,在for循环结束以后这里的局部变量就消失
var = var +i;
printf("%d ",var);
}
printf("\n%d\n",var);
return 0;
}
函数生命周期:
全局数据区∶存放全局变量,静态变量口(会被默认初始化为0)
栈空间∶存放函数参数,局部变量
堆空间∶用于动态创建变量
————全局数据区中的变量
·程序开始运行时创建,程序结束时被销毁,整个程序运行期合法可用
————栈空间中的变量!!!
·进入作用域时创建,离开作用域时销毁(自动销毁)
.局部变量在函数调用返回后销毁
变量的作用域和生命期:
作用域与生命期无本质联系
一作用域规则是语法层面对变量是否可访问的规定
-生命期是二进制层面上变量存在于内存中的时间
·可能的情况
√作用域外无法访问的变量,可能在其生命期中(静态局部变量)
√作用域内可访问的变量,可能已经被销毁(堆变量)
√ 生命期中的变量,可能无法访问(文件作用域全局变量)
静态变量:
- static.是C语言中的关键字
- static修饰的局部变量创建于全局数据区(拥有程序生命期)
- static修饰的全局变量只有文件作用域(文件之外无法访向)儿
- static局部变量只会初始化一次,作用域与普通变量无异
变量的生命期由变量存储位置决定
- static将变量存储于全局数据区
默认初始化为0
- auto将变量存储于栈空间,默认初始化为随机值
- register将变量存储于寄存器,默认初始化为随机值
int i = 0;默认存储于栈空间
·堆空间的本质(malloc)
一备用的(“内存仓库”,以字节为单位预留的可用内存)
一程序可在需要时从“仓库”中申请使用内存(动态借)
一当不需要再使用申请的内存时,需要及时归还(动态还)
void* 属于指针,可以存储地址,但是不具备长度信息,所以不能使用*p访问内存中的数据
void* p;
double* db;
db = p;//void*类型的指针默认是可以准换到其他类型的指针
不同类型的指针不能随便赋值,void*是例外
例如:void* malloc (unsigned bytes)//申请堆空间
free(void*)//释放堆空间 void*必须是堆里面的数据
!!!!!多文件编程
源文件实现具体供能,头文件声明接口
#include <stdio.h> 默认在系统编译文件中查找
#include "stdio.h" 优先在当前文件下查找,其次在系统编译文件下查找
每一个C文件编译之后都会得到一个O文件
函数声明在头文件里(.h)定义,具体的源码在(.c)文件里
普通全局变量:
·源文件中定义的全局变量可在所有其它源文件中使用
可使用extern关键字在头文件中进行声明,并在其它文件使用
静态全局变量:
. static修饰的全局变量只能在当前源文件中使用
·无法通过extern关键字声明,在其它文件使用
定义变量要在源文件中定义,头文件中改的作用域是不起作用的
static也可以使函数具备函数文件域(只能在当前定义文件中使用)