c语言每日一练(7)

news2024/12/25 0:12:04

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

五道选择题:

1、下列定义数组的语句中正确的是【多选】( )

A、

#define size 10
char str1[size], str2[size+2];

B、char str[]; C、int num['10'];

D、int n=5; int a[n][n+2];

解析:在c中数组长度的初始化只能是常量,不能为变量,也就是说,c语言不支持变长数组。不过想要在c中使用变长数组还是有办法的,通过指针可以实现,这里就先不提,知道数组长度初始化在c中只能为常量即可    选项A将str1初始化为size,size是个宏定义,在编译的过程中会直接被对应内容替换掉,在这里它的对应内容为10,因此把它看作10即可。10是个常量,没问题。又将str2初始化为了size+2,常量+常量本质还是常量,没问题。A正确。

B选项非法定义,当未对数组进行初始化时,必须定义数组的长度,B错。C选项,将数组的长度定义为字符10,字符10的本质是ASCII码值,可看作常量,C正确。D选项,使用变量n初始化数组a的长度是不符合c语言的规则的,故D错。综上所述,答案为AC

2、已知 i,j 都是整型变量,下列表达式中,与下标引用 X[i][j] 不等效的是【多选】( ) 

A、*(X[i]+j)    B、*(X+i)[j]     C、*(X+i+j)        D、*(*(X+i)+j)

 A、*(X[i]+j)    B、*(X+i)[j]     C、*(X+i+j)        D、*(*(X+i)+j)

解析:从这张图片可以看出,[]和()的优先级为1,解引用*的优先级为2。那么我们就根据优先级来做题。目标是找到与下标引用 X[i][j] 不等效的,x[i][j]取x数组第i行第j列的元素。

看到A选项,先走x[i]那么就是第i行,再走被包裹在括号内的+j,故走到第i行第j列的地址,再解引用得到内容,故与目标等效,故不选A。走到B,()和[]优先级相同从左往右即可,但*的优先级最低,最后走,故走出来为**((x+i)+j),显然越界,不等效,选B。 

 C选项,X是二维数组的数组名,数组名相当于第一行的地址,X+i+j,跳过了i+j行,就越界了,不等效,选C。D选项,*(x+i)走到第i行,第0列,受到解引用*的影响,+j相当于走到第j列,再解引用,故得到第i行第j列的元素,等效,故不选D。综上所述,答案为BC
 

 3、二维数组X按行顺序存储,其中每个元素占1个存储单元。若 X[4][4] 的存储地址为Oxf8b82140 X[9][9] 的存储地址为 Oxf8b8221c ,则 X[7][7] 的存储地址为( )

A、Oxf8b821c4 B、Oxf8b821a6 C、Oxf8b82198 D、Oxf8b821c0

解析:这道题是有难度的,需要有足够的细心。首先,我们在计算数组对应的存储地址时,应该要知道数组一行到底有多长。设二维数组X一行的长度为n,x[9][9]-x[4][4]=5n+5,观察发现,两个地址之间只有后三位不同,那么只需要看后三位,21c-140,由于是十六进制的,我们得先把它们转换为10进制,(2*16*16+1*16+12*1)-(1*16*16+4*16+0*1)=(512+16+12)-(256+64+0)=(540)-(320)=220=5n+5,所以n=43。

这个数组一行有43个元素,目标是计算出x[7][7]的地址,设x[7][7]的地址为z,那么x[7][7]的地址-x[4][4]的地址就会等于z-Oxf8b82140=3n+3,故z=Oxf8b82140+132,132转换为十六进制为84,所以最后z=Oxf8b821c4,所以答案为A

4、下列代码运行后的结果是什么( )

#include<stdio.h>
int main()
{
	char a = 'a', b;//1
	printf("%c,", ++a);//2
	printf("%c\n", b = a++);//3
	return 0;
}

A、b,b       B、b,c        C、a,b         D、a,c 

