也不算是心血来潮,决定把C++从头再学一遍,毕竟之前就没怎么学明白,该还欠的债了

变量

变量类型

变量类型 表示方法 范围
整型 int -2^31~2^31-1
浮点型 float 6~7位有效数字
双浮点型 double 15~16位有效数字
布尔型 bool true/false
字符型 char 0~65535
长双浮点型 long double 18~19位有效数字
长整形 long long int -2^63~2^63-1

变量声明

1
2
3
4
5
int a = 1;
float b = 1.5;
double c = 1.235e2;
bool d = true;
char e = 'e';

输入输出

使用cin、cout:

1
2
3
4
5
6
7
8
9
#include <iostream>
using namespace std;
int main()
{
int a, b;
cin >> a >> b;
cout << a + b << endl;
return 0;
}

使用scanf()、printf():

1
2
3
4
5
6
7
8
#include <cstdio>
int main()
{
int a, b;
scanf("%d%d", &a, &b);
printf("%d\n", a + b);
return 0;
}

输出数据占5个字符

1
2
printf("%5d!", a)   /*输出整型且至少占5个字符*/
printf("%5.1f", b) /*输出保留一位小数的浮点数且至少占5个字符*/

使用scanf()和printf()时的变量类型对应关系:

变量类型 表示方法
int %d
float %f
double %lf
char %c
long long %lld

特别注意在scanf()输入char类型时会读入空格,cin则不会。

强制类型转换

int→float

float→int:下取整

int↔char:ASCII码

1
2
3
int a = 5;
float b = (float) a;
cout << b << endl;

自增、自减

1
2
3
4
5
6
7
8
9
10
11
#include <iostream>
using namespace std;
int main()
{
int a = 6;
int c = a ++;
int b = 6;
int d = ++ b;
cout << a <<' '<< c <<endl;
cout << b <<' '<< d <<endl;
}

输出结果

1
2
7 6
7 7

c = a ++是先把a的值赋给c后,a自增

d = ++ b是b先自增,再把自增后的b赋值给d

例题

  1. A + B

    输入两个整数,求这两个整数的和是多少。

    输入格式

    输入两个整数A,B,用空格隔开

    输出格式

    输出一个整数,表示这两个数的和

1
2
3
4
5
6
7
8
#include <iostream>
using namespace std;
int main()
{
int a, b;
cin >> a >> b;
cout << a+b << endl;
}

样例输入

1
3 4

样例输出

1
7
  1. 读取四个整数 A,B,C,D,并计算 (A×B−C×D) 的值。

    输入格式

    输入共四行,第一行包含整数 A,第二行包含整数 B,第三行包含整数 C,第四行包含整数 D。

    输出格式

    输出格式为 DIFERENCA = X,其中 X 为 (A×B−C×D) 的结果。

1
2
3
4
5
6
7
8
9
10
#include <iostream>
#include <cstdio>
using namespace std;
int main()
{
int a, b, c, d;
scanf("%d%d%d%d", &a, &b, &c, &d);
printf("DIFERENCA = %d\n",a * b - c * d);
return 0;
}

样例输入

1
2
3
4
5
6
7
8

样例输出

1
DIFERENCA = -26
  1. 圆的面积

    计算圆的面积的公式定义为 A=πR2。
    请利用这个公式计算所给圆的面积。
    π 的取值为 3.14159。

    输入格式

    输入包含一个浮点数,为圆的半径 R。

    输出格式

    输出格式为 A=X,其中 X 为圆的面积,用浮点数表示,保留四位小数。

1
2
3
4
5
6
7
8
9
10
11
#include <iostream>
#include <cstdio>
using namespace std;
int main()
{
double S, R, pai = 3.14159;
scanf("%lf",&R);
S = R * R * pai;
printf("A=%.4lf",S);
return 0;
}
  1. 平均数

    读取两个浮点数 A 和 B 的值,对应于两个学生的成绩。
    请你计算学生的平均分,其中 A 的成绩的权重为 3.5,B 的成绩的权重为 7.5。
    成绩的取值范围在 0 到 10 之间,且均保留一位小数。

    输入格式

    输入占两行,每行包含一个浮点数,第一行表示 A,第二行表示 B。

    输出格式

    输出格式为 MEDIA = X,其中 X 为平均分,结果保留五位小数。

1
2
3
4
5
6
7
8
9
10
11
#include <iostream>
#include <cstdio>
using namespace std;
int main()
{
double a, b, avg;
scanf("%lf%lf", &a, &b);
avg = (a * 0.35 + b * 0.75)/1.1;
printf("MEDIA = %.5lf", avg);
return 0;
}

输入

1
2
5.0
7.1

输出

