当前位置: 首页 > news >正文

c语言每日一练(14)【加强版】

前言:
每日一练系列,每一期都包含5道选择题,2道编程题,博主会尽可能详细地进行讲解,令初学者也能听的清晰。博主有时会将一些难题综合成每日一练加强版,加强版是特殊的,它仅包含5道选择题,但这5道选择题都是博主精挑细选的,希望大家能够认真看看,相信一定能有所收获。每日一练系列会持续更新,上学期间将看学业情况更新。

有学习或者生活方面的问题都可直接私信博主询问,博主看到会回复,太久没回复就扣个1提醒下博主

五道易错选择题: 

1、以下正确的程序段是()
A、char str[20];scanf("%s",&str);

B、char *p;scanf("%s",p);

C、char str[20];scanf("%s",&str[2]);

D、char str[20],*p=str;scanf("%s",p[2]);

解析:选项A,&str得到的是整个数组的地址,也就是说它的权重是整个数组,那么&str+1就会跳过一整个数组进行操作,所以你想使用scanf("%s",&str);来进行字符串的修改会越界,A错误。扩展:有的编译器上面的scanf实现是通过强转成字符然后使用字符的特殊性(一个字符占一个字节的空间,也就是说字符型指针的权重是一个字节)挨个将不同类型的值进行修改实现scanf的。强转成字符型指针时,它的权重就不再重要,所以使用这类scanf函数A选项是没问题的,但这不具备普遍性,所以A可以认为是错误的。

选项B,空间没开辟好,会使用到野指针,有安全隐患,B错误。选项C,&str[2]可写作&*(str+2),&和*号抵消,来到了偏移量为2的地址,也就是说,它可以正常输入17个字符,形成一个长度为18的字符串,C没有犯语法错误,题目并没有要求程序实现的结果,所以C是正确的。

选项D,p是首地址,p[2]是首地址偏移量为2的地址所指向的字符,也就是说p[2]不是地址,它是字符,不符合scanf的使用要求,D错误。综上所述,答案选C

 2、设已有定义:char*st="how are you";下列程序段中正确的是()

A、char a[11],*p;strcpy(p=a+1,&st[4]);
B、char a[11];strcpy(++a,st);
C、char a[11];strcpy(a, st);
D、char a[],*p;strcpy(p=&a[1],st+2):

解析:st是一个数组指针,存放的是字符串how are you\0的首地址,由于是字符串的形式所以它的最后有个隐藏的\0,数数就可以知道这个字符串长3+1+3+1+3+1=12。

先看A选项,p=a+1,也就是p为数组首地址的下一个地址,因此p最多拷贝10个字符,而&st[4]可以写作&(*(st+4)),*(st+4)就是how 和 are 中间的空格,再&就是得到这个空格的地址,从这个位置往后数,显然小于10,故成功拷贝,A正确。

B选项,++a,a是地址啊,你怎么能对地址修改呢,B大错特错。C选项,12个字符拷贝进只能存放11个字符的数组,拷贝失败,C错误。

D选项,char a[],定义都定义错误了,想要不写字符数组长度的前提是,你得对它初始化,比方说char a[]="hello world";D选项定义都定义不明白,D错误。综上所述,答案选A

3、若有说明;int*p,m=5,n;以下正确的程序段的是()

A、p=&n;scanf("%d",&p);
B、p=&n;scanf("%d",*p);                                                                                                                  C、scanf("%d"&n);*p=n;
D、p=&n;*p=m;

解析:先分析代码,int*p,m=5,n;分别定义了一个指针变量p和两个整型变量m,n,其中m被初始化为5。

接着先看A选项,p=&n,也就是说p现在储存的是n的地址,然后再scanf("%d",&p);&p相当于对n的地址再取地址,因此scanf操作的是n的地址,它会将n的地址进行修改,但这显然错误,因为地址是不可被修改的,故A错误。