解析:基础题,但不少人会错误的把代码1看作逗号表达式,以为只定义了一个a,展开来写,代码1可写作char a='a';char b;一共定义了两个字符变量,代码2先++后使用,打印出'b'。代码3先使用后++,字符变量b最终被赋值为'b',故打印出'b',所以答案选A

 5、求函数返回值,传入 -1 ,则在64位机器上函数返回( )

int func(int x)
{
int count = 0;
while (x)
{
count++;
x = x&(x - 1);//与运算
} 
return count;
}

A、死循环      B、64       C、32        D、16

解析:先看代码构成,一个循环,一个循环计数器,最后返回循环的次数。与运算,一起为1才为1,否则为0,操作的是补码。传入了-1,-1的原码为10000.....00001,反码为11111.....11110,补码为11111.....11111,每次与比自己小1的数&运算,都会将自己的一位给修改为0,一共修改32次,全为0循环停止,因为int只能够存放4个字节,32个位故最后值为32。跟64位机器没半毛钱关系。选C

编程题1:

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

思路:numsSize 大小的数组,其中每个元素的数据在 [1, numsSize] 区间之内,以数组元素的绝对值作为下标,将对应位置的数据置为负数   比如 0 号位置是 3 ,则把 3 号位置的数据重置为负值,等到数组遍历重置完毕,只有缺失的这个数字对应的位置保留正数,其他出现过的数字位置都会是负数, 要注意不要重复设置负数,因为负负得正。

举个例子int a[4]={1,2,3,3};4是丢失的,走到1,把第一个位置也就是下标为0的位置变为1的负数,走到2,把第二个位置也就是下标为1的位置变为2的负数,走到3把下标为2的位置变为负数,还是走到3继续把下标为2的位置变为负数,最后就会发现,下标为3的位置不是负数,+1得缺失的数。

综上所述,两次遍历搞定,一次遍历把数据对应的下标对应的位置变为负数,第二次遍历找非负位置的下标即可

int* findDisappearedNumbers(int* nums, int numsSize, int* returnSize){
int i=0;*returnSize=0;
int*new=(int*)malloc(sizeof(int)*numsSize);
//创建数组
for(i=0;i<numsSize;i++)
{
    int tmp=abs(nums[i]);
    //下标不能为负数
    tmp-=1;
    //因为是1到n的范围,对应的下标减1才能得到
    nums[tmp]=-abs(nums[tmp]);
    //把对应下标变为负数,用绝对值避免负负得正
}
for(i=0;i<numsSize;i++)
{
    if(nums[i]>0)
    {
        new[*returnSize]=i+1;
       //+1得对应的位置
        (*returnSize)++;
    }
}
return new;
//返回数组
}

 编程题2:

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

思路:遍历一遍,是1话计数器就加1,一旦不是1,就与之前储存的最多连续1次数比较,若计数器上的更大则更新,然后将计数器归零继续计算连续1的个数。 需要注意的一点便是,出来之后还要再比较一次,避免数组的最后是一串连续的1导致漏判

int findMaxConsecutiveOnes(int* nums, int numsSize){
int i=0;int count=0;int max=0;
for(i=0;i<numsSize;i++)
{
    if(nums[i]==1)
    {
        count++;
    }
    else
    {
        max=max>count?max:count;
        //比较当前连续的次数和之前连续的次数,大的赋值给max
        count=0;
    }
}
max=max>count?max:count;
//出来之后再判定一次,避免漏判
return max;
}

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

 

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

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

相关文章

Oracle常用基础知识

整体介绍 SQL语言是一种数据库语言 1、DDL&#xff1a;数据定义语言 create-创建 drop-删除 alter-修改 rename-重命名 truncate-截断 2、DML&#xff1a;数据操作语句 insert-插入 delete-删除 update-更新 select-查询 3、DCL&#xff1a;数据控制语句 grant-授权 rev…

c++字符串函数