1
MEDIA = 6.43182
  1. 工资

    请编写一个程序,可以读取一名员工的员工编号,本月工作总时长(小时)以及时薪,并输出他的工资条,工资条中包括员工编号和员工月收入。

    输入格式

    输入包含两个整数和一个浮点数,分别代表员工编号,工作时长以及时薪。
    每个数占一行。

    输出格式

    输出共两行,第一行格式为 NUMBER = X,其中 X 为员工编号。
    第二行格式为 SALARY = U$ Y,其中 Y 为该员工月收入,保留两位小数。

1
2
3
4
5
6
7
8
9
#include <cstdio>
int main()
{
int num, time;
double sal;
scanf("%d%d%lf", &num, &time, &sal);
printf("NUMBER = %d\nSALARY = U$ %.2lf", num, time * sal);
return 0;
}

输入

1
2
3
25
100
5.50

输出

1
2
NUMBER = 25
SALARY = U$ 550.00
  1. 油耗

    给定一个汽车行驶的总路程(km)和消耗的油量(l),请你求出汽车每消耗 1 升汽油可行驶多少公里路程。

    输入格式
    输入共两行,第一行包含整数 X,表示行驶总路程。
    第二行包含保留一位小数的浮点数 Y,表示消耗的油量。

    输出格式
    输出格式为 M km/l,其中 M 为计算结果,保留三位小数。

1
2
3
4
5
6
7
8
9
#include <cstdio>
int main()
{
int m;
double o;
scanf("%d%lf", &m, &o);
printf("%.3lf km/l", m / o);
return 0;
}

输入

1
2
500
35.0

输出

1
14.286 km/l
  1. 两点间距离

    给定两个点 P1 和 P2,其中 P1 的坐标为 (x1,y1),P2 的坐标为 (x2,y2),请你计算两点间的距离是多少。
    distance=√(x2−x1)^2+(y2−y1)^2

    输入格式

    输入共两行,每行包含两个双精度浮点数 xi,yi,表示其中一个点的坐标。
    输入数值均保留一位小数。

    输出格式

    输出你的结果,保留四位小数。

1
2
3
4
5
6
7
8
9
10
#include <cstdio>
#include <cmath>
int main()
{
double x1, y1, x2, y2, d;
scanf ("%lf%lf%lf%lf", &x1, &y1, &x2, &y2);
d = sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1));
printf("%.4lf", d);
return 0;
}

输入

1
2
1.0 7.0
5.0 9.0

输出

1
4.4721
  1. 钞票

    在这个问题中,你需要读取一个整数值并将其分解为多张钞票的和,每种面值的钞票可以使用多张,并要求所用的钞票数量尽可能少。
    请你输出读取值和钞票清单。
    钞票的可能面值有 100,50,20,10,5,2,1。
    经过实验证明:在本题中,优先使用面额大的钞票可以保证所用的钞票总数量最少。

    输入格式
    输入一个整数 N。

    输出格式
    参照输出样例,输出读取数值以及每种面值的钞票的需求数量。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <cstdio>
int main()
{
int n, a, b, c, d, e, f, g;
scanf("%d", &n);
a = n / 100;
b = n % 100 / 50;
c = n % 100 % 50 / 20;
d = n % 100 % 50 % 20 / 10;
e = n % 100 % 50 % 20 % 10 / 5;
f = n % 100 % 50 % 20 % 10 % 5 / 2 ;
g = n % 100 % 50 % 20 % 10 % 5 % 2 ;
printf("%d\n%d nota(s) de R$ 100,00\n%d nota(s) de R$ 50,00\n%d nota(s) de R$ 20,00\n%d nota(s) de R$ 10,00\n%d nota(s) de R$ 5,00\n%d nota(s) de R$ 2,00\n%d nota(s) de R$ 1,00\n", n, a, b, c, d, e, f, g);
return 0;
}

输入

1
576

输出

1
2
3
4
5
6
7
8
576
5 nota(s) de R$ 100,00
1 nota(s) de R$ 50,00
1 nota(s) de R$ 20,00
0 nota(s) de R$ 10,00
1 nota(s) de R$ 5,00
0 nota(s) de R$ 2,00
1 nota(s) de R$ 1,00
  1. 时间转换

    读取一个整数值,它是工厂中某个事件的持续时间(以秒为单位),请你将其转换为小时:分钟:秒来表示。

    输入格式

    输入一个整数 N。

    输出格式

    输出转换后的时间表示,格式为 hours:minutes:seconds。

1
2
3
4
5
6
7
8
9
10
11
#include <cstdio>
int main()
{
int t, h, m, s;
scanf("%d", &t);
h = t / 3600;
m = t % 3600 / 60;
s = t % 3600 % 60;
printf("%d:%d:%d", h, m, s);
return 0;
}

输入

1
4396

输出

1
1:13:16

