C语言基础练习——Day05

目录

选择题

编程题

数字在升序数组中出现的次数

整数转换


选择题

1、如下程序的功能是

#include <stdio.h>
int main()
{char ch[80] = "123abcdEFG*&";int j;puts(ch);for(j = 0; ch[j] != '\0'; j++){if(ch[j] >= 'A' && ch[j] <= 'Z')ch[j] = ch[j] + 'e' - 'E';}puts(ch);return 0;
}
  • A 测字符数组ch的长度
  • B 将数字字符串ch转换成十进制数
  • C 将字符数组ch中的小写字母转换成大写
  • D 将字符数组ch中的大写字母转换成小写
答案:D
💡

解析:

在ASCII中,大写字母和小写字母相差32,故有'e'-'E'为32,而在条件判断语句的条件中,只有当数组元素为大写字母才会进入分支,故字符数组中的每一个大写字母都会加上32,即转化为其对应的小写字母

2、对于代码段,下面描述正确的是

t=0;
while(printf("*"))
{t++;if (t<3)break;
}
  • A 其中循环控制表达式与0等价
  • B 其中循环控制表达式与'0'等价
  • C 其中循环控制表达式是不合法的
  • D 以上说法都不对
答案:B
💡

解析:

printf(“*”)函数调用的返回值是字符串中字符的个数,即为1。所以while后面的条件恒为真,所以循环控制表达式与'0'是等价的(字符'0'不是0)

3、以下程序运行时,若输入 1abcedf2df<回车> 输出结果是

#include <stdio.h>
int main()
{char ch;while((ch = getchar()) != '\n'){if(ch % 2 != 0 && (ch >= 'a' && ch <= 'z'))ch = ch 'a' + 'A';putchar(ch);}printf("\n");return 0;
}
  • A 1abcedf2df
  • B 1ABCEDF2DF
  • C 1AbCEdf2df
  • D 1aBceDF2DF
答案:C
💡

解析:

程序首先考虑ch的ASCII 码值是不是奇数,再看是不是小写字母,同时满足时被改为大写字母

4、下列条件语句中,功能与其他语句不同的是

  • A if(a) printf("%d\n",x); else printf("%d\n",y);
  • B if(a==0) printf("%d\n",y); else printf("%d\n",x);
  • C if (a!=0) printf("%d\n",x); else printf("%d\n",y);
  • D if(a==0) printf("%d\n",x); else printf("%d\n",y);
答案:D
💡

解析:

除了D选项以外,其他都是a==0时输出ya!=0时输出x

5、(多选题)我们知道C语言的 break 语句只能跳出离它最近的一层循环,可是有时候我们需要跳出多层循环,下列跳出多层循环的做法正确的是

  • A 将程序写成函数用return结束函数,便可跳出循环
  • B 修改外层循环条件例如
for( int i = 0 ; i < MAX1 ; i ++ )
{for( int j = 0 ; j < MAX2 ; j ++ ){if(condition){i = MAX1;break;}}
}
  • C 在外层循环设置判断条件例如
for( ; symbo != 1 && condition2; )
{for( ; symbo != 1 && condition3; ){if(condition1)symbol = 1;}
}
  • D 在外层循环后面加入break例如
for( ; condition2; )
{for( ; condition3; ){if(condition1)symbol = 1;}if(symbol == 1)break;
}
答案:ABCD
💡

解析:

当循环被封装到函数中时,因为return语句可以结束函数的继续执行,故可以跳出循环;对于B选项来说,因为第一层循环满足i<MAX1时才会继续执行,而在if中,讲MAX1的数值给了ibreak,首先会推出内层循环,其次因为i等于MAX1导致第一个循环也结束执行,所以跳出循环;对于C选项来说,if语句中将symbol的值改为了1,导致两层循环的判断条件都为假,从而跳出循环;对于D选项来说,break在外层循环,可以跳出该层循环,同时直接终止所有内层循环执行

编程题

