网站首页 > 基础教程 正文
CSP/NOIP/信奥赛:C++语法进阶课程。
hello各位同学,欢迎来到王老师编程课堂。准备录制一期关于C++语法进阶的系列课。因为在之前老师已经讲解过关于C++语法基础的系列课程,总共当时分了六大模块来讲解。
·其中的模块一是基础入门。
·模块二、三、四是C++的三大结构,分别是顺序结构、选择结构、循环结构。
·模块五和六又讲了关于数组和函数的一些相关概念、基础应用,包括综合的案例。
所以接下来如果同学已经对于语法基础足够掌握了,接下来就可以进行本阶段的知识学习,叫C++的语法进阶。
关于C++的语法进阶,老师还是按照模块化的思想设计了六大模块,分别是模块一、模块二、模块三,讲了关于字符、字符数组、字符串的一些相关内容。
字符、字符数组和字符串还是相当重要的,因为以前在语法基础的时候,关于处理数据类型的时候,大部分处理的都是整数、小数。当时只需要用inter、用float、用double就可以搞定了。但是当要处理一些字母、符号,甚至数字里面的一些数字符号,这时候就不能用inter和float了,而需要使用字符、字符数组、字符串来搞定它。
所以语法进阶的前三个模块就是字符、字符数组和字符串。另外第四个模块会接触一种新的数据类型,而且新的数据类型可以由自己定义,只要学会了结构体的创建,会发现遇到一些数据类型是C++没有提供的,需要自己整合的时候就可以怎么办?用结构体去创建,这样程序写起来就会更加得心应手一些。
另外第五个模块会认识C++里面一个很重要的知识点叫指针,到时候会认识一下指针,包括让指针和普通的变量结合叫指针变量,和数组结合叫指针数组,和函数结合叫指针函数,都会进行一些相关介绍。
最后第六个和模块和第七个模块,要初步引入关于算法的小思想,其中两个最关键的基础算法,一个叫地推,一个叫地规。通过本次课来做一个详细讲解。
万里长征开头难是吧?先来进行第一次课打好基础,然后依次的往后去走就可以了。这里面老师也建议,老师在讲解的过程中,凡是遇到需要操作的时候,一定要跟着老师的节奏也一块操作。如果老师的操作发现跟不上怎么办?可以把视频暂停,等操作完了之后再继续播放,再去学习就可以了。
c加加的学习一定不要手懒,一定要多敲多练,包括老师的讲解过程中,我是带着你边讲边练。课下要利用自己独立的思想,自己独立的把代码也要去写出来。话不多说,开始进入今天的正题。
今天的正题是讲第一个魔法知识,关于字符的。字符会用吉斯克,把字符相关的比如字符变量、字符编码以及字符的一些小小的案例应用,要利用吉斯克的内容把字符做一个详细掌握。
今天第一次课先来看关于字符里面的字符变量,其实对于这个变量大家并不陌生,在语法基础里面虽然用的不多,但是曾经也用过。比如打印字符图形的时候就用过这样一个变量叫chair或者读成叉都可以,叫chair。chair变量也是常见的数据类型里面的一种。
以前接触最多的一个叫纯整数的,要么用整形inter,关键字是inter,要么用长整形,关键字叫浪浪。另外如果要存小数的,要么用浮点型float,要么用双精度浮点型double。
当然有的人说了老师为什么要整形?为什么要用两种浮点型?为什么也有两种?那是因为每一种能够开辟的内存空间,这个数字决定了能够存的最大的数。比如以整数为例,默认给整形int关键字这种类型的数据量,开的内存空间是四个字节。
有一个小知识点大家需要记住,一个字节是八个二进制位,四个字节就是四个字节。八,三十二,三十二个二进制位,其中的二进制是指一个位上要么填零,要么填一,只有两种方法是吧?
如果是三十二个二进制位能够填的方法,按照小学里面所学过的数学原理,最多能填的数就是二乘以二,乘以二一直乘,总共三十二个二相乘,其实就是二的三十二次方。
来看一下用电脑里面的计算器,打开计算器,用二的多少次方?xy就是x的y次方,现在写了一个二二的多少次方?三十二次方,把二的三十二次方来数一下,这个位数其实不大,个十,百,千,万,十万,百万,千万,亿,十亿,大概是四十二点九六个亿是吧?
言外之意,如果一个数超过它,假设数据量超过四十二点九个亿,比如说是一百亿,一千亿,一万亿,这时候inter就怎么办?就不够大了,存不了那么大的数。
这时候就会用什么?长整形,因为长整形是八个字节,一个字节刚说了是八个比特位,八个字节就是八,八六十四,六十四个比特位。再来试一下out几次方?六十四次方,发现这个数就相当大了,个十,百,千,万,十万,百万,千万,亿,十亿,百亿,千亿,万亿,十万亿,百万亿,千万亿,亿亿,十亿,百亿,千亿。
数下位数,一位两位三位四位五位六位七位八位九位十位十一十二十三十四十五十六十七十八十九二十,能存储二十位的数据。而刚刚的那个整形的虽然没数,四十多个亿,其实也就最多存十位数,十一位数就存不了了。
这是关于整形和长整形,另外小数也一样,小数点后面的位数可能也会很多,默认可能如果是有十一位,发现float就存不了了,如果double,最多可以存多少?20位。
所以生活中假设不知道数据量有多大,建议一定要开什么?开大一点,朗朗整数开朗朗,小数开w。另外还有一个布尔,就两种结果,要么存ch,tr u e叫正确,要么存false,f a l s e叫错误。它只占用了一个字节,因为只需要存两个倍量类型,不需要那么大。
另外字符型,今天的char也是用了一个字节,八个比特位,最多存一百二十八个,因为二的八次方,虽然是二百五十六,但其中要拿出来一个暂时保留,不用,最多存一百二十八个就够了。
把这个知识点为了综合运用,还是要打开stdc+,稍微敲敲代码熟悉一下,然后再开始今天的std。大家先敲基本框架,关于基本框架的头以前最初用的叫什么?io stream,大部分情况下也足够了。后来又给大家讲了一个万能头,某些情况下不知道哪个函数需要用哪个头的时候就用万能头,会更方便一些。万能万能,它会自动帮你怎么办?调出函数。
老师把我的代码保存到桌面上的文件夹,也要学会把代码保存到一个固定的文件夹。第一个程序叫一杠一,先来看第一个变量叫int int a,就做一件事,see in a,然后see out a,换个行,很简单。
先来存一个比较简单的税,比如考试考了一百分,这个a输出没有问题,输入。输出就是一百分。
这次再来一个,如果某人的存款是十个亿,注意看,十个亿就是一后面几个零,一二三四五六七八九,来试一下,个十,百万,千万亿,十亿,一后面有九个零就是十个亿是吧?一回车是不是还是十个亿?证明九个零加一个一是不是十位数?能存储。
但是再来一个,百个亿,一后面十个零,一二三四五六七八九十,回车,有人发现了,存不下,最多存了一个九位数,一二三四五六七八九十,是二十一亿,四千七百四十八万,三千六百四十七。
有人说了,老师刚刚算的时候好像不是二十多个亿,好像calc是四十多个亿,二的三十二次方是不是四十多个亿?这俩数基本上是一半,少了个一,一半应该是以八结束是吧?这是因为int除了能表示正整数,还能表示什么?零和负整数,负整数占了一半,二十一亿,多少多少多少八,零占了一个,能占的就是一半减去一,最多是存二十一亿多。
已经看到缺点了,百亿存不下,这时候怎么办?int就不足了,就要把变量类型改成什么?浪浪狼狼的存小存,普通位数肯定可以,比如存一百分,当然可以了,只要不超过就行是吧?再比如存刚刚说的,字符存不下的一后面十个零,回车。发现是不是能存下?实际上能存下的是二十位数,再多写几个,再来试一下是不是也能存?所以inter没有存的整数足够大。
另外再来这个怎么存整数,但是还是有缺点的,比如现在要存一个小数,一点零,回车。发现了,最终只存了整数一,后面的所有小数怎么办?自动忽略。这时候是因为它是整形,要改成double,改成double之后再来存这个数,一点零,回车。
默认情况下,这里面ctrl的输出的时候只保留了四位小数。在前面语法基础的时候也跟大家说过,想让它保留几位可以用print f或者ctrl的set precision,让它实现设定几个小数位数。这个并不是存不了,而是因为默认显示的时候默认只显示了四位。
这是关于数据类型,今天要了解的数据类型叫什么?叫差。为什么?因为再来假设现在还是浪浪,这次让它存一个符号会发现一个奇怪的现象,比如来存一个符号叫井号,一回车,井号一回车,输出的时候输出了一个a,输出个零。什么情况?这个就证明a是一个整形,但是现在要存的是一个符号,不能存。
如果要存就用今天的思路改成类型叫chair就可以了。再来试一下,这次再输出,再输入井号,输出是不是井号?进入今天的知识点学习,所以chair是可以存什么?字符的。
关于chair为什么生活中要用?用的时候注意了,原因就跟刚刚的演示是一样的,有可能要存什么?字母,比如二十六个大写字母,二十六个小写字母,比如也有可能存的是不是真正的数字,而是数字里边的字符零,一二三四五六七八九,也有可能要存标点符号,特殊符号。
这时候就要用今天的这样一个类型了,这个数据类型叫字符,字符类型。关于字符类型的定义,老师刚刚用的是最简单的一种方式叫chair,起了一个名字。输入是用c印输入的,假设想让它直接复制,一样chair名字后面跟等号,等号表示复制。
但一定要注意了,字符a一定要用单引号引起来去复制才可以,单引号引起来里面的内容就称为叫字符,而且只能引一个,比如单引号引个a,再加个b,注意了,它只能识别a,识别不了b,因为一个字符组成的字符常量或变量。当然关于常量之前也接触过,在定义变量类型之前加一个参数叫const o a st就可以了。但是一般常量建议把常量的名字用大写会更合适一些,大家一看就知道它是常量,请非要用小写也没关系。
接下来来定一个关于字符变量的使用的例子,接着例子来写,来看它能不能垂小写字母,大写字母数字和符号。把框架留下,其他现在都不要了。比如来写第一个chair c等于,先来存一个小写字母a试一下。注意了,老师正在故意用的一个陷阱,来运行一下。
有人说老师chair c一等于a,哪错了?怎么会爆了一个红的自动标红了?因为提醒小a不认识,这时候会把小a当做一个变量。为了证明小a是一个字符,要用一对单引号把小a放进去就代表字符了,这次再运行就不会出错了。当然也没有输入输出,因为还没有写输出。
这样就发现了,c一是让它存储的小写字母,再来一个chair c r等于一对单元号,这次就不要出错了,加大写的字母,这样c r。中英文切换的时候注意,c r就纯属什么?存储大写字母,再来写一个char c 三,它还可以存数字。
但是如果现在写的是等于一,注意了,它存的其实不是数字一,要存数字一也一样用单引号引起来。这样c三就让它存储了什么?字符里面的数字叫字符数字,再来写一个c 四,也有可能要存什么?符号,比如刚刚说的井号。这样c四用于它存储符号、标点符号、特殊符号都可以。
这时候来用一个c l的语句来输出c e,换个行。老师不想敲了也可以用技巧,ctrl加c,点中这,ctrl加v,ctrl加v,ctrl加v,分别是复制粘贴粘贴粘贴是吧?c一、c二、c三、c四,运行一下。
发现果然chair c一把小a存起来了,要不然c一也不可能输出是吧?c二把大a存起来了,c三把数字一存起来了,c四把井号存起来了。这是关于字符变量常用的存储内容,关键点一定要注意。
·第一个,一对单引号将字符引用起来,一定是一对单一号,都有单一号,这才是字符。
·第二个,只能存储一个字符,比如来改一改,改一改这个程序,c一存a、b、c、d,实际上这已经是字符串了,后面会学到。但是如果真的把a、b、c、d放到单元号里边给c一存,到底能行不能?来试一下,发现最终ce也输出了,但是输出的是谁?是d,把前面的怎么办?b本来要存a的,b把a覆盖了,c把b覆盖了,d把c覆盖了,最终只剩了一个d。所以注意就不要这样写,回头会教大家。
如果真想去abcd,应该用字符数组或者字符串就可以了。这是关键点,两关键点。第一个一定要用单一号引起来,第二个每次只能存一个支付。
关于这个字符再来写一个例子,这是曾经也学过的一个例子,由用户输入一个字符打印由该字符组成的六行直角三角形。首先注意了,输了一个星,一行两行三行四行五行六行,第一行是一个,第二行是两个,第三行是三个。言外之意,第一行应该就是爱个。
所以写了一个放循环外层控制行,i等于一就是第一行,i小于等于六就是最多六行加加,就是一变成二,二变成三,三变成四,四变成五,五变成六,总共是六行。j代表列,如果是第二行,第一行要小于等于一,第二行从一开始要小于等于二,这样又打印两个字符。
假设是第二行,这要小的应爱,从一打印到爱就是爱个字符,所以外层循环控制的是列,要记住小于等于i才可以。最后打印完输出的时候还需要注意要来一个一行打印完了再输出换行。
来试一下,把ppt缩小一下,看着需求,老师不是为了看待吗?是为了让大家看需求,由用户输入一个字符打印由该字符组成的六行直角三角形。不想看也可以不看它,按需求。
首先建议把chair变量定义在循环之外,这个变量用于存储一个字符,这个字符提议的需求是由用户输入,用ce来完成什么?字符输入是吧?现在可以试一下,按f11,比如输一个井号,没问题是吧?但是没有打印输出,那是因为还没有继续敲代码,要打印输出负循环,第一行二等于一,最后一行说是六行,爱小于等于六,爱加加。
注意了,这个用爱来控制什么?控制打印行,再来一个内增循环,for j等于一,j小于等于i,因为第二行最多有e个数据,从一到i刚好e个数据是吧?j用于控制什么?打印列或者叫控制每行打印的个数。
接下来就可以打印了,打印谁?打印用户输入的那个字符输给谁的?输给c了,所以就打印c就可以了。但是一行打印完了,记住要换行,所以要再来一个c out endle,再来点运行。比如输一个井号,一行两行三行四行五行六行,第六行刚好六个,第五行五个是吧?
要用其他类型的,比如叉能不能输数字?也可以,它会把它当做字符数字,一个一两个一三个一,四个一五个一六个一。能不能输字母?也可以,比如输一个大写的c回车,一个c两个c三个c四个c。
有了字符变量之后,想完成生活中关于字母包括符号的一些类型的知识的时候,一定要注意定义字符类型的变量就可以帮你搞定了。
这个是今天的第一次课的内容,讲解了字符变量。本次课就先到这,各位同学拜拜。
猜你喜欢
- 2025-01-15 在C++这条路上走得更远了,给大家一些系统的建议。
- 2025-01-15 C/C++编程笔记:isspace()在计算空格字符中的应用
- 2025-01-15 C++使用转义字符‘\a’实例
- 2025-01-15 C/C++编程笔记:C语言字符串比较函数,超详细,值得收藏
- 2025-01-15 C/C++学习日记:用C语言画一个爱心,哄女朋友效果杠杠的
- 2025-01-15 C/C++编程笔记:在C语言中存储字符串!方法 + 源码示例
- 2025-01-15 C/C++编程笔记:getline()函数和字符数组
- 2025-01-15 字符若棋,步步为营,c++编码运筹帷幄。
- 2025-01-15 C/C++编程笔记:C ++字符串类及其应用!新知识又来啦
- 最近发表
- 标签列表
-
- gitpush (61)
- pythonif (68)
- location.href (57)
- tail-f (57)
- pythonifelse (59)
- deletesql (62)
- c++模板 (62)
- css3动画 (57)
- c#event (59)
- linuxgzip (68)
- 字符串连接 (73)
- nginx配置文件详解 (61)
- html标签 (69)
- c++初始化列表 (64)
- exec命令 (59)
- canvasfilltext (58)
- mysqlinnodbmyisam区别 (63)
- arraylistadd (66)
- node教程 (59)
- console.table (62)
- c++time_t (58)
- phpcookie (58)
- mysqldatesub函数 (63)
- window10java环境变量设置 (66)
- c++虚函数和纯虚函数的区别 (66)