练习

  1. 乘积

    读取两个整数值。
    在此之后,计算它们的乘积并将结果存储在名为 PROD 的变量中。

    输入格式
    共两行,每行包含一个整数。

    输出格式
    输出格式为 PROD = X,其中 X 为乘积结果。

1
2
3
4
5
6
7
8
9
#include <cstdio>
int main()
{
int a, b, PROD;
scanf("%d%d", &a, &b);
PROD = a * b;
printf("PROD = %d", PROD);
return 0;
}

输入

1
2
3
9

输出

1
PROD = 27
  1. 价格计算

    给定你两个产品的产品编号,产品数量以及产品单价。
    请你计算买下两种产品一共需要花费多少钱。

    输入格式

    输入共两行。
    每行包含两个整数以及一个浮点数,表示其中一件产品的产品编号,产品数量以及产品单价。

    输出格式

    输出格式为 VALOR A PAGAR: R$ X,其中 X 为产品总价值,保留两位小数。

1
2
3
4
5
6
7
8
9
10
#include <cstdio>
int main()
{
int num1, num2, qun1, qun2;
double price1, price2, X;
scanf("%d%d%lf%d%d%lf", &num1, &qun1, &price1, &num2, &qun2, &price2);
X = qun1 * price1 + qun2 * price2;
printf("VALOR A PAGAR: R$ %.2lf", X);
return 0;
}

输入

1
2
12 1 5.30
16 2 5.10

输出

1
VALOR A PAGAR: R$ 15.50
  1. 球的体积

    给定你一个球体的半径 R,请你计算球体的体积。
    计算球体的公式为 V=(4/3)∗π∗R3。
    π 取 3.14159。
    注意:有些语言中 (4/3) 无法得到 1.3333…,建议在公式中使用 (4/3.0)。

    输入格式

    输入一个整数 R。

    输出格式

    输出格式为 VOLUME = X,其中 X 为球体的体积,结果保留三位小数。

1
2
3
4
5
6
7
8
#include <cstdio>
int main()
{
double R;
scanf("%lf", &R);
printf("VOLUME = %.3lf", 4/ 3.0 *3.14159 * R * R* R);
return 0;
}

输入

1
3

输出

1
VOLUME = 113.097
  1. 面积

    给定三个浮点数 A,B 和 C。
    然后,计算如下图形的面积:

    底边为 A,高为 C 的三角形。

    半径 C 的圆。(π=3.14159)

    底边为 A 和 B,高为 C 的梯形。

    边长为 B 的正方形。

    边长为 A 和 B 的长方形。

    输入格式

    输入共一行,包含三个保留一位小数的浮点数 A,B,C。

    输出格式

    输出共五行,形式如下所示:

    第一行,格式为 TRIANGULO: X,其中 X 为所求三角形面积。

    第二行,格式为 CIRCULO: X,其中 X 为所求圆形面积。

    第三行,格式为 TRAPEZIO: X,其中 X 为所求梯形面积。

    第四行,格式为 QUADRADO: X,其中 X 为所求正方形面积。

    第五行,格式为 RETANGULO: X,其中 X 为所求长方形面积。

    所有答案保留三位小数。

1
2
3
4
5
6
7
8
9
10
11
12
#include <cstdio>
int main()
{
double a, b, c;
scanf("%lf%lf%lf", &a, &b, &c);
printf("TRIANGULO: %.3lf\n", 0.5 * a * c);
printf("CIRCULO: %.3lf\n", 3.14159 * c * c);
printf("TRAPEZIO: %.3lf\n", 0.5 * (a + b) * c);
printf("QUADRADO: %.3lf\n", b * b);
printf("RETANGULO: %.3lf\n", a * b);
return 0;
}

输入

1
3.0 4.0 5.2

输出

1
2
3
4
5
TRIANGULO: 7.800
CIRCULO: 84.949
TRAPEZIO: 18.200
QUADRADO: 16.000
RETANGULO: 12.000
  1. 平均数2

    读取三个浮点数 A,B 和 C 的值,对应于三个学生的成绩。

    请你计算学生的平均分,其中 A 的成绩的权重为 2,B 的成绩的权重为 3,C 的成绩的权值为 5。

    成绩的取值范围在 0 到 10 之间,且均保留一位小数。

    输入格式

    输入共三行,每行包含一个浮点数,第一行表示 A,第二行表示 B,第三行表示 C。

    输出格式

    输出格式为 MEDIA = X,其中 X 为平均分,结果保留一位小数。

1
2
3
4
5
6
7
8
9
#include <cstdio>
int main()
{
double a, b, c, avg;
scanf("%lf%lf%lf", &a, &b, &c);
avg = (a * 2 + b * 3 + c * 5) / 10;
printf("MEDIA = %.1lf", avg);
return 0;
}

输入

1
2
3
5.0
6.0
7.0

输出

