【C/C++笔试练习】常见进制转换、宏的定义和特点、sizeof与strlen、字符串函数、统计回文、连续最大和

news2024/9/21 15:28:56

文章目录

  • C/C++笔试练习
    • 1.常见进制转换
      • (1)进制前缀
      • (2)进制转换
    • 2.宏的定义和特点
      • (3)宏的定义
      • (4)有关宏的计算
    • 3.sizeof与strlen
      • (5)sizeof和strlen的差别
    • 4.字符串函数
      • (6)strcpy和strcat函数
    • 5.编程题
      • (7)统计回文
      • (8)连续最大和

C/C++笔试练习

1.常见进制转换

(1)进制前缀

  有以下程序:

#include<iostream>
#include<cstdio>
using namespace std;

int main()
{
	int m=0123, n=123;
	printf("%o %o\n", m, n);
	return 0;
}

  程序运行后的输出结果是()

  A 0123 0173    B 0123 173
  C 123 173     D 173 173

  

  在C++中,我们可以使用printf函数打印不同进制的数。以下是一些常用的格式控制符:

  %d:以十进制形式打印带符号整数(正数或负数)。

  %u:以十进制形式打印无符号整数。

  %o:以八进制形式打印无符号整数。

  %x:以十六进制形式打印无符号整数,小写abcdef表示。

  %X:以十六进制形式打印无符号整数,大写ABCDEF表示。


  如果要打印二进制,可以调用stdlib.h里面的itoa函数。

  注意,这里我们使用的是itoa函数将整数转换为相应的进制,并存储在字符数组中,然后通过printf打印出来。如果要直接打印不同进制的整数,可以使用printf的格式控制符。

#include <cstdio>  
#include <cstring>  
#include <cstdlib>  
  
int main() {  
    int a = 12;  
    printf("八进制 %o\n", a);  // 输出八进制的a  
    printf("十六进制 %x\n", a); // 输出十六进制的a,小写  
    printf("十六进制 %X\n", a); // 输出十六进制的a,大写  
    char s[40];  
    _itoa(a, s, 2); // 把a转为二进制并存入s数组  
    printf("二进制 %s\n", s); // 输出二进制形式的a  
    return 0;  
}

在这里插入图片描述
  
  printf打印不同的进制有格式控制,我们也可以在十进制前加上不同的前缀表示不同的进制。

  十进制:通常我们直接表示即可。

  二进制:二进制是计算机内部处理数据所使用的数制。二进制的前缀是“0b”或“0B”,例如0b101代表二进制的101。

  八进制:八进制的前缀是“0”,例如014代表八进制的14。

  十六进制:十六进制的前缀是“0x”或“0X”,例如0xA代表十六进制的A。在十六进制中,数字0-9和字母A-F(或a-f)表示数值。

  
  结合上面的内容,m=0123和n=123就分别表示八进制的123和十进制的123,接下来printf打印的格式是%o,是以八进制打印,所以m为八进制直接打印即可,n为十进制,打印八进制需要加以转化,八进制的123用十进制表示就是173。

在这里插入图片描述

   答案选:C
            

(2)进制转换

   十进制变量 i 的值为100,那么八进制的变量i的值为()

   A 146       B 148
   C 144       D 142

  
  根据上面的内容可以知道,i 是十进制的100,打印八进制的 i 即可。

  在这个问题中,我们需要将一个十进制数转换为八进制数。具体来说,十进制数100需要转换为八进制数。

  转换的过程如下:

  首先,我们将100除以8,得到的结果是12余4。然后,我们将12继续除以8,得到的结果是1余4。最后,我们将1继续除以8,得到的结果是0余1。 此时,我们已经无法继续进行除法运算,因此,我们需要向上一位进位。

  所以,最终的结果是 1 4 4。其中,“1” 是进位得到的,“4” 是除以8得到的余数,“4” 是除以8得到的余数。

  因此,十进制变量 i 的值为100,那么八进制的变量i的值为 C 144。

在这里插入图片描述

在这里插入图片描述

   答案选:C
            

2.宏的定义和特点

(3)宏的定义

   下列关于C/C++的宏定义,不正确的是()

   A 宏定义不检查参数正确性,会有安全隐患
   B 宏定义的常量更容易理解,如果可以使用宏定义常量的话,要避免使用const常量
   C 宏的嵌套定义过多会影响程序的可读性,而且很容易出错
   D 相对于函数调用,宏定义可以提高程序的运行效率

  
   C++中的宏定义是一种预处理命令, 用于将标识符或一组代码替换为指定的字符串或代码块。宏定义通常用#define关键字来定义,后面跟着宏名和宏体。在源程序中,所有宏名出现的地方都会被宏体替换。 例如:

#define SQUARE( x ) x * x

SQUARE( 5 );

   在程序中,预处理器就会用下面这个表达式替换上面的表达式:

5 * 5

  我们可以把宏看成是编译器直接替换,所以宏定义不会检查参数,有一定的安全隐患。使用常量const在一些情况下会更安全和易读,题中的说法过于绝对,应该根据具体的使用场景来选择是否使用宏定义或者const。

  相对于函数调用,宏定义在某些情况下可以提高程序的运行效率,原因如下:

  因为宏的替换,所以宏无需函数调用的开销、避免函数调用的内存分配。

  但是,宏定义并不是一种完全可替代函数调用的机制,它的使用存在一些缺点和局限性。例如,宏定义过多会影响程序的可读性,而且宏定义展开会导致代码膨胀,可能会增加程序的体积。同时宏定义的展开是在编译阶段进行的,所以无法进行类型检查、错误检查等操作。

   答案选:B
            

(4)有关宏的计算

  下面程序的输出结果是()

#include < iostream.h>

#define SQR(A) A*A

void main() 
{
	int x=6,y=3,z=2;
	x/=SQR(y+z)/SQR(y+z);
	cout< < x< < endl;
}

  A 5      B 6
  C 1      D 0

  
  根据上面宏的直接替换规则,注意计算即可得到答案。

在这里插入图片描述

在这里插入图片描述

   答案选:D
            

3.sizeof与strlen

(5)sizeof和strlen的差别

  定义char dog[]="wang\0miao";那么sizeof(dog)与strlen(dog)分别是多少()

  A 10,4      B 4,4
  C 9,9     D 9,4

  
  sizeof和strlen的差别:

  (1)定义与本质:sizeof是一个运算符。通常在编译时,sizeof就完成了计算,其参数可以是数组、指针、类型、对象、函数等。而strlen是一个函数

  (2)计算方式与结果:sizeof是在编译时计算参数的空间大小,它返回的是该变量空间的大小, 无论是数组、指针、类型、对象还是函数,它都会根据其实际占用内存大小来返回。而strlen是在运行时计算字符串的长度,它返回的是该字符串的字符数,不包括结束符“\0”。

  (3)使用场景:sizeof常用于动态内存分配,如malloc或new等函数中, 用于确定需要分配的内存大小 。而strlen常用于字符串处理,如字符串拷贝、连接、比较等 操作中,用于确定字符串的长度。

  所以第一个sizeof(dog)的大小是从字符串开始到结束整个变量空间的大小,注意字符串结束表示是’\0’,为"wang\0miao",所以sizeof(dog)的大小是10。第二个strlen(dog)的大小是从字符串开始第一个到’\0’之前的字符数,为"wang",所以strlen(dog)的大小是4。

在这里插入图片描述

   答案选:A
            

4.字符串函数

(6)strcpy和strcat函数

   下列程序的打印结果是()

char p1[15] = "abcd", *p2 = "ABCD", str[50] = "xyz";
strcpy(str + 2, strcat(p1 + 2, p2 + 1));
printf("%s", str);

   A xyabcAB       B abcABz
   C ABabcz        D xycdBCD

  
  strcpy用于将一个字符串复制到另一个地址空间。其定义如下:

  这个函数的作用是将源字符串(src)的内容复制到目标字符串(dest)中,并返回目标字符串的指针。复制包括源字符串中的’\0’结束符。

char* strcpy(char* dest, const char* src);

  
  strcat可以将两个字符串连接成一个字符串。其函数原型为:

  strcat函数将src所指向的字符串(包括"\0")复制到dest所指向的字符串的末尾(删除dest原来末尾的"\0"),并返回dest。

char *strcat(char *dest, const char *src)

  注意:dest所指内存区域不能与src所指内存区域重叠。dest必须有足够的空间来容纳src的字符串,否则可能会导致缓冲区溢出等问题。 此外,strcat函数在处理字符串时是不区分大小写的。如在C语言中,通过strcat函数连接字符串后,目标字符串(dest)将丢失原有的末尾"\0",因为它会被源字符串(src)的末尾"\0"替换掉。

  
在这里插入图片描述

在这里插入图片描述

   答案选:D
            

5.编程题

(7)统计回文

统计回文

   解题思路:

   本题使用暴力循环即可,遍历str1,将str2 insert进入str1的每个位置,判断是否是回文,是就++count; 需要注意的是这里不能 str1.insert(i, str2),这样的话str1改变了,判断下一个位置就不对了。所以每次使用str1拷贝构造一个str,然后str.insert(i, str2),再判断。

#include <iostream>
using namespace std;