数字在升序数组中出现的次数

题目链接:数字在升序数组中出现的次数_牛客题霸_牛客网 (nowcoder.com)

描述
给定一个长度为 n 的非降序数组和一个非负数整数 k ,要求统计 k 在数组中出现的次数

数据范围:0≤ n≤1000,0≤ k≤100,数组中每个元素的值满足0≤ val≤100
要求:空间复杂度 O(1),时间复杂度 O( logn)

思路解析:

第一种思路,通过双指针法进行求解,一个指针left从数组的左侧向中间寻找,另一个指针right从数组的右侧向中间寻找,当两个指针各自遇到了等于数值k时,计数器各加1,但是这个方法存在一个问题,如果数组中只有一个数据时,并且这个数据等于k,那么left指针会加1次,right指针也会加1次导致多次计算,使用在循环判定时,不要使用等于,将二者相等作为退出循环条件,此时再出现上面的情况时,只需要单独计数器加1即可

第二种思路,使用二分查找算法进行求解,因为题目给定的数组是一个非降序的数组,但是二分查找算法不可以直接查找存在大量重复数值的数组,使用此题不能通过二分查找直接找等于k的数值。那么此题如何使用二分算法求解,可以考虑下面的思路:通过二分查找算法找到k值的边界值的下标,包括上界下标和下界下标,两个界限下标的差值即为等于k出现的次数,可以考虑使用k+0.5k-0.5来作为边界值,具体思路如下:

参考代码

第一种方法

/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可** * @param nums int整型一维数组 * @param numsLen int nums数组长度* @param k int整型 * @return int整型*/
int GetNumberOfK(int* nums, int numsLen, int k ) {int left = 0;int right = numsLen - 1;int count = 0;while (left < right) {if(nums[left] == k){count++;}if(nums[right] == k){count++;}left++;right--;}if(left == right && nums[left] == k){count++;}return count;
}

第二种方法

/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可** * @param nums int整型一维数组 * @param numsLen int nums数组长度* @param k int整型 * @return int整型*/
//二分查找
int BinarySearch(int* nums, int numsLen, double k)
{int left = 0;int right = numsLen - 1;while (left <= right) {int mid = (left + right) / 2;if(nums[mid] > k){right = mid - 1;}else if (nums[mid] < k) {left = mid + 1;}}//返回 left 而不是 midreturn left;
}
int GetNumberOfK(int* nums, int numsLen, int k ) {return BinarySearch(nums, numsLen, k+0.5)-BinarySearch(nums, numsLen, k-0.5);
}

整数转换

题目链接:面试题 05.06. 整数转换 - 力扣(LeetCode

整数转换。编写一个函数,确定需要改变几个位才能将整数A转成整数B。
示例1:
输入:A = 29 (或者0b11101), B = 15(或者0b01111)
输出:2

示例2:
输入:A = 1,B = 2
输出:2

提示:
A,B范围在[-2147483648, 2147483647]之间

思路解析:

本题可以考虑使用异或操作找出两个数值之间不同的位置,根据异或的特点,两个数存在相异的位置时异或结果为1,接着因为整数的比特位个数在力扣上是32位,故可以考虑右移i位与1相与,如果结果为1,那么说明是不同的位置,否则是相同的位置,记录不同的位置即可

参考代码

/** @lc app=leetcode.cn lang=c** 整数转换*/// @lc code=startint convertInteger(int A, int B){int ret = A^B;int count = 0;for(int i = 0; i < 32; i++){if((ret >> i) & 1 == 1){count++;}}return count;
}
// @lc code=end

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

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

相关文章

智能测径仪在胶管行业的应用

关键字&#xff1a;胶管外径尺寸测量&#xff0c;胶管检测仪器&#xff0c;胶管外径检测&#xff0c;高温胶管外径检测&#xff0c;软硬胶管检测&#xff0c; 智能测径仪在家胶管行业中的应用主要体现在对胶管外径的精确测量和控制上。在胶管生产过程中&#xff0c;外径的大小直…

