C语言基础(二)

发布于:2024-04-06 ⋅ 阅读:(159) ⋅ 点赞:(0)

运算符

单算移关与,异或逻条赋

单目运算符

++, - -

++运算符(前自负)
1、++符号在前,先自加,后赋值
2、++符号在后,先赋值,后自加
注意:当a++或者++a这两种语句,单独成为一条语句时,都相当于a=a+1

关系运算符

(>, <, >=, <=, ==, !=)

  • 等号的书写(判断相等时,少一个=,会报错)

算术运算符

+,- , *, /, %

- %
取模运算,求余数
注意:%不能用于浮点数

- /
除法运算,取整

eg:
(1)表达式(int)((double)5/2+2.5)的值是5
解析:(int)(2.5+2.5)=5
(2)表达式(int)((double)(5/2)+2.5)的值是4
解析:(int)(2.0+2.5)=4

逻辑运算符

&&, || ,!

&&
截断法则:有一个为假,整体结果就为假;前一个为假,后面就不再进行运算了
在这里插入图片描述
||
截断法则:有一个为真,整体结果就为真;前一个为真,后面就不再进行运算
在这里插入图片描述

逻辑非,对一个布尔值进行取反操作
在这里插入图片描述

sizeof运算符

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

作用:求对对应数据类型或者变量名所占内存空间大小
注意!使用sizeof()计算时,需要使用%ld来进行占位
在这里插入图片描述

三目运算符

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

运行含义:判断表达式1的值是否成立,如果成立,就将表达式2的值作为整个表达式的值,反之则将表达式3的值作为整个表达式的值
在这里插入图片描述

逗号运算符

(表达式1,表达式2,表达式3,…表达式n)

运行含义:从左往右依次计算每个表达式的值,将表达式n的值作为整个表达式的值
注意!
1、必须依次计算,防止前面的表达式改变了表达式n中的变量
2、逗号表达式的运算优先级最低,因此在使用的时候需要加上括号
6

位运算符

& ,| ,~ , << ,>>, ^

&

含义:全为1,才为1,有一个为0,则为0
在这里插入图片描述

|

含义:全为0,才为0,有一个为1,则为1
在这里插入图片描述

取反运算符(~)

含义:0变1,1变0

异或运算符

含义:相同为0,不同为1
在这里插入图片描述

左移

unsigned
  • 只有正数,没有符号位(原码、反码、补码都一样)
  • 高位丢弃,低位补0

eg:
将1左移2位
0000 0001——>0000 0100——>4

在这里插入图片描述

signed
  • 有正数有负数,有符号位
  • 符号位不变,高位丢弃,不论正数负数,低位补0

eg:将-1左移2位
1000 0001——>1000 0100

在这里插入图片描述

右移

unsigned
  • 只有正数,没有符号位(原码、反码、补码都一样)
  • 低位丢弃,高位补0

eg:
将4右移2位
0000 0100 ——> 0000 0001 ——>1

在这里插入图片描述

signed
  • 有正数有负数,有符号位
  • 符号位不变,低位丢弃,正数高位补0,负数高位补1

eg:
将-4右移2位
数组的存储都是以补码存在在计算机中
所以要将原码换成补码,再右移
原码:1000 0100
反码:1111 1011
补码:1111 1100
右移:1111 1111(补码)
原码:1000 0001
在这里插入图片描述

总结:

1、左移:无符号数,高位丢弃,低位补0
2、左移:有符号数,符号位不变,高位丢弃,低位补0


3、右移:无符号数,低位丢弃,高位补0
4、右移:有符号数,符号位不变,低位丢弃,高位补1

输入输出

输出函数

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

  • 格式控制串:原样输出的内容+格式化符(%d,%c,%f,%lf,%s,%p)
  • 输出表:要输出的东西

整型
%d:以整型形式进行输出
%o:以八进制整型形式进行输出
%x、%X:以十六进制整型形式进行输出
#:自动在八进制和十六进制之间加上前缀
%u:以无符号整型形式进行输出
%hd:以short整型形式进行输出
%ld:以long整型形式进行输出
%lld:以long long整型形式进行输出

在这里插入图片描述
字符型
%c:以字符型形式进行输出
在这里插入图片描述
浮点型
%f:以浮点型形式进行输出
%lf:以双精度浮点型形式进行输出
%g:以指数形式和浮点形式中较短的方法进行输出
%e:以指数形式进行输出
%.nf:保留小数点后n位进行输出

