顺序结构
程序基本结构如下
#include<iostream> //调用iostream库
using namespace std; //声明使用标准命名空间
int main(){ //主函数
cout << "Hello world!"<< endl;//endl是换行
return 0; //返回0,程序正常结束
/* 为多行注释
int a,b ; //定义变量的类型
cin >> a >> b ; //输入
cout << a+b << endl;//输出
return 0;
*/
}
注意主程序内的语句都要用“;”来结尾
cin 输入和 cout 输出——#include<iostream>
scanf 输入和printf 输出——#include<cstdio>,示例:
#include<cstdio>
using namespace std;
int main()
{
char a;
scanf("%c", &a) ; //%c表示该占位符的类型,%c是一个char类型字符
printf(" %c \n",a);
printf(" %c%c%c \n",a,a,a);
return 0;
}
数据类型
数据类型 | 描述 | 占用空间 |
int | 整型,用来表示整数 | 4B |
char | 存储字符,本质是<=127的整数,但表现成一个对应的字符 | 1B |
string | ||
long long | 超长整型,比int范围更大,表整数 | 8B |
float | 单精度浮点数,6位有效数字 | 4B |
double | 双精度浮点数,15位有效数字 | 8B |
unsigned int | 4B | |
unsigned long long | 8B |
变量类型转换: (变量类型)变量名,如(int)a, 变量a就转换为int类型。
Ps:int类型下,使用除法会直接取整,如5/4=1,不会是小数。
占位符类型
在scanf 输入和printf 输出里使用占位符
占位符 | 说明 |
%d | 一个十进制整数,一般用于int类型 |
%c | 一个char类型的字符 |
%s | 一个字符串 |
%f | 读入一个float类型的浮点数/输出float或double类型的浮点数 |
%nf | 输出一个n位小数的浮点数 |
%lf | 读入double类型的浮点数 |
%nd | 输出一个整数,不足n位,前面用空格补齐 |
%l64d(windows)/%lld | 一个十进制整数,一般用于long long类型 |
分支结构
if、if-else和switch-case分支
单分支语句if
格式:
if(条件表达式){
语句1;
}
#include<iostream>
using namespace std;
int main(){
int x;
cin >> x;
cout << "today, I ate " << x <<" apple" ;
if (x>1){
cout << "s" ;
}
//另一种写法 if (x>1) cout << "s" ;
cout << "." ;
return 0;
}
双分支语句if-else
格式:
if (条件成立表达式){
条件成立时执行语句
}else{
条件不成立时执行语句
}
#include<iostream>
using namespace std;
int main(){
int x;
cin >> x;
if (x==1){ //大括号可以省略,但是下方执行的语句只能有一条,否则会出错
cout << "today, I ate an apple" ;
}else{
cout << "today, I ate " << x <<" apples" ;
}
cout << "." << endl ;
return 0;
}
多分支语句switch-case
格式:
switch(变量名){
case变量可能情况1:执行语句1;break;
case变量可能情况2:执行语句2;break;
...
default:执行语句n;
}
ps:case后面是变量确定的值
//判断月份天数
#include<iostream>
using namespace std;
int main(){
int y,m;
cin >> y >> m;
if ((y%4==0 && y%100!=0 ) || (y%400==0)):
switch(m){
case 1 :
case 3 :
case 5 :
case 7 :
case 8 :
case 10 :
case 12 :
cout << "31" <<endl;
break; //同一条件下可以合写
case 2 :
cout << "28" <<endl;
break;
case 4 :
case 6 :
case 9 :
case 11 :
cout << "30" <<endl;
break;
default:cout<<"worry" <<endl;
}
return 0;
}
循环结构
for循环
适用于知道明确重复次数的。
结构如下
#include<iostream>
using namespace std;
int main(){
int a;
cin >> a;
for (int i=1;i<=a;i++){ //for循环的结构
if (i==1){
cout << "Today , I ate an apple.\n" ;
}else{
cout << "Today , I ate " << i << " apples.\n" ;
}
}
/* 可以省略{}
for (i=1;i<=a;i++)
if (i==1) cout << "Today , I ate an apple.\n" ;
else cout << "Today , I ate " << i << " apples.\n" ;
*/
return 0;
}
while循环
适用于不知道明确重复次数,但知道循环结束条件的。
结构如下
do while循环
数组
用于存储大量数据,一次性定义多个变量,注意定义数组的数量时超过100,一般定义可比题目会出现的最大情况多10个。
定义数组 int a[110] C++中数组的数据都是同一个类型 。定义二维数组 int a[110][110]。(数组过多元素尽量定义在main函数外,定义在全局变量下,不然可能会导致程序无法输入直接运行结束。)
初始化数组 int a[110]={1,2,3} 可以初始化前面几个元素,后面都是0,不初始化数据会取随机值。/int a[110]={0},a数组中所有变量初始化为0
循环输入数组 for(int i=0;i<n;i++) cin >> a[i]
#include<bits/stdc++.h>
using namespace std;
int main(){
int a[110];
int n;
cin >> n;
for (int i=0;i<n;i++){
cin >> a[i]; //输入一串用空格隔开的数字,通过此循环存入数组中
}
return 0;
}
字符串
字符数组,string类型字符串
函数与结构体
各类函数
函数名称 | 函数介绍 |
sqrt(x) | 对x开根号,需要在主程序外引入#include <cmath> |
pow(x,y) | 求x的y次方,可以用来开方 |
floor(x) | 不大于x的最大整数,向下取整 #include <cmath> |
ceil(x) | 不小于x的最大整数,向上取整 #include <cmath> ps:如果ceil(a/b),两个int型直接相除会先向下取整,ceil会失效 |
round(x) | 四舍五入 #include <cmath> |
__gcd(a,b) | 求a和b的最大公约数 |
abs(x) | x的绝对值 |
setw(n) | 设置字符输出的宽度为n,字符在最右侧 |
一些注意事项
1.变量类型的定于对于结果会有影响,代码逻辑没有问题,但是结果会不通过。
排序
bool cmp(play x,play y){//函数体cmp的排序规则
if (x.s!=y.s) return x.s>y.s;//先按s进行降序排序
if (x.k!=y.k) return x.k<y.k;//再按k进行升序排序
return 0;
}
sort(a+m,a+n/*cmp排序规则*/); //a是数组名,m,n是排序的范围(从a[m]排到a[n])。无规则默认升序