dubbo调用的自定义过滤器中设置MDC无法生效的问题

AI的解释 Dubbo自定义过滤器不生效可能有多种原因&#xff0c;以下是一些常见的原因及解决方法&#xff1a; 过滤器未正确配置&#xff1a; 检查过滤器是否已经在Dubbo的配置文件中正确声明&#xff0c;并且已经添加到过滤器链中。在XML配置中&#xff0c;应使用<dubbo:se…

Python3虚拟环境之pipenv

pipenv是python官方推荐的包管理工具&#xff0c;集成了virtualenv, pip和pyenv三者的功能。集合了所有的包管理工具的长处&#xff0c;自动为项目创建和管理虚拟环境。 安装 pip install pipenv在Pycharm中使用 修改Pipfile的安装源参数url&#xff0c;改为https://pypi.tun…

Valid8Proxy:一款功能强大的工作代理获取、验证和存储工具

关于Valid8Proxy Valid8Proxy是一款功能强大且用户友好的代理管理工具&#xff0c;该工具功能丰富&#xff0c;旨在帮助广大研究人员获取、验证和存储工作代理的相关信息。 无论你是需要用于网络资源爬取、网络数字匿名化还是测试网络安全的代理&#xff0c;Valid8Proxy都可以…

应用方案 |安防摄像头(IPC)的步进马达及IR-CUT驱动芯片D6212

应用领域 安防摄像头&#xff08;IPC&#xff09;的步进马达及IR-CUT驱动。 02 功能介绍 D6212内置8路带有续流二极管的达林顿驱动管阵列和一个H桥驱动&#xff0c;单芯片即可实现2个步进电机和一个IR-CUT的直接驱动&#xff0c;使得电路应用非常简单。单个达林顿管在输入…

java异常概述及自定义处理

前言 学到异常了&#xff0c;本来以为处理异常只是避免bug&#xff0c;结果发现还可以为了编程需要自定义异常。打好基础&#xff0c;daydayup! 异常 什么是异常 异常就是代表程序出现的问题 异常的体系 异常体系指的是java开发人员为了方便程序员使用所开发的异常类&#xff…

【喜报!】科大睿智为企业成功通过CMMI5级评估!

山东智云信息科技有限公司成立于2011年&#xff0c;总部地处泉城济南&#xff0c;一直专注于生态环境信息化领域解决方案的咨询设计、产品研发、项目实施和系统集成类服务&#xff0c;致力于成为固定污染源监管与非现场精准执法领域的领军企业。 山东智云拥有100余名生态环境信…

C++ 作业 24/3/11

1、提示并输入一个字符串&#xff0c;统计该字符中大写、小写字母个数、数字个数、空格个数以及其他字符个数&#xff08;要求使用C风格字符串完成&#xff09; #include <iostream>using namespace std;int main() {string str;cout << "please enter str:&…

0基础、适合转行学Python吗?

01 对于0基础的人&#xff0c;直接学 Python 编程合适吗&#xff1f; 在目前的编程语言中&#xff0c;Python的抽象程度是最高的&#xff0c;是最接近自然语言的&#xff0c;非常容易上手&#xff0c;Python 可以让你更好的理解编程这件事情。 所以&#xff0c;我只能说非常…

最新免费好用的手机数据恢复软件EasyRecovery易恢复 2024

easyrecovery pro在easyrecovery的基础上进行了全新的升级&#xff0c;对于可恢复的内容进行了深度的开发&#xff0c;easyrecovery pro相比较旧版的easyrecovery而言&#xff0c;可恢复的选项更多&#xff0c;时间跨度也更长。easyrecovery pro简介&#xff1a;1、非常强大的数…

掼蛋的牌型与规律(下篇)