在这里插入图片描述
%m.nf
m:指定我们输出的域宽:当m大于0时,默认右对齐,m小于0,默认左对齐
当m的值大于数据的实际长度时,补空格,m小于数据的实际长度,原样输出!
默认为右对齐方式,加上-表示左对齐。
在这里插入图片描述

输入函数

scanf(“格式控制串”, 地址表);

  • 格式控制串:原样输入的内容+格式化符
  • 地址表:&+变量名
  • 注意:
    1、 scanf格式控制串,不要加修饰语,如果要加,要原样输入
    在这里插入图片描述

2、. 如果输入“%d%d”时,要给多个变量进行赋值,在格式控制串中,没有多余的修饰语时,那么输入以空格,回车,tab键作为第一个变量结束的标志

在这里插入图片描述
3、全部输入结束,必须以回车作为结束符
4、 如果以“%c%c”输入多个字符时,不能有回车,空格,tab键,因为空格,回车,tab键也是一个字符
在这里插入图片描述
解决办法
1、在%c和%c之间加上逗号或者空格
在这里插入图片描述
2、加上%*c,星号代表的是抑制符(吃掉一个字符)

在这里插入图片描述
3、%*nc:(吃掉n个字符)
在这里插入图片描述
4、getchar()吃掉一个字符

字符输入输出函数

字符的输入函数

getchar()
返回值:输入的字符的ascii码值

字符的输出函数

putchar()
参数:输出的字符的ascii码值
在这里插入图片描述

字符串输出输入函数

字符串输出函数

puts(参数)
1、函数功能::打印输出字符串,遇到’\0’结束打印,并自动换行
2、函数参数:需要打印的字符串的起始地址(字符数组名)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

字符串输入函数

gets(参数);
1、函数功能:从键盘得到字符数据存放到字符数组中,并自动’\0’
2、函数参数:电脑去保存字符的数组名
3、注意:该函数不会进行越界检查,注意访问越界问题

在这里插入图片描述

gets和scanf对比

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
gets和scanf对比

  1. scanf以回车、空格、tab键作为输入结束符,gets以回车作为结束符
  2. scanf输入完成之后不会清空缓冲区,里面遗留回车、空格、tsb键,gets会清空缓冲区
  3. gets函数发现缓冲区有数据,会直接拿过来使用,否则,要求键入
  4. scanf只能以键入方式输入数据

puts和printf
puts函数输出的时候自动换行,printf函数不会自动换行

字符串处理函数

使用时需要引入头文件

#include <string.h>//C库的头文件

求字符串长度

strlen();
//函数功能:求字符串的实际长度
//函数参数:首元素地址
//注意:求出的值不包含'\0'

在这里插入图片描述
在这里插入图片描述

不使用库函数,求字符串实际长度

在这里插入图片描述

字符串拷贝函数

strcpy(字符数组1, 字符数组2/字符串2);
//函数功能:将参数2的数据拷贝到数组1里面去
//函数参数1:拷贝数据存放的位置(最终打印)
//函数参数2:需要被拷贝过来的数据
//注意:数组1的长度要大于数组2
//遇到'\0'停止拷贝

在这里插入图片描述
在这里插入图片描述

strncpy(字符数组1, 字符数组2/字符串2, n);
//函数功能:将参数2的前n个字符拷贝到字符数组1里面去
//遇到'\0'停止拷贝

在这里插入图片描述
在这里插入图片描述

不使用库函数,实现拷贝

在这里插入图片描述

字符串连接函数

strcat(字符数组1, 字符数组2/字符串);
//函数功能:将参数2的数据连接到字符数组1后面去
//字符数组1的空间需要足够大

在这里插入图片描述

strncat(字符数组1, 字符数组2/字符串2, n);
//函数功能:将字符串2的前n位连接到字符数组1后面去

在这里插入图片描述

不使用库函数,实现字符数组连接

在这里插入图片描述

字符串比较函数

strcmp(字符数组1/字符串1, 字符数组2/字符串2);
//函数功能:比较两个参数的大小
//函数返回值:
return value > 0 ---> 参数1 > 参数2
return value = 0 ---> 参数1 = 参数2
return value < 0 ---> 参数1 < 参数2

从左往右,每一个字符依次比较,直到遇到不同的ASCII值或者遇到’\0’结束
在这里插入图片描述


网站公告

今日签到

点亮在社区的每一天
去签到