//判断是否是回文函数
bool IsCircleText(const string& str)
{
    auto start=str.begin();
    auto end=str.end()-1;
    while(start<end)
    {
        if(*start!=*end)
        {
            return false;
        }

        ++start;
        --end;
    }

    return true;
}

int main() {
    string str1;
    string str2;
    getline(cin,str1);
    getline(cin,str2);
    //暴力循环
    size_t count=0;
    for(size_t i=0;i<=str1.size();++i)
    {
        string tmp=str1;
        tmp.insert(i,str2);//将str2插入到i的位置
        if(IsCircleText(tmp))//判断是否是回文
        {
            ++count;
        } 
    }
    cout<<count;
    return 0;
}

            

(8)连续最大和

连续最大和

  状态方程式: max( dp[ i ] ) = getMax( max( dp[ i -1 ] ) + arr[ i ] ,arr[ i ] )

#include <iostream>
#include<vector>
using namespace std;

int GetMax(int a, int b) 
{   //得到两个数的最大值
    return (a) > (b) ? (a) : (b);
}

int main() 
{
    int size;
    cin >> size;
    vector<int> nums(size);
    for (size_t i = 0; i < size; ++i)
        cin >> nums[i];
    int Sum = nums[0]; //临时最大值
    int MAX = nums[0]; //比较之后的最大值
    for (int i = 1; i < size; i++) 
    {
        Sum = GetMax(Sum + nums[i], nums[i]); 
        //状态方程if (Sum >= MAX)
        MAX = Sum;
    }
    cout << MAX << endl;
    return 0;
}

            

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

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

相关文章

2023年中国复合门产量、销量、产业链及市场规模分析[图]

复合门是一种由木材和人造板材等材料组合而成的门&#xff0c;具有较高的强度和稳定性。它采用多层材料交叉堆叠、胶合而成&#xff0c;能够有效防止门扇变形、开裂和变色等问题&#xff0c;同时还具备一定的防火、防潮和防虫功能。 复合门产业链 资料来源&#xff1a;共研产业…

【开题报告】如何借助chatgpt完成毕业论文开题报告

步骤 1&#xff1a;确定论文主题和研究问题 首先&#xff0c;你需要确定你的论文主题和研究问题。这可以是与软件开发、算法、人工智能等相关的任何主题。确保主题具有一定的研究性和可行性。 步骤 2&#xff1a;收集相关文献和资料 在开始撰写开题报告之前&#xff0c;收集相…

软件培训测试高级工程师多测师肖sir__html之作业11

html之作业 案例1&#xff1a; 截图&#xff1a; 代码&#xff1a; <!DOCTYPE html> <html><head><meta charset"UTF-8"><title>表单</title></head><body><table style"background-color:red" bo…

全新第二代SCB后备保护器:保护电器的后备力量

在电气设备中&#xff0c;浪涌保护器&#xff08;SPD&#xff09;是一种重要的防雷装置&#xff0c;它可以在电源线路中并联接入&#xff0c;当发生过电压或雷电冲击时&#xff0c;将其导向地线&#xff0c;从而保护后端设备免受损坏。然而&#xff0c;SPD本身也会因为长期使用…

【算法设计与分析】— —实现最优载的贪心算法

&#x1f383;欢迎大家前去观看我的算法设计与分析专栏&#xff1a; 算法设计与分析_IT闫的博客-CSDN博客 希望对大家有所帮助&#xff01; &#x1f383;个人专栏&#xff1a; &#x1f42c; 算法设计与分析&#xff1a;算法设计与分析_IT闫的博客-CSDN博客 &#x1f433;Java…

Java 客户端调用 WebService 接口的一种方式

文章目录 1. SoapUI 测试 WebService 接口2. Java 访问 WebService 接口 1. SoapUI 测试 WebService 接口 通过SoapUI创建一个SOAP Project&#xff1b; 项目名称自定义&#xff0c;WSDL地址维护WebService接口地址。点击OK即可 项目创建完成后&#xff0c;展开WebService项&…

孙哥分布式VIP课程

杜绝一两门课程割韭菜&#xff0c;杜绝引流之后换老师&#xff0c;全行业唯一支持全套试听的良心课程。 你目前学习提高跳槽是否有如下痛点 1、网上开源课程“琳琅满目”&#xff0c;学完后还是掌握的不够扎实&#xff0c;理解的不够透彻&#xff0c;学无所成2、学了若干知识…

浏览器插件开发爬虫记录

常用爬虫有各种各样的反爬限制&#xff0c;而如果是小数据量并且该网站反爬手段非常厉害的前提下&#xff0c;可以考虑使用浏览器插件作为爬虫手段 基本代码来源于这位博主分享的插件代码&#xff0c; 主要在他的基础上加了 请求代理、管理面板、脚本注入拦截到的请求数据和管…

