C及C++每日练习(1)

一.选择:

1.以下for循环的执行次数是()

 for(int x = 0, y = 0; (y = 123) && (x < 4); x++);

A.是无限循环 B.循环次数不定 C.4次 D.3次

对于for循环,其组成部分可以四个部分:
 

for(初始化;循环进行条件;调整)
{循环语句//
}

对于上面给出的for循环的循环条件,由于中间用于&&连接,因此,必须左右的条件都为真,循环才能继续进行。因此,当循环进行五次时,此时的y==4,不满足条件,退出循环,因此答案选择:C循环四次

2.以下程序的运行结果是()

 #include <stdio.h> 
int main(void) { printf("%s , %5.3s\n", "computer", "computer"); return 0; 
}

A.computer , puter

B. computer , com

C. computer , computer

D.computer , compu.ter

此题目的考点主要在于打印的格式,即题目中的%5.3s对于这种%m.ns格式的格式。其中m表示输出字符串的宽度,n表示左起截取字符串中的多少字符,且对齐格式为右对齐,如果字符不足则用空格补足。但是也存在特殊情况:

当字符串长度>n>m,此时m的作用不再生效。即输出左起截取字符串中的前n个字符。

n>字符串长度时,直接从头打印至尾部。

例如本题中,m==5,n==3,字符串长度<n,所以上述的打印格式应该为:打印字符串的长度5,从左截取字符串中的3个字符,由于截取的字符小于需要打印的字符,因此,用空格补齐,由于存在右对称,所以打印结果为:

computer,空格空格com

答案选择B,不过此处的答案并没有体现右对齐和补齐空格。

3.下列main()函数执行后的结果为()