在 C 中有大量用于操作 C-style 字符串的函数&#xff0c;它们集成在头文件 <cstring> 中。其常见的函 函数作用strcpy(s1,s2) 复制字符串 s2 到 s1strcat(s1,s2) 将字符串 s2 连接到 s1 末尾strlen(s) 计算字符串 s 长度strcmp(s1,s2) 比较字符串 s1 和 s2 …

deepin 深度操作系统正式适配苹果 M1 芯片

导读近日消息&#xff0c;据深度操作系统官方消息&#xff0c;在已经发布的 deepin V23 beta 版本中&#xff0c;深度操作系统正式适配 Apple Mac mini M1 了。 官方表示&#xff0c;Mac mini M1 是苹果于 2020 年 11 月发布的迷你电脑主机&#xff0c;它搭载了最高 3.2GHz …

走进知识图谱(三)【世界知识图谱篇】其他的知识表示学习模型

除了上篇文章介绍到的基于复杂关系建模的知识表示方法&#xff0c;我们还有多种基于平移模型而改进的知识图谱知识表示方法&#xff0c;并且它们都是对关系的深入建模。可以将它们归为两类&#xff0c;分别是知识图谱结构建模和知识图谱多源信息融合建模。这也对应了之前说的&a…

Mac远程桌面连接软件 Jump Desktop 8

Jump Desktop是一款功能强大的远程桌面连接软件&#xff0c;可让您从任何地方远程访问和控制您的计算机或服务器。它提供了快速、安全和可靠的远程连接&#xff0c;使您能够轻松访问您的文件、应用程序和数据&#xff0c;无论您身在何处。 以下是Jump Desktop的一些主要特点和功…

【图像分类】理论篇(3)交叉熵损失函数的理解与代码实现

理论公式 计算实例 图像分类实例&#xff1a; 我们希望根据图片动物的轮廓、颜色等特征&#xff0c;来预测动物的类别&#xff0c;有三种可预测类别:猫、狗、猪。假设我们当前有两个模型&#xff08;参数不同)&#xff0c;这两个模型都是通过sigmoid/softmax的方式得到对于每个…

又有大动作!美的集团计划在港交所上市,推进全球化布局

撰稿|行星 来源|贝多财经 8月9日&#xff0c;美的集团&#xff08;SZ:000333&#xff09;发布《关于研究论证重大事项的公告》&#xff0c;称其正在对境外发行证券&#xff08;H股&#xff09;并上市事项进行前期论证。若能成功发行&#xff0c;美的集团将实现“AH”两地上市…

用Python做一个滑雪小游戏

游戏是让人娱乐和放松的好方式&#xff0c;而编写和玩自己的游戏则是一种特别有趣的体验。在本文中&#xff0c;我们将使用Python和pygame库来创建一个简单的滑雪小游戏。通过这个小游戏项目&#xff0c;我们将学习如何使用Python编程语言来制作自己的游戏&#xff0c;并且享受…

timeout limit is 100 seconds错误

使用SERVER 2019进行开发&#xff0c;出现100秒超时的问题&#xff0c; Load operation failed for query GetDOC_STAFFWithPhoto. The request was canceled due to the configured HttpClient.Timeout of 100 seconds elapsing 解决办法&#xff1a; 方法一&#xff1a;浏览…

卫星--夏令营

几何问题&#xff1a;就是用几何数学知识解题即可 但是越是数学编程题&#xff0c;越容易忽略数学题中的细节 1.地球半径你算进去了吗? 2.sin三角函数&#xff0c;M_PI标准圆周率在cmath文件里 3.有可能给出的夹角超过180呢&#xff0c;没给数据要求&#xff0c;就要自己考…

React源码解析18(5)------ 实现函数组件【修改beginWork和completeWork】

