c语言每日一练(9)

前言:
每日一练系列,每一期都包含5道选择题,2道编程题,博主会尽可能详细地进行讲解,令初学者也能听的清晰。每日一练系列会持续更新,暑假时三天之内必有一更,到了开学之后,将看学业情况更新。

五道选择题:

1、以下 scanf 函数调用选项中, 错误的是( )

struct T
{
char name[20];
int age;
int sex;
} a[5], *pa=a;

A、scanf("%s",a[0].name);

B、scanf("%d", &pa[0].age);

C、scanf("%d",&(pa->age));

D、scanf("%d", pa->age);

解析:首先,你要明白scanf需要什么,它需要地址,你只要给它对应数据的地址,它就会根据地址对你所给的目标进行修改

选项A,通过结构体数组访问到结构体,再通过结构体访问到结构体成员,但它访问的是字符数组,而字符数组的本质就是指针,故A正确。选项B,使用结构体数组的方式访问结构体,再通过结构体访问结构体成员,不同于A的是它访问的是整型变量,整型变量没有字符数组那么特殊,因此要取地址,它也取了,故B正确。

选项C,使用->的方式取到了结构体成员,并取了地址,和B雷同,C正确。D选项,与C不同的就在于没有取地址,因此,scanf无法正确地执行,故D错误。

2、关于指针下列说法正确的是【多选】( )
A、 任何指针都可以转化为void * B、 void *可以转化为任何指针
C、 指针的大小为8个字节           D、 指针虽然高效、灵活但可能不安全

解析:C错误,因为指针的大小是随着平台的变化而变化的,当指针处于32位平台时,大小为4,为64位平台时位8,ABD没有问题。 

3、请指出以下程序的错误【多选】( )

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、2      C、3     D、4

 解析:代码1错误,因为得同时满足两个条件才会直接报错,但很显然,我们的目的是令num>0,p!=NULL,因此一个有误就得报错。

在语句GetMemory(&str,100);中传入str的地址,在语句char*str=NULL;中str初始化为空指针,但是str指针变量也有地址,所以参数char**p里面的p保存的是指针变量str的地址,所以调用GetMemory函数之后,动态开辟的空间的地址存放在了str中,在函数返回之后没有释放内存,但是这不会导致程序错误,只会导致内存泄漏。故代码2无误。

代码3错误,&str相当于是对地址的地址进行操作了,没操作到该操作的。代码4是正确的,相当于printf("hello");综上所述,选AC

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、 内存泄露

解析:选项A,观察代码可以看出创建的数组大小为255,因此,数组下标最大为244,i<=MAX的条件一定会令i达到255,会越界。选项B,每次循环i++,MAX的值是定值,好像不会造成死循环,但i是unsigned char型的,因此,i最大为255,当要超出255时就会像一个圆绕回到0,所以会导致死循环。

C选项,创建的临时变量,在栈中,应该会由系统自动释放,所以是不存在内存泄漏的问题。栈溢出:属于缓冲区溢出的一种。栈溢出是由于C语言系列没有内置检查机制来确保复制到缓冲区的数据不得大于缓冲区的大小,因此当这个数据足够大的时候,将会溢出缓冲区的范围,D选项,无稽之谈,我都没有申请空间,所以根本不会有内存泄漏。综上所述,答案为AB

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

解析:unsigned char 型的范围为0~255,为负数的时候也会像圆一样绕回来,反着绕。观察代码,i被初始化为7,每次进行循环i-3,i>0循环继续,每次循环j++,最后打印出j,目标计算循环次数。i=7,循环到i=-2时,由于unsigned char的特殊性会令i=254,254/3=84余2,即i=2,再使i=-1,由于特殊性,i=255,255/3=85,i=0,循环结束。综上所述,循环次数为3+84+1+85=173,故选C

编程题1:

力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台

 思路:猜中次数很好计算,一次循环就可以计算出来,难的是伪猜中的次数。首先,猜中不能被算作伪猜中,那么一旦猜中,那两个被猜中的槽就可以看作配对成功,不用再考虑,可以把它们置为-1。在后期的判定中,一遇到-1便continue切换槽位即可,而一旦伪猜中成功,那两个槽也相当于废掉了,不能在同一个槽伪猜中多次,这是一个隐藏规则,所以把这两个槽也置为-1

