热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

c语言视频教程谭浩强,c哩c哩舞蹈分解式教程

第四章求1加到100前言该问题就是求1加2,再加3,一直加到100的值。此章我们用代码来实现一下,并介绍用到的C++语法知识。1.体贴的乌冬面qpdmj1786年,qpdmj9


第四章1加100之前这个问题是1加2,加3,求100以下的值。 本章介绍用代码实现并使用的c语法知识。


1 .体贴的乌冬面qpdmj 1786年,qpdmj岁的时候,他的老师想打发课时,让学生们计算了1 100个结果。 他认为他必然算不了那么快,结果qpdmj用与硬计算不同的方法很快得出了结果。 前几天,一个初一的妹妹告诉我她被打是因为寻求这个问题。 我小时候也很吃惊,应该是因为这个问题被父亲打了。 所以,现代人看起来很简单,但在以前的时代其实没那么容易出现。 不是古人比现代人傻,而是现代人站在巨人的肩膀上。 在一些事情上,经典可能比流行更有价值。


2 .控制结构计算机天生适合反复劳动。 现在的CPU一秒钟可以计算数十亿次的加法,所以只要依次加上对应的值进行计算即可。 进入主函数后,程序依次向后运行。 但是,编程语言可以运行循环结构重复代码,或者判断条件,然后选择运行某一部分的代码。 这是选择结构; 直接结束函数的执行,跳转到某个代码位置。 这是跳转语句; 这些都被称为控制结构,是控制程序执行的顺序。


在该加法问题中,可以通过在循环中执行加法来计算结果。 最简单的循环结构通过while关键字实现,如下所示:


while (条件() /执行内容)//仅在条件为假时退出循环。 其次,执行这里的语句的3.int型int型是表示整数的基本数据类型。 32位和64位程序都具有32位大小。 这意味着内存需要32位二进制文件(4字节)来表示它。 如果定义了在代码中保存整数的int型变量,则程序在运行时将在内存中占用4字节的空间。 计算一下可以存储在4G记忆棒中的int类型变量的数量:


4gb内存转换为字节:


所以是1024的3次方个,也就是约10亿个。


而且int型可以表示多少个值? 也就是说2^32,等于4294967296。 43亿是个很大的数字,但是随便在纸上写几个人就会超过。 处理更多数字时,不能使用int类型。 但是,只要计算的数字不是太大,暂时可以不考虑这个问题。


实际值范围为[-2147483648,2147483647 ],因为int类型可以表示负数。 当然这是整数,二进制值本身是整数,是离散的。 表示小数时,使用浮点、双精度等其他基本数据类型,但不准确。 稍后将完整说明所有基本数据类型。


在本章中,使用int类型就足够了。 上一章中也出现了int型的样子,但是为了保存计算结果而定义int型的变量时,写如下。


int count=0; 定义了名为count的int类型变量。 初始值为0,还需要表示1到100的累计变量。


int add=1; 定义了名为//add的int类型变量。 初始值为14。 编写代码时,首先定义了主函数,注意到主函数的返回值也是int类型,然后在return语句中返回0 :


int main () { return 0; }然后定义表示值所需的变量。


