【C/C++笔试练习】——printf在使用%的注意事项、for循环语句的三个条件、运算符优先级、删除公共字符

news2024/11/24 17:53:28

文章目录

  • C/C++笔试练习
    • 1.%符号在printf用作格式说明符的注意事项
      • (1)输出%5.3s
      • (2)判断%中小数点含义
    • 2.for循环语句的三个条件
      • (3)判断循环次数
      • (4)判断循环次数
    • 3.运算符优先级
      • (5)判断运算符优先级
    • 4.编程题
      • (6)删除公共字符

C/C++笔试练习

1.%符号在printf用作格式说明符的注意事项

(1)输出%5.3s

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

#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

  

   %m.ns:

  m:输出字符串的宽度

  n:左起截取目标字符串n个字符,并且是右对齐,如果实际字符串长度不足3,则会在右侧用空格填充。

   所以%5.3s在C语言中表示一个字符串宽度为5,其中包括3个字符和2个空格。如果实际字符串长度不足3,则会在右侧用空格填充。

   答案选:B

在这里插入图片描述

                   

(2)判断%中小数点含义

  使用printf函数打印一个double类型的数据,要求:输出为10进制,输出左对齐30个字符,4位精度。以下哪个选项是正确的?

  A %-30.4e      B %4.30e
  C %-30.4f      D %-4.30f

   %-30.4f 中的 %-30 表示左对齐且总宽度为30个字符。

   .4 表示小数点后有4位。

   f 表示浮点数,即 double 类型。

   答案选:C

                   

   在C语言中,%符号用于格式说明符,用于指定输入或输出的数据类型和格式。

   . 表示精度,指定了小数点后的位数或字符串中的最大字符数。

   例如:

   %5.3s表示一个字符串宽度为5,其中包括3个字符和2个空格。如果实际字符串长度不足3,则会在右侧用空格填充。

   %5.3f表示一个浮点数宽度为5,其中包括3位小数和2位整数。如果实际数字不足5位,则会在左侧用空格填充。

   需要注意的是,在%d、%c等格式说明符中,.并没有实际意义,因为这些格式说明符不支持小数点后的精度。
  

   以下是C语言中常见的%打印格式及其含义:

%打印格式含义
%d:打印十进制整数。
%f:打印浮点数。
%c:打印字符。
%s:打印字符串。
%u:打印无符号十进制整数。
%x:打印十六进制整数。
%o:打印八进制整数。
%e:打印科学计数法表示的浮点数。
%g:自动选择%f或%e输出。
%p:打印指针地址。
%%:打印一个%符号。

  

   这些格式说明符可以与一些标志字符一起使用,以控制输出格式,如:

标志字符输出格式
-:左对齐输出。
+:在正数前加正号。
空格:在正数前加空格。
#:对于%o,输出前导零;对于%x和%X,输出前导0x或0X。
0:用0填充输出的数字。

                 

2.for循环语句的三个条件

在这里插入图片描述

(3)判断循环次数

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

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

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

   在循环开始前,x和y都被初始化为0。然后,循环条件为 (y = 123) && (x < 4)。首先,y = 123是一个赋值操作,它将y的值设置为123,然后返回123。因此,循环条件中的y = 123始终为真。

   其次,x < 4 是一个比较操作,它检查x的值是否小于4。在每次循环迭代后,x的值增加1(因为在for循环的第三个部分中没有对x进行修改)。因此,循环将执行4次,直到x的值达到4,此时循环条件不再为真,循环终止。

   答案选:C
  

(4)判断循环次数

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

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

int main()
{
	cout << (func());
	return 0;
}

   A -1       B 0
   C 1       D 2

  同理这段代码中的函数 func 包含一个 for 循环,该循环的初始条件是 j = -1,并且在每次迭代中 j 的值都会增加 1。循环的终止条件是 j = 0,这意味着当 j 的值变为 0 时,循环将停止。

  然而 j 的值在开始就赋值为了 -1 ,在条件判断中 j =0 为假,所以根本不会进入到这个循环中,直接跳出,k=0。

   答案选:B

                 

3.运算符优先级

(5)判断运算符优先级

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

   A *p+=1;       B (*p)++;
   C ++(*p)       D *p++

  

   A、*p+=1; 等价于 *(p+1),先解引用得到year的值,然后增加1,再赋值给year,year的值变为1010,可以;

   B、(*p)++; 等价于 *(p+1),先解引用得到year的值,然后增加1,再赋值给year,year的值变为1010,可以;

   C、++(*p) 等价于 ++(year),先解引用得到year的值,然后增加1,再赋值给year,year的值变为1010,可以;

   D、*p++ 等价于 *p再对p++,先解引用得到year的值,然后p指针向后移动一位,year不变,所以D不可以。

   答案选:D
  
在这里插入图片描述
  
在这里插入图片描述
              

4.编程题

(6)删除公共字符

