作者:小程序员 | 来源:互联网 | 2023-09-24 16:54
第四章求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;}