C语言基础

1、数据类型
例如生活中喝酒不同场合需要不同的杯子,C语言中需要不同的数据类型,

无回显字符:'\n'   '\t' ,一般字符里面只包含一个字符,这俩属于特殊情况

整形里shortint有什么区别?(划分都是依据数据范围)
short占用2字节,int占用4字节,char本质是一个字节整型(-128  ~  127),可表示英文字符
浮点型里面floatdouble什么区别

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.赋值操作

当shortint位操作时,short高位补0.
计算机里01负,整型数右移时,低位移出,高位补符号位,
左移时,高位移除,低位补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也可以使函数具备函数文件域(只能在当前定义文件中使用)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

￴ㅤ￴￴ㅤ9527超级帅

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值