switch的变量必须是整数。char, int, short, long等等。float不行。
可以对常量switch。
括号里面的标签可以任意写。把default拼写错也没关系。
case之后必须是常量。
switch有个特殊用途,例如,做加减法运算,对于减法可以将减数先求相反数,然后再进行加法运算。可以这样写:
switch(operator)
{
case '-': operand2 = -operand2;
case:'+': .....
}
这样在处理减法时就多了求相反数的操作,然后就和加法一样了。
这个用法好像是在c陷阱与缺陷里看到的。
在switch语句中,“case 常量表达式”只相当于一个语句标号, 表达式的值和某标号相等则转向该标号执行,但不能在执行完该标号的语句后自动跳出整个switch 语句,所以出现了继续执行所有后面case语句的情况。
即x=1时 从case 1开始执行到最后;即x=2时 从case 2开始执行到最后.
正常使用时要在后面加 break;
即:case 1: printf("a"); break;
C语言中,变量分为全局变量和局部变量;也可以这样分:自动变量,静态变量.前者是按变量作用范围来分的,而后者是按变量存储方式来分的.
如果按存储占用空间来分,可以是整型变量,字符型变量,浮点型变量等.当然还有数组,结构体变量等.
C语言还有一个重要变量:指针变量.它存放的值是一个内存地址.
另一点,声明变量时,可以不用声明就直接赋值来决定变量类型的语言如(javascript,flash cs3.0以前,等),这类语言变量的声明通常被称为弱类型,而如(c++等)必须先声明,后使用,而且声明时必须确定变量类型,这种就是严格的数据类型.
因为C语言设计的时候,为了灵活性,switch的语法是反人性的,一个分支不加break的话,是不会自己跳出来的。这个跟想象中的分支的含义不太一样。
这种语法的目的,仅仅是类似这种:
case ’a‘:
case 'b': DO SOMETHING; break;
表示条件 a 或者 b 其中任何一个成立,就执行,语言的实现方便。
按照正常人喜欢的逻辑,最好能这么写:
case 'a' || 'b' : DO SOMETHING; 然后不用写break
不过这样就不是C语言了
我完全理解lz发这个问题的心情,要学就继续忍受,比这郁闷的坑多着
答案应该错了。应该是
C
a=0,b=1
switch语句的规则是首先找到一个匹配项,在此匹配项之下开始运行,直到遇到一个break则返回,比如对于i=1,首先找到case 1:,然后没有看到break,继续执行case 2:的语句,a+3,然后还是发现没break,又执行default,使得a=8了,其他的i值以此类推会得到31这个结果
他没有忽略case 1:这个语句,只是这个只是一个标记,用来判断i值是否为1,当i=1的时候就会执行case 1:后面的语句,但是发现case 1:这个语句后面没有可执行的语句,也没有break,因此他继续执行case 2:下面的语句,直到遇见一个break或者这个域结束
另外:
case 1:
case 2: a+=3;
与
case 1:a+=3;
case 2:a+=3;
是不同的,比如switch(i),当i=1的时候上面的a=3,下面的会使得a=6
switch的机制:
判断变量是符合哪个case,如果符合某一个case,那么从那个case处执行。
因此如果没有break语句,下面的case依然会按顺序执行,switch只负责跳到哪儿,该怎么执行还是怎么执行。
题目当中的case 1没有break,因此case2依然会执行。
i=1/p;
改成
i = (float)1/p;
自动转化限制很多,最重要的限制是:运行需要按顺序,每次运行都要进行变量类型检查,如果变量类型不一致,则都转化成精确度高的类型。
注意:如果表达式复杂,那么表达式会被转化成许多步,每步进行的运算,都会进行变量类型自动转换。
就像上面的例子,先将1转化成float型,那么1/p的结果就是float型,然后将值赋给i。
case语句只能是常量或常量表达式,变量是不行的。
如果要表达:0<a<100,没必要用switch语句,直接用if(a>0&&a<100)即可
你的default没有break;所有它在执行default的内容以后继续查找后面的case,要么你就把default放到所有的case后面去就是了...
关于C语言中的switch语句变量类型的问题
关于C语言中的switch语句变量类型的问题 switch的变量必须是整数。char, int, short, long等等。float不行。 可以对常量switch。 括号里面的标签可以任意写。把default拼写错也没关系。 case之后必须是常量。switch有个特殊用途,例如,做加减法运算,对于减法可以将减数先求相反数,然后再进行加法运...
一道关于C语言switch的题,不知道怎么理解,希望懂的人赐教
swith括号内的表达式必须是整型或是字符型 而case后的必须是常量表达式,程序执行时首先计算表达式的值,并由第一个case分支开始将其与case后的常量表达式比较当表达式的值与某个case分支的常量表达式相等时,则执行case后的语句,遇到break则跳出,如没有break ,程序会执行到最后自动跳出。default放在什么位...
C语言switch题目找错简单
货物价格s变量应该为浮点类型float;switch语句中要有default,可对应s>=10000的情况,因此直接令c=s\/1000即可;“1000元以上、5000元以下货物征税2%”,感觉包括1000但不包括5000 因此对应的c为1,2,3,4,那么d=2语句应写在case 4:之后;最后输出税金的格式为%f,默认是保留小数点后6位,不知道题目...
C语言中switch case的问题
switch(条件)语句 其中,条件的类型可以是整数类型,枚举类型,或者类类型(但该类需要有单一的转换到整数类型或(可以是字符类型,但不能是浮点类型、字符串、指针类型等),语句部分不一定非得是一条复合语句。
C语言中switch()语句的括号内可以是什么型别的呢?
C语言中switch()语句的括号内可以是什么型别的呢? switch()语句的括号内的表示式必须是整型,它要与case 里的值呼应. 字元型,只有字元常量可以,例如 'a' 'b' '6' '\\r'实际上是整型. 布林型 -- 真,假, 实际上是 0, 1 ...整型. 凡表示式值为整型的都可以. 估计 enum 型也...
C语言 switch语句的问题
解答:1.请问为什么字母要用''括起来 答:因为ch要判断的是字符 2.如果ch=1 那么是执行case '1'还是 case 1 如果是后者的话 为什么数字不用括起来 答:执行case '1'3.假如执行了break语句 是返回第二行重新判断 答:是跳出switch,跳到putchar('*')执行,然后继续执行FOR循环 4.假如执行了...
switch中变量的值必须是什么类型的?
因此C语言提供 switch 语句来处理多分支选择。所以 if 和 switch 可以说是分工明确的。在很多大型的项目中,多分支选择的情况经常会遇到,所以 switch 语句用得还是比较多的。switch 后面括号内的“表达式”必须是整数类型。也就是说可以是 int 型变量、char 型变量,也可以直接是整数或字符常量,哪怕...
C语言这道关于swtich语句的题目,求解
0:后的语句;case 0:后嵌套了switch(c==5),c==5为真值是1,所以执行switch(c==5)的case 1:后的语句printf("#");打出#来,接着被break;跳出switch(c==5),顺序执行switch(a>0)的default:后的语句printf("&");指出&来,然后跳出switch(a>0)语句,执行printf("\\n");回车结束程序。
c语言switch的用法
C语言中的switch语句是一种强大的控制结构,它通过与case、break和default的结合,实现了对程序流程的精细控制。这个语句就像是一个开关,当变量的表达式值匹配到某个case中的常量时,会执行该case之后的语句,然后跳出switch结构,直到遇到break跳出。如果没有匹配的case,执行就会转到default case,除非在...
c语言switch的用法
在C语言中,switch语句是开关语句,一般与case、break、default配合使用,对流程进行控制。switch作为一个开关,当变量表达式的值对应case中的值时,执行case后面的语句后跳出switch语句,如果都不符合则执行default后面的语句后跳出switch语句。switch语句用法规则:1.在一个switch中可以有任意数量的case语句。