删除公共字符

   暴力解法

   本题可以使用传统的暴力查找方式,判断第一个串的字符是否在第二个串中,在再挪动字符删除这个字符的方式,时间复杂度为O(N^2),效率比较低。

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

int main() {
    string str1;
    string str2;
    getline(cin,str1);//使用getline可以输入空格
    getline(cin,str2);
    for(int i=0;i<str1.size();i++)//暴力查找
    {
        for(int j=0;j<str2.size();j++)//有一样的数字就删除
        {
            if(str1[i]==str2[j])
            {
                str1.erase(i,1);
            }
        }
    }
    cout<<str1;
    return 0;
}

  
   哈希表

   1.将第二个字符串的字符都映射到一个hashtable数组中,用来判断一个字符在这个字符串。

  2.判断一个字符在第二个字符串,不要使用删除,这样效率太低,因为每次删除都伴随数据挪动。这里可以考虑使用将不在字符添加到一个新字符串,最后返回新新字符串。

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

int main() {
    //IO输入字符串最好使用getline。
    string str1, str2;
    getline(cin, str1);
    getline(cin, str2);
    
    //使用哈希映射思想先str2统计字符出现的次数
    int hashtable[256] = {0};
    for (size_t i = 0; i < str2.size(); ++i) 
    {
        hashtable[str2[i]]++;
    }

    //遍历str1,str1[i]映射hashtable对应位置为0,则表示这个字符在
    //str2中没有出现过,则将他+=到ret。注意这里最好不要str1.erases(i)
    //因为边遍历,边erase,容易出错。
    string ret;
    for (size_t i = 0; i < str1.size(); ++i) 
    {
        if (hashtable[str1[i]] == 0)
            ret += str1[i];
    }
    
    cout << ret << endl;
    return 0;
}

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

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

相关文章

交换奇偶位:交换一个整数的二进制的奇偶位置(仅考虑正数情况)

方法二&#xff1a; 设计思想&#xff1a; 0xAAAAAAAA 的二进制表示为 10101010...&#xff08;从最低位开始&#xff09; 0x55555555 的二进制表示为 01010101...&#xff08;从最低位开始&#xff09; 问题&#xff1a;更加想不到掩码&#xff01;&#xff01;&#xf…

JVM——11.JVM小结

这篇文章我们来小结一下JVM JVM&#xff0c;即java虚拟机&#xff0c;是java代码运行时的环境。我们从底层往上层来说&#xff0c;分别是硬件部分&#xff0c;操作系统&#xff0c;JVM&#xff0c;jre&#xff0c;JDK&#xff0c;java代码。JVM是直接与操作系统打交道的。JVM也…

数据结构:二叉树的基本概念

文章目录 1. 二叉树的定义2. 二叉树的特点3. 特殊二叉树斜树满二叉树完全二叉树 4. 二叉树的性质 1. 二叉树的定义 如果我们猜一个100以内的数字,该怎么猜才能理论最快呢? 第一种方式:从1,2一直猜到100, 反正数字都是100以内,总能猜到的 第二种方式:先猜50,如果比结果小,猜75…

【WPF】填坑 - WindowChrome 自定义窗口完美实现

【WPF】填坑 - WindowChrome 自定义窗口完美实现 概述Demo 说明基本样式资源布局ShellView Style界面元素修正Command BindingCommand 实现 效果 概述 前面写过一篇关于在 WPF 中通过对 WindowChrome 的操作实现自定义窗口并保留一部分的系统功能。 【WPF】WindowChrome 自定义…

虚幻4学习笔记(13)用户UI 交互动画、制作2D UI、制作3D UI

虚幻4学习笔记 制作2D UIUI 主菜单制作UI动画 和 暂停游戏 制作3D UI B站UP谌嘉诚课程&#xff1a;https://www.bilibili.com/video/BV164411Y732 制作2D UI 导入图片 新建 用户界面-控件蓝图 双击打开 拖入image 参数设置 SizeX1920 SizeY1080 选择对焦居中点 右下角平铺 参…

【Acwing1027】方格取数(动态规划)题解

题目描述 思路分析 错误思路&#xff1a; 贪心法&#xff0c;先走一次求出最大值&#xff0c;把走过的路上面的数值清零&#xff0c;然后用同样的方法再走一遍求最大值&#xff0c;然后让这两个最大值相加就是最后的结果。 很多人在看到这个题目的时候会有上面的思路&#x…

微信小程序开发学习

模板与绑定 1.数据绑定 1&#xff09;在data中定义数据 在页面对应的.js文件中把数据定义到data对象中即可 2&#xff09;在WXML中使用数据 把data中的数据绑定到页面中渲染&#xff0c;使用Mustache&#xff08;双大括号{{}}&#xff09;将变量名包起来即可&#xff0c;格式…

AHK c++ 禁用鼠标设备实现完美息屏(不是休眠)

如何实现完美息屏呢&#xff1f;虽然可以用ahk实现息屏&#xff0c;但桌子一晃动&#xff0c;鼠标稍微偏移一下&#xff0c;又亮了&#xff0c;导致息屏无效&#xff01; win10 更新了设备管理器&#xff0c;现在可以禁用鼠标设备了。以前这里是灰色的。 c 禁用鼠标 那么&…

