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

news2025/2/24 2:16:48

一.选择:

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.coloradmin.cn/o/1494101.html

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

相关文章

信息安全是什么

信息安全&#xff0c;也称为信息安全或数据安全&#xff0c;是防止未经授权的访问、更改、中断和破坏信息。 信息安全本身包括的范围很大&#xff0c;大到国家军事政治等机密安全&#xff0c;小范围的当然还包括如防范商业企业机密泄露&#xff0c;防范青少年对不良信息的浏览…

词嵌入向量和位置编码向量的整合

词嵌入向量和位置编码向量的整合 flyfish 文本序列 -> 输入词嵌入向量&#xff08;Word Embedding Vector&#xff09;-> 词向量 位置编码向量&#xff08;Positional Encoding Vector&#xff09; Embedding 的维度使用了3 可以输出打印看结果 from collections im…

sylar高性能服务器-日志(P57-P60)内容记录

文章目录 P57-P60&#xff1a;序列化模块Varint&#xff08;编码&#xff09;Zigzag&#xff08;压缩&#xff09;class ByteArrayNode&#xff08;链表结构&#xff09;成员变量构造函数写入读取setPositionaddCapacity 测试 P57-P60&#xff1a;序列化模块 ​ 序列化模块通常…

【Java EE】文件内容的读写⸺数据流

目录 &#x1f334;数据流的概念&#x1f338;数据流分类 &#x1f333;字节流的读写&#x1f338;InputStream&#xff08;从文件中读取字节内容)&#x1f33b;示例1&#x1f33b;示例2&#x1f33b;利用 Scanner 进行字符读取 &#x1f338;OutputStream(向文件中写内容&…

当CV遇上transformer(一)ViT模型

当CV遇上transformer(一)ViT模型 我们知道计算机视觉(Computer Vision)&#xff0c;主要包括图像分类、目标检测、图像分割等子任务。 自AlexNet被提出以来&#xff0c;CNN成为了计算机视觉领域的主流架构。CNN网络结构主要由卷积层、池化层以及全连接层3部分组成&#xff0c;其…

Uni-ControlNet: All-in-One Control toText-to-Image Diffusion Models——【论文笔记】

本文发表于NeurIPS 2023 项目官网&#xff1a;Uni-ControlNet: All-in-One Control to Text-to-Image Diffusion Models 一、Introduction 近两年来&#xff0c;扩散模型在图像合成任务中表现优异&#xff0c;尤其是文本到图像&#xff08;T2I&#xff09;扩散模型已成为合成高…

腾达路由器检测环境功能破解MISP基础

在虚拟机上用qemu运行腾达路由器的网站固件会遇到无法识别网络的问题&#xff0c;这篇主要是破解这个功能&#xff0c;使腾达路由器成功在虚拟机上运行&#xff0c;方便漏洞复现 本次用到的腾达路由器版本&#xff1a; https://www.tenda.com.cn/download/detail-3683.html下…

Python 开发图形界面程序

用 Python 语言开发图形界面的程序&#xff0c;有2种选择&#xff1a; Tkinter 基于Tk的Python库&#xff0c;这是Python官方采用的标准库&#xff0c;优点是作为Python标准库、稳定、发布程序较小&#xff0c;缺点是控件相对较少。 PySide2/PySide6 基于Qt 的Python库&#x…

玩家至上:竞技游戏设计如何满足现代玩家的需求?

文章目录 一、现代玩家需求分析二、以玩家体验为核心的游戏设计三、个性化与定制化服务四、强化社交互动与社区建设五、持续更新与优化《游戏力&#xff1a;竞技游戏设计实战教程》亮点编辑推荐内容简介目录获取方式 随着科技的飞速发展和游戏产业的不断壮大&#xff0c;现代玩…

软件测试之Web自动化测试

&#x1f345; 视频学习&#xff1a;文末有免费的配套视频可观看 &#x1f345; 关注公众号【互联网杂货铺】&#xff0c;回复 1 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 一、自动化测试基本介绍 1、自动化测试概述&#xff1a; 什么…