B选项,scanf("%d",*p);p是n的地址,*p即是n,你scanf("%d",n);没有取地址,无法进行值的修改,B错误。C选项,scanf("%d",&n);这一步没有问题,简单的修改n变量的值,*p=n就很有问题,因为你p并没有初始化为空指针,所以此时p是一个野指针,你对野指针解引用并赋值会造成不可预知的后果,所以C错误。

D选项,先是令p=&n;也就是说,p现在存有n的地址,你再解引用p对p地址所指向的值修改就相当于对n进行修改,并没有语法上的错误,D正确。综上所述,答案选D 

4、以下程序段中,输出信息不能正确反映变量大小关系的是()
A、

if (x > y) printf(" x > y ");//1
if (x < y) printf("x < y ");//2
else printf(" x = y ");//3

A选项解析: 根据if,else的就近匹配原则,代码2和代码3匹配,我们可以先假设x>y走一遍,当x>y时,执行代码1,但走到代码2时会因为else走先代码3,所以它会同时打印出x>y和x=y,因此A不能正确反映变量大小关系。

B、

if (x >= y)//1
if (x > y) printf("x > y");//2
else printf("x = y");//3
else printf("x < y");//4

B选项解析: 先就近原则判断,得出:1和4匹配,2和3匹配。那么当x>y时,先进入代码1,满足条件,进入代码1下的if判定,再判定,满足条件,进入代码2,打印x>y,正确。当x=y时,满足1,进入1下的判定,不满足,走到代码3,打印x=y,正确。当x<y时,代码1不满足,直接走到代码4,打印x<y,正确。综上所述,可以正确反映变量的大小关系。

C、

if (x > y) printf(" x > y ");//1
if (y > x) printf(" x < y ");//2
if (x == y) printf(" x = y ");//3

C选项解析:当x>y直接打印x>y,正确。当x=y时,x>y和y>x均不满足条件,均不打印对应内容,走到代码3打印x=y,正确。x<y同理。综上所述,可以正确反映变量的大小关系。 

D、

if (x > y) printf(" x > y ");//1
else if (y < x) printf(" x < y ");//2
else printf(" x = y ");//3

 D选项解析:观察代码,1和2匹配,2和3匹配。当x>y时,走1打印x>y,后面的else if不执行,再下面的else是和2的if匹配的,自然也不执行。当x=y时,走1判定为假,走2,判定为假,走到3,打印x=y,正确。当x<y时,走1判定为假,走2,判定为真,打印x<y,后面的else不执行,正确。综上所述,可以正确反映变量的大小关系。

根据上述,得答案为A 

 看到这里的友友相信已经有点疲劳了,我们就最后来道简单点的题。

5、有以下程序,程序运行时输入:-1 -2 0 1 2 <回车>,则输出结果是()

