switch语句和分支嵌套

你见过最“短小快”的 C 语言语句是什么?

答:;Powered by 
F~w]guGUpq0N`J,[)c2(|km=
解析:没错,就是一个分号。它是一个空语句,空语句本身并不执行任何任务,但有时还是很有用的。`rWjZ
L?<oX `n57x0&gVOEejbQp#C
比如下边代码,将变量 i 的值加 1;但对于换行符,则不进行任何操作。

if (i == '\n')
    ;
else
{
    i = i + 1;
}

什么是程序块(语句块)?

答:当你用一对大括号将若干语句包裹起来,那么这些语句就构成了一个程序块,在编译系统看来,它们是一个整体。

请问下边代码是否有错,如有错误,请指出来?

#include <stdio.h>

int main()
{
        int i;

        printf("请输入成绩:");
        scanf("%d", &i);

        switch (i)
        {
                case i >= 90: printf("A\n"); break;
                case i >= 80 && i < 90: printf("B\n"); break;
                case i >= 70 && i < 80: printf("C\n"); break;
                case i >= 60 && i < 70: printf("D\n"); break;
                case i < 60: printf("E\n"); break;
                default: printf("请输入合法的数字!\n"); break;
        }

        return 0;
}

答:有错!这段代码错在 case 仅是一个标签,后边跟随的应该是一个整型常量。switch 后边小括号内的表达式计算的值如果跟该整型常量匹配,则跳转到该 case 执行相应的语句或程序块。-AkS9
PJFC_*k2V-q+%h8|Od.H^ ?
C 语言的 switch 语句没有任何简便的方法指定某个范围的值,除非你将该范围内的每个值都以单独的 case 标签给出。如果这个范围非常大,建议改用一系列 if-else if-else 语句或嵌套的 if 语句代替。

请问下边代码是否有错,如有错误,请指出来?

#include <stdio.h>

int main()
{
        float i;

        printf("请输入一个小数:");
        scanf("%f", &i);

        switch (i)
        {
                case 1.2: printf("1.2\n"); break;
                case 2.2: printf("2.2\n"); break;
                case 3.2: printf("3.2\n"); break;
                case 4.2: printf("4.2\n"); break;
                case 5.2: printf("5.2\n"); break;
        }

        return 0;
}

答:有错!case 后边应该只能跟整型常量或常量表达式,不能是浮点型常量。没错,switch 在某种情况下确实挺“无能”,所以其他很多由 C 发展来的语言都放弃了 switch 语句。不过 switch 也有它的妙用,参考其它题目。

请问下边代码是否有错,如有错误,请指出来?

#include <stdio.h>

int main()
{
        int i;

        printf("请输入一个整数:");
        scanf("%d", &i);

        switch (i)
        {
                case 1 + 1: printf("1 + 1\n"); break;
                case 8 / 4: printf("2 / 1\n"); break;
                case 1 + 2: printf("1 + 2\n"); break;
                case 1 - 2: printf("1 - 2\n"); break;
                case 1 - 3: printf("1 - 3\n"); break;
        }

        return 0;
}

答:有错!第一个 case 后边整型常量值计算后结果是 2,第二个 case 后边也是 2,任意两个 case 跟随的整型常量值不能相同(否则编译系统无法判断你要往哪儿跳转)。

 使用 if 语句,对数组进行越界检查,让代码只允许访问数组内的数据。

B版

因为字符串 "FishC" 依次对应的是 ch[0], ch[1], ch[2], ch[3], ch[4], ch[5](注:ch[5] 是表示字符串结束的 '\0')。这里用户试图访问 ch[6],事实上是访问了字符数组意外的内存数据了,所以得到的便是一个“乱码”。{}713v<5)q
We&IS(Rm43AM5xJXgb76$zH`FN Q
会发生这样的现象,是因为 C 语言并不会对数组做越界检查,这在实际开发中是非常危险的(很容易被黑客利用)。

写一个最简单的计算器,支持四则运算。4@n5I$F
_~p-rhj'On?bN:zc+fq"7w.,V<LK
程序实现细节请看下图:

-A. scanf 函数要注意的是双引号里边的内容是指定接收的格式化占位符,如果在里边写上空格,那么表示该位置将读取并忽略连续的空白字符(空格、回车和制表符),所以你这么输入也可以正常执行:;-8Eol|#Y

 


.?7Zb*+l}xQW2R~;w"8uo_
关于 scanf 的具体用法,请参考:>VXe
ob-Pd2e*`B+F],E5r9G^k#
B. 由于减法运算实质上就是特殊的加法运算(第二个操作数符号取反),所以在处理 case '-' 的时候,我们只是将第二个操作数符号取反,然后让程序执行 case '+'。TM?:1
ME=y-?,s3:UpX~SlAxNgb}ju
C. 对于故意不加 break 的 case,建议写上注释“no break”。因为一旦程序出现 bug,没有 break 的 case 很容易让调试的程序员觉得这是一个错误,从而“修正”了这个问题。这样他不仅错过了真正的 bug,而且还将引入新的 bug。|qS`[+
XjpE[xB.4]k V,Cae3~Dd#0$"fY%NW
Ql3a):8@^+,G6ITMyfHYr
1. 假设你正在为你的智能小车写代码,现在需要实现小车的前进、后退,左转、右转的功能。Q25;*bI6l
Mcg)!XI}y93BT<iUxpRAFdvP:seQ
 


)^FGe|Aucf6r$4!,8wQ2O:k
请根据提示写代码:版权属于:bbs.fishc.com
1^J'V_-Xec;U%3r u~ISB0.
A. 如图所示,智能小车是两轮驱动,每个轮子上均有电机,每个电机可以向前或向后转动。6&<2M,tdJg
,9!U'EGZkuD6fNX)*_ejB4i
B. 控制左右两个电机的数字引脚号分别是 8、9、10、11。其中 8 和 9 控制左电机的前进和后退。10 和 11 控制右电机的前进和后退。]Pq4*
CxH&EDZo[+ XyQ<IfG`?"wq>8
C. 通过调用 digitalWrite() 函数为指定的数字引脚赋值高电平(HIGH)或低电平(LOW)来实现电机的运行或停止。比如 digitalWrite(8, HIGH); digitalWrite(9, LOW); 表示左电机前进。反之,digitalWrite(8, LOW); digitalWrite(9, HIGH); 表示左电机后退。Lstv-
UP$KmdJ`<(1%]k[ZQApc +h
D. 程序使用一个字符变量 ch 来接收指令,'g' 表示前进;'b' 表示后退;'r' 表示右转;'l' 表示左转。";f'(j^B
p[jY#7|l%yAG&~i@>{r3:^N
E. 要让小车左转,那么就是左轮不动,右轮前进。-Zc}AzR5
p0'VPq^Em8YAKe>5uS s
F. 如果没有接收到控制信号,则什么事儿都不要做!

}U3c(C:gl0
z3W}ev84R7A9c%"I2BK[

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

倦504

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值