目录
0X3F3F3F3F 前言
上一篇博客,我们一起学习了输出的知识,今天我们就书接上回,继续来学习输入和变量的知识!
0X1F 变量
Part 1 变量的定义
变量变量,顾名思义,就是可以变化的量,相反的,有一种量叫常量,它的值是不能变化的。
我们先来看看变量的定义:
数据类型 变量名
这里的数据类型,就是变量存储数据的类型,常见有一下几种:
#include <iostream>
using namespace std;
int //整数
long int //长整数
long long int //比上一个还长的整数
float //浮点数
double //存储空间是上一个2倍的浮点数
long double //存储空间比上一个还大的浮点数
short //短标识符
附注:如果要定义常量,前面加一个const 就行。
变量名也有讲究:
1. 只能含有字母,数字和_
2.数字不能在第1位
那么,以下哪些变量命名错误呢?
A. C#
B. C_Sharper
c. C++
d. cpp
答案是A和C
A里面含有#,而C里面含有+。
Part 2 变量的运算
C++库里给出了许多运算:
#include <iostream>
using namespace std;
+ //加
- //减
* //乘
/ //除
>> //右移
<< //左移
& //按位与
| //按位或
^ //按位异或
我们先来讲讲加减乘除除外的剩下5个运算符:
左移和右移
我们先来讲讲一个数的二进制补码:
//一个数的二进制补码就是这个数除2的余数的倒写,我们先来看看15的2进制补码:
15 / 2 = 7 ...... 1
7 / 2 = 3 ...... 1
3 / 2 = 1 ...... 1
1 / 2 = 0 ...... 1
//再倒序写出来,得知15的2进制补码是1111
基于以上方法,就可以使用位运算了:
//我们现在已经知道了15的2进制补码是1111
//对15左移2位的结果就是:
1111
11110
111100
//111100在转化乘10进制就是:
0*1+0*2+1*4+1*8+1*16+1*32=60
//对15右移2位的结果就是:
1111
111
11
//11在转化乘10进制就是:
1*1+1*2=3
按位与,或和异或
与左移和右移不一样,它们仨都需要两个操作数,规则如下:
0&0=0&1=1&0=0,1&1=1
0|0=0,1|0=0|1=1|1=1
0^0=1^1=0,1^0=0^1=1
注意:1代表是,0代表否,0和1并不代表两个数,而是两个是2进制补码的两个相同位。
0X2F 输入
输入有两种格式:
<iostream>库里有一个函数:
cin >> 变量;
<cstdio>库里有一个函数:
scanf("代替符",&变量名);
0X3F 练习
我们来看3道例题:
例题1
题目描述
现在需要采购一些苹果,每名同学都可以分到固定数量的苹果,并且已经知道了同学的数量,请问需要采购多少个苹果?
输入格式
输入两个不超过 1000000000 正整数,分别表示每人分到的数量和同学的人数。
输出格式
一个整数,表示答案。
输入输出样例
输入 #1
5 3
输出 #1
15
例题1示例代码
#include <iostream>
using namespace std;
#define int long long int
signed main(){
int student_number,apple_per_student;
cin >> student_number >> apple_per_student;
cout << student_number * apple_per_student;
return 0;
}
这里要注意一下:2个满int数相乘,积会超int,所以要用long long int。
例题2
题目描述
现在有 t 毫升肥宅快乐水,要均分给 n 名同学。每名同学需要 2 个杯子。现在想知道每名同学可以获得多少毫升饮料(严格精确到小数点后 3 位),以及一共需要多少个杯子。
输入格式
输入一个实数 t 和一个正整数 nn,使用空格隔开。
输出格式
输出两行。
第一行输出一个三位小数,表示可以获得多少毫升饮料。第二行输出一个正整数,表示一共需要多少个杯子。
输入输出样例
输入 #1
500.0 3
输出 #1
166.667 6
说明/提示
对于所有数据,0≤t≤10000且小数点后不超过 3 位,1≤n≤1000。
例题2示例代码
#include <iostream>
using namespace std;
int main(){
float a;
cin>>a;
int n;
cin>>n;
printf("%.3f\n%d",a/n,n*2);
return 0;
}
这里要用到浮点数的小数位限制,假如要限制n位,代码如下:
printf("%.nf",a);
例题3
题目描述
一个三角形的三边长分别是 a、b、c,那么它的面积为 p(p−a)(p−b)(p−c),其中 p=(a+b+c)/2。输入这三个数字,计算三角形的面积,四舍五入精确到 1 位小数。
输入格式
第一行输入三个实数 a,b,c,以空格隔开。
输出格式
输出一个实数,表示三角形面积。精确到小数点后 1 位。
输入输出样例
输入 #1
3 4 5
输出 #1
6.0
说明/提示
数据保证能构成三角形,0≤a,b,c≤1000,每个边长输入时不超过 2 位小数。
例题3示例代码
#include <cmath>
#include <iostream>
using namespace std;
int main(){
double a,b,c;
cin>>a>>b>>c;
double p = (a + b + c) / 2;
printf("%.1f",sqrt(p * (p-a) * (p-b) * (p-c)));
return 0;
}
这题要用到的是<cmath>库里的平方根函数,实现如下:
sqrt(n);
注意:sqrt()函数的返回值是浮点数。
0XF 结尾
好啦,到此为止我们顺序结构的内容已经全部学完了,要多多练习。
你们可以点击⬇️链接,里面的题目都能做,加油!
下一篇博客地址:算法竞赛之入门2: 分支结构1-CSDN博客