C语言:选择+编程(每日一练Day16)

2023-11-02

目录

选择题:

题一:

题二:

题三:

题四:

题五:

编程题:

题一:数对

思路一:

题二:截取字符串

思路一:

本人实力有限可能对一些地方解释和理解的不够清晰,可以自己尝试读代码,或者评论区指出错误,望海涵!

感谢大佬们的一键三连! 感谢大佬们的一键三连! 感谢大佬们的一键三连!


选择题:

题一:

1、指出下列代码的缺陷【多选】( )
float f[10];
// 假设这里有对f进行初始化的代码
for(int i = 0; i < 10;)
{
        if(f[++i] == 0)
        break;
}

A: for(int i = 0; i < 10;)这一行写错了

B: f是float型数据直接做相等判断有风险
C: f[++i]应该是f[i++]

D: 没有缺陷

答案解析:

        一般float型只能精确到小数后六位(即1e-6),将float型数据的绝对值与1e-6比较,来判断是否相等(为零)。float的精度误差在1e-6;double精度误差在1e-15;所以要判断一个float型数:if(fabs(f)<1e-6);要判断一个double型数:if(fabs(f)<1e-15);若满足,则为零。考虑B选项是对的。若要判断float a,b是否相等,要看if(fabs(a-b)<1e-6)是否为真。C选项,考虑的是数组越界问题。

题二:

2、请指出以下程序的错误【多选】( )
void GetMemory(char **p, int num)
{
        if(NULL == p && num <= 0)//1
                return;
        *p = (char*)malloc(num);
        return;
}

int main()
{
        char *str = NULL;
        GetMemory(&str, 80); //2
        if(NULL != str)
        {
                strcpy(&str, "hello"); //3
                printf(str); //4

        }

        return 0;
}

A: 1    B:  C: 3    D: 4

答案解析:

        第1处两种情况之一成立都是要返回的,应该用或,此处用与错误。在语句GetMemory(&str,100);中传入str的地址,在语句char*str=NULL;中str初始化为空指针,但是str指针变量也有地址,所以参数char**p里面的p保存的是指针变量str的地址,所以调用GetMemory函数之后,动态开辟的空间的地址存放在了str中,在函数返回之后没有释放内存,但是这不会导致程序错误,只会导致内存泄漏。第3处用&str是错的,应该直接用str,是刚申请下来的空间首地址,可以用来接收字符串的copy。

题三:

3、请问下列代码的输出结果有可能是哪些【多选】( )
#include <stdio.h>
typedef union
{
        int a;
        struct
        {
                short b;
                short c;
        };
}X;
int main()
{
        X x;
        x.a = 0x20150810;
        printf("%x,%x\n", x.b, x.c);
        return 0;
}

