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

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

文章目录

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

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
  
在这里插入图片描述
  
在这里插入图片描述
              

(6)判断优先级再计算大小

  32位系统中,定义**a[3][4],则变量占用内存空间为()。

  A 4      B 48
  C 192     D 12

  因为 [ ] 的优先级高于 * ,所以a先和 [ ] 结合,所以a是数组;

  在32位系统中,指针大小是4,此时a是一个二维数组a[3][4],每个数组元素是一个**类型变量,每个元素是一个二级指针,占用4个字节。整个数组a包含3行4列,共12个元素,所以整个数组占用的内存空间为12*4=48个字节。

   答案选:B

              

4.编程题

(7)删除公共字符

删除公共字符

   暴力解法

   本题可以使用传统的暴力查找方式,判断第一个串的字符是否在第二个串中,在再挪动字符删除这个字符的方式,时间复杂度为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.lryc.cn/news/177072.html

相关文章:

  • Linux部署elk日志监控系统
  • LINUX -SQL笔记(自学用)
  • 【Spark】win10配置IDEA、saprk、hadoop和scala
  • MQTT 协议概要
  • 向量数据库X云计算驱动大模型落地电商行业,Zilliz联合AWS探索并贡献成熟解决方案
  • 【vue2】解决Vuex刷新页面数据丢失的问题
  • 小皮面板配置Xdebug,调试单个php文件
  • 版本控制系统:Perforce Helix Core -2023
  • 回归预测 | Matlab实现基于MIC-BP最大互信息系数数据特征选择算法结合BP神经网络的数据回归预测
  • Hive-命令行CDH访问开启kerberos的hive
  • 手机能搜到某个wifi,电脑搜不到解决方法(也许有用)
  • Java-day18(网络编程)
  • Java多线程编程-栅栏CyclicBarrier实例
  • 【100天精通Python】Day67:Python可视化_Matplotlib 绘制动画,2D、3D 动画 示例+代码
  • 变量、常量以及与其他语言的差异 - Go语言从入门到实战
  • Android 编译插桩操纵字节码
  • 云原生的简单理解
  • AVL Cruise 2020.1 安装教程
  • 数组07-滑动窗口、HashMap
  • 【C++杂货店】类和对象(上)
  • K8S笔记
  • MySQL关于日期函数的使用-笔记
  • 【postgresql 】 ERROR: “name“ is not supported as an alias
  • 都用HTTPS了,还能被查出浏览记录?
  • vi配置文件.vimrc内容示例
  • MacOS上的Pip和Python升级指南
  • VB6.0实现修改EXE程序的图标
  • Python 编程基础 | 第二章-基础语法 | 2.3、for 语句
  • linux下解决tomcat错误问题
  • PMP证书的价值如何?