C语言刷题指南(四)

news2024/12/29 10:44:36

 

📙作者简介: 清水加冰,目前大二在读,正在学习C/C++、Python、操作系统、数据库等。

📘相关专栏:C语言初阶、C语言进阶、C语言刷题训练营、数据结构刷题训练营、有感兴趣的可以看一看。

欢迎点赞 👍 收藏 ⭐留言 📝 如有错误还望各路大佬指正!

✨每一次努力都是一种收获,每一次坚持都是一种成长✨       

在这里插入图片描述

目录

 前言

1. 选择题

📖题目1:

📖题目2:

📖题目3:

📖题目4:

📖题目5:

2. 编程题

📖题目一

📖题目二

 总结


 前言

        本期是C语言刷题的第四期,该系列的内容都为本人在刷题中遇到的,不同类型且具有典范性的题目,这些题目的算法思想非常直到学习,以及对基础的考察都十分细致,如对知识有遗忘,可参考C语言系列专栏。


1. 选择题

📖题目1:

设变量已正确定义,以下不能统计出一行中输入字符个数(不包含回车符)的程序段是( )
A:

n=0;
while(ch=getchar()!='\n')n++;

B:

n=0;
while(getchar()!='\n')n++;


C:

for(n=0;getchar()!='\n';n++);

D:

n=0;
for(ch=getchar();ch!='\n';n++);

✨题目解析:

这道题目考察的是循环

        这道题目乍一看好像都可以计算字符个数,如果你也这么想,这就说明你对循环部分的知识理解不够扎实。

        对于for循环,其中第一项初始化表达式只执行一次,因此ch只从输入流中取一个字符,之后就再不会取字符,因此会死循环

正确答案:D

📖题目2:

若运行以下程序时,从键盘输入 ADescriptor<回车> ,则下面程序的运行结果是( )
 

#include <stdio.h>
int main()
{
    char c;
    int v0=0,v1=0,v2=0;
    do
    {
        switch(c=getchar())
        {
            case'a':case'A':
            case'e':case'E':
            case'i':case'I':
            case'o':case'O':
            case'u':case'U':v1 += 1;
            default:v0+= 1;v2+=1;
        }
    }while(c!='\n');
    printf("v0=%d,v1=%d,v2=%d\n",v0,v1,v2);
    return 0;
}

 A: v0=7,   v1=4,  v2=7

B: v0=8,    v1=4,  v2=8

C: v0=11,  v1=4,  v2=11

D: v0=12,  v1=4,  v2=12

✨题目解析:

这道题目主要考察switch语句。

        代码switch语句中没有break,则每次找到入口进入后,顺序执行到代码块结束为止。例如当c为'A'时,从case 'A'进入,先后执行v1+=1;v0+=1;v2+=1;,而当c为'p'时,从default进入,先后执行v0+=1;v2+=1;,容易看出最终v0和v2是相等的


正确答案:D

📖题目3:

执行下面的程序段,语句3的执行次数为( )
 

for(i = 0; i <= n-1; i++) // 语句(1)
for(j = n; j > i; j--) // 语句(2)
state; // 语句(3)

A: n(n+2)/2

B: (n-1)(n+2)/2

C: n(n+1)/2

D: (n-1)(n+2)
 

✨题目解析:

        外循环有n次,当i=0,内循环为n次,当i=1,内循环为n-1次,当i=2时,内循环为n-2次,以此类推,总次数为n+(n-1)+(n-2)+......+2+1,就是个等差数列,等于n(n+1)/2

正确答案:C

📖题目4:

对于代码段,下面描述正确的是( )
 

t=0;
while(printf("*"))
{
    t++;
    if (t<3)
        break;
}

A、其中循环控制表达式与0等价

B、其中循环控制表达式与'0'等价

C、其中循环控制表达式是不合法的

D、以上说法都不对
 

✨题目解析:

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

正确答案:B

📖题目5:

在c语言中,一个函数不写返回值类型,默认的返回类型是( )

A、int

B、char

C、void

D、都不是

✨题目解析:

一个函数不写返回值类型,默认的返回类型是int,但不提倡这么做


正确答案:A

2. 编程题

📖题目一

题目描述:

 示例:

 题目链接:

错误的集合icon-default.png?t=N6B9https://leetcode.cn/problems/set-mismatch/

✨题目解析:

        这道题目的解法有很多,但今天我主要向大家介绍一种新的解题思想与方法,这种方法可适用于许多类似的题目当中,那就是——标记法

思路:

        使用标记的方式就可以找出重复的数字,数组中出现过哪个数字就把对应数字作为下标在对应位置,置为1。表示已经标记出现过,如果哪个数据对应位已经置1,则表示就是重复的数字。

        有了这个思路我们带入到题目当中,通过这个方法我们可以找到重复的数据,有了重复的数字,拿 [1, n] 的总和减去,去掉重复数据的数组总和,就是丢失的数据。

具体代码如下:

int* findErrorNums(int* nums, int numsSize, int* returnSize){
    *returnSize=2;
    int* arr=(int*)malloc(sizeof(int)*(numsSize+1));
    int* ret=(int*)malloc(sizeof(int)*2);
    int sum1=0,sum2=0;
    for(int i=0;i<numsSize;i++)
    {
        if(arr[nums[i]]==1)    //这个数字在上边数组的对应位置已经置过1了,则重复
        {
            ret[0]=nums[i];    //找到重复的数字
        }
        arr[nums[i]]=1;        //将标记数组的对应数据位置1
        sum1+=i+1;             // 1~n的求和
        sum2+=nums[i];         //当前数组中的数据求和(多了一个重复的,少了一个丢失的)
    }
    ret[1]=sum1-sum2+ret[0];   //原始总和,减去去掉重复后的当前总和就是丢失的数字
    free(arr);                 //最后释放掉用于标记的数组
    return ret;
}

        注意:新开的数组要比原数组的空间多一个,例如原数组大小为4(也就是n),数据是1、2、2、4,数据是从1到n的整数,如果用标记法,就需要使用原数组中的数据作为数组下标进行标记,而数组下标从0开始,要想不越界就必须创建5个空间的数组,这样才能有下标4.

📖题目二

题目描述:

 示例:

 题目链接:

统计不同字符的个数icon-default.png?t=N6B9https://www.nowcoder.com/practice/eb94f6a5b2ba49c6ac72d40b5ce95f50?tpId=37&&tqId=21233&rp=1&ru=/ta/huawei&qru=/ta/huawei/question-ranking

✨题目解析:

        我们已经知道了标记法,接下来我们趁热打铁,继续来看这道题,这道题目的条件非常适合使用标记法。

思路:

        首先把a字符( ascii 值为 97 )作为下标,将标记数组的第 97 位置 1 ,下次如果还有 a 字符出现,到下标 'a' 或者 97 的位置一看是1就表示a已经统计过了。

代码实现如下:

#include <stdio.h>

int main() {
    char str[501];
    char* pst=str;
    int arr[128]={0};
    int count=0;
    scanf("%s", str) ;
        while(*pst!='\0')
        {
            if(arr[*pst]!=1)
            {
                count++;
            }
            arr[*pst++]=1;
        }
       printf("%d",count) ;
    
    return 0;
}

        通过这两道题目的练习,我们会发现,标记法这种方法具有局限性,使用数组来标记,就必须要开足够大的空间,如果给的数组范围太大,如1000000,这种开辟数组就非常难了,空间占用也大,所以标记法不适用于数据范围过大的情况。

 总结


        本期我们提供了对C语言基础练习的选择题,以及新算法思想的实践练习,本系列内容也属于我个人编程语言学习笔记的一个总结,最后,我要衷心感谢每一位读者,你们的支持和参与是我前进的动力。希望你们在C语言的学习和编程之路上继续努力,不断追求卓越。祝愿你们在未来的编程之旅中取得更大的成功和成就!

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

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

相关文章

摆动序列【贪心算法】