int func(){  int i, j, k = 0; for(i = 0, j = -1;j = 0;i++, j++){ k++; } return k; 
} 
int main(){ cout << (func()); 

A.-1

B. 0

C.1

D.2 

在上面给出的代码中,调用了func()函数,结果打印func()函数的返回值。在func()函数的循环中,由于j==-1,因此,并不符合循环的判断条件,因此不会进入循环,所以直接返回0.。答案选择B

4.下面程序输出是什么?

#include <stdio.h> 
int main() 
{   int a=1,b=2,c=3,d=0; if(a == 1 && b++==2) if(b!=2||c--!=3) printf("%d,%d,%d\n" ,a,b,c);else  printf("%d,%d,%d\n" ,a,b,c);else  printf("%d,%d,%d\n" ,a,b,c);return 0; 
}

A.1,2,3

B. 1,3,2

C.3,2,1

D.1,3,3

在本题给出的代码中,由于if并没有搭配相应的括号,因此会有些混乱,下面将题目的格式进行一定的更改,即:

#include <stdio.h> 
int main() 
{   int a=1,b=2,c=3,d=0; if(a == 1 && b++==2) {if(b!=2||c--!=3) {printf("%d,%d,%d\n" ,a,b,c);}else  {printf("%d,%d,%d\n" ,a,b,c);}else  printf("%d,%d,%d\n" ,a,b,c);}return 0; 
}

在第一个if判断中,第一个条件a==1判断为真,第二个条件由于是后置++,即:先使用,后++,因此也满足条件。但是在判断结束后,b==3

在第二个if判断中,需要注意,此时的操作符||存在短路机制,即如果第一个条件满足,则结果直接判断为真,不再判断第二个条件,哟与b!=2为真,因此不再运行b++==2。直接进行打印,此时a,b,c的值分别是1,3,3,因此答案选择D

5.若有定义语句:

 int a=10 ; double b=3.14 ; 则表达式 'A'+a+b 值的类型是()

A.char B. int C.double D. float

针对此题目,需要注意,不同类型的变量在进行运算时,会出现自动提升的机制,即表示数据范围小的类型会自动提升到表示范围大的类型,在题目给出的类型中,'A'占用一个字节,a占用4字节,b占用8字节,因此,运算结果在最后会转换为double。因此答案选择C

6.在下面给出的数组中中,p[1][2]的值是():

int p[][4] = {{1}, {3, 2}, {4, 5, 6}, {0}};

A.1 B. 0 C.6 D.2

给出的数组是一个二维数组,其行数没有给出,列数为4,在数组中的数组中,如果给出的数没有达到4位,则会用0补齐。因此,题目中给出的二维数组的结构为:

{1,0,0,0}
{3,2,0,0}
{4,5,6,0}
{0,0,0,0}

对于二维数组,其行、列数都是从0开始算起的,因此,p[1][2]==0.,因此答案选择B

7.选择表达式 11|10 的结果(本题数值均为十进制):

A.11 B. 10 C.8 D.2

题目涉及到二进制的运算,将11转为二进制形式,其后八位为:

0000 1011

对于10,其二进制位数为:

0000 1010

对于二者的|运算,规则为二进制位数有11,全0则为0.:

11:0000 1011
10:0000 1010 运算结果:0000 1011

因此答案选择A

8.fun(21)运行结果是

 int fun(int a){ a^=(1<<5)-1; return a; 
}

A.10 B. 5 C.3 D.86

在本题目中,涉及到了两个操作符,分别是异或操作符^,以及位运算操作符>> \, \, \, <<。对于异或操作符,其运算规则为两个二进制位相异为1,相同则为0

对于本处的位操作符是左移操作符<<,其规则是右边二进制位丢弃且补0

而对于右移操作符>>,则分为算术右移和逻辑右移,对于题目,一般默认采用算术右移,即右边丢弃,左边补上符号位,负数补1,正数补0.

在本题中,1<<5,其位移后为:

移动前:0000 0001
移动后:0010 0000

移动后,此时二进制位数转换为10进制,则表示的数为32。所以,答案是变量a,即2131的异或,即:

21的二进制位:0001 0101
31的二进制位:0001 1111
异或结果:    0000 1010

所以答案选择A

9.若有定义语句:int year=1009,*p=&year;以下不能使变量 year 中的值增至 1010 的语句是

A.*p+=1;

B. (*p)++;

C.++(*p)

D. *p++

在本题目中,涉及到了操作符结合的优先顺序,在选项A中,*的优先级大于+=,因此可以增到1010。对于B,C存在括号,因此不做解释,可以增到1010.对于选项D由于后置++的优先级大于*。但是由于是后置++,因此D选项的整体运行顺序为:解引用指针,在对指针进行++,答案选择D

10.下面关于"指针"的描述不正确的是

A.当使用free释放掉一个指针内容后,指针变量的值被置为NULL

B. 32位系统下任何类型指针的长度都是4个字节

C.指针的数据类型声明的是指针实际指向内容的数据类型

D.野指针是指向未分配或者已经释放的内存地址

对于A选项,当指针被free后,指针变量的值不是NULL,而是依旧指向一块空间的地址,但是由于这块空间被释放,因此指针为野指针。

对于B选项,指针的定义,正确

对于D选项正确,此处给出避免野指针的措施,即创建指针时即使初始化,free掉指针指向的空间后将指针置空,不进行数组的越界访问

二.编程:

2.1 删除公共字符:


题目对于链接如下:
删除公共字符_牛客题霸_牛客网 (nowcoder.com)

对于本题,可以利用哈希的思想进行解决,首先创建两个string类型的对象,分别命名为str1,str2,其中,str1,str2分别用于接收第一行、第二行的输入。

在完成输入后,创建一个数组arr[256],用于统计str2中各个字符出现的次数,如果出现一个字符,则对于数组的位置置为1.

最后,从头遍历str1中的字符,如果arr[str1[i]]位置的值为0,即str1中的字符在数组中在str2中没有出现过。则输出该字符,具体代码如下:

int main()
{string str1,str2;getline(cin,str1);getline(cin,str2);int arr[256] = {0};for( size_t i = 0; i < str2.size(); i++){arr[str2[i]] = 1;}for(size_t j = 0; j < str1.size(); j++){if(arr[str1[j]] == 0){cout << str1[j];}}return 0;}


2.2 组队竞赛:

题目分析:

本题题目较长,看起来较为复杂,其实原理并不难,具体如下:
题目会给定n个队伍,每个队伍均有三名选手,对于每个选手都定义了一个水平值,为了方便表示,这里将水平值定义为value

对于一个队伍整体的水平值等于队伍中第二高的水平值。

对于题目的要求,是需要n个队伍的整体水平值达到最大。例如题目中给出的例子:1,2,5,5,5,8。最大水平值的组合应该是1,5,52,5,8.不难看出,在本题目中,最大的水平值永远无法取到。如果想要让两个队伍的水平值之和为最大。最优情况,是在每组中,均能取到所有人水平值的第二高。具体如下:
     假如对于3*3的组,其每个人的水平值为:1,2,3,4,5,6,7,8,9。对于最优的水平值上面说到了,是取总体水平值的第二高。因此,也就是8,而为了能取到8,队伍中需要一个比8大的值,一个最小的值,也就是1,9.所以第一组分组为1,8,9。同理,第二组的分组为2,6,7。第三组为3,4,5

所以,解决题目的重点有两个,一是将选手的水平值排列成升序序列,此问题比较简单,直接调用sort函数即可。

第二个问题,是如何取到第二大的值:

对于上面给出的图:蓝色方框表示需要选中的数,下面的蓝色数字表示数组的下标。对于数组的长度设为n,不难看出,蓝色方框选出的数的下标可以通过下面给出的式子表示,即:
                                n-2*(i+1) \, \, \, \, \, \, \, \, \, \, \, \, \, \, \, i==0,1,2,......

因此,代码为:

#include <iostream>
#include<vector>
#include<algorithm>
using namespace std;int main()
{vector<int> v;int n = 0;cin >> n;v.resize(3*n);for( size_t i = 0; i < 3*n; i++){cin >> v[i];}long long sum = 0;sort(v.begin(),v.end());for( size_t j = 0; j < n; j++){sum += v[v.size()-2*(j+1)];}cout << sum;return 0;}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/723780.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【QA-SYSTEMS】CANTATA-解决Jenkins中build Cantata报错

【更多软件使用问题请点击亿道电子官方网站查询】 1、 文档目标 解决Jenkins中build Cantata测试项目报找不到license server的错误。 2、 问题场景 在Jenkins中build Cantata测试项目&#xff0c;报错“Failed to figure out the license server correctly”。 3、软硬件环…

Numpy教程

文章目录 数组基础文件与字符串多项式分布实战 Numpy绝对可以说是支撑Python地位的最重要的包了&#xff0c;几乎所有能叫出名的Python计算库&#xff0c;都不可避免地调用了Numpy&#xff0c;Numpy官网也列出了一些&#xff0c;大致如下图这样&#xff0c;在科学计算领域&…

Spring事务管理与模板对象

1.事务管理 1.事务回顾 事务指数据库中多个操作合并在一起形成的操作序列 事务的作用 当数据库操作序列中个别操作失败时&#xff0c;提供一种方式使数据库状态恢复到正常状态&#xff08;A&#xff09;&#xff0c;保障数据库即使在异常状态下仍能保持数据一致性&#xff…

android开发教程百度网盘,高并发系统基础篇

展望未来 操作系统 移动操作系统的演变过程&#xff0c;从按键交互的塞班功能机到触摸屏交互的Android/IOS智能机&#xff0c;从小屏幕手机到全面屏、刘海屏、水滴屏。任何系统无非干两件事&#xff1a;输入和输出&#xff0c;接收到外部输入信号后经过操作系统处理后输出信息…

史称GPT-4最强劲敌——Claude 3 大模型它来了【附体验教程】

Anthropic 的 Claude 3 Sonnet 模型现已在亚马逊云科技的 Amazon Bedrock 正式可用。 Amazon Bedrock 是目前 第一个 也是 唯一 一个提供 Claude 3 Sonnet 的托管服务 。 Claude 3 免费测试体验者福利&#x1f9e7;&#xff1a;https://mp.weixin.qq.com/s/hszLRa8B5zKsTDg2bmI…

Java两周半速成之路(第七天)

一.多态 3.多态的好处: 提高了程序的维护性(由继承保证) 提高了程序的扩展性(由多态保证) 演示&#xff1a; package com.shujia.day08;public class Animal {String name;int age;public Animal() {}public Animal(String name, int age) {this.name name;this.age age…

安装/升级 gcc

文章目录 查看当前 gcc 版本查看 yum 软件库 gcc 版本列表下载最新版本安装 查看当前 gcc 版本 查看 yum 软件库 gcc 版本列表 只有一个4.8的版本&#xff0c;过旧 下载最新版本 wget https://ftp.gnu.org/gnu/gcc/gcc-13.2.0/gcc-13.2.0.tar.gz 安装 ./configure 报错 提示…

2024年Android开发者跳槽指南,超强Android进阶路线知识图谱

一、概述 随着业务的发展&#xff0c;工程的逐渐增大与开发人员增多&#xff0c;很多工程都走向了模块化、组件化、插件化道路&#xff0c;来方便大家的合作开发与降低业务之间的耦合度。现在就和大家谈谈模块化的交互问题&#xff0c;首先看下模块化的几个优势。 模块化的优…

国创证券|645元克!买还是不买?

近日世界金价继续走强。截至记者发稿&#xff0c;纽约商业交易所&#xff08;COMEX&#xff09;黄金主力4月合约突破2100美元/盎司关口&#xff1b;国内方面&#xff0c;SHFE黄金主力合约则摸高498元/克&#xff0c;迫临500元/克的关口。 巨丰投顾高级出资参谋游晓刚对《证券日…

替代TPS7B7701QPWPRQ1/TPS7B7702QPWPRQ1单/双通道 车规级LDO

PC8803具有高输入电压单低压差调节器&#xff08;PC8803SC01/PC8803SCO3&#xff09;/双通道低压差调节&#xff08;PC8803SC02/PC8803SC04&#xff09;&#xff0c;具有精确的电流感测&#xff0c;设计用于在宽输入电压范围内工作 从4.5V到40V。该设备具有45V负载转储电源输入…

微信小程序触屏事件_上划下划事件

一、微信小程序触屏事件 bindtouchstart&#xff1a;手指触摸动作开始 bindtouchmove&#xff1a;手指触摸后移动 bindend&#xff1a;手指触摸动作结束 属性类型说明touchesArray触摸事件&#xff0c;当前停留在屏幕中的触摸点信息的数组 Touch 对象 属性类型说明identi…

pgvector docker部署测试

docker pull pgvector/pgvector:pg16 运行 docker run --name pgvector --restartalways -e POSTGRES_USERpgvector -e POSTGRES_PASSWORDpgvector -v /srv/tlw/pgvectordata:/var/lib/postgresql/data -p 54333:5432 -d pgvector/pgvector:pg16 CREATE EXTENSION vector; --…

总结:大模型技术栈---算法与原理

原文地址&#xff1a;大模型技术栈-算法与原理 1. tokenizer方法 word-level char-level subword-level BPE WordPiece UniLM SentencePiece ByteBPE2. position encoding 绝对位置编码 ROPE AliBi 相对位置编码 Transformer-XL T5/TUPE DeBERTa3. 注意力机制 Mamba,H3,Hyena…

【Redis】Redis持久化模式RDB

目录 引子 RDB RDB的优缺点 小节一下 引子 不论把Redis作为数据库还是缓存来使用&#xff0c;他肯定有数据需要持久化&#xff0c;这里我们就来聊聊两种持久化机制。这两种机制&#xff0c;其实是 快照 与 日志 的形式。快照:就是当前数据的备份&#xff0c;我可以拷贝到磁…

C语言指针的初步认识--学习笔记(3)

1. 字符指针变量 在C语言中&#xff0c;字符串通常被视为字符数组&#xff0c;但它们可以有不同的表示方式。字符指针变量存储的是字符串的地址。这意味着&#xff0c;当你有一个字符串时&#xff0c;你可以通过改变字符指针的值来改变这个字符串&#xff0c;因为你实际上改变的…

保修期内经营者收取维修费用应遵循正当程序原则

↑↑↑“上海高院”头条号为您讲述精彩的法律科普内容 上海市第一中级人民法院在履行司法审判职能的同时&#xff0c;始终高度重视高质量案件工作&#xff0c;总结司法审判经验&#xff0c;努力提高司法审判质量。 在2020年全国法院系统优秀案例分析评选活动中&#xff0c;上海…

合并有序链反转链表(递归版)

每日一题系列&#xff08;day 19&#xff09; 前言&#xff1a; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f50…

基于RFID技术+WMS仓储管理应用设计

一、项目背景 1.1 背景 仓储管理是企业对仓库及其内部物资进行计划、组织、控制和协调的管理过程。它在整个物流和经济活动中扮演着重要的角色&#xff0c;连接着生产者和消费者。 不同规模和产品种类的企业有不同的仓储管理流程和需求&#xff0c;但核心部分都包括仓库作业…

设计模式:策略模式 ⑥

一、策略模式思想 简介 策略模式&#xff08;Strategy Pattern&#xff09;属于对象的行为模式。其用意是针对一组算法&#xff0c;将每一个算法封装到具有共同接口的独立的类中&#xff0c;从而使得它们可以相互替换。策略模式使得算法可以在不影响到客户端的情况下发生变化。…

msvcp120.dll丢失的解决方法,教你快速解决msvcp120.dll问题

msvcp120.dll是一个在Windows操作系统中至关重要的系统文件&#xff0c;它属于Microsoft Visual C Redistributable Package的一部分。这个动态链接库文件&#xff08;DLL&#xff09;包含了运行某些应用程序所必需的C运行时库函数。当某个程序在运行过程中需要调用这些预先编译…