C语言基础练习——Day09

目录

选择题

编程题

自除数

除自身以外数组的乘积


选择题

1、下列程序的输出是

#include<stdio.h>
int  main()
{int a [12]= {1,2,3,4,5,6,7,8,9,10,11,12},*p[4],i;for(i=0;i<4;i++)p[i]=&a [i*3];printf("%d\n",p[3][2]);return 0;
}
  • A 上述程序有错误
  • B 6
  • C 8
  • D 12
答案:D
💡

解析:

上述代码中的int* p[4]是指针数组,用于存储指针类型的变量,而因为每个元素都是指针,故可以使用下标解引用操作符p[i],即*(p+i),因为每一个元素的位置存储指针类型的变量,故可以将a数组每个元素的地址存入p数组中,进入for循环后遍历p数组,并将下标为i*3a数组中的元素的地址存入p数组中,即p[0] = &a[0]p[1] = &a[3]p[2] = &a[6]p[3] = &a[9],而p[3][2],相当于*(*(p+3)+2),即访问p[3]指向位置再向后移动2个int类型大小长度,访问该地址上的数值,即为12

2、二维数组X按行顺序存储,其中每个元素占1个存储单元。若X[4][4]的存储地址为0xf8b82140,X[9][9]的存储地址为0xf8b8221c,则X[7][7]的存储地址为

  • A 0xf8b821c4
  • B 0xf8b821a6
  • C 0xf8b82198
  • D 0xf8b821c0
答案:A
💡

解析:

假设每行有n个元素:那x[9][9]元素的地址 - x[4][4]元素的地址 = 0x21c-0x140=5n+5(21c140是地址末三位的十六进制数,5n+5代表相差5n行5个元素,因为每个元素占1个存储单元,故地址之间的差值即为相差的元素个数),这里n是43,假设x[7][7]的地址是z,x[7][7]元素的地址 - x[4][4]元素的地址 = z-0x140 = 3n+3,z = 3n+3+140 = 3*43+3+0x140 = 0x84+0x140 = 0x1c4,看地址的尾数,选择A

3、以下哪个选项可以正确描述sizeof(double)

  • A 一个整型表达式
  • B 一个双精度型表达式
  • C 一个不合法的表达式
  • D 一种函数调用
答案:A
💡

解析:

sizeof是C语言中的一个操作符,不是函数调用,简单的说其作用就是返回一个对象或者类型所占的内存字节数,结果是无符号整数,因此可以把它看作是整型表达式。所以选择A

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

int main()
{char a = 'a',b; printf("%c,", ++a); printf("%c\n", b = a++);return 0;
}
  • A b,b
  • B b,c
  • C a,b
  • D a,c
答案:A
💡

解析:

变量a里边存的是字符'a',第一次输出先加加再输出,输出的是'b';第二次输出的时候,a先赋值再加加,赋值给b的就是a原来的值,输出b的时候的还是'b'

5、以下逗号表达式的值为

(x = 4 * 5 , x * 5) , x + 5;
  • A 25
  • B 20
  • C 100
  • D 45
答案:A
💡

解析:

逗号表达式是从前到后依次计算子表达式,而其结果是最后一项的值,此题去掉括号后的表达式,和原表达式是等价的,先计算4*5并赋值给xx变为20,中间x*5并没有改变x的值,最后一项x+5值是25,也就是整个表达式的值

编程题

自除数

题目链接:728. 自除数 - 力扣(LeetCode)

自除数 是指可以被它包含的每一位数整除的数。
例如, 128 是一个 自除数 ,因为 128 % 1 == 0128 % 2 == 0128 % 8 == 0
自除数 不允许包含 0 。
给定两个整数 leftright ,返回一个列表, 列表的元素是范围 [left, right] 内所有的 自除数

思路解析:

