解析C++编程中的选择结构和switch语句的用法_C 语言

C++编写选择结构的程序
下面,通过两个实例来说明如何编写较为复杂的C++程序。

【例】编写程序,判断某一年是否为闰年。

#include <iostream>
using namespace std;
int main( )
{
  int year;
  bool leap;
  cout<<"please enter year:";//输出提示
  cin>>year; //输入年份
  if (year%4==0) //年份能被4整除
  {
   if(year%100==0)//年份能被4整除又能被100整除
   {
     if (year%400==0)//年份能被4整除又能被400整除
      leap=true;//闰年,令leap=true(真)
     else
      leap=false;
   } //非闰年,令leap=false(假)
   else //年份能被4整除但不能被100整除肯定是闰年
     leap=true;
  } //是闰年,令leap=true
  else //年份不能被4整除肯定不是闰年
   leap=false; //若为非闰年,令leap=false
  if (leap)
   cout<<year<<" is "; //若leap为真,就输出年份和“是”
  else
   cout<<year<<" is not ";//若leap为真,就输出年份和“不是”
  cout<<" a leap year."<<endl; //输出“闰年”
  return 0;
}

运行情况如下:

① 2005
2005 is not a leap year.
② 1900
1900 is npt a leap year.

也可以将程序中第8~16行改写成以下的if语句:

if(year%4!=0)
  leap=false;
else if(year%100!=0)
  leap=true;
else if(year%400!=0)
  leap=false;
else
  leap=true;

也可以用一个逻辑表达式包含所有的闰年条件,将上述if语句用下面的if语句代替:
if((year%4 == 0 && year%100 !=0) || (year%400 == 0)) leap=true;
else leap=false;

【例】运输公司对用户计算运费。路程(s)越远,每公里运费越低。标准如下:

  s<250km 没有折扣
  250≤s<500  2%折扣
  500≤s<1000  5%折扣
  1000≤s<2000  8%折扣
  2000≤s<3000  10%折扣
  3000≤s  15%折扣

设每公里每吨货物的基本运费为p(price的缩写),货物重为w(wright的缩写),距离为s,折扣为d(discount的缩写),则总运费f(freight的缩写)的计算公式为

  f = p * w * s * (1 - d)

据此写出程序如下:

#include <iostream>
using namespace std;
int main( )
{
  int c,s;
  float p,w,d,f;
  cout<<"please enter p,w,s:";
  cin>>p>>w>>s;
  if(s>=3000)
   c=12;
  else
   c=s/250;
  switch (c)
  {
   case 0:d=0;break;
   case 1:d=2;break;
   case 2:
   case 3:d=5;break;
   case 4:
   case 5:
   case 6:
   case 7:d=8;break;
   case 8:
   case 9:
   case 10:
   case 11:d=10;break;
   case 12:d=15;break;
  }
  f=p*w*s*(1-d/100.0);
  cout<<"freight="<<f<<endl;
  return 0;
}

运行情况如下:

please enter p,w,s:100 20 300
freight=588000

C++ switch语句(多选分支结构)
switch语句是多分支选择语句,用来实现多分支选择结构。它的一般形式如下:

switch(表达式)
{
  case 常量表达式1:语句1
  case 常量表达式2:语句2
  ...
  case 常量表达式n:语句n
  default:语句n+1
 }

例如,要求按照考试成绩的等级打印出百分制分数段,可以用switch语句实现:

switch(grade)
{
  case 'A': cout<<"85~100\n";
  case 'B': cout<<"70~84\n";
  case 'C': cout<<"60~69\n";
  case 'D': cout<<"<60\n";
  default: cout<<"error\n";
}

说明:
1) switch后面括号内的“表达式”,允许为任何类型。

2) 当switch表达式的值与某一个case子句中的常量表达式的值相匹配时,就执行此case子句中的内嵌语句,若所有的case子句中的常量表达式的值都不能与switch表达式的值匹配,就执行default子句的内嵌语句。

3) 每一个case表达式的值必须互不相同,否则就会出现互相矛盾的现象(对表达式的同一个值,有两种或多种执行方案)。

4) 各个case和default的出现次序不影响执行结果。例如,可以先出现“default:…”,再出现“case 'D':…”,然后是“case 'A':…”。

5) 执行完一个case子句后,流程控制转移到下一个case子句继续执行。“case常量表达式”只是起语句标号作用,并不是在该处进行条件判断。在执行switch语句时,根据switch表达式的值找到与之匹配的case子句,就从此case子句开始执行下去,不再进行判断。例如,上面的例子中,若grade的值等于'A',则将连续输出:

  85~100
  70~84
  60~69
  <60
  error

因此,应该在执行一个case子句后,使流程跳出switch结构,即终止switch语句的执行。可以用一个break语句来达到此目的。将上面的switch结构改写如下:

switch(grade)

{
  case 'A': cout<<"85~100\n";break;
  case 'B': cout<<"70~84\n";break;
  case 'C': cout<<"60~69\n";break;
  case 'D': cout<<"<60\n";break;
  default: cout<<"error\n";break;
}

最后一个子句(default)可以不加break语句。如果grade的值为'B',则只输出“70~84”。
 

在case子句中虽然包含一个以上执行语句,但可以不必用花括号括起来,会自动顺序执行本case子句中所有的执行语句。

6) 多个case可以共用一组执行语句,如

  case 'A':
  case 'B':
  case 'C': cout<<">60\n";break;
  ...

当grade的值为'A'?'B'或'C'时都执行同一组语句。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索c++
选择
switch语句的用法、c语言switch语句用法、switch语句用法、java switch语句用法、switch case语句用法,以便于您获取更多的相关知识。