Android布局优化之include、merge、ViewStub的使用,7年老Android一次坑爹的面试经历

前言 开发10年&#xff0c;老码农&#xff0c;曾经是爱奇艺架构 点击领取完整开源项目《安卓学习笔记总结最新移动架构视频大厂安卓面试真题项目实战源码讲义》 师&#xff0c;东芝集团高级工程师&#xff0c;三星架构师。5年之内频繁被辞退。内心拔凉拔凉的&#xff0c;在这五…

Android大厂高级面试题灵魂100问,带你彻底弄明白

“2020年技术没有成长&#xff0c;我今年一定要好好努力学习&#xff01;” “在现在这个公司都工作了3年了&#xff0c;一毛钱工资都没有涨…” “年前真倒霉&#xff0c;老板嫌我工资高&#xff0c;被优化了&#xff0c;年后又遇到了疫情&#xff0c;现在都还没有找到合适的工…

141.乐理基础-男声女声音域、模唱、记谱与实际音高等若干问题说明

上一个内容&#xff1a;140.乐理基础-音程的转位-CSDN博客 上一个内容练习的答案&#xff1a;红色箭头指向的是转为&#xff0c;比如第一个只要写成c低g高都是正确的&#xff0c;不一定非要和图中一样 首先在 12.音域、1C到底是那一组的C 里面写了人声的音域&#xff0c;大致默…

最强照片AI无损放大工具

使用人工智能的能力来放大图像&#xff0c;同时为惊人的结果添加自然的细节。 使用深度学习技术&#xff0c;A.I.GigaPixEL可以放大图像并填满其他调整大小的产品所遗漏的细节。 下载地址&#xff1a;最强照片AI无损放大工具.zip

dolphinscheduler试用(一)(边用边修bug。。。。create tenant error)

&#xff08;作者&#xff1a;陈玓玏&#xff09; 前提&#xff1a;部署好了dolphinscheduler&#xff0c;部署篇见https://blog.csdn.net/weixin_39750084/article/details/136306890?spm1001.2014.3001.5501 官方文档见&#xff1a;https://dolphinscheduler.apache.org/…

MyBatis操作数据库(SQL注入)

本文主要来讲解6大标签&#xff0c;以便更好的MyBatis操作数据库&#xff01; <if>标签<trim>标签<where>标签<set>标签<foreach>标签<include>标签 前提需求&#xff1a; MyBatis是一个持久层框架&#xff0c;和Spring没有任何关系&…

【LeetCode】升级打怪之路 Day 14:二叉树的遍历

今日题目&#xff1a; 144. 二叉树的前序遍历94. 二叉树的中序遍历145. 二叉树的后序遍历102. 二叉树的层序遍历107. 二叉树的层序遍历 II199. 二叉树的右视图637. 二叉树的层平均值429. N 叉树的层序遍历515. 在每个树行中找最大值116. 填充每个节点的下一个右侧节点指针117. …

Fiddler入门:下载、安装、配置、抓包、customize rules

一、fiddler下载安装 安装包下载链接&#xff1a;https://www.telerik.com/download/fiddler 随便选个用途&#xff0c;填写邮箱&#xff0c;地区选择China&#xff0c;勾选“I accept the Fiddler End User License Agreement”&#xff0c;点击“DownLoad for windows”&…

⭐每天一道leetcode:28.找出字符串中第一个匹配项的下标(简单;暴力解;KMP算法,有难度)

⭐今日份题目 给你两个字符串 haystack 和 needle &#xff0c;请你在 haystack 字符串中找出 needle 字符串的第一个匹配项的下标&#xff08;下标从 0 开始&#xff09;。如果 needle 不是 haystack 的一部分&#xff0c;则返回 -1 。 示例1 输入&#xff1a;haystack &q…

3.6作业

作业要求&#xff1a;数据库操作的增、删、改 程序代码&#xff1a; #include<myhead.h> int main(int argc, const char *argv[]) {//定义数据库句柄指针sqlite3 * ppDb NULL;//打开数据库&#xff0c;如果数据库不存在&#xff0c;则创建数据库//将数据库句柄由参数…