#include<stdio.h>
#include<stdlib.h>
int* masterMind(char* solution, char* guess, int* returnSize) {
    *returnSize = 2;
    //初始化返回的数组,因为我们仅仅只需要返回猜中次数和伪猜中次数,所以必定为2
    int* order = (int*)malloc(sizeof(int) * 2);
    //创建返回数组
    int i = 0; int j = 0;
    int count_true = 0;//猜中次数计数
    int count_false = 0;//伪猜中次数计数
    for (i = 0; i < 4; i++)
        //一共四个槽,所以solution和guess的数组大小都为4
    {
        if (solution[i] == guess[i])
        {
            count_true++;
            solution[i] = -1;
            guess[i] = -1;
            //由于猜中的槽,伪猜中的不能重复,所以置为-1,用来判定
        }
    }
        for (i = 0; i < 4; i++)
        {
            if (solution[i] == -1)
            {
                continue;
            }
            for (j = 0; j < 4; j++)
            {
                if (guess[j] == -1)
                {
                    continue;
                }
                if (solution[i] == guess[j])
                {
                    count_false++;
                    solution[i] = -1;
                    guess[j] = -1;
                }
            }
        }
        order[0] = count_true;
        //存放猜中次数
        order[1] = count_false;
        //存放伪猜中次数
        return order;
        //返回目标
    }

编程题2:

 

力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台

 

思路:暴力破解,没什么好说的,两个循环遍历完蛋

int* twoSum(int* nums, int numsSize, int target, int* returnSize) {
    *returnSize = 2;
    //只用返回两个数,所以数组大小必定为2
    int* order = (int*)malloc(sizeof(int) * 2);
    //创建一个符合条件的数组
    int i = 0; int j = 0;
    for (i = 0; i < numsSize; i++)
    {
          for(j=i+1;j<numsSize;j++)
        {   //减少循环次数
            if (nums[i] + nums[j] == target)
                //找到目标,直接储存并返回
            {
                order[0] = i;
                order[1] = j;
                return order;
            }
        }
    }
    return NULL;//找不到返回空
}

  好了,今天的练习到这里就结束了,感谢各位友友的来访,祝各位友友前程似锦O(∩_∩)O

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Mysql】MVCC版本机制的多并发

&#x1f307;个人主页&#xff1a;平凡的小苏 &#x1f4da;学习格言&#xff1a;命运给你一个低的起点&#xff0c;是想看你精彩的翻盘&#xff0c;而不是让你自甘堕落&#xff0c;脚下的路虽然难走&#xff0c;但我还能走&#xff0c;比起向阳而生&#xff0c;我更想尝试逆风…

【云原生】kuberneter中Helm入门到实践

引言 helm是k8s的包管理工具&#xff0c;使用helm&#xff0c;可以使用更为简化和系统化的方式对k8s应用进行部署、升级。 helm是CNCF已毕业的项目&#xff0c;社区也是相当活跃的&#xff0c;在 https://artifacthub.io/ 上&#xff0c;能找到很多现成的helm chart&#xff…

PHP 公交公司充电桩管理系统mysql数据库web结构apache计算机软件工程网页wamp

一、源码特点 PHP 公交公司充电桩管理系统是一套完善的web设计系统&#xff0c;对理解php编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。 源码下载 https://download.csdn.net/download/qq_41221322/88220946 论文下…

Python土力学与基础工程计算.PDF-钻探泥浆制备

Python 求解代码如下&#xff1a; 1. rho1 2.5 # 黏土密度&#xff0c;单位&#xff1a;t/m 2. rho2 1.0 # 泥浆密度&#xff0c;单位&#xff1a;t/m 3. rho3 1.0 # 水的密度&#xff0c;单位&#xff1a;t/m 4. V 1.0 # 泥浆容积&#xff0c;单位&#xff1a;…

BDA初级分析——认识SQL,认识基础语法

一、认识SQL SQL作为实用技能&#xff0c;热度高、应用广泛 在对数据分析人员的调查中SQL长期作为热度排名第-一的编程语言超过Python和R SQL&#xff1a;易学易用&#xff0c;高效强大的语言 SQL&#xff1a;Structured Query Language 结构化查询语言 SQL&#xff1a;易学…

LeetCode150道面试经典题--单词规律(简单)

1.题目 给定一种规律 pattern 和一个字符串 s &#xff0c;判断 s 是否遵循相同的规律。 这里的 遵循 指完全匹配&#xff0c;例如&#xff0c; pattern 里的每个字母和字符串 s 中的每个非空单词之间存在着双向连接的对应规律。 2.示例 pattern"abba" s "c…

软考笔记——9.软件工程

软件工程的基本原理&#xff1a;用分阶段的生命周期计划严格管理、坚持进行阶段评审、实现严格的产品控制、采用现代程序设计技术、结果应能清除的审查、开发小组的人员应少而精、承认不断改进软件工程事件的必要性。 软件工程的基本要素&#xff1a;方法、工具、过程 软件生…

async和await

一&#xff0c;基本使用 其实就是之前学过的异步函数&#xff0c;异步编程在函数前写一个ansyc&#xff0c;就转化为异步函数&#xff0c;返回的是一个promise对象&#xff0c;于是就可以使用await关键字&#xff0c;可以把异步函数写成同步函数的形式&#xff0c;极大地提高代…

(搜索) 剑指 Offer 13. 机器人的运动范围 ——【Leetcode每日一题】