时间: 2024-10-29 01:00:49

解析C++编程中的选择结构和switch语句的用法_C 语言的相关文章

C++编程中__if_exists与__if_not_exists语句的用法_C 语言

__if_exists 语句__if_exists 语句测试指定的标识符是否存在.如果该标识符存在,则执行指定的语句块. 语法 __if_exists ( identifier ) { statements }; 参数 参数 说明 identifier 要测试其存在性的标识符. statements identifier 存在时要执行的一个或多个语句. 备注 若要实现最可靠的结果,请在以下约束条件下使用 __if_exists 语句. 只将 __if_exists 语句应用于简单类型,而不是模板

C++中虚函数与纯虚函数的用法_C 语言

本文较为深入的分析了C++中虚函数与纯虚函数的用法,对于学习和掌握面向对象程序设计来说是至关重要的.具体内容如下: 首先,面向对象程序设计(object-oriented programming)的核心思想是数据抽象.继承.动态绑定.通过数据抽象,可以使类的接口与实现分离,使用继承,可以更容易地定义与其他类相似但不完全相同的新类,使用动态绑定,可以在一定程度上忽略相似类的区别,而以统一的方式使用它们的对象. 虚函数的作用是实现多态性(Polymorphism),多态性是将接口与实现进行分离,采用

解析Java编程中对于包结构的命名和访问_java

包的命名包的名字应该避免与其他包冲突,所以选择一个既有意义又唯一的名字是包设计的一个重要方面.但是全球的程序员都在开发包,根本就没有办法获知谁采用了什么包名,因此选择唯一的包名是一个难题.如果我们确定某个包只在我们的组织内部使用,那么我们就可以让内部仲裁者(internal arbiter)来确保项目之间不会发生名字冲突. 但是对于整个世界而言,这种方法是不实际的.包的标识符都是简单的名字,一种比较好的能够确保包名唯一的方法是使用Internet域名.如果我们所就职的公司的名字为Magic.ln

C++设计模式编程中使用Bridge桥接模式的完全攻略_C 语言

桥接模式将抽象(Abstraction)与实现(Implementation)分离,使得二者可以独立地变化. 桥接模式典型的结构图为: 在桥接模式的结构图中可以看到,系统被分为两个相对独立的部分,左边是抽象部分,右边是实现部分,这两个部分可以互相独立地进行修改:例如上面问题中的客户需求变化,当用户需求需要从 Abstraction 派生一个具体子类时候,并不需要像上面通过继承方式实现时候需要添加子类 A1 和 A2 了.另外当上面问题中由于算法添加也只用改变右边实现(添加一个具体化子类),而右边

浅谈C语言编程中程序的一些基本的编写优化技巧_C 语言

大概所有学习C语言的初学者,都被前辈说过,C语言是世界上接近最速的编程语言,当然这并不是吹牛,也并不是贬低其他语言,诚然非C语言能写出高速度的代码,但是C语言更容易写出高速的程序(高速不代表高效),然而再好的工具,在外行人手中也只能是黯淡没落. 对于现代编译器,现代CPU而言,我们要尽量迎合CPU的设计(比如架构和处理指令的方式等),虽然编译器是为程序员服务,并且在尽它最大的能力来优化程序员写出的代码,但是毕竟它还没有脱离电子的范畴,如果我们的代码不能让编译器理解,编译器无法帮我们优化代码,那么

详解C++编程中的主表达式与后缀表达式编写基础_C 语言

主表达式主表达式是更复杂的表达式的构造块.它们是文本.名称以及范围解析运算符 (::) 限定的名称.主表达式可以具有以下任一形式: literal this :: name name ( expression ) literal 是常量主表达式.其类型取决于其规范的形式. this 关键字是指向类对象的指针.它在非静态成员函数中可用,并指向为其调用函数的类的实例. this 关键字只能在类成员函数体的外部使用. this 指针的类型是未特别修改 this 指针的函数中的 type *const(

C语言编程中从密码文件获取数据的函数总结_C 语言

C语言getpw()函数:取得指定用户的密码文件数据头文件: #include <pwd.h> #include <sys/types.h> 定义函数: int getpw(uid_t uid, char *buf); 函数说明:getpw()会从/etc/passwd中查找符合参数uid所指定的用户账号数据, 找不到相关数据就返回-1. 所返回的buf 字符串格式如下: 账号:密码:用户识别码(uid):组识别码(gid):全名:根目录:shell 返回值:返回 0 表示成功,

掌握C++编程中反斜杠续行符的使用方法_C 语言

1) 用在宏定义中: #define CV_ARE_SIZES_EQ(mat1, mat2) \ ((mat1)->rows == (mat2)->rows && (mat1)->cols == (mat2)->cols) 2) 用在printf中,有时候printf中语句太长,需要切分,则需用到反斜杠: 3) 用"//"只能注释当前行的语句,想要将下一行一起注释掉,则可以在该行最后加上反斜杠. 另外,反斜杠除了强制换行的作用之外,还有转义符的意

详解C++编程中的单目运算符重载与双目运算符重载_C 语言

C++单目运算符重载 单目运算符只有一个操作数,如!a,-b,&c,*p,还有最常用的++i和--i等.重载单目运算符的方法与重载双目运算符的方法是类似的.但由于单目运算符只有一个操作数,因此运算符重载函数只有一个参数,如果运算符重载函数作为成员函数,则还可省略此参数. 下面以自增运算符"++"为例,介绍单目运算符的重载. [例] 有一个Time类,包含数据成员minute(分)和sec(秒),模拟秒表,每次走一秒,满60秒进一分钟,此时秒又从0开始算.要求输出分和秒的值. #