C语言基础练习——Day05

news2024/12/23 8:24:49

目录

选择题

编程题

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

整数转换


选择题

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 而不是 mid
    return 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=start

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

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

相关文章

【考研数学】张宇学习包

张宇的授课侧重于启发学生的综合思维能力。对于基础较好的学生而言&#xff0c;在听完他的课后&#xff0c;解题通常不会构成太大问题&#xff0c;而且可以学到许多解题技巧&#xff0c;其中包括张宇老师创造的易记的“点火公式”。 然而&#xff0c;对于基础较薄弱的学生来说…

STM32CubeIDE基础学习-STM32CubeIDE软件偏好设置

STM32CubeIDE基础学习-STM32CubeIDE软件偏好设置 文章目录 STM32CubeIDE基础学习-STM32CubeIDE软件偏好设置前言第1章 设置字体颜色第2章 设置字体大小第3章 设置代码区背景颜色总结 前言 编程软件环境最好就设置一个自己喜欢的界面进行显示&#xff0c;这样看起来会比较舒服些…

【fastllm】学习框架,本地运行,速度还可以,可以成功运行chatglm2模型

1&#xff0c;关于 fastllm 项目 https://www.bilibili.com/video/BV1fx421k7Mz/?vd_source4b290247452adda4e56d84b659b0c8a2 【fastllm】学习框架&#xff0c;本地运行&#xff0c;速度还可以&#xff0c;可以成功运行chatglm2模型 https://github.com/ztxz16/fastllm &am…

【你也能从零基础学会网站开发】Web建站之javascript入门篇 Array数组

&#x1f680; 个人主页 极客小俊 ✍&#x1f3fb; 作者简介&#xff1a;web开发者、设计师、技术分享 &#x1f40b; 希望大家多多支持, 我们一起学习和进步&#xff01; &#x1f3c5; 欢迎评论 ❤️点赞&#x1f4ac;评论 &#x1f4c2;收藏 &#x1f4c2;加关注 数组概述 …

Vue+SpringBoot打造农家乐订餐系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 用户2.2 管理员 三、系统展示四、核心代码4.1 查询菜品类型4.2 查询菜品4.3 加购菜品4.4 新增菜品收藏4.5 新增菜品留言 五、免责说明 一、摘要 1.1 项目介绍 基于JAVAVueSpringBootMySQL的农家乐订餐系统&#xff0c…

RabbitMQ 安装登陆 提示:User can only log in via localhost

RabbitMQ默认提供了一个guest/guest用户&#xff0c;但是从3.3.0 版本以后该账号只能localhost登陆&#xff08;User can only log in via localhost&#xff09; 解决办法&#xff1a;通过命令行创建一个管理员账号 通过以下命令创建一个用户user&#xff0c;密码为user12345…

LVGL在VScode中安装模拟器运行配置笔记教程

1、LVGL模拟器工程搭建 LVGL(Light and Versatile Graphics Library,轻巧而多功能的图形库)是一个免费的开放源代码图形库,它提供创建具有易于使用的图形元素,精美的视觉效果和低内存占用的嵌入式GUI所需的一切。本文主要讲述如何实现在VScode中实现LVGL模拟器环境的搭建运行。…

开源是什么?——跟老吕学Python编程

开源是什么&#xff1f;——跟老吕学Python编程 开源是什么&#xff1f;开放源代码软件是什么&#xff1f;开源软件许可证是什么&#xff1f;开放源代码软件是什么&#xff1f;开放源代码的软件代表有什么&#xff1f;开放源代码软件与自由软件的概念 开源的定义是什么&#xf…

【Linux】第四十二站:线程局部存储与线程分离

一、线程的局部存储 1.实现多线程 如果我们想创建多线程&#xff0c;我们可以用下面的代码类似去实现 #include <iostream> #include <pthread.h> #include <string> #include <cstdlib> #include <unistd.h> #include <thread> #inclu…

AI智能答题系统是什么?

AI智能答题系统是一种基于人工智能技术的智能问答系统&#xff0c;旨在提供精准、高效的答题解答服务。该系统利用自然语言处理&#xff08;NLP&#xff09;、机器学习、知识图谱等多种技术&#xff0c;可以理解用户提出的问题&#xff0c;并在庞大的知识库或数据集中查找相关信…

