WEEK2

1.1 存储方式

1.2 局部变量和全局变量:

  

1.3 存储类型:

auto、extern、static、register

auto : 变量 栈 局

extern : 静态区(.bass和.data统称静态区),只能修饰全局变量

static : 变量静态区,局部和全局

register : 变量寄存器 ,只修饰局部变量

1.4 初始化和赋值

   int a=4;//初始化

     a=3;//赋值

总结:

全局变量没有初始化默认0

      局部变量没有初始化默认随机值

      auto:局部变量,栈区

   register:局部变量,存储在寄存器中。建议将变量存储在寄存器中,提高存储速度。但是寄存器比较少,取决于编译器,没有寄存器就放在栈中。

  extern:修饰全局变量,存储在静态区

  vim -p extern_1.c extern_2.c 打开多个文件

  gcc 1.c à./a.out(程序)

 static:修饰局部变量/函数,延长生命周期只定义一次。只初始化一次

      修饰全局变量,只在本文件内使用 static int a=0;

  

1.5 、作用域和生命周期

        

局部变量:

作用域:大括号

生命周期:花括号内有效

static int a=10;

作用域:大括号

生命周期: 从定义开始,到程序结束

全局变量:

生命周期:从定义开始,到程序结束

作用域;全局有效

static:修饰的全局变量

生命周期:从定义开始,到程序结束

作用域:本文件内

1.6 数据类型转换

强制类型转换:int a=10 float b; b=(float)a

瘾试类型转换:编译器自动转换

1.7 运算符

算数运算符:

+ - * / % ++ --

注意:%不能用于浮点数

++在前 ++先自加,在赋值

++在后 ++先赋值,在加

1.8 关系运算符

>  <  >= <= != ==

写 9=n 9==n

2.1、逻辑运算符:

0+  1 -  0 非  1 真

&& 第一个为非就不运算了

||   第一个为假真就不运算了

2.2、sizeof(运算符)

sizeof(数据类型)    sizeof(变量名)

2.3、三目运算符

表达式1?表达式2:表达式3

成立2执行不成立3执行

2.4、逗号运算符

表达式1,表达式2;

从左到右依次计算将最后一个表达式的值赋给c

int a = 1 b =  2;

int c=(b=b+1,++b)

2.5、位运算 &、|、^、<<、>>

按位与&(有0就是0)下标从0开始

1101 0011

& 1000 0001

  1000 0001

将1101 0011 的3-5位清0(清0  原位1 清0位0)

  1101 0011

& 1100 0111

_____________________________
  1100 0011

0-2位清0

   1101 0011

 & 1111 1000 数太大一般取反存储 -(0000 0111)0x 7

   1101 1000      

或运算|(有1就是1)

1101 0011

|      0101 1001

       1101 1011

将1101 0011的0~3位变成1100

   1101 0011

  & 1111 0000 -0000 1111

1101 0000

|0000 1100

1101 1100

按位取反

  • 1101 0011 > 0010 1100

异或

相同为0 不同为1

1101 0011

^ 1110 0110

  0011 0101

左移(高位丢弃,低位补0)

原码-4左移2位 负数存储补码 补码的补码是原码

原码1000 0100

反码 1111 1011

补码 1111 1100

左移2位

  1111 0000

 补码 1000 1111

      1001 0000

-16  <<

右移

1、无符号位(unsign)低位丢弃,高位补0

2、有符号位:(sign)

正数:低位丢弃,高位补0

负数:低位丢弃 高位补1

2.6、输入输出

函数:一个独立的功能模块

标准输入:scanf printf(对变量的数据类型没有要求)

字符的输入 getchar 输出 putchar

1、输入出

printf(“格式控制串”,输出表);

格式控制串:原样输出内容+格式化符

输出串:输出对象

%d 十进制 %o 八进制 %x/X(大写) 十六进制

#: 自动在八进制和十六进制前面添加前缀 %#o %#X

%u 无符号整数

%hd short

%ld long  %lld long long

%f:float %lf:double %e :指数型 %g:选择指数和小数短的形式打印

0.001  1e-3

%.1f\n .n保留小数点后几位

f小数点6位 lf小数点8位

m指定输出的域宽,默认右对齐(左对齐-)m<原样输出数据

如果大于输出数据左边对齐

2、输入

scanf中不要添加修饰语,如果添加,输入原样

scanf(“%d\n”,&a) 5\n

2.1、如果以%d%d 输入

以空格、tab键、回车键作为输入的结束

全部输入结束,必须以回车作为结束符

  2、2、如果%c%c输入 不能以空格、回车、tab键作为字符

        解决办法:1、在两个字符中间加空格或, 输入的时候必须按照

                   字符常量

%c %c加空格 a b

                  %c,%c  c,c

                  2、%*c(抑制符)

                     