A: 2015,810    B: 50810,201    C: 810,2015    D:`20150,810

答案解析:

        对于0x20150810如果按照大端模式存储:从低地址到高地址:20 15 08 10 输出从低地址到高地址:20 15 08 10如果按照小端模式存储:从低地址到高地址:10 08 15 20 输出从高地址到低地址:08 10 20 15此数以int类型赋值给联合体x.a,而以结构成员b和c分开访问,分别拿到低地址的2个字节和高地址的2个字节,大端下是2015和810,小端下是810和2015。

题四:

4、下面这个程序执行后会有什么错误或者效果【多选】( )
#define MAX 255
int main()
{
        unsigned char A[MAX], i;
        for(i = 0; i <= MAX; i++)
                A[i] = i;
        return 0;
}

A: 数组越界    B: 死循环    C: 栈溢出    D: 内存泄露

答案解析:

        数组下标越界:数组大小255,但是当a[255]就是256个元素,导致越界了。死循环:这个是因为无符号字符型的变量大小在0-255之间,所以说i永远不可能大于255的,是个死循环。内存泄漏:创建的临时变量,在栈中,应该会由系统自动释放,所以应该是不存在内存泄漏的问题。栈溢出:属于缓冲区溢出的一种。栈溢出是由于C语言系列没有内置检查机制来确保复制到缓冲区的数据不得大于缓冲区的大小,因此当这个数据足够大的时候,将会溢出缓冲区的范围。

题五:

5、请问下列程序的输出是多少( )
#include<stdio.h>
int main()
{
        unsigned char i = 7;
        int j = 0;
        for(;i > 0;i -= 3)
        {
                ++j;
        }
        printf("%d\n", j);
        return 0;
}

A: 2    B: 死循环    C: 173    D: 172

答案解析:

        本题就是找规律,计算什么时候能遇到0unsigned char 8位数据位,范围在0-255,所以-2(11111110)时,变成254;同理-1(11111111)时,变成255;最后减到0时,不满足循环条件,for停止。刚好173次。 7 4 1 ==> 共(7-1)/3+1=3次(1-3=-2,即254,继续循环)
254 251 ... 5 2 ==> 共(254-2)/3+1=85次(2-3=-1,即255,继续循环)255 252 ... 6 3 ==> 共(255-5)/3+1=85次(3-3=0,退出循环) 所以总共173次。

编程题:

题一:数对

数对_牛客题霸_牛客网 (nowcoder.com)

示例1

        输入:

        5 2

        输出:

        7

        说明:

        满足条件的数对有(2,3),(2,4),(2,5),(3,4),(3,5),(4,5),(5,3)

思路一:

假设输入 n=10 , k=3

当 y <=k 时,意味着任何数字取模y的结果都在 [0, k-1]之间,都是不符合条件的。
当 y = k+1=4 时,x符合条件的数字有 3,7
当 y = k+2=5 时,x符合条件的数字有 3,4,8,9
当 y = k+3=6 时,x符合条件的数字有 3,4,5,9,10
当 y = k+n时,
x小于y当前值,且符合条件的数字数量是:y-k个;
x大于y当前值,小于2*y的数据中,且符合条件的数字数量是:y-k个;
从上一步能看出来,在y的整数倍区间内,x符合条件的数量就是 (n / y) * (y - k)个;
n / y 表示有多少个完整的 0 ~ y区间, y - k 表示有每个区间内有多少个符合条件的数字
最后还要考虑的是6...往后这种超出倍数区间超过n的部分的统计;
n % y 就是多出完整区间部分的数字个数,其中k以下的不用考虑,则符合条件的是 n % y - (k-1) 个;
这里需要注意的是类似于9这种超出完整区间的数字个数 本就小于k的情况,则为0。
最终公式:(n / y) * (y - k) + ((n % y < k) ? 0, (n % y - k + 1));

        第一步:定义题目需要输入的n、k,以及用于记录符合条件的个数的count;

        第二步:while循环只要两个变量都有输入就执行判断如果k==0说明所有数都满足条件,直接打印所有数对,然后回到循环起点;否则:因为k+1之前的数都不符合条件,从k+1开始记录数在y的整数倍区间内,x符合条件的数量就是 (n / y) * (y - k)个,再加上n % y 就是多出完整区间部分的数字个数,其中k以下的不用考虑,则符合条件的是 n % y - (k-1) 个。

        第三步:最后的和就是需要打印的结果。 

#include <stdio.h>

int main() 
{
    long n,k;
    
    while(scanf("%ld%ld",&n, &k) == 2)
    {
        //用于记录符合条件的个数
        long count = 0;
        //如果k==0说明所有数都满足条件
        if(k == 0)
        {
            printf("%ld\n", n*n);
            continue;
        }
        //从k+1之前的数都不符合条件
        for(int y = k+1;y <= n;y++ )
        {
            //在y的整数倍区间内,x符合条件的数量就是 (n / y) * (y - k)个
            count += (n / y) * (y - k);
            //n % y 就是多出完整区间部分的数字个数,其中k以下的不用考虑,则符合条件的是 n % y - (k-1) 个
            count += (n % y < k) ? 0 : (n % y - k + 1);
        }
        printf("%ld\n",count);
    }

    return 0;
}

题二:截取字符串

截取字符串_牛客题霸_牛客网 (nowcoder.com)

示例1

        输入:

        abABCcDEF
        6

        输出:

        abABCc

思路一:

        第一步:定义满足题目要求大小的数组arr,以及截取数k;

        第二步:当输入不为空时,将前k个逐个打印;

        第三步:打印完后换行。

#include <stdio.h>

int main() 
{
    //满足题目条件的数组
    char arr[1000] = {0};
    int k = 0;
    //有熟人就执行
    while(scanf("%s%d", &arr, &k) != EOF)
    {
        //将前k个逐个打印
        for(int i = 0; i < k; i++)
        {
            printf("%c",arr[i]);
        }
        printf("\n");
    }
    return 0;
}

本人实力有限可能对一些地方解释和理解的不够清晰,可以自己尝试读代码,或者评论区指出错误,望海涵!

感谢大佬们的一键三连! 感谢大佬们的一键三连! 感谢大佬们的一键三连!

                                              

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C语言:选择+编程(每日一练Day16) 的相关文章

随机推荐

  • Spring Boot框架基础概览

    基本概述 Spring Boot是所有基于Spring开发的项目的起点 Spring Boot的设计是为了让你尽可能快的跑起来Spring应用程序并且尽可能减少你的配置文件 它采用了 习惯优于配置 的理念 就像Maven整合了所有的JAR包
  • Ubuntu下的进程管理和启动项管理工具

    sudo apt get install bum
  • tkinter创建真正的嵌套子窗口

    tkinter创建真正的嵌套子窗口 引言 获取窗口句柄 方法一 方法二 创造嵌入窗口 嵌套在组件中 一些问题 一个简单的例子 2022 7 22问题解决 结语 引言 在我之前的这篇纯tkinter创建嵌套子窗口的文章中 只提及了3种方法 原
  • 选择排序 简单选择排序 直接选择排序的区别

    选择排序 图示过程如下 区分 直接选择排序每次遇到n 1 gt n 的时候就要发生交换 简单选择排序则只是记录下较大那个元素的位置 这样一轮过后这个记录变身本轮所要选取的最大值 而每轮需要确定的位置已由外层循环确定 只需将最大元素位置记录所
  • face alignment (人脸对齐)

    face alignment 是计算机视觉的一个热点研究问题 人脸对齐作为人脸识别系统中的一个重要组成部分 人脸对齐的性能在人脸识别系统起着举足轻重的作用 人脸对齐的目的是定位出人脸面部关键点的位置 这些关键点通常是人脸中具有语义的器官 比
  • 【人工智能】推荐系统算法

    推荐系统算法详解 一 推荐系统详解 1 基于人口统计学的推荐算法 基于人口统计学的推荐机制 Demographic based Recommendation 是一种最易于实现的推荐方法 它只是简单的根据系统用户的基本信息发现用户的相关程度
  • 第一次用上 Android Studio 2.3 过程及错误解决

    因为要开发Android5 0的缘故 抛弃了eclipse转到了Android Studio 第一次使用就是遇到了许多问题 终于是解决问题了 特意写一篇博文给各位要准备从eclipse转到Android Studio 由于之前使用eclip
  • Archiving With Multiple Destinations Fails With ORA-16040

    fact Oracle Server Enterprise Edition 9 0 fact Oracle Server Enterprise Edition 8 1 symptom Archiving fails symptom ORA
  • 【开源】团队版 ChatGPT Web 应用,多用户,免登录

    Muchat 团队版 ChatGPT Web 应用 多用户 免登录 适合公司 组织或小团体内部使用 有人乍一看目录觉得只是发布了个 exe 但实际代码在各个子仓库中 本仓库只是一个入口 特性 无需登录 输入卡密即可使用 支持匿名试用 可设置
  • Unity中烘焙光照,同mesh同uv的模型烘焙光照时共用一张光照贴图

    我们再开发中 经常会遇到需要烘焙场景光照的情况 但是尴尬的是 一个场景中你好几个物体用的都是一个贴图 但是不同mesh 或者是相同mesh 你都会如下图 多出一张光照贴图 正常unity开发的解决办法是合并mesh 来降低光照贴图数量 但是
  • vnc 连接不上,出现Warning: zhouziqi:1 is taken because of /tmp/.X11-unix/X1

    楼主不知道怎么回事 突然就边不上VNC了 我就打算重新启动服务 发现服务启不来 我用 journalctl xe命令出现下面的东西 Apr 24 21 30 24 zhouziqi runuser 23390 pam unix runuse
  • ScriptManager的用法

    脚本管理控件 ScriptManger 是ASP NET AJAX中非常重要的控件 通过使用ScriptManger能够进行整个页面的局部更新的管理 ScriptManger用来处理页面上局部更新 同时生成相关的代理脚本以便能够通过Java
  • 怎么画因果图?因果图绘图步骤详解

    因果图设计法 因果图法是一种利用图解法分析输人的各种组合情况的测试方法 它考虑了输入条件的各种组合及输入条件之间的相互制约关系 并考虑输出情况 例如 某一软件要求输人地址 具体到市区 如 北京 昌平区 天津 南开区 其中第2个输人受到第1个
  • C++tuple快速而随意的数据结构

    初始化 lt 学号 姓名 年龄 gt tuple
  • 转:通过注册表查看操作系统默认编码的方法

    在 转 使用DOS命令chcp查看windows操作系统的默认编码以及编码和语言的对应关系 介绍了一种通过chcp查看windows操作系统默认编码的方法 同时还有一种通过注册表查看默认编码的方法 虽然是以没有dos命令简单 但也可以使用
  • mbedtls交换服务器证书,mbedtls

    mbedtls系列文章 Demo工程源码 https github com Mculover666 mbedtls study demo 本工程基于STM32L41RCT6开发板 包含了本系列文章中所编写的所有Demo 持续更新 文章目录
  • xgboost 调参经验

    本文介绍三部分内容 xgboost 基本方法和默认参数 实战经验中调参方法 基于实例具体分析 1 xgboost 基本方法和默认参数 在训练过程中主要用到两个方法 xgboost train 和xgboost cv xgboost trai
  • LambdaQueryWrapper用法简单介绍

    1 层级关系 2 LambdaQueryWrapper 与QueryWrapper查询类似 不过使用的是Lambda语法 举例如下 package com mszlu blog dao pojo import lombok Data Dat
  • pywintypes.com_error: (-2147221008, ‘CoInitialize has not been called.‘, None, None)

    在使用xlwings多线程时 出现这样的报错 导致Excel表无法打开 是多线程调用的问题 解决方法 import pythoncom 在这个线程的函数开始运行之前调用这句即可 def daily report pythoncom CoIn
  • C语言:选择+编程(每日一练Day16)

    目录 选择题 题一 题二 题三 题四 题五 编程题 题一 数对 思路一 题二 截取字符串 思路一 本人实力有限可能对一些地方解释和理解的不够清晰 可以自己尝试读代码 或者评论区指出错误 望海涵 感谢大佬们的一键三连 感谢大佬们的一键三连 感