Windows服务器获取本地文件夹文件

1、直接复制粘贴 通过远程连接到这个服务器&#xff0c;然后本机到服务器能直接粘贴复制文件上去 注&#xff1a;首先服务器要先开启远程桌面哦 2、Windows远程连接 有的不能复制粘贴的&#xff0c;可以用第二种方法。 ①、windowsR,输入mstsc ②、点击“选项”按钮&#x…

linux中Crontab定时参数

注&#xff1a;图片转载于 点我进入图片出处 * * * * * sh /data/var/test.sh >> test_crontab_log.log分钟 0~59 0表示没分周 小时 0~23 0表示每小时 天 1~31 *表示每天 月 1~12 *表示每月 周 0~7 */0/7表示每周

pytorch实现经典神经网络:VGG16模型之初探

文章链接 https://blog.csdn.net/weixin_44791964/article/details/102585038?ops_request_misc%257B%2522request%255Fid%2522%253A%2522169675238616800211588158%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id16967523861680…

谷歌 Chrome 浏览器正推进“追踪保护”功能

导读近日消息&#xff0c;根据国外科技媒体 Windows Latest 报道&#xff0c;谷歌计划在 Chrome 浏览器中推进“追踪保护”&#xff08;Tracking Protection&#xff09;功能&#xff0c;整合浏览器现有隐私功能&#xff0c;保护用户被网站跟踪。 根据一项 Chromium 提案&…

Java List 中存不同的数据类型

在最近的实践中&#xff0c;有人突然问了一个问题&#xff1a; 在 Java 的 List 中可以存不同的数据类型吗&#xff1f; 这个问题突然给问到了&#xff0c;我们都知道 Java 中的 List 中存的是对象&#xff0c;通常我们定义都会这样的定义&#xff1a; List<String> t…

ycb数据集筛选

tain数据集&#xff1a; 03. 04. 05. 06. 07. 08. 09. 10. 11. 13 14 15peach桃子&#xff1a; 16 17orange橘子&#xff1a; 18plum李子&#xff1a; 21 24 26sponge&#xff1a; 29 33 35 37 40large marker 43.phillips screwdriver 48 52 55 56…

零基础教程:使用YOLOV7训练VisDrone数据集

1.源码地址&#xff1a; https://github.com/WongKinYiu/yolov7 下载之后解压 2.环境准备 1.用pycharm打开项目文件&#xff0c;选择自己的虚拟环境 2.下载项目所需要的包和权重文件 打开Terminal 输入以下命令&#xff1a; pip install -r requirements.txt 下载预训练权…

用Python开发QQ机器人详解

前言 虽然该文最终是达到以python开发mirai机器人的目的&#xff0c;但起步教程&#xff0c;尤其是环境配置上仍然有大量的相同操作&#xff0c;对其他编程语言仍有借鉴之处 假设你已经安装好了 Java、Python等运行必须的环境 mirai生态 mirai官方生态文档 要使用mirai开发Q…

第四届厦门国际银行数创金融杯建模大赛火热进行中!丰厚奖励等你来拿!

第四届厦门国际银行数创金融杯建模大赛火热进行中&#xff01;厦门国际银行联合厦门大学数据挖掘中心诚邀您一起用科技的力量&#xff0c;探索数据的奥秘。 本届大赛以实际金融业务场景中的文本识别作为主题&#xff0c;设置了高达38万元的丰厚奖金以及竞赛获奖证书&#xff0c…

pdf怎么转成jpg图片格式

pdf怎么转成jpg图片格式&#xff1f;对于大家平时在工作或者生活中的图片使用习惯&#xff0c;经常需要将各种格式的文件转换成易于浏览和使用的JPG格式图片以便保存。如今&#xff0c;因为pdf文件具有更强的稳定性和设备兼容性&#xff0c;PDF文件在平时的电脑使用过程中可以说…

AQS面试题

更多面试资料请添加wx&#xff1a;suns45 ———Java的AQS——— 1、AQS的理解 AQS是一个锁框架&#xff0c;提供了扩展地方 当多个线程抢锁时&#xff0c;获取不到锁的线程&#xff0c;AQS会自动管理 AQS是同步队列条件队列 AQS分为4个时机&#xff0c;获取锁&#xff0c…

国产化技术探究达梦8数据库搭建一主一从双机热备守护Data Watch集群搭建实战

国产化技术探究达梦8数据库搭建一主一从双机热备守护集群搭建实战 一、环境说明 服务器类型IP地址操作系统数据库实例名称主机172.18.21.144centos7DMSERVER备机172.18.21.147centos7DMSERVER2 参数主库备库实例名称DMSERVERDMSERVER 2IP172.18.21.144172.18.21.147OGUID453…