今晚的一些计划
- 怎么应该
合理使用OJ。 - 了解如何分析时间复杂度和空间复杂度
- C++的一些语法(如果有时间
如何使用一个OJ
课上讲解
C++语法
- 为什么我们要使用C++,而不是C,Python等语言?
主要是C++里面的STL库里面有很多函数
-
我们一起看一下基础的一些语法规则(由于C++不同标准,有的使用方法不一样,在此说明此标准为C++17)
ps: 我们使用C++,基本上不用涉及太多面向对象,所以在此不再赘述
-
C++的头文件
类似于C语言的头文件,C++也有很多头文件例如:(实在是太多了
#include<iostream> #include<cstdio> #include<cmath> #include<cstring>
其实这些都可以一行解决(万能头文件
#include<bits/stdc++.h>
但是如果是初学者,我觉得最好不要写万能头。大神除外(%%%)。
- 关于输入和输出。
#include<iostream>
using namespace std;
int main()
{
int a;//定义一个整形变量
cin >> a;//输入并赋值给a这个变量
cout << a <<endl;//输出a的值
return 0;
}
来看一道例题叭
[一生之敌](P1001 A+B Problem - 洛谷 | 计算机科学教育新生态 (luogu.com.cn))
-
循环
while循环是只要是真-继续执行,反之停止。(先判断再执行)
#include<iostream> using namespace std; int main() { int a = 2; while(a--) cout << 1 <<" "; return 0; }
输出即为:1 1
那么再来看看do while(先执行后判断,还是同样问题
输出为:1 1 1
再来一个for循环,先看一下for的一般写法
#include<iostream> using namespace std; int main() { int a; cin >> a; for(int i = 1; i<=a; i++) cout << 1 <<' '; return 0; }
在C++以及C99标准里面已经允许for里面定义变量了;
来一道例题: 反转N为数(输入一个数,将其逆序并输出)
-
判断
if(如果为真) 执行一系列,反之如果有else,执行else,反之退出
来一道例题:(输入a,b判断a是否为b的倍数)点这里
-
数组
数组即是用一系列连续空间来储存数据的容器,数组是从下标0开始;
如果想要访问数组某个数可以直接访问下标。
注意:数组千万不能越界,否则会产生奇怪现象。
#include<iostream> using namespace std; int main() { int a[110]; //定义一个长度为110的整形数组 char s[110];//定义一个长度为110的字符型数组 string b[110];//定义一个数量为110的字符串数组 int n; cin >> n; int b[n+10]; //C++里面可以定义可变长度数组 return 0; }
-
函数
函数是C++的构成部分,每一个程序都是由不同的函数所构成。
1.1 让我们先写一个求两数之和的函数
int add(int a,int b) { return a+b; }
1.2 怎么该调用函数呢:
int num = add(1,2);
1.3 函数的形参和实参
形参刚开始没有数据,是依靠实参传给他,他才有了数据,所以也叫作传值过程。
但是有些情况下,实参数量可以小于形参数量,因为我们可以给形参一些默认值(但必须是最后几位
下面看看几种传值过程是否正确:
add("string") 这明显类型不同错误
add(1,2,3) 数量不同错误
add(1.1,2.1)正确,因为可以通过强制类型转换
-
引用
引用是C++区别于C的一个重要特性,符号是&
例如我们上课学过的swap(int a,int b) 只是交换了形参,并未影响到实参,所以我们要传入指针
但是如果用引用的话不必考虑指针这些问题,引用相当于给元素起别名,两个元素同等地位。
#include<iostream> using namespace std; void swapp(int &a,int &b) { int t = a; a = b; b = t; } int main() { int a,b; cin >> a >> b; swapp(a,b); cout << a <<" "<< b <<endl; return 0; }