C语言错题之 10

news/2024/11/16 7:22:11/

前言

不知不觉这个专栏都更到第十篇文章了,真快啊,继续加油。
今天给大家带来的是六道选择题,明天会出五道我最近在做题的时候遇到的有意思的编程题。
话不多说,直接看今天的题。

1.

题干:

下面代码的运行结果是:

#include <stdio.h>
int main()
{int a, b, c;a = 5;c = ++a;b = ++c, c++, ++a, a++;b += a++ + c;printf("a = %d b = %d c = %d\n:", a, b, c);return 0;
}

答案:

a = 9 b = 23 c = 8

解析:

#include <stdio.h>
int main()
{int a, b, c;a = 5;c = ++a;// ++a:加给a+1,结果为6,用加完之后的结果给c赋值,因此:a = 6  c = 6b = ++c, c++, ++a, a++;// 逗号表达式的优先级,最低,这里先算b=++c, b得到的是++c后的结果,b是7// b=++c 和后边的构成逗号表达式,依次从左向右计算的。// 表达式结束时,c++和,++a,a++会给a+2,给c加1,此时c:8,a:8,b:7b += a++ + c; // a先和c加,结果为16,在加上b的值7,比的结果为23,最后给a加1,a的值为9printf("a = %d b = %d c = %d\n:", a, b, c); // a:9, b:23, c:8return 0;
}

知识点:

这道题涉及到两个知识点:
++运算符和逗号表达式
++运算符:分为前置++和后置++,
前置++:先加1,后使用,即先使用变量中内容,然后给结果加1
后置++:先使用变量中内容,整个表达式结束时,给变量加1
逗号表达式,取最后一个表达式的值

2.

题干:

下面代码的输出结果是:

#include <stdio.h>
int i;
int main()
{i--;if (i > sizeof(i)){printf(">\n");}else{printf("<\n");}return 0; 
}

A>
B<
C不输出
D程序有问题

答案:

A

解析:

C语言中,0为假,非0即为真。
全局变量,没有给初始值时,编译其会默认将其初始化为0。
i的初始值为0,i–结果-1,i为整形,sizeof(i)求i类型大小是4,按照此分析来看,结果应该选择B,但是sizeof的返回值类型实际为无符号整形,因此编译器会自动将左侧i自动转换为无符号整形的数据,-1对应的无符号整形是一个非常大的数字,超过4或者8

3.

题干:

下面代码的运行结果是:

#include <stdio.h>
int main()
{int arr[] = {1,2,3,4,5};short *p = (short*)arr;int i = 0;for(i=0; i<4; i++){*(p+i) = 0;}for(i=0; i<5; i++){printf("%d ", arr[i]);}return 0;
}

答案:

0 0 3 4 5

解析:


```c
arr数组在内存中的存储格式为:0x00ECFBF4:  01 00 00 000x00ECFBF8:  02 00 00 000x00ECFBFC:  03 00 00 000x00ECFC00:  04 00 00 000x00ECFC04:  05 00 00 00指针p的类型为short*类型的,因此p每次只能所有两个字节,for循环对数组中内容进行修改时,一次访问的是:arr[0]的低两个字节,arr[0]的高两个字节,arr[1]的低两个字节,arr[1]的高两个字节,故改变之后,数组中内容如下:0x00ECFBF4:  00 00 00 000x00ECFBF8:  00 00 00 000x00ECFBFC:  03 00 00 000x00ECFC00:  04 00 00 000x00ECFC04:  05 00 00 00故最后打印:0   0   3   4   5

4.

题干:

下面代码描述正确的是:

struct student
{int num;char name[32];float score;
}stu;

A、stuct是结构体类型的关键字
B、struct student是用户定义的结构体类型
C、num、score都是结构体成员名
D、stu是用户定义的结构体类型名

答案:

D

解析:

stu是定义的结构体类型变量,不是名称。
如果想要让stu为结构体类型名称时,必须在结构体定义时添加 typedef关键字

5.

题干:

程序的执行结果是:

int main()
{unsigned char a = 200;unsigned char b = 100;unsigned char c = 0;c = a + b;printf(%d %d”, a+b,c);return 0;
}

答案:

300 44

解析:

printf在传入参数的时候如果是整形会默认传入四字节,所以a+b的结果是用一个四字节的整数接收的,不会越界。而c已经在c = a + b这一步中丢弃了最高位的1,所以只能是300-256得到的44了。

补充说明

由于printf是可变参数的函数,所以后面参数的类型是未知的,所以无论传入的是什么类型,printf只会根据类型的不同将用两种不同的长度存储。其中8字节的只有long long、float和double(注意float会处理成double再传入),其他类型都是4字节。所以虽然a + b的类型是char,实际接收时还是用一个四字节整数接收的。另外,读取时,%lld、%llx等整型方式和%f、%lf等浮点型方式读8字节,其他读4字节。

6.

题干:

unsigned int a= 0x1234;
unsigned char b = *(unsigned char *)&a;

在32位大端模式处理器上变量b等于( )

答案:

0x00

解析:

大端序中,低地址到高地址的四字节十六进制排列分别为00 00 12 34,其中第一个字节的内容为00

结语

今天的六道题到这里就结束了,我们下次见。


http://www.ppmy.cn/news/1022697.html

相关文章

“可一学院”区块链学习平台正式启动,助力BSV技术普及与传播

2023年8月8日&#xff0c;上海可一澈科技有限公司&#xff08;以下简称“可一科技”&#xff09; 正式发布区块链学习平台“可一学院”。“可一学院” 立足于BSV区块链技术本源&#xff0c;汇集了多层次的专业课程和学习资源&#xff0c;致力于打造一个适合各类人群使用的一站式…

bye 我的博客网站

Bye&#x1f64b;&#x1f64b;&#x1f64b;&#xff0c;我的博客网站。在我的服务器上运行了9个月之久的博客网站要和大家Bye了。 背景 可能很多人不知道我的这个博客网站的存在&#xff0c;好吧&#xff0c;最后一次展示它了&#xff0c;博客网站地址在这里&#xff0c;它…

QT的信号槽的四种写法和五种链接方式

目录 四种信号槽写法&#xff1a; 五种连接方式&#xff1a; 实例&#xff1a; 常见错误及改正&#xff1a; 错误1: 未连接信号与槽 错误2: 信号和槽参数不匹配 错误3: 未使用Q_OBJECT宏 错误4: 跨线程连接未处理 在Qt中&#xff0c;信号&#xff08;Signal&#xff09…

IDEA每次启动indexing解决办法

每次启动indexing很浪费时间。 解决办法 setting中搜索index 设置如下&#xff1a; 这样设置以后&#xff0c;启动速度明显快多了。 参考 https://blog.csdn.net/qq_45162113/article/details/121128721

matplotlib 笔记 注释annotate

在图中的特定位置添加文本注释、箭头和连接线&#xff0c;以便更清晰地解释图形中的数据或信息 主要参数 text文本内容xy箭头指向的目标点的坐标xytext注释文本的坐标arrowprops 一个字典&#xff0c;指定注释箭头的属性&#xff0c;如颜色、箭头样式等 没有arrowprops的时候…

赛码网-01串的魔法(dp) 100%AC代码(C)

———————————————————————————————————— ⏩ 大家好哇&#xff01;我是小光&#xff0c;嵌入式爱好者&#xff0c;一个想要成为系统架构师的大三学生。 ⏩最近在准备秋招&#xff0c;一直在练习编程。 ⏩本篇文章对赛码网的01串的魔法 题目做…

pc端网页用vue并且实现响应式 vue+bootstrap-vue

1、hbuiler内新建vue项目 在项目文件夹下用npm加载依赖&#xff08;或者用hbuilder内打开命令&#xff09; 2、配置路由 src内新建router文件夹&#xff0c;router内新建index.js index.js内配置重定向到首页 main.js内配置路由 import router from /router/index.js new…

HTML+CSS 改进前端简易响应式登录界面

day5 改进上次的项目 HTMLCSS前端 动态响应用户登录界面_一只名叫Me的猫的博客-CSDN博客 emmet自动创建html模板 在vscode中&#xff0c;空白html文件打入一个感叹号&#xff0c;可以自动创建html模板&#xff0c;避免手搓&#xff08;悲&#xff09;。 上次就是因为手搓导致漏…