摘要 经过之前的几篇文章&#xff0c;我们实现了基本的jsx&#xff0c;在页面渲染的过程。但是如果是通过函数组件写出来的组件&#xff0c;还是不能渲染到页面上的。 所以这一篇&#xff0c;主要是对之前写得方法进行修改&#xff0c;从而能够显示函数组件&#xff0c;所以现…

数字后端笔试题(1)DCG后congestion问题

我正在「拾陆楼」和朋友们讨论有趣的话题&#xff0c;你⼀起来吧&#xff1f; 拾陆楼知识星球入口 已知某模块的DCG结果显示存在congestion&#xff0c;有congestion部分逻辑结构如下图: 问题1: 如何分析该电路有congestion问题的原因&#xff1f; 答&#xff1a;data selecti…

Android Studio实现列表展示图片

效果&#xff1a; MainActivity 类 package com.example.tabulation;import android.content.Intent; import android.os.Bundle; import android.view.View;import androidx.appcompat.app.AppCompatActivity; import androidx.recyclerview.widget.LinearLayoutManager; im…

概念解析 | 知识蒸馏(Knowledge Distillation)

教师指点弟子 - 深度神经网络知识蒸馏技术详解 注1:本文系“概念解析”系列之一,致力于简洁清晰地解释、辨析复杂而专业的概念。本次辨析的概念是:知识蒸馏(Knowledge Distillation)。 Knowledge Distillation(知识蒸馏)Review–20篇paper回顾- 知乎 知识蒸馏(Knowledge Dist…

福利!百度Workshop实战课,即刻搭建AI原生应用!| IDCF

你是否希望掌握大模型开发的秘诀&#xff1f;你是否渴望得到实践操作的机会&#xff1f;如果你的心中充满热情和期待&#xff0c;那么&#xff0c;WAVE SUMMIT 2023特别设置的Workshop将会是你的知识启航站&#xff01; 本次Workshop专注于AI开发与大模型应用&#xff0c;邀请…

yolov5 转换为rknn模型在3588上运行

为了把yolov5在rk3588上跑起来&#xff0c;在网上搜罗了一圈,踩了一些坑。由于瑞芯微的文档有升级&#xff0c;导致和网络的文章有出入&#xff0c;所以做个记录。 rknn-toolkit 转换文档&#xff1a; 瑞芯微的转换文档在 rknn-toolkit/example/pytorch/yolov5/REAME.md 里 …

硬件时钟和系统时钟的同步机制及案例分享

1 硬件时钟和系统时钟的同步机制 硬件时钟记录在服务器主板的CMOS芯片里面&#xff0c;与主板的南桥芯片&#xff08;目前Intel与AMD的主板仅有南桥&#xff0c;北桥已集成到CPU&#xff09;相连。硬件时钟一般叫做RTC&#xff08;Real Time Clock&#xff09;、CMOS clock或者…

管易云和金蝶云星空接口打通对接实战

管易云和金蝶云星空接口打通对接实战 对接系统管易云 管易云是上海管易云计算软件有限公司旗下的专注提供电商企业管理软件服务的品牌&#xff0c;总部位于中国上海张江高科技产业园区。管易云旗下拥有管易云C-ERP、EC-OMS、EC-WMS、B2C/B2B/BBC/微商城开发、PDA无纸化仓储解决…

提前预知风险:探索天气预警 API 在灾害管理中的关键作用

引言 自然灾害无情地影响着人类的生活&#xff0c;损害着财产和环境。然而&#xff0c;随着科技的不断进步&#xff0c;人类有了更多的工具来预测和减轻灾害带来的影响。其中&#xff0c;天气预警 API 在灾害管理中扮演着关键的角色&#xff0c;为政府、企业和个人提供了提前预…

JAVA日期相关操作

JAVA日期相关操作 计算两个日期相差的天数 /*** 计算两个日期相差的 天数* param smdate String类型初始时间* param bdate String类型截至时间* return Integer*/public static Integer dayCompare(String smdate, String bdate) throws Exception {Date start sdf.par…