C语言易错题集 第四部
C语言易错题集 第四部
- 一、位操作相关
- 二、switch()相关
- 三、输出相关
- 四、实数相关
- 五、指针&a相关
- 六、指针访问数组元素相关
- 七、转义字符相关
- 八、类型提升问题
- 九、是不是正确的浮点数相关
- 十、define相关
- 十一、隐式转换相关
- 十二、while相关
- 十三、++相关
- 十四、strlen()相关
- 十五、宏定义相关
一、位操作相关
执行"int x=1;int y=~x;"语句后,y的值为?A 1
B 0
C -1
D -2
答案: Dx = 00000001
~x = 11111110,~x为负数,负数在计算机中用补码表示,所以符号位不变,取反加1
y = 100000010
二、switch()相关
若以下选项中的变量a,b,y均以正确定义并赋值,则语法正确的switch语句是?
A
switch(a*a+b*b)
{ default:break;case 3 : y=a+b; break;case 2 : y=a-b; break;
}
B
switch(a+b)
{ case 1 : case 3 : y=a+b;break;case 0 : case 4 : y=a-b;}
C
switch(a+9)
{ case a : y=a-b;case b : y=a+b;
}
D
switch a*b
{ case 10 : y=a+b;default : y=a-b;}
答案 : ABC case a: a是变量 case b: b是变量
三、输出相关
以下程序的输出结果是( )。
main()
{ char x=040;printf("%o\n",x<<1);
}A 100
B 80
C 64
D 32
答案: A
040 以零开头 固是8进制为32 32<<1 左移1位 相当于扩大1倍 为 64 64转化为8进制为 100
四、实数相关
以下选项中合法的实型常量是?
A 0
B 3.13e-2.1
C .914
D 2.0*10
答案: C
A选项为整型数据。B选项中e后面必须为整数。D选项是表达式,不是常量,所以选择C。
五、指针&a相关
下面代码会输出什么()
int main(int argc, char **argv)
{int a[4] = {1, 2, 3, 4};int *ptr = (int *)(&a + 1);printf("%d", *(ptr - 1));
}
A 1
B 2
C 3
D 4
答案: D
这边主要考察的是数组指针和数组首地址的问题。
&a是数组指针,a是数组首地址。
而指针的+1,增加的是1个指针类型的长度。比如&a是数组指针,(&a + 1)增加的是1数组的长度。
所以题目中第四步的ptr指向的是a[4]的位置。
而(ptr - 1)减少的是1个数据元素的长度。第五步ptr指向的是a[3],页就是4a 与 &a 的值是一样的,但意思不一样,a是数组首元素的首地址,也就是a[0]的首地址, &a是数组的首地址。 a+1是数组下一元素的首地址,即a[1]的首地址, 所以输出2 &a+1是下一个数组的首地址,
六、指针访问数组元素相关
char s[3][4];
则下列对数组元素s[i][j]的各种引用形式中,正确的是哪些?
A * (s+i)[j]
B * (&s[0][0]+4 * i+j)
C * ((s+i)+j)
D * ( * (s+i)[j])
答案: B&s[0][0]得到的是首元素的地址,
&s[0][0]+4 * i得到的是i行首元素的地址
&s[0][0]+4 * i+j得到的是s[i][j]的地址&s[i][j]
* (&s[0][0]+4 * i+j)得到的就是s[i][j]的值。这道题的另外一种写法就是*(*(s+i)+j)
A *(a+i)[j],错误的原因是(a+i)结束后下一步运算是(a+i)[j],
而不是*(a+i),正确写法是(*(a+i))[j]
七、转义字符相关
语句printf(“a\bre\’hi\’y\\\bou\n”);的输出结果是()。A a\bre\’hi\'y\\\bou
B a\bre\’hi\’y\bou
C re’hi’you
D abre’hi’y\bou
答案: C首先要明确该字符串中包含的转义字符,”a \b re \’ hi \' y \\ \b ou \n”中的转义字符共有6个,其中’\b’是退格符,输出时将光标往左边回退一个位置,‘\’’为单引号字符,’\\’为\字符,’\n’为回车换行符。所以显示的结果为C。
八、类型提升问题
以下代码执行后,val的值是___:unsigned long val = 0;
char a = 0x48;
char b = 0x52;
val = b << 8 | a;A 20992
B 21064
C 72
D 0
答案: B
九、是不是正确的浮点数相关
下面四个选项中,均是不合法的浮点数的选项是().160. 0.12 e3
123 2e4.2 .e5
-.18 123e4 0.0
-e3 .234 1e3
答案: B
A e3没有尾数 其他两个都是浮点数
B 123是整数 2e4.2 阶码不是整数 .e5没有尾数
C 都是浮点数
D -e3没有尾数 其他都都是浮点数
十、define相关
以下程序的输出结果是:
#define M(x,y,z) x*y+z
main()
{int a=1, b=2, c=3;printf("%d\n",M(a+b,b+c,c+a));
}
A 19
B 17
C 15
D 12
答案: D
分析:#define的边际效应,直接展开,变成a+b*b+c+c+a=12
十一、隐式转换相关
下列代码的输出结果是
int i = -1;
unsigned j = 1;
if (j > i)printf(" (j>i)成立\n");
elseprintf(" (j>i)不成立\n");if (i < j)printf(" (i<j)成立\n");
elseprintf(" (i<j)不成立\n");
A (j>i)成立,(i<j)成立
B (j>i)不成立,(i<j)成立
C (j>i)成立,(i<j)不成立
D (j>i)不成立,(i<j)不成立
答案: D int隐式的要转换为unsigned int 1000 0001 反码; 1111 1110
补码:1111 1111 大于 j
十二、while相关
若有以下程序
#include<stdio.h>
main( )
{ int a=-2,b=0;while(a++) ++b;printf("%d,%d\n",a,b);
}
则程序的输出结果是?A 1,1
B 1,2
C 2,1
D 2,2
答案: B
第一次while判断条件中a++,先用后加,为-2不为0条件为真,执行a的自加与++b操作,
a的值变为-1,b的值变为1。第二次while判断后,a的值变为0,b的值变为2。
第三次while判断条件为假,但是仍要执行自加操作,即值为1,跳出循环。打印1和2。
十三、++相关
int a=4,则对于表达式++(a++)的结果说法正确的是()A 结果为5
B 结果为6
C 结果为7
D 以上不都是
答案: D
a++的结果是4,然后进行++4是不对的,++运算只是针对于变量的,不能对常量来进行++运算。
十四、strlen()相关
设语句定义char a[ 80 ]= " 0123\0789 "; ,则sizeof(a)和strlen(a)的值分别为()。
A 80和9
B 80和7
C 80和5
D 80和6
答案: A
空格 0、1、2、3、\07、8、9 空格
十五、宏定义相关
#include<stdio.h>
#define Mul(x,y) ++x*++y
void main()
{int a = 1;
int b = 2;
int c = 3;printf(“%d”,Mul(a+b,b+c));
}
程序最后输出什么?( )
A 14
B 24
C 48
D 18
答案:A
Mul(a+b,b+c)经过宏替换变成++a+b*++b+c,需要注意宏替换的原则,是不会凭空加括号的。
另外++优先级大于*,因此会先++a 和++b,然后a=2,b=3进行a+b*b+c=2+3*3+3=14
C语言易错题集 第四部相关推荐
- C语言易错题集 第二部
C语言易错题集后续 一.共用体相关(union) 二.do,while相关 三.char溢出相关 四.printf()相关 五.++相关 六. for语句相关 七.calloc()相关 八.defin ...
- C语言易错题集 第三部
目录 一.C语言程序exe相关 二.sizeof和strlen相关 三.小端存储相关 四.break和continue相关 五.函数声明相关 六.递归相关 七.预处理相关 八.C语言程序的最小单元相关 ...
- C语言易错题集 第一部
目录 一.优先级相关 二.指针相关 三.标识符相关 四.指针相关 五.指针相关 六.指针相关 七.字符串相关 八.i++相关 九.传递相关 十.#include相关 十一.字符串长度相关 十二.复杂表 ...
- c语言解三元一次方程组_七年级下学期《8.3 一元一次不等式组》2020年高频易错题集...
一.选择题(共10小题) 二.填空题(共5小题) 三.解答题(共5小题) 七年级下学期<8.5 一元一次不等式组>2020年高频易错题集 参考答案与试题解析 一.选择题(共10小题) [点 ...
- 并联串联混合的电压和电流_中考物理满分之路:《电阻的串联和并联》2020年高频易错题集...
<串并联知识梳理> 一.识别串并联电路 1.定义法:用电器逐个顺次连接的电路是串联电路;用电器并列连接的电路是并联电路. 2.路径法:从电源的正极出发,沿电流的路径一直追寻到电源的负极,途 ...
- MOOC《程序设计入门——C语言》错题集
章节 第二周 1变量-小测验 1.以下哪些是有效的变量名? 2.给定: 第三周 1判断-小测试 1.以下语句是否可以通过编译: 第六周 第一次单元测验 1.下列程序段输出结果为: 2.对于以下代码: ...
- Java错题集(十四)
目录 以下代码段执行后的输出结果为 java语言的下面几种数组复制方法中,哪个效率最高? 在 myjsp.jsp 中,关于下面的代码说法错误的是: ( ) 下面代码的输出是什么? 关于ThreadL ...
- C语言易错题--求最大公约数与最小公倍数之和(辗转相除法)
题目来源:牛客网编程入门训练--BC115 小乐乐与欧几里得 输入描述: 每组输入包含两个正整数n和m.(1 ≤ n ≤ 109,1 ≤ m ≤ 109) 输出描述: 对于每组输入,输出一个正整数, ...
- C语言易错题--将一个整数转换为六进制打印
题目来源:牛客网编程入门训练--BC111 小乐乐与进制转换 输入描述: 输入一个正整数n (1 ≤ n ≤ 109) 输出描述: 输出一行,为正整数n表示为六进制的结果 解题思路:由十进制数字打 ...
最新文章
- [转]SQL 约束讲解
- 加法神经网络--AdderNet: DoWe Really Need Multiplications in Deep Learning?
- python的用途-Python运算符的作用与意义
- java 大整数编程_Java编程--RSA算法中的大整数运算
- Appirater -- app中提示用户为app评价的提示框
- maven 插件之maven-enforcer-plugin的使用
- 完整部署CentOS7.2+OpenStack+kvm 云平台环境(3)--为虚拟机指定固定ip
- Use Data Caching Techniques to Boost Performance and Ensure Synchronization(转)
- i9507 android8.1,三星I9507V官方原版固件rom系统刷机包下载
- 阅读PDF乱码问题简便解决方法教程
- 数字信号处理--FFT与蝶形算法--学习笔记
- Android Studio+SDK+tools下载、安装、配置及应用程序运行(详细,亲测)
- win10+centos8双系统
- es中filtered和filter的区别
- .net core 3.1 WebApi项目/Swagger支持二级目录
- linux临时配置mac地址,Linux获取网卡型号、mac地址、修改IP地址的几种方法
- 7 个支持敏捷的开源项目管理工具,更好地管理项目
- 使用java对文件夹中文件后缀进行修改
- 日期函数之Dateadd、Datediff
- typescript Type 'NodeListOfany' must have a '[Symbol.iterator]()' method that returns an iterato
热门文章
- 递归算法之排列组合-求一个集合S的m个元素的组合和所有可能的组合情况
- laravel5.8笔记一:安装与服务器环境配置
- 深度剖析云计算背后采用的技术(转载)
- IDEA+Hadoop运行TriangleCount程序
- (chap9 基于HTTP的功能追加协议) HTTP瓶颈
- 关于解决:ModuleNotFoundError: No module named ‘XXX‘的报错问题
- 06-GICv3_v4_overview
- travis-ci中的checkpatch工具使用
- SQL注入手工注入常用的语句
- linux dev_info,Linux命令集-xfs_info