Bootstrap

C++语言基础篇学习总结及心得体会(难度极低讲解干货)(上)

        关于C++的语言部分(信息学奥赛一本通),我自己总结了一部分的知识。

        因为过于基础,第一部分源代码的简介和使用我就不讲了。

        我直接从第二章顺序结构程序设计开始讲。首先,我认为在这一章内只要理解一个因果关系后,这一章大部分都可以运用与理解。一个源代码,开头一个头文件,我比较喜欢用的是

#include<bits/stdc++.h>
using namespace std;
int main()

。其次便是定义,定义包括了整个源代码的常量和变量,我比较喜欢理解成数学中的未知数,但也不是全部相通。

        我举个例子:

​
#include<bits/stdc++.h>
using namespace std;
int main(){
    int a,b;
    cin>>a>>b;
    cout<<a+b;
    return 0;
}

​

上面的代码:是a+b问题;那代码的意思:定义a和b,输入a和b,输出a+b,然后结束语。(在下不解释头文件的作用范围);但要注意,若要定义字符,需用char,如:

​
​
​
#include<bits/stdc++.h>
using namespace std;
int main(){
    char a;
    cin>>a;
    cout<<" "<<a<<" "<<endl;
    cout<<a<<" "<<a<<endl;
    cout<<a<<a<<a<<endl;
    return 0;
}

​

​

​

这样就可以定义符号,要定义单精度浮点数要有float,双进度浮点数用double,需要float时大多可以double替代,但要用double时不可以用float,double作用范围更广,但如果题目要求单精度浮点数时,就最后用float,保险起见。

        在第三章程序的控制结构中,主要讲if与switch。其实“if”可以理解为“如果”,而switch更像是在列选项。如:

#include<bits/stdc++.h>
using namespace std;
int main()
{
	int weekday;
	cin>>weekday;
	switch(weekday)
	{
		case 1:cout<<"Monday"<<endl;break;
		case 2:cout<<"Tuesday"<<endl;break;
		case 3:cout<<"Wednesday"<<endl;break;
		case 4:cout<<"Thursday"<<endl;break;
		case 5:cout<<"Friday"<<endl;break;
		case 6:cout<<"Saturday"<<endl;break;
		case 7:cout<<"Sunday"<<endl;break;
		default:cout<<"input error!"<<endl;break;
		return 0;
	}
	return 0;
}

在这程序中,你输入1,它就显示“Monday”,因为程序用switch列了7个选项,输入数字1——7,就会输出对应的星期的英文。

        if的作用就是设置条件,如要判断输入的数范围:

#include<bits/stdc++.h>
using namespace std;
int main(){
  int n;
  cin>>n;
  if(1<n&&n<100)
  cout<<"yes";
  
}

上面代码意思十分简单:定义n,输入n,如果n>1且n<100,输出“yes”。这就是if用法。

        在循环和数组的这两章中,知识变化比较大,大部分都用于规律性的重复运算,如中所包含的偶数:

#include<bits/stdc++.h>
using namespace std;
int main(){
	int n;
	cin>>n;
	for(int i=1;i<=n;i++)
	if(i%2==0) cout<<i<<" ";
	return 0;
}

上面的程序意思是:定义n,输入n,在for循环中定义i=1,循环到n,i++,即自增1;如果你输入100,它就会输出:0,2,4,6,8,10,12.....,直到100。

        进阶的就是使其复杂化,如一本通网站的1060——1090题,我举例1070人口增长:

1070:人口增长

时间限制: 1000 ms         内存限制: 65536 KB
提交数: 43668     通过数: 29947
【题目描述】
我国现有x亿人口,按照每年0.1%的增长速度,n年后将有多少人?保留小数点后四位。

【输入】
一行,包含两个整数x和n,分别是人口基数和年数,以单个空格分隔。

【输出】
输出最后的人口数,以亿为单位,保留到小数点后四位。1<=x<=100,1<=n<=100。

【输入样例】
13 10
【输出样例】
13.1306

我的方法是这样:

#include<bits/stdc++.h>
using namespace std;
int main(){
	double x,n;
	int s;
	cin>>x>>n;
	for(s=1;s<=n;s++)
	x=x*1.001;
	printf("%.4lf",x);
	return 0;

}

比一开始的题复杂一些,越往后越难。

        数组用来表示多个数输出,如输出:A1,A2,A3,A4......A100;是不是很麻烦?没错,这时候可以用数组解决,直接输出A【100】就可以了。我举例一道题:

2035:【例5.2】平移数据

时间限制: 1000 ms         内存限制: 65536 KB
提交数: 6315     通过数: 4209
【题目描述】
将a数组中第一个元素移到数组末尾,其余数据依次往前平移一个位置。

【输入】
第一行为数组a的元素个数;

第二行为n个小于1000的正整数。

【输出】
平移后的数组元素,每个数用一个空格隔开。

【输入样例】
10
1 2 3 4 5 6 7 8 9 10
【输出样例】
2 3 4 5 6 7 8 9 10 1

我的代码是:

#include<bits/stdc++.h>
using namespace std;
int main(){
	int n,a[1001];
	cin>>n;
	for(int i=1;i<=n;i++)    cin>>a[i];
	for(int i=2;i<=n;i++)    cout<<a[i]<<" ";
	cout<<a[1];
	return 0;

}

可见,数组可以极大的帮助我们解决这一类问题,讲一下:虽然题目说最大1000,但避免某些“心地善良”的测试者,来个1001,直接爆空间或爆时间,保险起见最好设置比题目大一点的数。(数组若不明白可以搜教程来并用)

       我后面会在发布循环及数组,函数部分。如有帮助可以帮忙推广一下。

;