摆动序列 如果连续数字之间的差严格地在正数和负数之间交替&#xff0c;则数字序列称为 摆动序列 。第一个差&#xff08;如果存在的话&#xff09;可能是正数或负数。仅有一个元素或者含两个不等元素的序列也视作摆动序列。 class Solution {public int wiggleMaxLength(int…

Windows下 MySql通过拷贝data目录迁移数据库的方法

MySQL数据库的文件目录下图所示&#xff0c; 现举例说明通过COPY文件夹data下数据库文件&#xff0c;进行数据拷贝的步骤&#xff1b;源数据库运行在A服务器上&#xff0c;拷贝到B服务器&#xff0c;假定B服务器上MySQL数据库已经安装完成&#xff0c;为空数据库。 首先进入A服…

Java 程序打印 OpenCV 的版本

我们可以使用 Java 程序来使用 OpenCV。 OpenCV 的使用需要动态库的加载才可以。 加载动态库 到 OpenCV 的官方网站上下载最新的发布版本。 Windows 下载的是一个可执行文件&#xff0c;没关系&#xff0c;这个可执行文件是一个自解压程序。 当你运行以后会提示你进行解压。…

百度“AI智障”到AI智能体验之旅

目录 前言一、百度PLATO1.抬杠第一名2.听Ta瞎扯淡3.TA当场去世了4.智障与网友的高光时刻 二、文心一言1.设计测试用例2.随意发问3.手机端约会神器 三、体验总结&#xff1a;四、千帆大模型 前言 最近收到了文心一言3.5大模型的内测资格&#xff0c;正巧之前也体验过它的前身&q…

分析系统 - 使用Python爬虫

在竞争激烈的市场环境中&#xff0c;了解和分析竞争对手的销售策略和市场表现对于企业的成功至关重要。本文将介绍如何利用Python爬虫建立低成本的销售竞争对手分析系统&#xff0c;探索其方法、工具和好处&#xff0c;并同时解决可能出现的问题。 销售竞争对手分析的目标是获取…

PyTorch 模型性能分析和优化 - 第 2 部分

动动发财的小手&#xff0c;点个赞吧&#xff01; 这是有关分析和优化在 GPU 上运行的 PyTorch 模型主题的系列文章的第二部分。在第一篇文章中&#xff0c;我们演示了使用 PyTorch Profiler 和 TensorBoard 迭代分析和优化 PyTorch 模型的过程以及巨大潜力。在这篇文章中&…

36、springboot --- 对 tomcat服务器 和 undertow服务器 配置访客日志

springboot 配置访客日志 ★ 配置访客日志&#xff1a; 访客日志&#xff1a; Web服务器可以将所有访问用户的记录都以日志的形式记录下来&#xff0c;主要就是记录来自哪个IP的用户、在哪个时间点、访问了哪个资源。 Web服务器可将所有访问记录以日志形式记录下来&#xff…

Vue2向Vue3过度核心技术进阶语法

目录 1 v-model简化代码1.目标&#xff1a;2.如何简化&#xff1a;3.代码示例 2 sync修饰符1.作用2.场景3.本质4.语法5.代码示例6.总结 3 ref和$refs1.作用2.特点&#xff1a;3.语法4.注意5.代码示例 4 异步更新 & $nextTick1.需求2.代码实现3.问题4.解决方案 1 v-model简化…

MES管理系统如何让传统汽车行业从“制造”走向“智造”

在传统制造业中&#xff0c;“数字化转型”是一个老生常谈的话题&#xff0c;然而&#xff0c;许多传统制造业仍处于“信息化”的阶段&#xff0c;距离真正的数字化还有很长的路要走。如果要在所有传统制造行业中寻找那些可以成为转型“先行者”的领域&#xff0c;那么深度与广…

水果flstudio好用吗?中文版FL21最新版本如何下载

FL Studio21版是一款功能强大的音乐制作软件&#xff0c;广泛应用于电子音乐、流行音乐、电影配乐等领域。它提供了丰富多样的音频合成和编辑工具&#xff0c;使音乐制作变得更加灵活多样。无论是初学者还是专业音乐制作人&#xff0c;都可以通过直观的界面和丰富的音频特效来实…

