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语言易错题集 第四部相关推荐

  1. C语言易错题集 第二部

    C语言易错题集后续 一.共用体相关(union) 二.do,while相关 三.char溢出相关 四.printf()相关 五.++相关 六. for语句相关 七.calloc()相关 八.defin ...

  2. C语言易错题集 第三部

    目录 一.C语言程序exe相关 二.sizeof和strlen相关 三.小端存储相关 四.break和continue相关 五.函数声明相关 六.递归相关 七.预处理相关 八.C语言程序的最小单元相关 ...

  3. C语言易错题集 第一部

    目录 一.优先级相关 二.指针相关 三.标识符相关 四.指针相关 五.指针相关 六.指针相关 七.字符串相关 八.i++相关 九.传递相关 十.#include相关 十一.字符串长度相关 十二.复杂表 ...

  4. c语言解三元一次方程组_七年级下学期《8.3 一元一次不等式组》2020年高频易错题集...

    一.选择题(共10小题) 二.填空题(共5小题) 三.解答题(共5小题) 七年级下学期<8.5 一元一次不等式组>2020年高频易错题集 参考答案与试题解析 一.选择题(共10小题) [点 ...

  5. 并联串联混合的电压和电流_中考物理满分之路:《电阻的串联和并联》2020年高频易错题集...

    <串并联知识梳理> 一.识别串并联电路 1.定义法:用电器逐个顺次连接的电路是串联电路;用电器并列连接的电路是并联电路. 2.路径法:从电源的正极出发,沿电流的路径一直追寻到电源的负极,途 ...

  6. MOOC《程序设计入门——C语言》错题集

    章节 第二周 1变量-小测验 1.以下哪些是有效的变量名? 2.给定: 第三周 1判断-小测试 1.以下语句是否可以通过编译: 第六周 第一次单元测验 1.下列程序段输出结果为: 2.对于以下代码: ...

  7. Java错题集(十四)

    目录 以下代码段执行后的输出结果为 java语言的下面几种数组复制方法中,哪个效率最高? 在 myjsp.jsp 中,关于下面的代码说法错误的是: (  ) 下面代码的输出是什么? 关于ThreadL ...

  8. C语言易错题--求最大公约数与最小公倍数之和(辗转相除法)

    题目来源:牛客网编程入门训练--BC115  小乐乐与欧几里得 输入描述: 每组输入包含两个正整数n和m.(1 ≤ n ≤ 109,1 ≤ m ≤ 109) 输出描述: 对于每组输入,输出一个正整数, ...

  9. C语言易错题--将一个整数转换为六进制打印

    题目来源:牛客网编程入门训练--BC111  小乐乐与进制转换 输入描述: 输入一个正整数n  (1 ≤ n ≤ 109) 输出描述: 输出一行,为正整数n表示为六进制的结果 解题思路:由十进制数字打 ...

最新文章

  1. [转]SQL 约束讲解
  2. 加法神经网络--AdderNet: DoWe Really Need Multiplications in Deep Learning?
  3. python的用途-Python运算符的作用与意义
  4. java 大整数编程_Java编程--RSA算法中的大整数运算
  5. Appirater -- app中提示用户为app评价的提示框
  6. maven 插件之maven-enforcer-plugin的使用
  7. 完整部署CentOS7.2+OpenStack+kvm 云平台环境(3)--为虚拟机指定固定ip
  8. Use Data Caching Techniques to Boost Performance and Ensure Synchronization(转)
  9. i9507 android8.1,三星I9507V官方原版固件rom系统刷机包下载
  10. 阅读PDF乱码问题简便解决方法教程
  11. 数字信号处理--FFT与蝶形算法--学习笔记
  12. Android Studio+SDK+tools下载、安装、配置及应用程序运行(详细,亲测)
  13. win10+centos8双系统
  14. es中filtered和filter的区别
  15. .net core 3.1 WebApi项目/Swagger支持二级目录
  16. linux临时配置mac地址,Linux获取网卡型号、mac地址、修改IP地址的几种方法
  17. 7 个支持敏捷的开源项目管理工具,更好地管理项目
  18. 使用java对文件夹中文件后缀进行修改
  19. 日期函数之Dateadd、Datediff
  20. typescript Type 'NodeListOfany' must have a '[Symbol.iterator]()' method that returns an iterato

热门文章

  1. 递归算法之排列组合-求一个集合S的m个元素的组合和所有可能的组合情况
  2. laravel5.8笔记一:安装与服务器环境配置
  3. 深度剖析云计算背后采用的技术(转载)
  4. IDEA+Hadoop运行TriangleCount程序
  5. (chap9 基于HTTP的功能追加协议) HTTP瓶颈
  6. 关于解决:ModuleNotFoundError: No module named ‘XXX‘的报错问题
  7. 06-GICv3_v4_overview
  8. travis-ci中的checkpatch工具使用
  9. SQL注入手工注入常用的语句
  10. linux dev_info,Linux命令集-xfs_info