第五课 switch

Switch

if 嵌套循环

format:

1
2
3
4
5
6
if (条件1)
   sentence;
else if (条件2)
  sentence;
else
  sentence;

从条件表达式 1 开始判断,若成立则执行后面的语句,若条件不成立则继续判断,直到遇到条件成立的才执行。

switch

switch 语句和 if 嵌套语句是不同的;

x > 10; x > 100; 在 if 下的情况有多个 value 满足条件
x = 10; x = 100; 每种情况都只有 one value,且该值固定

特点:Clear structure

format:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
switch (object)
{
  case constant1:
     sentence; break;
  case constant2:
     sentence; break;
  // ……
  default
     sentence;
}

object with constant 做比较,当两者相等时执行,若所有 constant 皆不等于 object,即执行 default;

break 结束当前任务,continue 结束本轮任务。

default 可以在任意位置!相当于一个 case 来执行,不过该 case 的条件是不匹配当前所有 constant;

例题

  1. 输入年月日,判断该日期属于年内的第 n天
  2. 输入年月,判断该月份有多少天
  3. 输入一个数,判断能否被 n 整除,能就输入n(3,5,7),都不能就输出 0
  4. 判断输入的符号是什么类型:大写,小写,数字,空格
  5. 解一元二次方程
  6. 简单计算器:加减乘除

补充:

  • printf 只会看双精度,float 型会被提升为 double,scanf 没有类型提升;%lf 在 printf 下是未定义的,要确保可移植性,就要坚持使用 %f;

  • 在运行时确定宽度,可使用以下代码

    1
    
    printf("%*d",weight,x);  // 中间的星号表示,在参数列表中第一个int参数作为宽度
    
  • 当向 scanf 传入数组时,不需要使用取址符号

  • scanf 使用 %d 等数值格式符时,不会读取换行,而 gets 本身作为读入字符串的函数,却会将换行读入。故:scanf 和 gets 要么二选一,要么干脆不用

    scanf 会将未匹配的字符留在输入流中

  • 在 scanf 中,若想任意分隔符

    1
    
    scanf("%d%*c%d",&a,&b);
    
  • scanf 使用 %c 格式符读入字符时,空格字符和转义字符(包括回车)都会被有效字符读入

  • 对于上一条,scanf 函数 %c 存在的问题!可使用 getchar() 将无效字符读走,以免被后面的字符型变量误读。

  • scanf 没有精度修饰词,即 scanf() 不能规定精度

  • EPS ,若要判断一个数是否为0,就看 该数的绝对值是不是<= EPS

  • 在 if/while 的条件表达式里,n%2!=0 等价于 n%2

Licensed under CC BY-NC-SA 4.0
本文阅读量 次, 总访问量 ,总访客数
Built with Hugo .   Theme Stack designed by Jimmy