【IMX6ULL驱动开发学习】12.Linux SPI驱动实战:DAC驱动设计流程

基础回顾&#xff1a; 【IMX6ULL驱动开发学习】10.Linux I2C驱动实战&#xff1a;AT24C02驱动设计流程_阿龙还在写代码的博客-CSDN博客 【IMX6ULL驱动开发学习】11.Linux之SPI驱动_阿龙还在写代码的博客-CSDN博客 一、编写驱动 查看芯片手册&#xff0c;有两种DAC数据格式&a…

量化QAT QLoRA GPTQ

模型量化的思路可以分为PTQ&#xff08;Post-Training Quantization&#xff0c;训练后量化&#xff09;和QAT&#xff08;Quantization Aware Training&#xff0c;在量化过程中进行梯度反传更新权重&#xff0c;例如QLoRA&#xff09;&#xff0c;GPTQ是一种PTQ的思路。 QAT…

CORBA-架构师真题(一十三)

1、某企业内部主要功能已封装web服务。为了扩展业务&#xff0c;需要将现有业务功能 进行多种组合&#xff0c;形成新的业务功能。针对业务灵活组合的要求&#xff0c;采用&#xff08;&#xff09;架构风格最为合适。 答案&#xff1a; 解释器 解析&#xff1a; 解释器分下…

Windows 转 mac 记录

初次从Windows转mac可能会不适应&#xff0c;建议先看看 【6分钟搞定MacBook】不懂时无所适从&#xff0c;学会后越用越爽&#xff01;_哔哩哔哩_bilibili 我主要是做一些补充记录 1、Windows的右键等于mac的双击触控板、control单击触控板 2、运行中的应用下方会有一个点&…

项目部署之后页面没有刷新怎么办?

最近项目部署成功之后&#xff0c;突然产品找我&#xff0c;上线之后&#xff0c;页面没有生效&#xff0c;这是怎么回事&#xff1f;我这是第一次部署这个项目,也不太清楚历史问题,接下来就慢慢寻找答案吧, 如果心急的可以直接看后面的总结&#xff0c;下面我们好好聊聊缓存的…

桃子叶片病害识别(Python代码,pyTorch框架,深度卷积网络模型,很容易替换为其它模型,带有GUI识别界面)

1.分为三类 健康的桃子叶片 &#xff0c;251张 桃疮痂病一般&#xff0c;857张 桃疮痂病严重&#xff0c;770 张 2. GUI界面识别效果和predict.py识别效果如视频所示桃子叶片病害识别&#xff08;Python代码&#xff0c;pyTorch框架&#xff0c;深度卷积网络模型&#xff0…

python实现的淘宝自动发货脚本

pyhton # 文件用ini # 自动应答&#xff0c;自动点发货

从零做软件开发项目系列之五——系统开发过程

前言 在软件项目的设计开发过程中&#xff0c;除了前期的用户需求调研确认&#xff0c;系统设计、数据库设计等工作之外&#xff0c;还有一些重要的工作需要考虑&#xff0c;比如软件开发模式&#xff0c;如何制定开发计划&#xff0c;如何协调开发人员开展开发工作等。本文将…

分布式事务篇-2.4 Spring-Boot整合Seata

文章目录 前言一、pom jar导入:二、项目配置&#xff1a;2.1 配置 说明&#xff1a;2.1 .1 seata server 端:2.1 .2 seata client 端: 2.2 开启seata 对于数据源的代理:2.3 seata-client 的注册中心&#xff1a;2.4 seata-client 的配置中心&#xff1a;2.5 去掉手写的数据源代…

-9501 MAL系统没有配置或者服务器不是企业版(dm8达梦数据库)

dm8达梦数据库 -9501 MAL系统没有配置或者服务器不是企业版&#xff09; 环境介绍1 环境检查2 问题原因 环境介绍 搭建主备集群时&#xff0c;遇到报错-9501 MAL系统没有配置或者服务器不是企业版 1 环境检查 检查dmmal.ini配置文件权限正确 dmdba:dinstall&#xff0c;内容正…