#include <stdio.h>
int main()
{int x, a = 1, b = 1;while (1){scanf("%d", &x);if (x > 0) { a *= x; break; }//1if (x < 0) { b *= x; continue; }//2printf("%d,%d\n", a, b);}
}

A、2,2
B、1,2
C、-1,1
D、-2,1 

解析:观察代码可以发现,这是个死循环。当x>0时会跳出循环,当x<0时循环会强制继续,这两种情况都走不到printf,只有当x=0时才会打印出a和b,输入-1 -2 0 1 2<回车>,就相当于在数据流中存放了-1,空格,-2,空格,0,空格,1,空格,2,空格。而scanf会将空格当作结束标志,也就是说如果循环正常运行,x将被依次赋予为-1,-2,0,1,2 。

当x=1时,走代码2,令b*=1,所以b=-1。当x=-2时,走代码2,令b*=x,所以b=2。当x=0时,直接打印出a,b,此时a=1,b=2,所以打印出1,2。而当x=1时会走到代码1跳出循环,后面的2依然存放在数据流中,不会赋值给x,当程序结束之后会被清除,对于此题并无影响。至此,程序结束,最终输出1,2,答案选B

好了,今天的练习到这里就结束了,感谢各位友友的来访,祝各位友友前程似锦O(∩_∩)O

相关文章:

c语言每日一练(14)【加强版】

前言&#xff1a;每日一练系列&#xff0c;每一期都包含5道选择题&#xff0c;2道编程题&#xff0c;博主会尽可能详细地进行讲解&#xff0c;令初学者也能听的清晰。博主有时会将一些难题综合成每日一练加强版&#xff0c;加强版是特殊的&#xff0c;它仅包含5道选择题&#x…...

操作系统的知识点总结

(一)操作系统的发展过程 一.前言 在 20 世纪 50 年代中期&#xff0c;出现了第一个简单的批处理 OS;60 年代中期开发出多道程序批处理系统:;不久又推出分时系统&#xff0c;与此同时&#xff0c;用于工业和武器控制的实时 OS 也相继问世。20 世纪 70 到 90 年代&#xff0c;是…...

浏览器安全-同源策略和CORS

同源策略 同源策略是浏览器的一个安全功能&#xff0c;浏览器禁止在当前域读写其他域的资源&#xff0c;如限制跨域发送ajax请求 不受同源策略限制的 1&#xff09;页面中的链接&#xff0c;重定向表单以及表单提交 2&#xff09;跨域资源引入 如script不受跨域限制&#xff0…...

MySQL——条件查询

2023.9.2 今天学习了尚硅谷MySQL基础DQL语言中的条件查询语言。相关SQL语句笔记如下&#xff1a; #条件查询 SELECT * FROM employees ; SELECT last_name,salary,commission_pct FROM employees WHERE salary>10000 AND salary<15000; SELECT last_name,salary FROM em…...

转载: 又拍云【PrismCDN 】低延时的P2P HLS直播技术实践

低延时的P2P HLS直播技术实践本文是第二部分《PrismCDN 网络的架构解析,以及低延迟、低成本的奥秘》低延时的P2P HLS直播技术实践 [首页 > Open Talk NO.41 | 2018 音视频技术沙龙深圳站 > 低延时 WebP2P 直播技术实践https://opentalk-blog.b0.upaiyun.com/prod/2018-0…...

PHP常用六大设计模式

PHP常用六大设计模式 单例模式 特点 三私一公 &#xff1a;私有的静态变量&#xff08;存放实例&#xff09;&#xff0c;私有的构造方法&#xff08;防止创建实例&#xff09;&#xff0c;私有的克隆方法(防止克隆对象)&#xff0c;公有的静态方法&#xff08;对外界提供实…...

Rust入门(1)

Rust的入门 1.配置Rust环境&#xff08;Windows环境&#xff09;1.下载Rust安装包2.配置path环境3.验证Rust4.Linux or MacOS系统(补充)1.Rust包依赖于C & 需要C编译器 5.卸载Rust6.Rust的构建工具和包管理器1.构建项目2.运行项目3.测试项目4.为项目构建文档5.将库发布到cr…...

Web服务器部署上线踩坑流程回顾

5月份时曾部署上线了C的Web服务器&#xff0c;温故而知新&#xff0c;本篇文章梳理总结一下部署流程知识&#xff1b; 最初的解决方案&#xff1a;https://blog.csdn.net/BinBinCome/article/details/129750951?spm1001.2014.3001.5501后来的解决方案&#xff1a;https://blog…...

目标检测YOLO实战应用案例100讲-基于卷积神经网络的小样本机载雷达动目标检测

目录 前言 机载雷达动目标检测方法及深度学习理论基础 2.1引言 2.2机载雷达回波信号模型...

SpringBoot 的 MVC

1.1 MVC定义 MVC是Model、View、Controller的缩写&#xff0c;它是软件工程当中的一种软甲架构模式&#xff0c;它把软件系统分为模型 Model(模型)是应用程序中用于处理应用程序数据逻辑的部分。通常模型对象负责在数据库中存取数据View&#xff08;视图&#xff09;是应用程…...

springboot上线打包+vuecli2部署在linux服务器上(打包上线)

这里也是记录一下springboot的上线打包流程,我这里前端使用的是vuecli2 springboot的依赖是2.7.9的版本 前端是使用的vue2 打包前,你的linux上必须要先安装,tomcat\java\nginx springboot打包 springboot打包点击一下,等maven编译打包成功在target文件下找到,jar包, 然后,把j…...

Postern配置HTTP和HTTPS的步骤

Postern是一款强大的Android代理工具&#xff0c;它允许您在设备上配置全局代理来实现安全、隐私保护和自由上网。本文将详细介绍如何使用Postern在Android设备上配置HTTP和HTTPS代理&#xff0c;为您提供更便捷的上网体验。 步骤1&#xff1a;下载和安装Postern应用 首先&am…...

DataTableResponseEntity

/// <summary>/// DataTable数据集合返回实体/// </summary>[Serializable]public sealed class DataTableResponseEntity : IResponse{private readonly DataTable sourceTable;private readonly int PageCount;private readonly int totalCount;private readonly…...

Python爬虫(十八)_多线程糗事百科案例

多线程糗事百科案例 案例要求参考上一个糗事百科单进程案例:https://cloud.tencent.com/developer/article/1021994 Queue(队列对象) Queue是python中的标准库&#xff0c;可以直接import Queue引用&#xff1b;队列时线程间最常用的交互数据的形式。 python下多线程的思考…...

无穷级数重要知识点

部分和 s ∑ i 1 n u i s \sum_{i1}^{n} u _{i} si1∑n​ui​ 注意&#xff1a;部分和不是数列的一部分之和&#xff0c;而是一个极限的概念&#xff0c;此处的n是一个极限值&#xff0c; n 趋于正无穷&#xff01; \color{red}n趋于正无穷&#xff01; n趋于正无穷&#x…...

【MyBatis】快速入门

1、简介 MyBatis是一个持久化、轻量级的半自动化ORM框架&#xff0c;封装了所有JDBC的原始操作。查询参数以及获取结果集等。 1.1 原始JDBC操作存在的问题 &#xff08;1&#xff09;数据库连接、释放频繁造成系统资源浪费&#xff0c;影响系统性能 &#xff08;2&#xff09;…...

【gtpJavaScript】使用JavaScript实现套壳gtp与gtp打字输出效果

postman测试gtp接口 https://platform.openai.com/docs/api-reference/chat/create?langcurl 导入到postman中 记得弄一个gtp的key 然后请求测试gtp接口&#xff1a; 纯前端实现gtp请求页面 目录结构&#xff1a; 部分参考&#xff1a;GitHub - xxxjkk/chat-website: 简易版c…...

C++内存管理(2)new、delete详解

目录 new operator&#xff08;new操作&#xff09; new类对象时加不加括号的差别 new工作任务 delete工作任务 new和delete 堆区空间操作&#xff08;对比malloc和free&#xff09; new和delete操作基本类型的空间 new和delete操作基本类型的数组 new和delete操作类的…...

ELK集群搭建流程(实践可用)

一、概述 ELK 是一个由三个开源软件工具组成的数据处理和可视化平台&#xff0c;包括 Elasticsearch、Logstash 和 Kibana。这些工具都是由 Elastic 公司创建和维护的。 Elasticsearch 是一个分布式的搜索和分析引擎&#xff0c;可以将大量数据存储在一个或多个节点上&#xf…...

react-quill富文本 中文输入法触发change问题

使用的富文本是编辑器 react-quill 需求&#xff1a; 点击按钮插入自定义颜色文字&#xff0c;然后手动输入为正常颜色。 问题&#xff1a; quill组件把带颜色的字体创建个dom, 临近的文字都会整合进一个dom中&#xff0c;导致输入的文字和插入的带颜色 都统一成一个颜色了…...

CMake基础:构建流程详解

目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...

工程地质软件市场:发展现状、趋势与策略建议

一、引言 在工程建设领域&#xff0c;准确把握地质条件是确保项目顺利推进和安全运营的关键。工程地质软件作为处理、分析、模拟和展示工程地质数据的重要工具&#xff0c;正发挥着日益重要的作用。它凭借强大的数据处理能力、三维建模功能、空间分析工具和可视化展示手段&…...

Qwen3-Embedding-0.6B深度解析:多语言语义检索的轻量级利器

第一章 引言&#xff1a;语义表示的新时代挑战与Qwen3的破局之路 1.1 文本嵌入的核心价值与技术演进 在人工智能领域&#xff0c;文本嵌入技术如同连接自然语言与机器理解的“神经突触”——它将人类语言转化为计算机可计算的语义向量&#xff0c;支撑着搜索引擎、推荐系统、…...

3-11单元格区域边界定位(End属性)学习笔记

返回一个Range 对象&#xff0c;只读。该对象代表包含源区域的区域上端下端左端右端的最后一个单元格。等同于按键 End 向上键(End(xlUp))、End向下键(End(xlDown))、End向左键(End(xlToLeft)End向右键(End(xlToRight)) 注意&#xff1a;它移动的位置必须是相连的有内容的单元格…...

DingDing机器人群消息推送

文章目录 1 新建机器人2 API文档说明3 代码编写 1 新建机器人 点击群设置 下滑到群管理的机器人&#xff0c;点击进入 添加机器人 选择自定义Webhook服务 点击添加 设置安全设置&#xff0c;详见说明文档 成功后&#xff0c;记录Webhook 2 API文档说明 点击设置说明 查看自…...

tomcat指定使用的jdk版本

说明 有时候需要对tomcat配置指定的jdk版本号&#xff0c;此时&#xff0c;我们可以通过以下方式进行配置 设置方式 找到tomcat的bin目录中的setclasspath.bat。如果是linux系统则是setclasspath.sh set JAVA_HOMEC:\Program Files\Java\jdk8 set JRE_HOMEC:\Program Files…...

区块链技术概述

区块链技术是一种去中心化、分布式账本技术&#xff0c;通过密码学、共识机制和智能合约等核心组件&#xff0c;实现数据不可篡改、透明可追溯的系统。 一、核心技术 1. 去中心化 特点&#xff1a;数据存储在网络中的多个节点&#xff08;计算机&#xff09;&#xff0c;而非…...

[特殊字符] 手撸 Redis 互斥锁那些坑

&#x1f4d6; 手撸 Redis 互斥锁那些坑 最近搞业务遇到高并发下同一个 key 的互斥操作&#xff0c;想实现分布式环境下的互斥锁。于是私下顺手手撸了个基于 Redis 的简单互斥锁&#xff0c;也顺便跟 Redisson 的 RLock 机制对比了下&#xff0c;记录一波&#xff0c;别踩我踩过…...

Windows 下端口占用排查与释放全攻略

Windows 下端口占用排查与释放全攻略​ 在开发和运维过程中&#xff0c;经常会遇到端口被占用的问题&#xff08;如 8080、3306 等常用端口&#xff09;。本文将详细介绍如何通过命令行和图形化界面快速定位并释放被占用的端口&#xff0c;帮助你高效解决此类问题。​ 一、准…...

简单介绍C++中 string与wstring

在C中&#xff0c;string和wstring是两种用于处理不同字符编码的字符串类型&#xff0c;分别基于char和wchar_t字符类型。以下是它们的详细说明和对比&#xff1a; 1. 基础定义 string 类型&#xff1a;std::string 字符类型&#xff1a;char&#xff08;通常为8位&#xff09…...