- 分享
基础语法知识点1(基础数据类型~二维数组)
- 2024-1-25 10:13:24 @
基础框架
#include<bits/stdc++.h>
using namespace std;
int main()
{
return 0;
}
基础输入输出
int(整数),char(字符),short(短整数[基本不用]),int(整数 -2147483647 ~ 2147483648),
long long(长整数 -9223372036854774808 ~9223372036854774807),
double(双精度浮点数,实数,小数),float(单精度浮点数[几乎不用]),bool(布尔[判断真假])
int x;// 声明一个整数变量x
cin>>x; //输入x变量的值
cout<<x; //输出x变量的值
cout<<fixed<<setprecision(k)<<x;//保留k位小数
cout<<setw(k)<<x;//x如果小于k位,则占k个字符位置,否则就按照实际的长度占位置
cout<<setw(k)<<setfill(ch)<<x;//x如果小于k位,则占k个字符位置,不足的部分就补上ch字符,否则就按照实际的长度占位置
%c(字符占位符),%lf(double类型的占位符),%d(int的占位符),%lld(long long的占位符)
scanf("%d %d",&a,&b); //获取a和b两个int变量的数值
printf("%.2lf",a); //保留2位小数输出a变量的值
四则运算
+(加),-(减),*(乘),/(商), %(余)
注意:
1.余数的正负由被除数决定
2.浮点数没有取余运算
3.如果a和b都是整数,则a/b会得到a除以b的商。
char ch='k'
int x=ch;//这样可以得到变量ch表示的字符的ascii码
int x=round(t),//x为t四舍五入以后得到的结果
1.上取整
(a+b-1)/b
2. 换水问题
int t=a;
a=b;
b=t;
3.拆数
求某一位就是除以多少,然后%10
例:x的百位 x/100%10;
4.四舍五入
int k=round(x)// k是 x 4舍5入的结果
常见的ascii
'0'~'9' 48~57
'A'~'Z' 65~90
'a'~'z' 97~122
' ' 32
条件语句
if判断
if(条件1)
{
//语句1
}
if(条件1)
{
//语句1
}
else
{
//其它语句
}
if(条件1)
{
//语句1
}
else if(条件2)
{
//语句2
}...
else
{
//剩余语句
}
逻辑连接符
a&&b 只有a和b同时为真的时候整个语句为真
a||b 只要a和b有一个为真的时候整个语句为真
!a 当a为假的时候,整个语句为真
运算符优先级 !>&&>||
1.绝对值
1.1
if(x<0)
{
x=x*-1;
}
1.2
x=abs(x)
2. 奇偶数判断
2.1 奇数判断
if(n%2!=0)
{
//当n为奇数的时候执行
}
2.2 偶数判断
if(n%2==0)
{
//当n为偶数的时候执行
}
3.字符类型判断
if(ch>='a'&&ch<='z')
{
//小写字符判定
}
if(ch>='A'&&ch<='Z')
{
//大写字符判定
}
if(ch>='0'&&ch<='9')
{
//数字字符判定
}
4.闰年判断
if(year%4==0&&year%100!=0||year%400==0)
{
//当year为闰年的时候执行
}
开关语句
switch(n)
{
case 1:
//语句
break;
case 2:
//语句2
break;
default:
//默认语句
}
循环语句
while循环
状态初始化
while() //状态判断
{
//语句块
//状态更新
}
遍历 m到n之间的所有数(包括m和n)
int t=m;
while(t<=n)
{
//t为m到n之间的每个数
t++;
}
先执行语句块再进行条件判断
do
{
//语句块
}while() //状态判断
拆数模板
while(t)
{
int ge=t%10;
//对当前个位进行操作
t/=10;
}
//拆数完成以后,t的值为0
翻转数模板
int res=0;
while(t)
{
int ge=t%10;
res=res*10+ge;
t/=10;
}
//res是t翻转以后的结果
for循环
for(初始化;判断;更新)
{
语句块;
}
1.输出a到b之间的数
for(int i=a;i<=b;i++)
{
cout<<i<<" ";
}
2.求和模板
int s=0;
for(int i=1;i<=n;i++)
{
int x;
cin>>x;
s+=x;
}
3.最大值模板
3.1 maxv初始化
int maxv=-1; //(初始化成最小值)
for(int i=1;i<=n;i++)
{
int x;
cin>>x;
if(x>maxv)
{
maxv=x;
}
}
3.2 maxv不初始化
int maxv;
for(int i=1;i<=n;i++)
{
int x;
cin>>x;
if(i==1||x>maxv) //如果是第一个,或者当前元素比最大值大
{
maxv=x;
}
}
4.最小值模板
4.1 minv初始化
int minv=1000; //(初始化成较大值)
for(int i=1;i<=n;i++)
{
int x;
cin>>x;
if(x<minv)
{
minv=x;
}
}
4.2 minv不初始化
int minv;
for(int i=1;i<=n;i++)
{
int x;
cin>>x;
if(i==1||x<minv)
{
minv=x;
}
}
5.统计类模板
int cnt=0;
int m;
cin>>m;
for(int i=1;i<=n;i++)
{
int x;
cin>>x;
if(x==m) //判断当前元素是否等于x
{
cnt++;
}
}
6.次方类题目(a^b)
int s=1;
for(int i=1;i<=b;i++)
{
s=s*a;
}
7.质数判断
bool st=true;
int n;
cin>>n;
if(n<2) //小于2不在质数的判定范围以内
{
st=false;
}
for(int i=2;i<=n/i;i++) //枚举小因子
{
if(n%i==0) //存在小因子
{
st=false;
}
}
if(st==true)
{
//满足质数需要执行的内容
}
else
{
//不满足质数需要执行的内容
}
8.枚举类题目(百钱百鸡)
for(int i=0;i<=20;i++) //公鸡的数目
{
for(int j=0;j<=33;j++) //母鸡的数目
{
for(int k=0;k<=100;k+=3) //小鸡的数目
{
if(i+j+k==100&&5*i+3*j+k/3==100) //百钱百鸡
{
cout<<i<<" "<<j<<" "<<k<<endl;
}
}
}
}
break 语句
循环
{
if(条件1)
{
break;
}
语句1
}
语句2 //当条件1条件为真时,直接跳到语句2执行
continue
循环
{
if(条件1)
{
continue;
}
语句1
}
语句2 //当条件1条件为真时,跳到循环的那句继续执行
数组
一维数组
数组: 数组(Array)是有序的元素序列。若将有限个类型相同的变量的集合命名,那么这个名称为数组名。
组成数组的各个变量称为数组的元素。用于区分数组的各个元素的数字编号称为下标。
一般为了方便会比题目多开10个空间
int a[100];//声明一个可以存放100个元素的整数数组
int a[100]={1,4,2};//将a[0]=1,a[1]=4,a[2]=2
memcpy(a,b,sizeof b);//等价于一般变量的a=b;
一般我们会使用一个常量来声明数组的大小
const int N=110; //声明一个大小为110的常量N
int a[N]; //声明一个可以放110个元素名为a的数组
//输入n个元素的数组,数组变量名是i,下标从1开始
for(int i=1;i<=n;i++)
{
cin>>a[i];
}
//顺序输出输出的每个元素
for(int i=1;i<=n;i++)
{
cout<<a[i]<<" "; //元素和元素之间用空格隔开
}
//元素之间需要输出逗号的时候,我们一般会让逗号跟着前面一个元素或者是后面一个元素
//前一个元素
for(int i=1;i<n;i++)
{
cout<<a[i]<<",";
}
cout<<a[n];
//后一个元素
cout<<a[1];
for(int i=2;i<=n;i++)
{
cout<<","<<a[i];
}
//冒泡排序
for(int i=1;i<=n;i++) //每轮确定一个元素的位置
{
for(int j=1;j+1<=n-i+1;j++) //第i轮确定第n-i+1这个位置上的值
{
if(a[j]>a[j+1]) //比较相邻的两个元素
{
swap(a[j],a[j+1]);
}
}
}
//标记法
a[i]=1,a[j]=1,a[k]=1,表示位置i,j,k位置具有相同的属性
a[o]=2,a[p]=2,a[q]=2,表示位置o,p,q位置具有相同的属性
//最长平台
for(int i=1;i<=n;i++)
{
int j=i;
while(j<=n&&满足属性) j++;
j--;
//这个时候i是当前平台的第一个元素,j是当前平台的最后一个元素
i=j; //跳到平台的最后一个位置
}
字符数组
char s[100] //声明一个字符类型的字符数组(字符数组需要\0结束,所以只能存放99的字符)
cin>> s;//读取不包含空白字符的字符数组,从s[0]开始储存
cin>> s+1;//读取不包含空白字符的字符数组,从s[1]开始储存
cin.getline(s,N) ;//读取可以包含空白字符的字符数组,从s[0]开始储存
int n=strlen(s);//计算从s[0]开始的有效字符的长度
字符数组的遍历
for(int i=0;i<strlen(s);i++)
{
//对s[i]进行操作
}
strcpy(s1,s2) //将s2的内容拷贝到s1
strcat(s1,s2) //将s2的内容添加到s1
strcmp(s1,s2)
如果s1的字典序>s2的字典序则返回整数
如果s1的字典序=s2的字典序则返回0
如果s1的字典序<s2的字典序则返回负数
cout<<s;//输出字符数组s的所有有效字符
常见的ascii规则
1.数字比字母小。 如'7'<'F'
2.数字0小于数字9,且按照0到9一次递增。如'0'<'2'且'0'+2==2
3.字母A(a)比字母Z(z)小,且按照顺序递增
4.大写字母的ascii码小i与小写字母的ascii码。'A'<'a'
常见的ascii: 'A'为65;'a'为97;'0'是48,空格是32
标准的ascii为0~127
字符串
可以看成字符数组的集合
string s;//声明一个字符串
cin>>s;//获取不包含空白字符的字符串
getline(cin,s) ;//获取可以包含空白字符的字符串
string s=string(3,'c'); //s是一个包含3个'c'的字符串
int n=s.size() //得到字符串s的长度
字符串中每个字符的遍历
for(int i=0;i<s.size();i++)
{
//对每个字符串中的每个字符进行操作
}
s1.find(s2)//在s1中查找s2出现的位置,如果找不到返回无符号整数的最大值(转成int以后等于-1)
s1.insert(pos,s2) //在pos的前面插入s2
s1.substr(pos,n) //返回从pos开始的长度为n的一段
s1.erase(pos,n) //删除从pos开始的长度为n的一段
s=s1+s2;//将s2拼接到s1,然后赋值给s
sort(s.being(),s.end()) //将字符串中的每个字符按照字典序从小到大排序
reverse(s.begin(),s.end()) //翻转整个字符串
int k=stoi(s); //将一个字符串转成数字存到k之中
函数
基础格式
返回值 函数名(参数列表)
{
函数体
}
返回值类型 一般为 void(空),bool,int,double,string
声明
int add(int a,int b,int c)
{
int s=a+b+c;
return s;
}
可以使用 add(x,y,z) 调用add函数,最后返回x+y+z的和
一般的函数调用是不会影响主函数的值的
当需要通过调用函数改变调用函数的多个值时,可以使用传递引用的方式
void chang(int &x,int &y)
{
int t=x;
x=y;
y=t;
}
//递归一般格式
int f(int x)
{
if(x)//满足终止条件
{
//返回结果
}
(x..) //更改条件继续往下执行
}
位运算
a=10(1010) b=9(1001)
a&b a和b转成二进制以后,对应位都是1才是1
1010
1001
1000 a&b=8
a|b a和b转成二进制以后,对应位只要有一位是1就是1
1010
1001
1011 a|b=11
a^b a和b转成二进制以后,对应位只要不相同即是1
1010
1001
0011 a^b=3
for(int i=30;i>=0;i--) //对int类型的非符号位从高位到低位进行枚举
{
if(x>>i&1) //x的二进制的第i位是1
{
//
}
}
//枚举n个人的不同选择
for(int i=0;i<1<<n;i++) //枚举每种选择
{
for(int j=n-1;j>=0;j--) //第i种选择的第j个人的状态
{
if(i>>j&1) //第i种选择第j个人选了
{
//
}
else //第i种选择第j个人没有选
{
//
}
}
}
5 comments
-
乐思尧 LV 6 @ 2025-3-2 13:39:29
~^2^~
-
2025-2-11 10:35:05@
2^2^~2~
2~2~^2^~2~^2^~2~*2^2^2^2^*222 -
2024-7-1 9:16:53@
👍 👍 👍 👍
-
2024-4-17 19:57:38@
👍
-
2024-4-5 10:33:51@
👍
- 1