卡码网C++基础课
文章平均质量分 85
卡码网C++基础课程笔记,适用于想要学习C++的零基础学员,通过题目讲解C++基础知识,看完本专栏可以学会C++基础知识并写一些简单代码
vans顺意
这个作者很懒,什么都没留下…
展开
-
【卡码网C++基础课 1.A+B问题1】
定义一个函数时,我们首先要在函数名之前放置一个关键字表示函数的返回类型,这个关键字代表的含义是函数执行完毕会返回什么类型的值,我们这里使用了int关键字,表示函数将返回一个整数类型的值(不带小数部分),比如我们在数学中使用的0、1、2就是整数。在后面,我们会定义很多个函数,为了区分这些函数,我们要给不同的函数起不同的函数名称,而且函数命名是有规范的,而这里由于是主函数,所以函数的名称为main,且不可更改。通常,会使用 std:: 的前缀,表示正在使用C++标准库中的内容。在每次循环中,会判断条件的真假。原创 2024-08-20 17:41:27 · 1196 阅读 · 0 评论 -
【卡码网C++基础课 2.A+B问题2】
在上节中,我们提到了几种常见的数据类型,但是在某些情况下,可能会发生数据类型的转换,比如在while(条件判断)循环中,条件判断通常是一个布尔值,即true表示真,false表示假,但是假设我们给定的是一个整数类型的值,编译器会帮助我们进行数据类型转换,将之转换成布尔值,如果整数的值为0,则条件的值为false, 其他非0的数都会转换成true。现实中,我们想要把一件事情做n次,比如数n只羊,就是说第一只羊,第二只羊,第n只羊,这样数,那在编程中是同样的逻辑,只不过这次我们使用的是for循环。原创 2024-08-20 22:37:18 · 819 阅读 · 0 评论 -
【卡码网C++基础课 3.A+B问题3】
除了break之外,continue也可以用于控制跳出循环,同样的,它也只能出现在for、while和do while循环的内部,只不过它的用法是在执行过程中跳过当前循环迭代的剩余部分,然后继续下一次迭代, 通常用于在某个特定条件下,跳过某些特定的迭代操作,但仍然继续循环。所以想要判定a和b的结果是否“都”等于0,可以使用逻辑与,也就是a == 0 && b == 0, 将之作为if语句的条件。例如,表达式 (a > b) || (c > d) 只要 a > b 或 c > d 其中之一为真,结果就为真。原创 2024-08-21 15:28:26 · 978 阅读 · 0 评论 -
【卡码网C++基础课 4.A+B问题4】
除了=这种赋值运算符之外,我们经常会对某个值进行运算后,再把计算的结果赋给这个值,比如sum = sum + a, 将sum的值和a进行运算后,再赋值给sum, 此时我们可以使用复合赋值运算符+=在本题中,你需要计算若干个整数的和,每行第一个数n表示后面有n个数,后面的几个数是输入的整数,如果n为0时,结束输入。我们通常都使用sum += i的形式来书写代码,而且这种形式也常常用于其他算数运算符,比如-=、*=、/=、%=如果两个操作数都是整数,执行整数除法,结果也是整数(小数部分被舍去)。原创 2024-08-21 16:06:28 · 641 阅读 · 0 评论 -
【卡码网C++基础课 5.A+B问题5】
但是题目要求每组数据内部的输出(也就是每行数据之间)是有空行的,但两组数据之间并没有空行,所以在每组数据的最后一行,也就是n被修改为0的时候,不需要输出空行。每行数据首先会输入一个整数m, 代表着这行数据有m个数据,所以需要提前定义变量m接收第一个整数,然后使用while循环来控制m个数据的输入和求和。接下来的情况就和A+B问题4类似,转换成m个数据的求和问题,需要定义变量sum指代数据总和,定义变量a指代输入的数据,然后遍历得到结果。对于每组输入,输出M个数的和,每组输出之间输出一个空行。原创 2024-08-21 19:48:12 · 315 阅读 · 0 评论 -
【卡码网C++基础课 6.数组的倒序与隔位输出】
表示一组数据可以用数组,在 C++ 中,数组是一种基础的数据结构,用来存储固定大小的相同类型元素的序列。⚠️ 因为要输入变量,才能确定数组的大小,属于不清楚元素的确切个数,理应使用vector,但这里我们为了展示数组操作,暂时这样演示,实际上int arr[n]这种操作是不被允许的,并且在编译器中可能会报错。题目的第二个要求是每隔一个元素输出其值,中间用空格分隔,只需要对数组从索引为0的位置进行遍历,每次递增2,中间输出空格,这样就能保证输出索引为0、2、4、……原创 2024-08-22 10:00:37 · 1115 阅读 · 0 评论 -
【卡码网C++基础课 7.摆平积木】
一天,他把许多积木块组成了好多高度不同的堆,每一堆都是一个摞一个的形式。对于每一摞积木,如果当前摞积木的数量超过平均值,也就是当前摞积木数量 - 平均值 > 0, 则把超出平均值数量的积木移到不足平均值的那一摞,超过的数量表示需要挪动的次数。第一步:我们需要数清每一摞积木的数量,把他们的总数相加,这样我们就知道积木的总数量,再把得到的结果除以n, 就得到了在高度相同的情况下,每一摞积木的块数。第二步:对于超过平均值的积木,计算当前的积木数量和平均值的差值,把多的积木数量移到缺少的部分,直到积木高度相同。原创 2024-08-22 16:18:00 · 441 阅读 · 0 评论 -
【卡码网C++基础课 8.奇怪的信】
通过取余num % 10获取最后一位数字,%表示取模/取余运算,即一个整数除以另一个整数后的余数,最后一位是个位,无法被10整除,所以就成了余数,进而可以通过%取余运算取到。想要判定是否是偶数(即可以被2整除a % 2 == 0),可以使用if进行判断, 如果是偶数,则累加到result总和上。按照题目分析,我们需要使用取模运算和整数除法来获取每一位,直到n变为0。对于每组输入数据,输出一行,每组数据下方有一个空行。例如:5548,结果为12,等于 4 + 8。小明很苦恼,想请你帮忙解决这个问题。原创 2024-08-22 16:55:12 · 275 阅读 · 0 评论 -
【卡码网C++基础课 9.打印正方形】
上图中的数据就是一个二维数组,它是由行和列组成的表格状数据结构,可以理解为包含其他数组的数组,二维数组的元素可以通过两个索引来访问,一个索引表示行,另一个表示列, 比如arr[0][0] 表示第一行第一列的元素,值为1,arr[2][2] 表示第三行第三列的元素,值为13。题目要求我们只打印边界,也就是说对于边界的内容打印"*",非边界的内容打印空白,这种结构满足之前所讲的根据某个条件来选择不同的代码路径执行,需要使用到if-else。请注意,内部为空白,外部是由 “*” 字符组成的框。原创 2024-08-23 11:03:21 · 799 阅读 · 0 评论 -
【卡码网C++基础课 10.平均绩点】
也就是说,我们可以采用这样一种思路,事先给每一行字符串一个“真的令牌”,字符串遍历处理过程中,如果有哪一行字符串中有{A, B, C, D, F}以及空格之外的字符,则把“真令牌”替换成“假令牌”,这样当走出循环之后再进行输出处理时,就会因为不认识这个“假令牌”而不进行输出。如果是A则转换成4分,B转换成3分,C转换成2分,D转换成1分,F转换成0分,如果输入的内容不在集合{A, B, C, D, F}中,则输出Unknown, 对用不同的情况需要使用不同的代码进行处理,可以借助if-else进行解决。原创 2024-08-23 17:03:00 · 1210 阅读 · 0 评论 -
【卡码网C++基础课 11.句子缩写】
参数名称通常是用来描述参数的有意义的名称,可以在函数体内部使用,这里接收一个字符作为输入,所以形参列表类型为char, 参数名称可以用a表示, 引用传递&意味着函数可以修改传递给它的参数。如果后面还需要将小写字符转换成大写,那我们还需要再写一次,代码就会显得有些冗余,更致命的是,如果这是一段很长的代码,并且在多个地方应用,当我们有了新的需求,需要对这一段代码进行修改时,我们需要一处处的找出再修改,这种情况下我们可以使用第一节中提到的函数,将代码模块化,并在合适的地方重用,从而增加代码的复用性和可维护性。原创 2024-08-24 11:06:22 · 1176 阅读 · 0 评论 -
【卡码网C++基础课 12.位置互换】
接着,我们需要遍历字符串,并将当前字符和下一位字符两两交换,当完成第一位和第二位的交换之后,我们应该控制迭代的步数为2,执行第三位和第四位的交换。可以看到交换的操作是一直都有的,对于这个一直存在的操作,我相信大家一定能联想到上一节的函数,那我们就先来看看这个交换字符串的函数是怎么写的吧。奇偶位互换是指字符串的奇数位和偶数位相互交换位置,比如下面的字符串"0aa0", 前两位相互交换,后两位相互交换,返回的结果是a00a。再把之前倒入第三个杯子里的雪碧倒入第二个杯子中,这样第二个杯子装的是雪碧。原创 2024-08-24 11:24:19 · 377 阅读 · 0 评论 -
【卡码网C++基础课 13.链表的基础操作1】
传统的定义变量的方式只能使用一种数据类型,无法处理链表这种既包含数据域名、又包含指针域的复合结构,这就需要使用到struct结构体,结构体是一种用户自定义的数据类型,比如想要定义一个Person的结构体// Person结构体// 使用 数据类型 成员变量的形式来定义int age;// int类型的年龄// string类型的名字结构体可以组合多个不同类型的成员变量,成员变量可以是各种数据类型,包括整数、浮点数、字符串、其他结构体等,所以你可以根据需要定义自己的结构体来组织数据。原创 2024-08-26 21:48:49 · 796 阅读 · 0 评论 -
【卡码网C++基础课 14.链表的基础操作2】
当while循环结束后,如果cur指向null,说明输入的m已经超出了链表的长度,如果cur还是指向dummyNode说明没有进入到while循环,也就是m=0,这两种情况都是m位置不合法的情况。3.在 main 函数中,创建一个包含一组整数数据的链表,然后输入 m,调用链表的方法输出第 m 个元素。构建一个单向链表,链表中包含一组整数数据,输出链表中的第 m 个元素(m 从 1 开始计数)。第一行包含两个整数 n 和 k,n 表示需要构建的链表的长度,k 代表输入的 m 的个数。测试数据输出占 k 行。原创 2024-09-01 11:41:48 · 584 阅读 · 0 评论 -
【卡码网C++基础课 15.链表的基础操作3】
我们可以假设这样一个场景:在传递情报过程中,A的下线是B, 也就是A -> next = B, 现在我们要引入一个C充当A和B之间的中间人,A的下线是C, C的下线是B,我们可以直接将A的next指向C,即A -> next = C, 然后将C的next指向B, 但是B无法直接表示,之前是用A -> next来表示B的,现在A -> next已经指向C了,所以在操作之前,我们需要实现定义一个变量保存B,假设为tmp, 然后将C的next指针指向B即可。如果删除元素后链表的长度为0,则不打印链表。原创 2024-09-01 19:41:33 · 798 阅读 · 0 评论 -
【卡码网C++基础课 16.出现频率最高的字母】
只需要先初始化最大值,然后逐一比对字符出现的频次和当前最大值的大小,如果当前字符出现的频次大于最大值,则更新最大值为当前字符出现的频次,这样完整遍历一遍后,就能找到出现频次最大的字符。由于输入的全都是小写字母,小写字母只有26个,那我们定义一个长度为26的数组即可,字符a到字符z的ASCII是26个连续的数值,所以字符a映射为下标0,相应的字符z映射为下标25。给定一个只包含小写字母的字符串,统计字符串中每个字母出现的频率,并找出出现频率最高的字母,如果最高频率的字母有多个,输出字典序靠前的那个字母。原创 2024-09-02 17:59:58 · 631 阅读 · 0 评论 -
【卡码网C++基础课 17.判断集合成员】
find() 方法用于查找特定元素是否存在于集合中,如果 find() 方法找到了要查找的元素,它会返回指向该元素的迭代器,如果未找到要查找的元素,它会返回一个指向集合的 end() 的迭代器,表示未找到。判断某个元素是否在集合中,需要使用到find()方法,如果找到了,返回指向元素的迭代器,如果不存在,则最终指向end()的迭代器,通过判断find()的返回结果可以判定元素是否在集合中。可以理解为,迭代器和下标运算符的作用一样,用来访问容器中的元素,并且迭代器可以从一个元素移动到另外一个元素。原创 2024-09-02 20:46:19 · 862 阅读 · 0 评论 -
【卡码网C++基础课 18.开房门】
我们常常把map称之为映射,就是将一个元素(通常称之为key键)与一个相对应的值(通常称之为value)关联起来,比如说一个学生的姓名(key)有与之对应的成绩(value),它们是一一对应的,就好像一把钥匙开一扇门,在map中键是唯一的,也只有一个唯一的确定的值。在C++中, map 提供了以下三种数据结构,其底层实现以及优劣如下表所示:map中的键是唯一的,但是multimap则没有此限制。原创 2024-09-06 11:29:57 · 1964 阅读 · 0 评论 -
【卡码网C++基础课 19.洗盘子】
栈这种结构只能在一侧(栈顶那一侧)进行插入和删除操作,而且是后进先出LIFO(后进入栈的元素离栈顶比较近,先出来),允许进行插入和删除的那一端是栈顶,与之对应的另一端是栈底, 如果一个栈不包含任何元素,这个栈被称为空栈。接下来接收m和m个整数的输入,表示对盘子的操作,如果数字为1,表示盘子被拿去清洗,即出栈操作,如果数字为2,表示有新的盘子加入到待清洗区域中,即入栈操作。如果是操作 2,那么该行有两个数字,第一个数字 2 表示有未洗的盘子加入,第二个数字代表未洗的盘子编号。假设你手里有一个盘子堆放区。原创 2024-09-06 17:15:32 · 1120 阅读 · 0 评论 -
【卡码网C++基础课 20.排队取奶茶】
队列已经构建完毕,接下来需要接收数字m和m个整数的输入,表示取奶茶的操作,如果数字为1,表示有人取走了奶茶,即出队操作,如果数字为2,表示有人新加入了奶茶队列,即入队操作,这种“如果”的条件,需要使用到if-else结构。创建一个队列和创建一个栈的写法是相似的,需要指定队列中元素的类型,不过这也意味着队列中的元素必须是相同的数据类型,下面的代码表示创建一个字符串类型的队列。如果是操作 2,那么该行有一个数字和一个字符串,第一个数字 2 表示有人加入了奶茶队列,第二个字符串代表新加入的奶茶队列的人。原创 2024-09-06 20:12:08 · 867 阅读 · 0 评论 -
【卡码网C++基础课 21.图形的面积】
在对象中,总有一些操作是重复的,比如说Person类具有姓名、身高、年龄等特征,并具有一些行走、吃饭、睡觉的方法,而我们要实现一个Teacher类,Teacher首先也是一个人,他也具备人的特征和方法,那我们是不是也应该用代码去实现这些特征和方法呢,这就势必会产生一些重复的代码。这样在计算机世界,一个“人”的概念就建立起来了,但这里的Person类只是个“模具”,空有概念,而无法表示具体的某一个人,只有创造一个类的实例(也就是我们说的对象),比如"张三,18, 男", “李明、20,男”,才能真正的使用。原创 2024-09-09 17:29:14 · 1164 阅读 · 1 评论