int main () { int count=0; //累计结果int add=1; //单个值执行第一个添加1 return 0的}循环的加法计算,并将add的值添加到计数中。 然后,必须在每个循环中将add再加1。 因此,在99次循环后,add将从1变化为100。 循环第100次时,add大于100,不满足条件,所以结束循环并放在while大括号中的后一个语句,即返回0; 已退出主函数。 结束程序的执行。


int main () { int count=0; //累计结果int add=1; //单个值首先在1while(add=100 ) /大于100时不循环(等于100时需要循环) { count=count add; //count加上add后的值add=add 1; 每//add循环1 (返回0; }

33px;">虽然求得了1加到100的值,保存到了count变量里,但还需要用标准库的iostream输出打印到控制台,不过在这之前可以用编译器的断点调试功能,查看各个变量的值,在下图return 0;结束整个程序之前那一行代码的左侧点击一下,就可以添加一个断点:

当程序运行到此处时就会中断,并且在下方的窗口可以看到变量的值:

再点绿色按钮继续,就可以继续程序的执行,这时就会主函数返回,从而结束整个程序。

最后按照第三章的输出方法,打印出count的值,整个代码如下:

#include using namespace std;int main(){ int count = 0;//累加结果 int add = 1;//单个值,一开始加的是1 while(add <= 100)//大于100时就不循环了(等于100时还需循环) { count = count + add;//count加上add的值 add = add + 1;//add每次循环加1 } cout <<"1加到100的值为:" <> add; return 0;} 5.问题拓展

很容易发现,如果要算1加到200,只需要将while循环判断的条件改一下。如果我们需要同时输出1加到100,和1加到200,难道需要复制整个代码然后再修改某一处吗?我的经验就是重复的代码越少越好,所以我们将问题抽象成1加到N的值是多少。抽象问题后,就可以写成一个函数,来反复执行通用的功能,只是参数条件变化了。和主函数一样,定义一个普通的函数,取名为CalcCount:

//定义了一个函数,名字为CalcCount,返回值为int,参数为累加的上限int CalcCount(int v_max){ //TODO(TODO意为尚未完成的代码) return TODO;}

接下来实现函数的运算过程,从主函数剪切过来,简单修改一下(注意注释也要更新!):

//定义了一个函数,名字为CalcCount,返回值为int,参数为累加的上限int CalcCount(int v_max){ int count = 0;//累加结果 int add = 1;//单个值,一开始加的是1 while(add <= v_max)//大于v_max时就不循环了(等于v_max时还需循环) { count = count + add;//count加上add的值 add = add + 1;//add每次循环加1 } return count;}

 在主函数,就使用CalcCount函数即可,只负责输出显示结果:

#include using namespace std;//定义了一个函数,名字为CalcCount,返回值为int,参数为累加的上限int CalcCount(int v_max){int count = 0;//累加结果int add = 1;//单个值,一开始加的是1while (add <= v_max)//大于v_max时就不循环了(等于v_max时还需循环){count = count + add;//count加上add的值add = add + 1;//add每次循环加1}return count;}int main(){//这里直接将对应的值传入CalcCount函数,返回计算后的值再显示即可cout <<"1加到100的值为:" <> x;return 0;}

 运行程序,结果如下:

不过为了彰显计算机擅于重复操作的说法,可以再写一个循环语句,循环的输出:

int main(){int v_max = 1;while (true){cout <<"1加到" <> x;return 0;}

当v_max比较大的时候,输出的结果也会更大。当输出值超过int类型可以表示的范围时,就会出现负数,至于为何是负数,以后再解释。不过在很多游戏里应该见过不少数字过大变为负数的情况了。

6.算法改进

很多人一说到算法,就会觉得多么高大上。的确也很高大上,高大的是研究算法的人,新算法的计算过程完成相同的事情,但计算所执行的步骤更加简洁。如果使用上面的累加办法,累加到N则需要进行N次加法,当N很大时,运算次数就特别多了。如果使用等差数列求和公式,那么就只需要几次计算了,公式如下:

由于首项为1,公差为1,则具体公式为:

简单代入100或200验证得出结果一致,所以再编写一个新算法的函数:

//采用等差数列公式的计算方法int CalcCount2(int v_max){return (v_max * v_max + v_max) / 2;}

接着在主函数略微修改一下,同时输出两个函数的值,运行之后可以发现两者输出的值是一样的:

int v_max = 1;while (true){cout <<"1加到" <上面为了方便理解没有写出最简的写法,这里说明一下。

a = a + b的含义是计算a加上b的值后再赋值给a,比如一开始a为10,b为20,那么执行之后a的值为30,b的值不变。a = a + b的写法可以简写为a += b,如下:

a = a + b;//和下面一样的功能a += b;//简写

当b为正负1的时候,则有更简化的写法:

//自加1,三种写法一样a = a + 1;++a;//一般优先使用++aa++;//自减1,不过自减1一般用得较少a = a - 1;--a;//同样一般优先使用--a,a--; 8.判断大小

在本例中还用到了判断变量大小的逻辑,判断a与b的大小通过以下操作符,返回真或假。作为while循环的条件,返回真时,while循环才会继续执行,否则跳出循环,执行while后面外部的语句。这里列出判断大小的操作符,它和函数有点像,返回的是一个bool(布尔)类型的值,它代表逻辑的真或假,也就是true或false,它可以作为while的条件判断。

a ba大于b时,返回真a <= ba小于或等于b时,返回真a >= ba大于或等于b时,返回真a == ba等于b时,返回真a != ba不等于b时,返回真结语

本章通过一个简单的数学问题,示范了一些最基本的C++代码。同时还介绍了循环结构、断点、函数的用法示例。在这个完整示例代码上你可以按自己的想法进行修改,从而深入理解本章的内容。下面为新手考虑,附上完整的代码:

#include using namespace std;//定义了一个函数,名字为CalcCount,返回值为int,参数为累加的上限int CalcCount(int v_max){int count = 0;//累加结果int add = 1;//单个值,一开始加的是1while (add <= v_max)//大于v_max时就不循环了(等于v_max时还需循环){count += add;//count加上add的值++add;//add每次循环加1}return count;}//采用等差数列公式的计算方法int CalcCount2(int v_max){return (v_max * v_max + v_max) / 2;}int main(){int v_max = 1;while (true){cout <<"1加到" <> x;return 0;}

 


推荐阅读
  • 3.223.28周学习总结中的贪心作业收获及困惑
    本文是对3.223.28周学习总结中的贪心作业进行总结,作者在解题过程中参考了他人的代码,但前提是要先理解题目并有解题思路。作者分享了自己在贪心作业中的收获,同时提到了一道让他困惑的题目,即input details部分引发的疑惑。 ... [详细]
  • Android Studio Bumblebee | 2021.1.1(大黄蜂版本使用介绍)
    本文介绍了Android Studio Bumblebee | 2021.1.1(大黄蜂版本)的使用方法和相关知识,包括Gradle的介绍、设备管理器的配置、无线调试、新版本问题等内容。同时还提供了更新版本的下载地址和启动页面截图。 ... [详细]
  • C++字符字符串处理及字符集编码方案
    本文介绍了C++中字符字符串处理的问题,并详细解释了字符集编码方案,包括UNICODE、Windows apps采用的UTF-16编码、ASCII、SBCS和DBCS编码方案。同时说明了ANSI C标准和Windows中的字符/字符串数据类型实现。文章还提到了在编译时需要定义UNICODE宏以支持unicode编码,否则将使用windows code page编译。最后,给出了相关的头文件和数据类型定义。 ... [详细]
  • 提升Python编程效率的十点建议
    本文介绍了提升Python编程效率的十点建议,包括不使用分号、选择合适的代码编辑器、遵循Python代码规范等。这些建议可以帮助开发者节省时间,提高编程效率。同时,还提供了相关参考链接供读者深入学习。 ... [详细]
  • 本文介绍了基于c语言的mcs51单片机定时器计数器的应用教程,包括定时器的设置和计数方法,以及中断函数的使用。同时介绍了定时器应用的举例,包括定时器中断函数的编写和频率值的计算方法。主函数中设置了T0模式和T1计数的初值,并开启了T0和T1的中断,最后启动了CPU中断。 ... [详细]
  • 本文介绍了一种划分和计数油田地块的方法。根据给定的条件,通过遍历和DFS算法,将符合条件的地块标记为不符合条件的地块,并进行计数。同时,还介绍了如何判断点是否在给定范围内的方法。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 本文介绍了P1651题目的描述和要求,以及计算能搭建的塔的最大高度的方法。通过动态规划和状压技术,将问题转化为求解差值的问题,并定义了相应的状态。最终得出了计算最大高度的解法。 ... [详细]
  • 本文介绍了解决二叉树层序创建问题的方法。通过使用队列结构体和二叉树结构体,实现了入队和出队操作,并提供了判断队列是否为空的函数。详细介绍了解决该问题的步骤和流程。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • 动态规划算法的基本步骤及最长递增子序列问题详解
    本文详细介绍了动态规划算法的基本步骤,包括划分阶段、选择状态、决策和状态转移方程,并以最长递增子序列问题为例进行了详细解析。动态规划算法的有效性依赖于问题本身所具有的最优子结构性质和子问题重叠性质。通过将子问题的解保存在一个表中,在以后尽可能多地利用这些子问题的解,从而提高算法的效率。 ... [详细]
  • 本文探讨了C语言中指针的应用与价值,指针在C语言中具有灵活性和可变性,通过指针可以操作系统内存和控制外部I/O端口。文章介绍了指针变量和指针的指向变量的含义和用法,以及判断变量数据类型和指向变量或成员变量的类型的方法。还讨论了指针访问数组元素和下标法数组元素的等价关系,以及指针作为函数参数可以改变主调函数变量的值的特点。此外,文章还提到了指针在动态存储分配、链表创建和相关操作中的应用,以及类成员指针与外部变量的区分方法。通过本文的阐述,读者可以更好地理解和应用C语言中的指针。 ... [详细]
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • 开发笔记:实验7的文件读写操作
    本文介绍了使用C++的ofstream和ifstream类进行文件读写操作的方法,包括创建文件、写入文件和读取文件的过程。同时还介绍了如何判断文件是否成功打开和关闭文件的方法。通过本文的学习,读者可以了解如何在C++中进行文件读写操作。 ... [详细]
  • 本文介绍了最长上升子序列问题的一个变种解法,通过记录拐点的位置,将问题拆分为左右两个LIS问题。详细讲解了算法的实现过程,并给出了相应的代码。 ... [详细]
author-avatar
小程序员
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有