鸿蒙报错:Hhvigor Update the SDKs by going to Tools > SDK Manager....

鸿蒙报错&#xff1a;Hhvigor Update the SDKs by going to Tools > SDK Manager… 打开setting里面的sdk&#xff0c;将API9工程下的全部勾上&#xff0c;应用下载 刚打开 js 和 Native 是没勾上的

LeetCode-102.题: 二叉树的层序遍历(原创)

【题目描述】 给你二叉树的根节点 root &#xff0c;返回其节点值的 层序遍历 。 &#xff08;即逐层地&#xff0c;从左到右访问所有节点&#xff09;。 示例 1&#xff1a; 输入&#xff1a;root [3,9,20,null,null,15,7] 输出&#xff1a;[[3],[9,20],[15,7]] 【题目链接…

Linux进程概念僵尸进程孤儿进程

文章目录 一、什么是进程二、进程的状态三、Linux是如何做的&#xff1f;3.1 R状态3.2 S状态3.3 D状态3.4 T状态3.5 t状态3.6 X状态3.7 Z状态 四、僵尸进程4.1 僵尸进程危害 五、孤儿进程 一、什么是进程 对于进程理解来说&#xff0c;在Windows上是也可以观察到的&#xff0c…

数据结构与算法第三套试卷小题

1.删除链表节点 **分析&#xff1a;**首先用指针变量q指向结点A的后继结点B&#xff0c;然后将结点B的值复制到结点A中&#xff0c;最后删除结点B。 2.时间复杂度的计算 **分析&#xff1a;**当涉及嵌套循环的时候&#xff0c;我们可以直接分析内层循环即可&#xff0c;看内…

sql注入基础学习

1.常用SQL语句 01、显示数据库 show databases&#xff1b; 02、打开数据库 use db name&#xff1b; 03、显示数据表 show tables&#xff1b; 04、显示表结构 describe table_name&#xff1b; 05、显示表中各字段信息&#xff0c;即表结构 show columns from table_nam…

【框架学习 | 第五篇】SpringMVC(常用注解、获取请求参数、域对象共享数据、拦截器、异常处理、上传/下载文件)

文章目录 1.SpringMVC简介1.1定义1.2主要组件1.3工作流程1.3.1简要流程1.3.2详细流程 1.4优缺点 2.常用注解3.获取请求参数3.1通过 HttpServletRequest 获取请求参数3.2通过控制器方法的形参获取请求参数3.2.1请求路径参数与方法形参一致3.2.2请求路径参数与方法形参不一致3.2.…

笔记本电脑使用时需要一直插电吗?笔记本正确的充电方式

随着科技的不断发展&#xff0c;笔记本电脑已经成为人们日常生活和工作中不可或缺的电子设备。而在使用笔记本电脑时&#xff0c;很多人会有一个疑问&#xff0c;那就是笔记本电脑使用时需要一直插电吗&#xff1f;本文将就此问题展开讨论。 不一定需要一直插电&#xff0c;如果…

C++:2024/3/11

作业1&#xff1a;编程 要求&#xff1a;提示并输入一个字符串&#xff0c;统计该字符中大写、小写字母个数、数字个数、空格个数以及其他字符个数 代码&#xff1a; #include <iostream>using namespace std;int main() {string str;cout << "请输入一个字…

sql-mysql可视化工具Workbench导入sql文件

mysql可视化工具Workbench导入sql文件 1、打开workbench2、导入sql文件3、第一行加上库名4、开始运行 1、打开workbench 2、导入sql文件 3、第一行加上库名 4、开始运行

参与Penpad launch任务,实现Penpad与Scroll的双空投

在比特币 ETF 、BTC 减半等利好消息的持续推动下&#xff0c;加密市场逐渐进入到新一轮牛市周期中。除了以太坊 Layer1 生态 TVL 不断飙升外&#xff0c;Layer2 赛道 TVL 也在不断飙升并且屡创新高。 而在牛市背景下&#xff0c;Layer2 空投所带来的财富效应预期正在被进一步拉…