关于C语言中的switch语句变量类型的问题

如题所述

第1个回答  2022-11-22

关于C语言中的switch语句变量类型的问题

switch的变量必须是整数。char, int, short, long等等。float不行。
可以对常量switch。
括号里面的标签可以任意写。把default拼写错也没关系。
case之后必须是常量。

switch有个特殊用途,例如,做加减法运算,对于减法可以将减数先求相反数,然后再进行加法运算。可以这样写:
switch(operator)
{
case '-': operand2 = -operand2;
case:'+': .....
}
这样在处理减法时就多了求相反数的操作,然后就和加法一样了。
这个用法好像是在c陷阱与缺陷里看到的。

关于C语言中switch语句的问题

在switch语句中,“case 常量表达式”只相当于一个语句标号, 表达式的值和某标号相等则转向该标号执行,但不能在执行完该标号的语句后自动跳出整个switch 语句,所以出现了继续执行所有后面case语句的情况。
即x=1时 从case 1开始执行到最后;即x=2时 从case 2开始执行到最后.
正常使用时要在后面加 break;
即:case 1: printf("a"); break;

C语言中的变量类型?

C语言中,变量分为全局变量和局部变量;也可以这样分:自动变量,静态变量.前者是按变量作用范围来分的,而后者是按变量存储方式来分的.
如果按存储占用空间来分,可以是整型变量,字符型变量,浮点型变量等.当然还有数组,结构体变量等.
C语言还有一个重要变量:指针变量.它存放的值是一个内存地址.
另一点,声明变量时,可以不用声明就直接赋值来决定变量类型的语言如(javascript,flash cs3.0以前,等),这类语言变量的声明通常被称为弱类型,而如(c++等)必须先声明,后使用,而且声明时必须确定变量类型,这种就是严格的数据类型.

C语言关于SWITCH语句的问题

因为C语言设计的时候,为了灵活性,switch的语法是反人性的,一个分支不加break的话,是不会自己跳出来的。这个跟想象中的分支的含义不太一样。
这种语法的目的,仅仅是类似这种:
case ’a‘:
case 'b': DO SOMETHING; break;
表示条件 a 或者 b 其中任何一个成立,就执行,语言的实现方便。
按照正常人喜欢的逻辑,最好能这么写:
case 'a' || 'b' : DO SOMETHING; 然后不用写break
不过这样就不是C语言了
我完全理解lz发这个问题的心情,要学就继续忍受,比这郁闷的坑多着

C语言关于switch语句的问题

答案应该错了。应该是
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

c语言关于switch语句的问题

switch的机制:
判断变量是符合哪个case,如果符合某一个case,那么从那个case处执行。
因此如果没有break语句,下面的case依然会按顺序执行,switch只负责跳到哪儿,该怎么执行还是怎么执行。
题目当中的case 1没有break,因此case2依然会执行。

C语言关于变量类型转换的问题

i=1/p;
改成
i = (float)1/p;
自动转化限制很多,最重要的限制是:运行需要按顺序,每次运行都要进行变量类型检查,如果变量类型不一致,则都转化成精确度高的类型。
注意:如果表达式复杂,那么表达式会被转化成许多步,每步进行的运算,都会进行变量类型自动转换。
就像上面的例子,先将1转化成float型,那么1/p的结果就是float型,然后将值赋给i。

C语言中有关switch语句的问题

case语句只能是常量或常量表达式,变量是不行的。
如果要表达:0<a<100,没必要用switch语句,直接用if(a>0&&a<100)即可

c语言中关于switch语句

你的default没有break;所有它在执行default的内容以后继续查找后面的case,要么你就把default放到所有的case后面去就是了...

相似回答