目录
一.修炼必备
1.入门必备:VS2019社区版,下载地址:Visual Studio 较旧的下载 - 2019、2017、2015 和以前的版本 (microsoft.com)
2.趁手武器:印象笔记/有道云笔记
3.修炼秘籍:牛客网 - 找工作神器|笔试题库|面试经验|实习招聘内推,求职就业一站解决_牛客网 (nowcoder.com)
4.雷劫必备:leetcode 力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台
注:遇到瓶颈怎么办?百度百科_全球领先的中文百科全书 (baidu.com)
二.字符串
1.概念:由双引号("")引起来的一串字符称为字符串字面值(String Literal),或者简称字符串
2.字符串的结束标志是\0的转义字符,在计算字符串长度的时,\0不算做字符串中的内容,但是在使用字符数组存储字符串的时候,\0也占一个字节的空间
3.代码详解:
#include <stdio.h>
#include <string.h>
int main()
{
char arr[] = "abcdef";//补全为:"abcdef\0"
int len = strlen(arr);//6:计算时不包括\0
int sz = sizeof(arr) / sizeof(arr[0]);//7,因为\0也要包括一个字节
printf("len=%d\n", len);//6
printf("sz=%d\n", sz);//7
return 0;
}
4.思考如下代码输出什么?
#include <stdio.h>
#include <string.h>
int main()
{
char arr1[] = "bit";
char arr2[] = { 'b','i','t' };
char arr3[] = { 'b','i','t','\0' };
printf("%s\n", arr1);//bit:遇到\0停止,但不包括\0
printf("%s\n", arr2);//未知:不知道什么时候遇到\0
printf("%s\n", arr3);//bit:因为遇到了\0(第四个字符)
printf("%d\n", strlen(arr1));//3:遇到\0停止,但不包括\0
printf("%d\n", strlen(arr2));//未知:不知道什么时候遇到\0
printf("%d\n", strlen(arr3));//3:因为遇到了\0(第四个字符)
return 0;
}
三.转义字符
1.常用转义字符
转义字符 | 解释 |
\? | 在书写连续多个问号时使用,防止被解析成三字母词 |
\' | 用于转义‘,防止'与最近的'进行匹配 |
\" | 用于转义",防止"与最近的"进行匹配 |
\\ | 用于转义\,防止\被解释为一个转义序列符 |
\a | 警告字符,蜂鸣 |
\b | 退格符 |
\f | 进纸符 |
\n | 换行符 |
\r | 回车 |
\t | 水平制表符 |
\v | 垂直制表符 |
\ddd | ddd表示1~3个八进制数 |
\xdd | dd表示2个十六进制数 |
2.代码解释
#include <stdio.h>
int main()
{
printf("%c\n", '\'');// ',需使用\对'进行转义
printf("%s\n", "\"");// ",需使用\对"进行转义
printf("%c\n", '\\');// /,需使用\对\进行转义
printf("%c\n", '\a');//蜂鸣
printf("abcdef\b\n");//abcde:\b退了一格,把f的位置占了,若跟\n连用,则不会占用
printf("abcdef\f\n");//\f:进纸符
printf("abcdef\n\n");//\n:换行符
printf("abcde\rfgh\n");//\r:回车符
printf("abcd\te\tf\tg\n");//\t:水平制表符
printf("abcd\ve\vf\vg\n");//\v:垂直制表符
printf("%d\n", '\234');//\ddd:八进制数
printf("%d\n", '\x34');//\xdd:十六进制数
return 0;
}
3.思考以下代码的输出?
#include <stdio.h>
#include <string.h>
int main()
{
printf("%d\n", strlen("abcdef"));//6
printf("%d\n", strlen("c:\test\628\test.c"));//14
//注:转义字符只算作一个字节
return 0;
}
四.注释
1.注解的形式
第一种形式://(由c++引进,可注释一行,也可注释多行)
第二种形式:/**/(不能进行嵌套引用)
2..注释的作用
1)代码中由不需要的代码可以直接删掉或注释掉
2)难理解的代码应该进行注释,好帮助其他人理解以及后期的复习
五.基本了解条件语句
1.什么叫做条件语句?
—— 让你做选择的事,比如:你吃香蕉还是苹果?(只能二选一)
2.if语句:if()内的表达式为真,则执行if语句,反之,跳过if语句
#include <stdio.h>
int main()
{
int num = 1;
if (num)
{
printf("好好学习,拒绝摆烂!!!\n");
}
if (!num)
{
printf("摆烂ing!!!\n");
}
return 0;
}
3.if-else语句:if()内的表达式为真,则执行if语句,反之,执行else里面的语句
#include <stdio.h>
int main()
{
int num = 1;
if (num)
{
printf("好好学习,拒绝摆烂!!!\n");
}
else
{
printf("摆烂ing!!!\n");
}
return 0;
}
4.注:在C语言中,非0表示真(包括负数),0表示假
六.循环语句初了解
1.什么叫做循环?
—— 每天都要做的事,比如你每天都要干饭,每天都要刷牙,这就是循环!!!
2.while循环
#include <stdio.h>
int main()
{
int num = 1;
while (num < 10)
{
printf("boy\n");
num = num + 1;
}
return 0;
}
3.for循环
#include <stdio.h>
int main()
{
int num = 1;
for (num = 1; num < 10; num++)
{
printf("boy\n");
}
return 0;
}
4.do-while循环
#include <stdio.h>
int main()
{
int num = 1;
do
{
printf("boy\n");
num = num + 1;
} while (num < 10);
return 0;
}
注:以上先大概了解格式,后面有详细讲解!!!
!!!恭喜你,成功达到练气三层巅峰!!!
七.数组初识
1.什么是数组?
—— C语言中数组的定义:一组相同元素类型元素的集合
2.数组的定义
1)数组的下标都是从0开始的
2)数组的大小一旦定义了,那就不能改变
3)数组的[]中的值只能由常量构成
#include <stdio.h>
int main()
{
int arr[6] = { 1,2,3,4,5,6 };
//数组的下标从0开始
printf("%d\n", arr[0]);
printf("%d\n", arr[1]);
//数组的大小一旦定了,不能改变
//arr[10] = 0;
//数组的[]中的值只能由常量构成
int num = 10;
//int str[num] = {};//错误,num是变量,[]内只能是常量
return 0;
}
3.可通过数组的下标访问数组中的任意元素
#include <stdio.h>
int main()
{
int arr[] = { 1,2,3,4,5,6,7,8 };
printf("%d\n", arr[0]);//访问第一个元素
printf("%d\n", arr[1]);//访问第二个元素
printf("%d\n", arr[2]);
printf("%d\n", arr[3]);
printf("%d\n", arr[4]);
return 0;
}
八.操作符
1.算术操作符
算术操作符 | 解释 |
+ | 加 |
- | 减 |
* | 乘 |
/ | 除 |
% | 取模 |
注:/运算符在两边都是整数的时候,得到的数也是整数;%运算符只能用于整数操作
#include <stdio.h>
int main()
{
int a = 10;
int b = 3;
printf("a+b=%d\n", a + b);//a+b=13
printf("a-b=%d\n", a - b);//a-b=7
printf("a*b=%d\n", a * b);//a*b=30
printf("a/b=%d\n", a / b);//a/b=3
printf("a%b=%d\n", a % b);//a%b=1:取余数
return 0;
}
2.移位操作符(初识)
—— 用于操作二进制位的操作符
移位操作符 | 解释 |
>> | 对二进制位进行右移操作 |
<< | 对二进制位进行左移操作 |
#include <stdio.h>
int main()
{
int a = 1;
printf("%d\n", a >> 1);//0
printf("%d\n", a << 3);//8
return 0;
}
3.位操作符
—— 用于操作二进制位的操作符
位操作符 | 解释 |
& | 按位与 |
^ | 按位异或 |
| | 按位或 |
#include <stdio.h>
int main()
{
int a = 1;
int b = 4;
printf("a & b=%d\n", a & b);//a & b=0
printf("a ^ b=%d\n", a ^ b);//a ^ b=5
printf("a | b=%d\n", a | b);//a | b=5
return 0;
}
4.赋值操作符
赋值操作符 | 解释 |
= | 赋值:a = b,把b赋给a |
+= | 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 |
<<= | a <<= b --> a = a << b |
#include <stdio.h>
int main()
{
int a = 1;
int b = 2;
printf("%d\n", a += b);//3
printf("%d\n", a -= b);//1
printf("%d\n", a *= b);//2
printf("%d\n", a /= b);//1
printf("%d\n", a %= b);//1
printf("%d\n", a &= b);//0
printf("%d\n", a ^= b);//2
printf("%d\n", a |= b);//2
printf("%d\n", a <<= b);//8
printf("%d\n", a >>= b);//2
return 0;
}
5.单目操作符
单目操作符 | 解释 |
! | 逻辑反:真变假,假变真 |
- | 负号/负值 |
+ | 正号 |
& | 取地址符:指针,输入中常用 |
sizeof | 操作数的类型长度(字节为单位) |
~ | 对操作数的每一个二进制位按位取反 |
-- | 前置--、后置-- |
++ | 前置++、后置++ |
* | 间接访问操作符(解引用操作符) |
(类型) | 强制类型转换 |
#include <stdio.h>
int main()
{
int a = 0;
//!操作符的使用
if (!a)
{
printf("boy!\n");
}
int b = -3;//负号
int c = +3;//正号,一般省略不写
//&地址符的使用
scanf("%d", &b);//在输入函数的使用
int* p = &b;//在指针的使用
//sizeof的使用
int arr[] = { 1,2,3,4 };
int len = sizeof(arr) / sizeof(arr[0]);
//~号的使用
int d = ~c;
//--,++的使用
//a = ++b;
a = b++;
//a = --b;
a = b--;
//*号的使用
*p = 10;
//(类型)的使用
int num = (int)13.14;//把浮点数转为整数
return 0;
}
6.关系运算符
关系运算符 | 解释 |
> | 用于判断大于 |
>= | 用于判断大于等于 |
< | 用于判断小于 |
<= | 用于判断小于等于 |
!= | 用于判断不等于 |
== | 用于判断相等 |
注:关系运算符常用于条件判断和循环中的判断
#include <stdio.h>
int main()
{
int a = 10;
int b = 11;
if (a > b)
{
printf("a > b");
}
if (a >= b)
{
printf("a >= b");
}
if (a < b)
{
printf("a < b");
}
if (a != b)
{
printf("a != b");
}
if (a == b)
{
printf("a == b");
}
return 0;
}
7.逻辑操作符
逻辑操作符 | 解释 |
&& | 逻辑与:全真为真,一假为假 |
|| | 逻辑与:一真为真,全假为假 |
#include <stdio.h>
int main()
{
int a = 10;
int b = 11;
if (a >= 10 && b > 10)
{
printf("t\n");
}
if (a > 11 || b > 12)
{
printf("y\n");
}
return 0;
}
8.条件操作符(三目运算符)
三目运算符 | 解释 |
exp1 ? exp2 : exp3 | 如果表达式1为真,则执行表达式2,否则,执行表达式3 |
#include <stdio.h>
int main()
{
int a = 10;
int b = 11;
int c = a > b ? a : b;//找出a,b中的最大值
printf("%d\n", c);
return 0;
}
9.逗号表达式
逗号表达式 | 解释 |
exp1,exp2,exp3…… | 代码解释 |
int main()
{
//用法1:使用逗号表达式的式子是最后一个表达式
int a = 10;
int b = 30;
int c = 40;
int d = (a, c, b);
printf("%d\n", d);//30
//用法2:在数组中使用
int arr[] = { 1,2,3,5 };
return 0;
}
注:使用逗号表达式的特点:表达式从左向右依次计算,但整个表达式的结果是最后一个表达式的结果
10.下标引用、函数调用和结构成员操作符
下标引用 | [] |
函数调用 | () |
结构成员 | .和-> |
#include <stdio.h>
void test()
{
}
struct people
{
char name[];
};
int main()
{
int arr[10];//[]是下标引用操作符
test();//()是函数调用操作符
struct people man = {"jerry"};
printf("%s\n", man.name);//jerry
// -> 是使用在结构体指针的,后面细说
return 0;
}
九.总结
1.字符串的结束标志
2.转义字符的使用
3.注释的作用和使用
4.条件语句的基本使用
5.循环的基本了解
6.什么是数组?
7.数组的定义
8.操作符总结