目录
常量
1.字面常量
2.const 修饰的常变量
3.#define 定义的标识符常量
4.枚举常量
字符串+转义字符
1.字符串
2.转义字符
ASCII编码
选择语句
循环语句
函数
数组
操作符
算术操作符
移位操作符
位操作符
复合赋值符
单目操作符
逻辑反操作
按位取反
原码,反码,补码
sizeof操作符
前置++,后置++
(类型)强制类型转换
关系操作符
逻辑操作符
条件操作符
逗号表达式
总结:
常量 语言中的常量和变量的定义的形式有所差异。
C语言中的常量分为以下以下几种:
1.字面常量
2.const 修饰的常变量
3.#define 定义的标识符常量
4.枚举常量
1.字面常量
文章图片
2.const 修饰的常变量 const是一个C语言的关键字
int main()
{
//const-常属性
//const修饰的常变量
const int n=10;
//n是变量,但是又有常属性,所以我们说n是常变量。
int arr[n]={0};
//错误的写法
const int num=10;
printf("%d\n",num);
num=8;
printf("%d\n",num);
return 0;
}
文章图片
这里的arr[ ]中需要常量,所以这样写是不对的,也进一步证明了const修饰的标识符本质还是变量
3.#define 定义的标识符常量
文章图片
用 #define 定义的标识符就是一个常量,在数组定义下标的时候可以使用
4.枚举常量枚举的意思就是一一列举
枚举关键字-enum
enum Color
{
RED,
YELLOW,
BLUE
};
int main()
{
enum Color color=BLUE;
color=YELLOW;
printf("%d\n",color);
return 0;
}
这里面的值也是不能改变的
文章图片
这里可以看出枚举常量是有自己的值,并且是从0开始
字符串+转义字符 1.字符串 "hello bit.\n"
这种由双引号引起来的一串字符称为字符串字面值,或者简称字符串。
注:字符串的结束标志是一个'\0'的转义字符。在计算字符串长度的时候\0是结束标志,不算作字符串内容; 但是你要是计算一个字符串大小的时候,'\0'是要算进去的
文章图片
当一个字符串中没有'\0',它在打印的时候会一直往后打印随机值,直到找到'\0'结束打印
文章图片
2.转义字符 假如我们要在屏幕上打印一个目录:c:\code\test.c我们该如何写代码?
#include
int main()
{
printf("c:\code\test.c\n");
return 0;
}
但是我们打印却是:
文章图片
这里就不得不提一下转义字符了。转义字符顾名思义就是转变意思。下面看一些常见的转义字符。
文章图片
这里的第一个'\'为啥不会打印呢?
C语言所有非转义字符前面加上'\'会被忽略,所以'\c'打印出来的就是'c'
如果你想打印'\',就得写'\\'
文章图片
文章图片
ASCII编码
选择语句 如果你好好学习,拿一个好offer,走上人生巅峰。
如果你不学习,毕业等于失业。
这就是选择!
文章图片
文章图片
int main()
{
int a=0;
printf("期末来临\n");
printf("你要好好复习吗?(1/0)>:");
scanf("%d",&a);
if (a == 1)
{
printf("考试通过\n");
}
else
{
printf("挂科,补考\n");
}
return 0;
}
循环语句C语言中如何实现循环呢?
while语句
for语句
do ... while语句
我们今天先谈谈while语句
文章图片
int main()
{
int line=0;
printf("学习\n");
while(line<=20000)
{
printf("敲一行代码 %d\n",line);
line++;
}
if(line>2000)
{
printf("好offer\n");
}
return 0;
}
函数 两个数相加
int main()
{
int num1=0;
int num2=0;
int sum=0;
scanf("%d%d",&num1,&num2);
sum = num1+num2;
printf("%d\n",sum);
return 0;
}
用函数实现
int Add(int x,int y)//Add -- 自定义函数
{
int z=x+y;
return z;
}
int main()
{
int num1=0;
int num2=0;
int sum=0;
scanf("%d%d",&num1,&num2);
sum = Add(num1,num2);
printf("%d\n",sum);
return 0;
}
函数的特点就是简化代码,代码复用。
数组 数组里面只能存储一组相同类型元素
一般的对象声明形式:
文章图片
数组的声明形式:
文章图片
如果把int型看成一个盒子的话,数组arr[5]就是创建了一个包含5个int型变量的大盒子
文章图片
注意:数组的下标是从0开始的
在声明数组的时候,元素个数必须是常量,下面这样的声明在VS编译器是不允许的
但是在C99标准下是允许的 (在oj题里面也是可以这样写的)
int n=5;
int arr[n];
这个东西大家一定要注
【C|初识C语言(2)-常量,字符串+转义字符,ASCII码,选择语句,循环语句,函数,数组,操作符】存是存进去了, 怎么打印出来呢?这里就用到了循环
文章图片
操作符 算术操作符
操作符 | |
---|---|
+ | 加 |
- | 减 |
* | 乘 |
/ | 除 |
% | 求余数(取模) |
文章图片
移位操作符
操作符 | |
---|---|
<< | 左移操作符 |
>> | 右移操作符 |
文章图片
文章图片
文章图片
文章图片
位操作符 这里的按位就是按(二进制)位的意思
操作符 | |
---|---|
& | 按位与 |
丨 | 按位或 |
^ | 按位异或 |
对应的二进制位有0为0,全1出1
按位或的运算规则:
对应的二进制位有1为1,全0出0
异或的计算规律
对应的二进制位相同,则为0
对应的二进制位相异,则为1
int main()
{
//(2进制)位操作
//&按位与
//|按位或
//^ 按位异或 int a = 3;
int b = 5;
int c = a&b;
//011
//101
//001 int a = 3;
int b = 5;
int c = a|b;
//011
//101
//111 int a = 3;
int b = 5;
int c = a^b;
//不是次方-是异或
//011
//101
//110 return 0;
}
赋值操作符
简单赋值符
=
a=b; 就是把b的值赋值给a
而判断a和b是否相等为a==b;
千万不要混淆
复合赋值符
操作符 | |
---|---|
+= | a += b; a = a + b; |
-= | a -= b; a = a - b; |
*= | a *= b; a = a * b; |
/= | a /= b; a = a /b; |
%= | a %= b; a = a % b; |
>>= | a >>= b; a = a >> b; |
<<= | a <<= b; a = a << b; |
&= | a &= b; a = a & b; |
^= | a ^= b; a = a ^ b; |
int main()
{
int a = 10;
a = 20;
// = 赋值==判断相等
a = a + 10;
a += 10;
a = a - 20;
a -= 20;
a = a & 2;
a &= 2;
//复合赋值符
//+= -= *= /= %=>>= <<= &= |= ^=
return 0;
}
单目操作符
操作符 | |
---|---|
! | 逻辑反操作 |
+ | 正值 |
- | 负值 |
& | 取地址 |
sizeof | 操作数的类型长度(以字节为单位) |
~ | 对一个数的二进制按位整体取反 |
– | 前置、后置– |
++ | 前置、后置++ |
* | 间接访问操作符(解引用操作符) |
(类型) | 强制类型转换 |
在C语言中,我们表示真假,0-假,非0-真
int main()
{
int a=10;
printf("%d\n",a);
printf("%d\n",!a);
//!--逻辑反操作符
return 0;
}
文章图片
按位取反
int main()
{
int a=0;
int b=~a;
//~ 按二进制按位取反
//00000000000000000000000000000000
//11111111111111111111111111111111 //原码,反码,补码 //11111111111111111111111111111111补码
//11111111111111111111111111111110反码
//10000000000000000000000000000001原码
printf("%d\n",b);
return 0;
}
原码,反码,补码
数据在内存中存储的时候,存储的是二进制的补码
只有在使用,打印的时候才是这个数的原码
文章图片
注: 我们要把 ! 逻辑反操作符和 ~ 按位取反 区分开
sizeof操作符
sizeof操作符-计算空间大小,很多人都以为sizeof是函数,其实它不是,这个比较特殊,下面我们讲讲它的用法
文章图片
怎么计算数组有多少个数呢?
先 int arr[10] = { 0 }; //10个整型元素的数组
它总占sizeof (arr)个字节 ,一个元素占 sizeof (arr[0]) 个字节
个数=数组的总大小/每个元素的大小
int main()
{
int arr[10] = { 0 };
int sz = 0;
printf("%d\n",sizeof(arr));
sz = sizeof(arr) / sizeof(arr[0]);
printf("sz=%d\n", sz);
return 0;
}
文章图片
前置++,后置++
int main()
{
int a = 10;
int b=a++;
//后置++,先使用,再++
printf("a=%d\nb=%d\n", a, b);
int d = 10;
int c = ++d;
//前置++,先++,再使用
printf("d=%d\nc=%d\n", a, d);
return 0;
}
文章图片
(类型)强制类型转换
int main()
{
int a=(int)3.14;
//(类型)强制类型转换
printf("%d\n",a);
return 0;
}
文章图片
这里把一个浮点型的数强制转换为整型数
关系操作符
操作符 | 功能 |
---|---|
> | 大于 |
>= | 大于等于 |
< | 小于 |
<= | 小于等于 |
!= | 不等于 |
== | 等于 |
逻辑操作符
操作符 | |
---|---|
&& | 逻辑与 |
丨丨 | 逻辑或 |
int main()
{
//真--非0
//假--0
//&&-- 逻辑与
//||-- 逻辑或
int a = 0;
int b = 5;
int c = a && b;
int d = a || b;
printf("c=%d\n", c);
printf("d=%d\n", d);
return 0;
}
文章图片
条件操作符
操作符 | |
---|---|
exp1?exp2:exp3 | exp1表达式为真,那么整个表达式的结果为exp2; exp1表达式为真,表达式的结果为exp3 |
文章图片
int main()
{
int a=10;
int b=20;
int max=0;
max=( a>b?a:b);
//exp1 ? exp2 : exp3---条件操作符 printf("max=%d\n",max);
return 0;
}
int main()
{
int a=10;
int b=20;
int max=0;
if (a
这两个代码效果是一样的
逗号表达式
操作符 | |
---|---|
exp1,exp2,…expN | 从左往右依次执行,整个表达式结果是最后一个表达式的结果 |
操作符 | |
---|---|
[ ] | 数组下标操作符,操作数:数组名+一个索引值 |
( ) | 函数调用操作符,接受一个或多个操作数:第一个是函数名,其余是函数参数 |
. | 访问结构体成员 |
-> | 访问结构体成员 |
int main()
{
int a[10]={0};
a[4];
//[]---下标引用操作符
return 0;
}
函数调用操作符
文章图片
总结: 好了,剩下的东西咱们以后慢慢讲。(好吧,其实是我肝不动了)
感觉博主写得不错的小伙伴们,记得三连哦!
文章图片
推荐阅读
- 蓝桥杯学习|【第十三届蓝桥杯单片机省赛冲刺-巩固练习3】
- java|Java 学习路线
- 操作系统|malloc原理和内存分配
- C语言|malloc函数分配内存失败的原因及解决方法
- malloc内存分配原理
- 【史上最细Python教程】|【史上最细Python教程】(二)Python四大内置数据结构列表、字典、元组、集合看这一篇完全够用
- python|学Python还不会处理Excel数据(带你用pandas玩转各种数据处理)
- 算法刷题|LeetCode刷题笔记-21.合并两个有序链表
- 安全|第一篇关于我的个人博客--与诸君共勉