一直知道学完一部分内容做一部分复盘很重要,但是之前总是给自己找借口不做这方面的工作。这次是将近一周没学这个课程了,需要复习一下学过的知识再进行新知识的学习,正好抓住这次机会来尝试一下写博客。
1.A+B问题I
在进行代码编写之前需要先明确这道题目的具体是让我们做一些什么内容。
以a、b对的形式进行输入,不只输入一组,因此需要判断输入是否结束。
因为需要接受键盘输入并输出计算结果,因此需要明确c++的输入输出是如何进行的。
//c++输入输出。
#include<iostream> //引入输入输出库;
using namespace std; //引入命名空间,表示会使用标准库里的内容。
int main(){
int a,b,result;
cin>>a>>b;//键盘的输入内容分别存储到了a、b中。
cout<<result<<endl;//result的内容会输出到屏幕上,并且输出完result的结果后会换行。
return 0;
}
明确了如何输入输出后,就需要相应的来完成题目中的内容了,因为需要读取的不只一行a、b对,因此需要有一个判断语句来判断读取的这一行是否还有数据,如果有数据就来读取数据,如果没有数据了就不进行相应的操作。
曾经考虑过一个思路,就是一下子把所有键盘输入的数据存储到某一块,通过判断这一块内容的行数来判断是否能进行相应的循环,但是目前还不知道如何实现。
算法教学中提到可以用while循环来判断是否还有数据输入,将是否有输入放在条件判断中,有输入就执行循环语句中的内容,没有输入条件判断的语句就为0,也就无法执行循环中的内容,从而终止程序,因此代码内容如下:
#include <iostream>
using namespace std;
int main(){
int a,b;
while (cin>>a>>b){
cout<<a+b<<endl;
}
return 0;
}
因为其中有一个判断的过程,就需要想明白为什么使用的是while循环,而不是简单的if语句了,这是因为题中描述了可能输入多行数据,if语句只适用于只有一行输入的情况。
2.A+B问题II
首先也是需要先明确输入的内容,本题也是输入多行a、b代码对,会输入多行内容,输入的第一行代表输入的总a、b对数。因此需要有变量来接受总对数,并且需要判断这个总对数是确有其值,还是空行没有输入。如果是确有其值,就需要读取输入的a、b对,并进行相应的计算;如果没有输入,就不进入计算的循环。
与前一题相似,这个读取对数的过程也作为while循环的条件判断语句。
有一个问题貌似之前没有考虑过,那就是需不需要一个判断读取数据的个数的过程?如果这行数据只有1个数,表示读取到的是a、b的对数;如果这行数据是2个数,那就说明肯定不是个数,而应该直接做加法。
而做加法的过程可以使用不同的循环语句进行描述。可以明确的一点是做加法的次数是已知,因此可以使用for循环、while循环、do-while循环(可以尝试着写一下,看看能不能写出来)。
-
for循环
//展示for循环的使用形式。
#include <iostream>
using namespace std;
int main(){
int n,a,b;
while (cin<<n){
for(int i=0;i<n;i++){
//在for循环中,如果需要使用循环变量就需要提前定义,在定义循环变量的同时最好把初值也给设置好。
//需要注意的很重要的一点是for循环中括号内的三条语句也是用分号来作为间隔的。
//因为for循环需要进行n次,循环变量还是从0开始计数,所以判断循环进行的条件是循环变量i小于n,等于n-1即可。
cin<<a<<b;
cout>>a+b>>endl;
}
}
return 0;
}
i++:表示先使用变量i中存储的数据,该变量使用完了,再进行累加操作;
++i:表示先对变量i进行累加操作,再使用其中存储的数据。
需要明确两种表示方法之间的异同点。
-
while循环
#include <iostream>
using namespace std;
int main(){
int n,a,b,result;
while(cin>>n){
while(n--){
cin>>a>>b;
result=a+b;
cout<<result<<endl;
//从n开始进入循环,一直到1,n减到0后就不进入循环,循环进行了n次。
//如果条件判断处写的是--n,那么就是从n-1开始,一直到1,循环只进行了n-1次,不满足条件。
//条件判断处放n--还有一个好处,就是不需要再引入循环变量了,如果要引入循环变量,那么循环命令的命名就不能放在最内层的循环,而循环变量的累加需要放在最内层,这也是容易出错的一点。
}
}
return 0;
}
此方法的最内层循环条件的判断该如何选择很重要,写错了就会影响计算的最终结果,所以是不是可以先确定好循环体该如何写,再来确定条件判断的语句该如何写。
-
do-while循环
#include <iostream>
using namespace std;
int main(){
int n,a,b,result;
while (cin>>n){
do{
cin>>a>>b;
result=a+b;
cout<<result<<endl;
}while(--n);
}
return 0;
}
do-while循环是先运行一次循环体,再进行条件判断,因此只需要进行n-1次条件判断即可满足条件,此处与while循环有根本的差异,需要非常明确才行!
-
总结
无论是哪个循环都能解决问题,关键是要搞清楚每个循环的特点,真正需要使用循环来解决问题的时候就依据它们的特点来进行选择就行。
3.总结
第一次写博客不知道有没有什么写得不清楚或者有没有写错的地方,有问题也无所谓,尝试并在尝试中解决问题才是最重要的。
第二个问题中的do-while循环是在本次写博客的时候才考虑如何写,真的有在写的时候发现问题,虽然是些很基础的符号问题,但我也真的觉得很有收获,还会继续写的!