1
MEDIA = 6.3
  1. 工资和奖金

    请你编写一个程序,给定你一个销售人员的名字,底薪以及月销售额。

    请你计算他的月收入是多少。

    已知月收入等于底薪加 15% 的月销售额。

    所有数据保留两位小数。

    输入格式

    输入第一行包含一个由大写字母构成的长度不超过 10 的字符串,表示销售人员的名字。

    第二行包含一个浮点数,表示该人员的底薪。

    第三行包含一个浮点数,表示该人员的月销售额。

    输出格式

    输出格式为 TOTAL = R$ X,X 为该人员月收入。

1
2
3
4
5
6
7
8
9
10
11
#include <cstdio>
#include <iostream>
using namespace std;
int main()
{
string n;
double s, b;
cin >> n >>s >> b;
printf("TOTAL = R$ %.2lf", s + 0.15 * b);
return 0;
}

输入

1
2
3
JOAO
500.00
1000.00

输出

1
TOTAL = R$ 650.00
  1. 最大值

    给定三个整数,请你找出它们中的最大值。

    下列公式可能对你有所帮助:

    max(a,b)=(a+b+abs(a−b))/2

    输入格式

    输入占一行,包含三个整数

    输出格式

    输出格式为 X eh o maior,其中 X 为三个数中的最大值。

1
2
3
4
5
6
7
8
9
10
11
#include <cstdio>
#include <cmath>
int main()
{
int a, b, c, x, max;
scanf("%d%d%d", &a, &b, &c);
x = (a + b + abs(a - b))/2;
max = (x + c + abs(x - c))/2;
printf("%d eh o maior", max);
return 0;
}

输入

1
7 14 106

输出

1
106 eh o maior
  1. 距离

    两辆汽车在同一地点,同时,沿同一方向前进。

    一辆车的速度为 60 km/h,另一辆车的速度为 90 km/h。

    显然,快车与慢车的距离会不断拉开,每过一个小时(60 分钟),两车的距离就拉开 30 公里。

    现在,告诉你两车之间的距离为 L 公里,请你求出两车已经行驶了多长时间?

    输入格式

    输入包含一个整数 L,表示两车之间的距离。

    输出格式

    输出格式为 X minutos,其中 X 为已经行驶的时间,单位为分钟

1
2
3
4
5
6
7
8
#include <cstdio>
int main()
{
int l;
scanf("%d", &l);
printf("%d minutos", l * 2);
return 0;
}

输入

1
30

输出

1
60 minutos
  1. 燃料消耗

    一辆汽车每行驶 12 公里需要消耗 1 升汽油,现在告诉你该汽车的行驶速度 S(km/h)和行驶时间 T(h),请你计算该车在行驶过程中一共消耗了多少升汽油。

    输入格式

    输入共两行,第一行包含一个整数 T,表示行驶时间(h)。

    第二行包含一个整数 S,表示行驶速度(km/h)。

    输出格式

    输出行驶期间的总油耗,结果保留三位小数。

1
2
3
4
5
6
7
8
#include <cstdio>
int main()
{
double t, s;
scanf("%lf%lf", &t, &s);
printf("%.3lf", t * s / 12);
return 0;
}

输入

1
2
10
85

输出

1
70.833
  1. 钞票和硬币

    读取一个带有两个小数位的浮点数,这代表货币价值。

    在此之后,将该值分解为多种钞票与硬币的和,每种面值的钞票和硬币使用数量不限,要求使用的钞票和硬币的总数量尽可能少。

    钞票的面值是 100,50,20,10,5,2。

    硬币的面值是 1,0.50,0.25,0.10,0.05 和 0.01。

    经过实验证明:在本题中,优先使用面额大的钞票和硬币可以保证所用的钞票和硬币总数量最少。

    输入格式

    输入一个浮点数 N。

    输出格式

    参照输出样例,输出每种面值的钞票和硬币的需求数量。

1
※使用类型转换将输入的浮点数转换为整型后把所有数据放大100倍后计算
  1. 天数转换
读取对应于一个人的年龄(以天为单位)的整数值,并转化为年,月和日表示方式输出,年、月、日分别对应 `ano(s)`, `mes(es)`, `dia(s)`。

注意:为了方便计算,假设全年 365 天,每月 30 天。 数据保证,不会出现 12 个月和几天的情况,例如 360,363 或 364。

**输入格式**

输入一个整数 N。

**输出格式**

参照输出样例,输出转换后的天数表达。
1
2
3
4
5
6
7
8
9
10
11
#include <cstdio>
int main()
{
int n, y, m, d;
scanf("%d", &n);
y = n / 365;
m = n % 365 / 30;
d = n % 365 % 30;
printf("%d ano(s)\n%d mes(es)\n%d dia(s)", y, m, d);
return 0;
}

输入

1
400

输出

1
2
3
1 ano(s)
1 mes(es)
5 dia(s)