更新一道易错题

这段代码展示了C语言中嵌套switch语句的用法。当x为奇数时,内部switch会执行,但由于缺少break,second和hello都会打印;当x为偶数时,直接打印third。注意,忘记break会导致多个case块被执行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

写出以下代码结果

#include <stdio.h>
int main() {
	int x = 3;
	int y = 3;
	switch (x % 2) {
	case 1:
		switch (y)
		{
		case 0:
			printf("first");
		case 1:
			printf("second");
			break;
		default: printf("hello");
		}
	case 2:
		printf("third");
	}
	return 0;
}

 本道题主要考察switch语句的用法,最关键的break一定不要忘记,这是最容易遗漏的点;

再补充一点就是switch后面为整形表达式,case后为整形常量表达式

### C语言笔试中的常见易错目及其原因解析 #### 目一:统计1到100之间数字中出现“9”的次数 此主要考察`for`循环以及取模运算符(`%`)和整除运算符(`/`)的应用。程序通过分别判断个位数和十位数是否为9来实现计数功能。 ```c #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> int main() { int i = 0; int m = 0; // 记录个位上出现9的次数 int n = 0; // 记录十位上出现9的次数 for (i = 1; i <= 100; i++) { if ((i % 10) == 9) { // 判断个位是否为9 m++; } if ((i / 10) == 9) { // 判断十位是否为9 n++; } } printf("%d", m + n); return 0; } ``` 需要注意的是,在条件表达式`(i % 10)/9==1`中,如果将等于号写作赋值号`=`, 将会引发语法错误[^1]。 --- #### 目二:如何在屏幕上打印特殊字符`\` 和 `"` 这是一道基础,重点在于理解转义字符的概念。为了正确显示反斜杠 `\` 或双引号 `"`, 必须使用相应的转义序列。 ```c #include <stdio.h> int main() { printf("\""); // 打印双引号 printf("\\"); // 打印单反斜杠 return 0; } ``` 上述代码利用了C语言中的转义字符机制,其中`\"`表示输出一个双引号而`\\`则用于输出单个反斜杠[^2]。 --- #### 目三:关于数组与指针的操作误区分析 下面这段代码展示了几个有关于数组大小计算方面的潜在误解: ```c #include<stdio.h> int main(){ int a[] = {1,2,3,4}; printf("%d\n", sizeof(a)); // 整个数组所占字节数 printf("%d\n", sizeof(a + 0)); // 指向第一个元素地址变量占用空间大小 printf("%d\n", sizeof(*a)); // 数组首项数据类型的尺寸 printf("%d\n", sizeof(a + 1)); // 地址偏移后的指针类型大小不变 printf("%d\n", sizeof(a[1])); // 单独某个数组成员的数据宽度 printf("%d\n", sizeof(&a)); // 数组名加上取地址操作得到整个结构体大小 printf("%d\n", sizeof(*&a)); // 取消引用后再求其实际存储单元长度即同sizeof(a) printf("%d\n", sizeof(&a + 1)); // 对数组整体加一时编译器报错或者行为未定义 printf("%d\n", sizeof(&a[0])); // 获取首个位置具体数值占据内存区域范围 printf("%d\n", sizeof(&a[0] + 1)); // 类似指向下一个连续对象起始处指针量度 return 0; } ``` 这里存在多个陷阱点,比如混淆了数组本身与其衰减成为指针之后的区别;还有就是尝试获取超出合法界限之外的信息可能导致不可预测的结果等问都需要引起注意[^3]. --- #### 目四:字符串大写字母转换成小写形式的方法探讨 该实例演示了一种基本方法用来把输入串里的英文字母由大写改为对应的小写版本: ```c #include <stdio.h> #include <string.h> int main() { int i, len; char s[101]; gets(s); // 接收用户录入的一行文本(不推荐getchar()) len = strlen(s); for(i = 0;i<len;i++){ if((s[i]>='A')&&(s[i]<='Z')){ s[i]=s[i]+32;/*依据ASCII编码表规律得知两者差值正好为此固定常数值*/ } } puts(s); return 0; } ``` 在此过程中可能会遇到的主要问是对于边界情况处理不当或者是不了解具体的ASCII码映射关系从而造成逻辑上的偏差[^4]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

sjmblog

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

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

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

打赏作者

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

抵扣说明:

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

余额充值