一、三不带 一般出三不带有几种情况&#xff1a;没有对子配、对子和三张数量不匹配、对子成了三连对、对子太大。作为发牌方&#xff0c;首发三不带可以迷惑对手。三不带打出来很难处理&#xff0c;如果接了三不带可能就会将小对子留下&#xff0c;不接又不甘心让对方继续有出牌…

知识积累(四):无

文章目录 1. KL散度2. GELU 激活函数3. 向量运算4. bert4.1 词嵌入4.2 cross-encoder 模型4.3 bert 架构4.4 bert 池化操作 5. Fid 模型&#xff08;Fusion-in-Decoder&#xff09;6. 多分类损失函数6.1 交叉熵损失6.2 softmax 损失 7. t-sne8. NDCG参考资料 1. KL散度 衡量两…

【开发】JavaWeb开发中如何解析JSON格式数据

目录 前言 JSON 的数据类型 Java 解析 JSON 常用于解析 JSON 的第三方库 Jackson Gson Fastjson 使用 Fastjson Fastjson 的优点 Fastjson 的主要对象 JSON 接口 JSONObject 类 JSONArray 类 前言 1W&#xff1a;什么是JSON&#xff1f; JSON 指 JavaScrip t对象表…

业界主流数据加速技术路线

计算存储分离已经成为云计算的一种发展趋势。在计算存储分离之前&#xff0c;普遍采用的是传统的计算存储相互融合的架构&#xff0c;但是这种架构存在一定的问题&#xff0c;比如在集群扩容的时候会面临计算能力和存储能力相互不匹配的问题。用户在某些情况下只需要扩容计算能…

交流负载箱的特点和优势有哪些?

交流负载箱广泛应用于电力系统、新能源、轨道交通、航空航天等领域。它具有以下特点和优势&#xff1a; 1. 灵活性高&#xff1a;交流负载箱可以根据实际需求&#xff0c;调整输出电流、电压、功率等参数&#xff0c;以满足不同场景下的测试需求。同时&#xff0c;它还可以实现…

App自动化测试之Appium 环境搭建保姆级教程(全网最全)

前言 APP自动化测试运行环境比较复杂&#xff0c;稍微不注意安装就会失败。我见过不少朋友&#xff0c;装了1个星期&#xff0c;Appium 的运行环境还没有搭好的。 搭建环境本身不是一个有难度的工作&#xff0c;但是 Appium 安装过程中确实存在不少隐藏的比较深的坑&#xff…

低代码平台如何选型 盘点国内外主流低代码开发平台

随着数字化转型的加速&#xff0c;低代码开发平台作为一种新型软件开发方式&#xff0c;受到了广泛关注。国内低代码市场也呈现出蓬勃发展的态势&#xff0c;各种低代码平台如雨后春笋般涌现。本文将对国内低代码平台进行盘点&#xff0c;以帮助企业和开发者更好地了解市场情况…

strstr函数、chdir函数、access函数、strdup函数的介绍

1、strstr函数 strstr 是 C 语言中的一个字符串处理函数&#xff0c;用于在一个字符串中查找子字符串的第一次出现。 函数原型 char *strstr(const char *haystack, const char *needle); haystack&#xff1a;要在其中搜索的字符串。needle&#xff1a;要查找的子字符串。 函…

如何正确选择国外服务器的带宽和线路呢?

国外大带宽服务器是一种提供高带宽、高速网络连接和良好稳定性的服务器&#xff0c;但在中国使用这类服务器可能涉及到违反法律法规的风险。因此我无法为你提供相关帮助。接下来和源库一起了解如何正确选择国外服务器的带宽和线路呢? 考虑目标用户的地理位置。如果目标用户主要…

Facebook、亚马逊账号如何养号?

之前我们讨论过很多关于代理器的问题。它们的工作原理是什么?在不同的软件中要使用那些代理服务器?这些代理服务器之间的区别是什么?什么是反检测浏览器等等。 除了这些问题&#xff0c;相信很多人也会关心在使用不同平台的时代理器的选择问题。比如&#xff0c;为什么最好…