输入 空格隔开

int getchar(void)

返回值:成功返回输入的ASCII码值

输出:putchar

2. 7、控制语句

if else 、switch case 、 for、do 、while 、goto

顺序、选择、循环s

3.1switch

switch(a)

{

  case 1:

        c语句;

        break;

  case 2:

        c语句;

        break;

   ………..

   defalut:printf(“”);(可以没有break)

}

当执行到结束或者break;执行结束

当1:满足没有break时就一直往下执行知道碰见break或者结束,不用判断条件就一直执行。

switch中可以有int char bool

 for

for(int i = 0; i < 5; i++)

{

  c语句;

}

先赋值(只赋值一次) 判断 执行c语句 i+1;

 break、continue

break;直接跳出循环

continuce: 不执行后面的语句,开始下一次循环

3. 2while do while

while先判断后执行

do while 先执行后判断

3.3 goto

4、1字符串函数

loop :随便标识符

存放相同类型的数据 地址连续

定义

存储类型 数据类型 变量名

int a[5]={1,2,3}  在进行初始化的时候,未初始化的部分值为0,因此对数组中的元素清0

int a[5]={0};

int a[5]={1,2,3,4,5}  int a[]={1,2,3}由后面元素的个数来决定

访问 下标0开始 a[1]

int a[5];

a[5] = {1,2,3,4,5} ;error 一个元素赋值一个集合

int a[]={0};//数组中只有一个元素,但是没有意义数组只保留一个元素没有意义

int a[5];

a = {1,2,3,4,5};//error 数组名代表的是数组首元素的地址

4、2 冒泡排序

思想:从左到右比较,如果前一个数比后一个数大交换次序否则不变,每次拿出每组中最大的一个数放在数组最后面

4、3字符数组

字符数组本质:字符串(以‘\0’作为结束符)

char str[5]={0};//最多存放4个元素,给’\0’溜一个位置

char str[6]={‘h’,’e’,’l’,’l’,’o’,’\0’};

char str[6]=“hello”;

%s 字符串的输出

puts(数组名);

功能将数组中的字符串打印到终端上,会自动添加一个换行符 puts(str)

遇到\0自动结束

gets(数组名)

功能:将键盘中的字符串保存到数组中,会自动末尾添加‘\0’

注意:gets不会注意越界检查

‘\0’ ASCII 0一样

gets和scanf的区别:

gets回车结束可以出入空格

scanf:回车、tab、空格结束 不能输入空格

数组名本身代表首元素的地址 所有不用& scanf(“%s”,str);

缓冲区:

gets:输入完成会自动清空缓冲区

scanf:输入完成之后,缓冲区会遗留空格、回车、Tab键

gets:输入之前,会查看缓冲区是否有内容,直接拿过来直接使用

scanf:标准输入函数,每一次输入都需要从键盘获得

出问题:scanf gets

puts会自动添加换行符,printf不会添加自动换行符

死循环

while(1){}

for(;1;)

赋值1 0非

5、1字符串函数

strlen 、strcpy 、strcat 、strcmp

头文件:#include<string.h>

strlen(数组名):求字符串长度

功能:求字符串的实际长度

返回值:返回字符串的实际长度不保函’\0’

sizeof和strlen的区别:

sizeof运算符  strlen是函数

sizeof求得内存空间大小,strlen字符串的实际长度(不包含’\0’)

目标数组的容量要足够大

strcpy(目标数组, 原数组);\\原数组-->目标数组

原数组的值直接覆盖

strncpy(目标数组 , 原数组,个数);//后面的数字不变

strcat(str1,str2) 将str2放在数组str1之后

strncat(str1,str2,n) n个数

strcmp(数组1/字符串1 ,数组2/字符串2);//比较2个字符串的大小

 

返回值:

大于0 : 字符串1 > 字符串 2

等于0 : 字符串 1 = 字符窜2

小于0 : 字符串 1 < 字符串 2

比较规则: 从左到右,比较每个字符的ASCII码值,直到遇到不同的ASCII码或者’\0’结束

strncmp(str1,str2 , n)

比较:字符串前n个字符的大小

5、2 二维数组

  数据类型相同、地址连续

  存储类型 数据类型 数组名[行数][列数]

  

  部分初始化 

  int a[2][3] ={1,2,3};

  

  全部初始化

  int a[2][3] = {1,2,3,4,5,6};

  

  int a[2][3] = { {0},{4,5,6}};

  int a[2][]={1,2,3,4,5,6};//erro 列数不能剩

  int a[][3] ={1,2,3,4,5,6}; 行数可以剩

字符数组

char str[30] = {0};

scanf(“%s”,str);

printf(“%s”,str);

char str[5][20];//定义5个数组,每个数组长度为20

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值