遍历范围leftright(包括leftright在内)的所有整数,分别判断每个整数是否为自除数。根据自除数的定义,如果一个整数不包含 0且能被它包含的每一位数整除,则该整数是自除数。判断一个整数是否为自除数的方法是遍历整数的每一位,判断每一位数是否为 0 以及是否可以整除该整数。遍历整数的每一位的方法是,每次将当前整数对 10取模即可得到当前整数的最后一位,然后将整数除以 10。重复该操作,直到当前整数变成 0时即遍历了整数的每一位

参考代码

/** @lc app=leetcode.cn id=728 lang=c** [728] 自除数*/// @lc code=start
/*** Note: The returned array must be malloced, assume caller calls free().*/
int *selfDividingNumbers(int left, int right, int *returnSize)
{int *num = (int *)malloc(sizeof(int) * (right - left + 1));(*returnSize) = 0;while (left <= right){int tmp = left;      // 确定除数int cal = left % 10; // 确定每一位数int result = 0;      // 计算结果int count = 0;       // 记录有0出现的次数while (result == 0){// 确保数值中不含有0if (tmp != 0 && tmp % 10 == 0){count++;}// 被除数不能为0if (cal == 0){break;}// 计算结果是否为0result = left % cal;// 取数值的下一位tmp /= 10;cal = tmp % 10;}if (!result && !count){num[(*returnSize)++] = left;}left++;}return num;
}
// @lc code=end

除自身以外数组的乘积

题目链接:238. 除自身以外数组的乘积 - 力扣(LeetCode)

给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积
题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。
不要使用除法,且在 O( n ) 时间复杂度内完成此题。

思路解析:

首先本题能直接想到一个思路:将数组的所有元素相乘,再除以当前位置的数值,但是这个思路的问题就是如果除数为0则无法进行,并且题目规定不可以使用除法,所以只能另辟蹊径

题目中提到“题目数据保证数组 nums之中任意元素的全部前缀元素和后缀的乘积都在32 位整数范围内。”,那么可以考虑先处理数组每个元素的前缀之积,再处理每个元素的后缀之积,因为可以保证前缀之积和后缀之积二者相乘的积不超过int的存储范围,具体思路如下:

需要注意的是,因为前缀之积最后需要与后缀之积相乘故当元素是第一个或最后一个时前缀之积或后缀之积为1

参考代码:

/** @lc app=leetcode.cn id=238 lang=c** [238] 除自身以外数组的乘积*/// @lc code=start
/*** Note: The returned array must be malloced, assume caller calls free().*/
int* productExceptSelf(int* nums, int numsSize, int* returnSize) {int *answer = (int *)malloc(sizeof(int) * numsSize);// 计算数组的前缀之积answer[0] = 1; // 第一个元素的前缀之积为1for (int i = 1; i < numsSize; i++){answer[i] = nums[i - 1] * answer[i - 1];}// 计算后缀之积// 同时将后缀之积与前缀之积相乘int *left = (int *)malloc(sizeof(int) * numsSize);left[numsSize - 1] = 1; // 最后一个元素后缀之积为1for (int i = numsSize - 2; i >= 0; i--){// 先求后缀之积left[i] = left[i + 1] * nums[i + 1];}for (int i = 0; i < numsSize; i++){answer[i] *= left[i];}*returnSize = numsSize;return answer;
}
// @lc code=end

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

KMM初探

什么是KMM&#xff1f; 在开始使用 KMM 之前&#xff0c;您需要了解 Kotlin。 KMM 全称&#xff1a;Kotlin Multiplatform Mobile&#xff09;是一个用于跨平台移动开发的 SDK,相比于其他跨平台框架&#xff0c;KMM是原生UI逻辑共享的理念,由KMM封装成Android(Kotlin/JVM)的aar…

如何配置IDEA中的JavaWeb环境(2023最新版)

创建项目 中文版&#xff1a;【文件】-【新建】-【项目】 点击【新建项目】&#xff0c;改好【名称】点击【创建】 右键自己建立的项目-【添加框架支持】&#xff08;英文版是Add Framework Support...&#xff09; 勾选【Web应用程序】-【确定】 配置tomcat 点击编辑配置 点…

RabbitMQ学习总结-延迟消息

1.死信交换机 一致不被消费的信息/过期的信息/被标记nack/reject的信息&#xff0c;这些消息都可以进入死信交换机&#xff0c;但是首先要配置的有私信交换机。私信交换机可以再RabbitMQ的客户端上选定配置-dead-letter-exchange。 2.延迟消息 像我们买车票&#xff0c;外卖…

第十四届蓝桥杯省赛真题 Java A 组【原卷】

文章目录 发现宝藏【考生须知】试题 A \mathrm{A} A : 特殊日期试题 B: 与或异或试题 C : \mathrm{C}: C: 平均试题 D: 棋盘试题 E : \mathrm{E}: E: 互质数的个数试题 F: 阶乘的和试题 G: 小蓝的旅行计划试题 H: 太阳试题 I: 高塔试题 J \mathrm{J} J : 反异或 01 串 发现…

大规模自动化重构框架--OpenRewrite浅析

目录 1. OpenRewrite是什么&#xff1f;定位&#xff1f; 2. OpenWrite具体如何做&#xff1f; 3. 核心概念释义 3.1 Lossless Semantic Trees (LST) 无损语义树 3.2 访问器&#xff08;Visitors&#xff09; 3.3 配方&#xff08;Recipes&#xff09; 4. 参考链接 Open…

【数据结构】二叉树OJ题(C语言实现)

✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅ ✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨ &#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1…

个人网站制作 Part 9 | Web开发项目

文章目录 个人网站制作 Part 9 | Web开发项目&#x1f469;‍&#x1f4bb; 基础Web开发练手项目系列&#xff1a;个人网站制作&#x1f680; 添加博客功能&#x1f528;使用Express和MongoDB&#x1f527;步骤 1: 创建博客模型&#x1f527;步骤 2: 创建博客路由 &#x1f528…

PCM和I2S区别

I2S和PCM接口都是数字音频接口&#xff0c;而所见的蓝牙到cpu以及codec的音频接口都是用PCM接口&#xff0c;是不是两个接口有各自不同的应用呢&#xff1f;先来看下概念。 PCM&#xff08;PCM-clock、PCM-sync、PCM-in、PCM-out&#xff09;脉冲编码调制&#xff0c;模拟语音信…

BitMap位图理解及典型应用案例

基本介绍 本质上是哈希表的一种应用实现&#xff0c;原理简单&#xff0c;以 bit 为单位构建数组的方案&#xff0c;就叫作 Bitmap&#xff0c;翻译为位图。即bit 的集合&#xff1b;使用一个bit表示状态, 两种状态 &#xff08;0不存在和1存在&#xff09; 使用最少字节的类型…

【蓝桥杯嵌入式】四、各种外设驱动(六)生成PWM波——呼吸灯

温馨提示&#xff1a;本文不会重复之前提到的内容&#xff0c;如需查看&#xff0c;请参考附录 【蓝桥杯嵌入式】附录 目录 理论知识&#xff1a; 一、需求分析 1、需要的外设资源分析&#xff1a; 2、外设具体分析&#xff1a; 3、软件分析&#xff1a; 二、软件配置 …

Windows11企业版安装WSL2和Ubuntu发布版(避坑)

背景 win10企业版升级win11企业版后&#xff0c;安装WSL2&#xff0c;最后安装WSL的Ubuntu发布版&#xff0c;尝试网上各种方法&#xff0c;还是出现文章第三节所写的问题&#xff0c;差点被这问题搞放弃了&#xff0c;全网少有针对这个问题的答案&#xff0c;有也不顶用&…

开源漏扫工具:DependencyCheck

开源漏扫工具&#xff1a;DependencyCheck Dependency-Check 是 OWASP&#xff08;Open Web Application Security Project&#xff09;的一个实用开源程序&#xff0c;用于识别项目依赖项并检查是否存在任何已知的&#xff0c;公开披露的漏洞。 DependencyCheck是一个开源的…