第二章 进程与线程 十七、用信号量实现进程互斥、进程同步、进程的前驱关系

一、实现进程互斥 1、过程 &#xff08;1&#xff09;分析并发进程的关键活动&#xff0c;划定临界区&#xff08;如:对临界资源打印机的访问就应放在临界区) &#xff08;2&#xff09;设置互斥信号量mutex&#xff0c;初值为1 &#xff08;3&#xff09;在进入区P(mutex)…

网工基础知识——以太网

1972年Bob Metcalfe“以太网之父”被Xerox雇佣为网络专家&#xff0c;Bob Metcalfe 来到Xerox公司的Palo Alto研究中心&#xff08;PARC&#xff09;的第一个任务是把Palo Alto的计算机连接到ARPANET&#xff08;Internet的前身&#xff09;上。1972年底Bob Metcalfe以ALOHA系统…

基于OSATE环境的AADL项目——简单的项目构建与分析示例

一、背景 本文描述了一个非常简单的AADL项目的构建&#xff0c;以及一个示例项目的分析过程。本文主要记录了OSATE工具环境的一些基本操作&#xff0c;适用于刚刚了解OSATE之后&#xff0c;对于整个工具环境无从下手的小白。 因为基于OSATE环境的AADL项目的构建和分析的详细示…

VRRP DHCP ACL NAT 网络核心路由技术综述 (第十课)

VRRP DHCP ACL NAT 网络核心技术综述 (第十课) 六大路由基础技术 简单的利用思维导图回顾 1 浮动路由 2 VRRP 技术==>目的是备份网关

2023-09-20 LeetCode每日一题(拿硬币)

2023-09-20每日一题 一、题目编号 LCP 06. 拿硬币二、题目链接 点击跳转到题目位置 三、题目描述 桌上有 n 堆力扣币&#xff0c;每堆的数量保存在数组 coins 中。我们每次可以选择任意一堆&#xff0c;拿走其中的一枚或者两枚&#xff0c;求拿完所有力扣币的最少次数。 示…

Lnmp架构之mysql数据库实战2

4、mysql组复制集群 一主多从的请求通常是读的请求高于写 &#xff0c;但是如果写的请求很高&#xff0c;要求每个节点都可以进行读写&#xff0c;这时分布式必须通过&#xff08;多组模式&#xff09;集群的方式进行横向扩容。 组复制对节点的数据一致性要求非常高&#xff…

Python多重继承

前面介绍的大部分的继承都是单继承&#xff0c;既一个子类只有一个父类&#xff0c;但是Python也支持多重继承&#xff0c;即一个子类可以有多个父类。多继承有复杂的父类冲突问题&#xff0c;大部分的面向对象语言都仅仅支持单继承&#xff0c;Python是为数不多支持多继承的语…

Python 判断回文数

"""判断输入的数是否为回文数介绍&#xff1a;回文数&#xff1a;数字从高位到低位正序排列和低位到高位逆序排列都是同一数值例如&#xff1a;数字 1221 无论正序还是逆序都是 1221知识点&#xff1a;1、获取字符串长度函数len()2、条件语句if/elif/else3、循环…

MySQL 高级(进阶) SQL 语句(二) -----存储过程

目录 1 存储过程 1.1 创建存储过程​ 1.2 调用存储过程 1.3 查看存储过程 1.4 存储过程的参数 1.5 修改存储过程 1.6 删除存储过程 2 条件语句 3 循环语句 1 存储过程 存储过程是一组为了完成特定功能的SQL语句集合。 存储过程在使用过程中是将常用或者复杂的工作预…

常用的软件项目管理工具有哪些?

在软件项目管理中&#xff0c;项目计划是工作中非常重要的一环&#xff0c;因此在选择软件项目管理工具时&#xff0c;除了任务管理、进度跟踪外&#xff0c;还需要关注软件的项目计划能力。 软件项目管理的工具有哪些&#xff1f;有什么好用的软件项目管理工具吗&#xff1f;…

windows 深度学习环境部署

1. 根据显卡配置安装适合的CUDA,查看显卡配置可在显卡控制面板上查看,安装是否成功可通过nvidia-smi查看&#xff1b;注意安装路径 https://developer.nvidia.com/cuda-toolkit-archive 2. 根据cuda安装合适的cudnn&#xff0c;需要注册NVIDIA cuDNN Archive | NVIDIA Devel…

记录一次关于嵌套事务传播机制的bug

1、具体问题 这段代码是A嵌套B&#xff0c;B嵌套C&#xff0c;遇到的bug是C代码发生异常进行事务标记&#xff08;因为使用的传播行为是默认的REQUIRED所以要等A事务进行rollback,C加入了A事务只能暂时进行标记&#xff09;,但是由于B代码进行了异常捕获返回给了A信息并没有抛…