❓剑指 Offer 13. 机器人的运动范围 难度&#xff1a;中等 地上有一个 m 行 n 列的方格&#xff0c;从坐标 [0,0] 到坐标 [m-1,n-1] 。一个机器人从坐标 [0, 0] 的格子开始移动&#xff0c;它每次可以向左、右、上、下移动一格&#xff08;不能移动到方格外&#xff09;&…

带你了解SpringBoot支持的复杂参数--自定义对象参数-自动封装

&#x1f600;前言 本篇博文是关于SpringBoot 在响应客户端请求时支持的复杂参数和自定义对象参数&#xff0c;希望您能够喜欢&#x1f60a; &#x1f3e0;个人主页&#xff1a;晨犀主页 &#x1f9d1;个人简介&#xff1a;大家好&#xff0c;我是晨犀&#xff0c;希望我的文章…

山西电力市场日前价格预测【2023-08-19】

日前价格预测 预测明日&#xff08;2023-08-19&#xff09;山西电力市场全天平均日前电价为366.41元/MWh。其中&#xff0c;最高日前电价为406.33元/MWh&#xff0c;预计出现在18: 30。最低日前电价为344.68元/MWh&#xff0c;预计出现在13: 30。 价差方向预测 1&#xff1a; 实…

【观察者设计模式详解】C/Java/JS/Go/Python/TS不同语言实现

简介 观察者模式&#xff08;Observer Pattern&#xff09;是一种行为型模式。它定义对象间的一种一对多的依赖关系&#xff0c;当一个对象的状态发生改变时&#xff0c;所有依赖于它的对象都得到通知并被自动更新。 观察者模式使用三个类Subject、Observer和Client。Subject…

SpringBoot复习(39)Servlet容器的自动配置原理

Servlet容器自动配置类为ServletWebServerFactoryAutoConfiguration 可以看到通过Import注解导入了三个配置类&#xff1a; 通过这个这三个配置类可以看出&#xff0c;它们都使用了ConditionalOnClass注解&#xff0c;当类路径存在tomcat相关的类时&#xff0c;会配置一个T…

算法通关村第4关【白银】| 栈的经典算法问题

1.括号匹配问题 思路&#xff1a;将左括号压入栈中&#xff0c;遍历字符串&#xff0c;当遇到右括号就出栈&#xff0c;判断是否是匹配的一对&#xff0c;不是就返回false&#xff08;因为按照顺序所以当遇到右括号出栈一定要是匹配的&#xff09;。使用Map来简化ifelse clas…

gazebo仿真ros2两轮差速小车没有控制的情况下缓慢移动后退

最近在做一款2轮差速的机器人小车&#xff0c;在做gazebo仿真的时候&#xff0c;发现小车一直在缓慢的后退&#xff0c;一边后退一边缓慢拐弯。 环境&#xff1a;ros2 foxy gazebo-11 小车xacro模型代码 <?xml version"1.0"?> <robot name"jtb…

MySQL环境安装

文章目录 MySQL环境安装1. 卸载1.1 卸载不要的环境1.2 检查卸载系统安装包 2. 安装2.1 获取mysql官方yum源2.2 安装mysql的yum源2.3 安装mysql服务 3. 登录(1)(2)(3) 4. 配置my.cnf MySQL环境安装 说明&#xff1a; 安装与卸载中&#xff0c;用户全部切换成为root&#xff0c…

数据结构--拓扑排序

数据结构–拓扑排序 AOV⽹ A O V ⽹ \color{red}AOV⽹ AOV⽹(Activity On Vertex NetWork&#xff0c;⽤顶点表示活动的⽹)&#xff1a; ⽤ D A G 图 \color{red}DAG图 DAG图&#xff08;有向⽆环图&#xff09;表示⼀个⼯程。顶点表示活动&#xff0c;有向边 < V i , V j …

vmalert集成钉钉告警

vmalert通过在alert.rules中配置告警规则实现告警&#xff0c;告警规则语法与Prometheus兼容&#xff0c;依赖Alertmanager与prometheus-webhook-dingtalk实现钉钉告警&#xff0c;以下步骤&#xff1a; 1、构建vmalert 从源代码构建vmalert&#xff1a; git clone https://…

用Java实现原神抽卡算法

哈喽~大家好&#xff0c;好久没有更新了&#xff0c;也确实遇到了很多事&#xff0c;这篇开始恢复更新&#xff0c;喜欢的话&#xff0c;可以给个的三连&#xff0c;什么&#xff1f;你要白嫖&#xff1f;那可以给个免费的赞麻。 &#x1f947;个人主页&#xff1a;个人主页​​…

信息与通信工程面试准备——数学知识|正态分布|中心极限定理

目录 正态分布 正态分布的参数 正态分布的第一个参数是均值 正态分布的第二个参数是标准差SD 所有正态分布的共同特征 标准正态分布&#xff1a;正态分布的特例 中心极限定理 理解定义 示例# 1 示例# 2 知道样本均值总是正态分布的实际含义是什么&#xff1f; 正态分…
最新文章