一个switch语句允许测试一个变量等于多个值时的情况。每个值称为一个case,且被测试的变量会对每个switch case进行检查。
switch语句
语法
C++ 中 switch 语句的语法:
switch(expression){
case constant-expression :
statement(s);
break; // 可选的
case constant-expression :
statement(s);
break; // 可选的
// 您可以有任意数量的 case 语句
default : // 可选的
statement(s);
}
switch语句必须遵循下面的规则:
- switch 语句中的expression必须是一个整型或枚举类型,或者是一个class类型,其中class 有一个单一的转换函数将其转换为整型或枚举类型。
- 在一个 switch 中可以有任意数量的 case 语句。每个case后跟一个要比较的值和一个冒号。
- case 的 constant-expression必须与switch中的变量具有相同的数据类型,且必须是一个常量或字面量。
- 当被测试的变量等于 case 中的常量时,case 后跟的语句将被执行,直到遇到 break 语句为止。
- 当遇到 break 语句时,switch 终止,控制流将跳转到 switch 语句后的下一行。
- 不是每一个 case 都需要包含 break。如果 case 语句不包含 break,控制流将会继续 后续的 case,直到遇到 break 为止。
- 一个 switch 语句可以有一个可选的 default case,出现在 switch 的结尾。default case 可用于在上面所有 case 都不为真时执行一个任务。default case 中的 break 语句不是必需的。
流程图
嵌套 switch 语句
您可以把一个 switch 作为一个外部 switch 的语句序列的一部分,即可以在一个 switch 语句内使用另一个 switch 语句。即使内部和外部 switch 的 case 常量包含共同的值,也没有矛盾。
C++ 中的 switch 语句允许至少 256 个嵌套层次。
switch(ch1) {
case 'A':
cout << "这个 A 是外部 switch 的一部分";
switch(ch2) {
case 'A':
cout << "这个 A 是内部 switch 的一部分";
break;
case 'B': // 内部 B case 代码
}
break;
case 'B': // 外部 B case 代码
}
pow()函数
与许多编程语言不同的是,C++没有指数运算符。计算数字的幂需要使用库函数。
pow函数的作用是求幂。
头文件
math.h/cmath
数学公式
pow(x , y)
计算x的y次幂
返回值
返回幂指数的结果,即x的y次幂。若x为负数且y为小数,或者x为0且y小于等于0,将出现结果错误。
返回类型
double型。
使用 pow 函数时应遵循一些指导原则:
- 程序必须包含 cmath 头文件;
- 在传递给函数的两个参数中,至少第一个参数应该是 double 类型的,当然也可以两个都是;
- 因为 pow 函数返回一个 double 值,所以被赋值的任何变量也应该是 double 类型的;
可以将 pow 函数视为一个“黑箱”,它接收 2 个数字,然后发送出第 3 个数字。发出来的数字是以第一个数字为底数、第二个数字为指数的幂值。
sqrt()函数
开平方使用sqrt()函数
头文件
math.h/cmath
功能
double sqrt(double x)
返回 x 的平方根
abs()函数
int abs(int x) 返回 x 的绝对值。
int abs(int x)
该函数返回 x 的绝对值。
头文件
math.h/cmath
ceil()函数
原型
double ceil(double x)
该函数返回不小于 x 的最小整数值。
功能
把一个小数向上取整。
头文件
math.h/cmath
round函数
原型
double round(double x)
round()用于舍入给定的数字,该数字可以是float或double。它将舍入函数中提供的参数返回最接近的整数值,中间情况舍入为零。
功能
把一个小数四舍五入。
头文件
math.h/cmath
实例
四则运算计算器
问题描述
使用switch语句制作一个四则运算计算器,实现加减乘除功能。
要求:结果保留两位小数。
输入
两个浮点型的数字,一个字符。
输出
一个浮点型的数字。
样例
2 + 3
样例输出 #1
5.00
5 / 2
样例输出 #2
2.50
题解
#include <iostream>
#include <cstdio>
using namespace std;
int main()
{
double a = 0,b = 0,d = 0;
char c = 0;
cin>>a>>c>>b;
switch(c)
{
case '+':d = a + b;break;
case '-':d = a - b;break;
case '*':d = a * b;break;
case '/':d = a / b;break;
}
printf("%.2lf",d);
return 0;
球的体积
问题描述
已知球的体积公式为:V=4/3πr³;其中V表示体积,π表示圆周率(π取3.14),r表示球的半径。已知一个半径r(0 < r <= 1000),求出这个球的体积。(结果保留3位小数)请使用pow()函数。
输入
输入r的值,表示球的半径
输出
输出一个数,表示球的体积
样例输入
10
样例输出
4186.667
题解
#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;
int main()
{
double v = 0,pi = 3.14,r = 0;
cin>>r;
v = 4.0/3*pi*pow(r,3);
printf("%.3lf",v);
return 0;
}
恩格尔系数
问题描述
恩格尔系数是德国统计学家恩格尔在19世纪提出的反映一个国家和
地区居民生活水平状况的定律,计算公式为:
N = 人均食物支出金额 / 人均总支出金额 * 100%
联合国根据恩格尔系数的大小,对世界各国的生活水平有一个划分标准,即一个国家平均家庭恩格尔系数大于等于60%为贫穷;50%~60%为温饱;40%~50%为小康;30%~40%属于相对富裕;20%~30%为富裕;20%以下为及其富裕。
输入
输入两个浮点数。
输出
生活水平。
样例输入
10 20
样例输出
温饱
题解
#include <iostream>
#include <cstdio>
using namespace std;
int main()
{
double a = 0,b = 0,n = 0;
cin>>a>>b;
n = a / b * 100;
if (n >= 60)
cout<<"贫穷";
else if (n >= 50 && n < 60)
cout<<"温饱";
else if (n >= 40 && n < 50)
cout<<"小康";
else if (n >= 30 && n < 40)
cout<<"相对富裕";
else if (n >= 20 && n < 30)
cout<<"富裕";
else
cout<<"极其富裕";
return 0;
}
计算a、b、c的n次方和
问题描述
输入四个正整数a、b、c、n,(a、b、c均小于200,n<=6),求a、b、c的n次方和。
输入
四个正整数,分别代表a、b、c、n的值
输出
一个正整数。
样例输入
11 22 33 4
样例输出
1434818
题解
#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;
int main()
{
int a = 0,b = 0,c = 0,n = 0,d = 0;
cin>>a>>b>>c>>n;
a = pow(a,n);
b = pow(b,n);
c = pow(c,n);
cout<<a+b+c;
return 0;
}
小明买书
问题描述
春节来临,小明想用自己的零花钱购买一些书送给贫困山区的小朋友,他来到书店挑了4本书,每本书的价格分别为6元、13元、15元、20元,小明想把钱用光同时尽量书本数量最多(小明的零花钱为大于等于35元的挣钱)。
输入
小明的零花钱。
输出
每种价格书购买的数量。
样例输入
37
样例输出
6元:4 13元:1 15元:0 20元:0
题解
#include <iostream>
#include <cstdio>
using namespace std;
int main()
{
int x = 0,a = 0,b = 0,c = 0,d = 0;
cin>>x;
a = x / 6;
switch (x % 6)
{
case 1:a -= 2,b += 1;break;
case 2:a -= 3,d += 1;break;
case 3:a -= 2,c += 1;break;
case 4:a -= 4,b += 1,c += 1;break;
case 5:a -= 5,c += 1,d += 1;
}
cout<<a<<" "<<b<<" "<<c<<" "<<d;
return 0;
}