习题练习 C语言(暑期第四弹)
自我小提升!
- 前言
- 一、数组
- 二、指针运算
- 三、统计每个月兔子的总数
- 四、双指针的应用
- 五、判断指针
- 六、珠玑妙算
- 七、两数之和
- 八、数组下标
- 九、指针
- 十、寻找峰值
- 十一、二级指针
- 十二、大端小端
- 十三、无符号参数
- 十四、数对
- 十五、截取字符串
- 总结
前言
重要的事说三遍!
学习!学习!学习!
一、数组
若有定义 int a[8]; ,则以下表达式中不能代表数组元素 a[1] 的地址的是( )
A: &a[0]+1
B: &a[1]
C:&a[0]++
D: a+1
题目解析:
D选项a计算时是首元素地址,再加1,就是a[1]的地址,AB明显对,C选项a[0]先和++结合,形成一个表达式,不能对表达式取地址,会报错
题目答案:
C
二、指针运算
以下选项中,对基本类型相同的两个指针变量不能进行运算的运算符是( )
A: +
B: -
C: =
D: ==
题目解析:
A错误,因为两个地址相加无意义也可能越界,所以规定不允许指针相加。B选项,可以求出两个数据元素储存位置之间的相
隔同数据类型的元素个数,C选项,赋值,没问题,D选项,判断两指针是否相同
题目答案:
A
三、统计每个月兔子的总数
题目链接:OJ链接
题目解析:
这道题的关键在于寻找数字之间的规律,如果细心的同学会发现这其实是一个斐波那契数列。第 n 个月的兔子数量实际上就是第 n-1 个斐波那契数。
题目答案:
#include <stdio.h>
int main() {int n;while (scanf("%d", &n) != EOF) {int sum1=1;int sum2=1;if(n<=2)printf("%d",sum2);else{for(int i=0;i<n-2;i++){int temp=sum1+sum2;sum1=sum2;sum2=temp;}}printf("%d",sum2);}return 0;
}
四、双指针的应用
有以下函数,该函数的功能是( )
int fun(char *s)
{char *t = s;while(*t++);return(t-s);
}
A: 比较两个字符的大小 B: 计算s所指字符串占用内存字节的个数
C: 计算s所指字符串的长度 D: 将s所指字符串复制到字符串t中
题目解析:
循环在*t为0时停止,同时t++,t最后会停在字符串结束的’\0’之后的一个位置,t作为尾部指针减去头部指针就是整个字符串占用内存的字节数,包含\0在内;而c答案字符串长度不包括最后的\0
题目答案:
B
五、判断指针
以下程序运行后的输出结果是( )
include <stdio.h>
int main()
{int a[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12}, *p = a + 5, *q = NULL;*q = *(p+5);printf("%d %d\n", *p, *q);return 0;
}
A: 运行后报错 B: 6 6 C: 6 11 D: 5 10
题目解析:
指针q初始化为NULL,接着又解引用指针q,是错误的,对NULL指针是不能解引用的。
题目答案:
A
六、珠玑妙算
题目链接:OJ链接
提示:
len(solution) = len(guess) = 4
solution和guess仅包含"R",“G”,“B”,"Y"这4种字符
题目解析:
遍历两个数组,统计猜中次数和伪猜中次数
猜中次数:若位置相同且颜色字符也相同在猜中次数计数器+1
伪猜中次数:颜色相同,但是在不同位置,这时候只需要除去猜中位置之外,统计两个数组中各个字符出现的数量,取较小的一方就是每种颜色伪猜中的数量了
题目答案:
int* masterMind(char* solution, char* guess, int* returnSize){*returnSize=2;static int arr[2]={0};arr[0] = 0; arr[1] = 0;//静态空间不会进行二次初始化因此每次重新初始化,可以使用memset函数int solu[26]={0};//26个字符位 solution 四种颜色数量统计int gue[26]={0};//26个字符位 guess 四种颜色数量统计for(int i=0;i<4;i++){if(solution[i]==guess[i])//位置和颜色完全一致则猜中数量+1arr[0]++;else{solu[solution[i]-'A']+=1;///统计同一位置不同颜色的两组颜色数量,伪猜中不需要对应位置相同,只需要有对应数量的颜色就行gue[guess[i]-'A']+=1;}}for(int i=0;i<26;i++){//在两个颜色数量统计数组中查看颜色数量,取相同位置较小的一方就是为猜中数量arr[1]+=(solu[i]<gue[i]?solu[i]:gue[i]);}return arr;
}
七、两数之和
题目链接:OJ链接
题目解析:
本题的基本思想是双重遍历思想
但是必须根据条件做出相应调整,防止浪费时间
题目答案:
int* twoSum(int* numbers, int numbersLen, int target, int* returnSize ) {* returnSize=2;static int arr[2]={0};memset(arr, 0x00, sizeof(arr));//静态空间不会二次初始化,因此手动初始化for(int i=0;i<numbersLen;i++){if (numbers[i] > target)//一旦大于目标数,可以直接跳过continue;for(int j=i+1;j<numbersLen;j++){//配对的数直接从i+1开始,防止出现重复配对,造成时间浪费if(numbers[i]+numbers[j]==target){arr[0]=i+1;arr[1]=j+1;return arr;}}}* returnSize=0;return NULL;
}
八、数组下标
有如下代码,则 *(p[0]+1) 所代表的数组元素是( )
int a[3][2] = {1, 2, 3, 4, 5, 6}, *p[3];
p[0] = a[1];
A: a[0][1]
B: a[1][0]
C: a[1][1]
D:a[1][2]
题目解析:
p是一个指针数组,p[0] = a[1];此处a[1]是二维数组的第二行的数组名,数组名表示首元素的地址,a[1]是a[1][0]的地址,所以p[0]中存储的是第2行第1个元素的地址,p[0]+1就是第二行第2个元素的地址,*(p[0]+1)就是第二行第二个元素了。所以C正确。
题目答案:
C
九、指针
关于指针下列说法正确的是【多选】( )
A: 任何指针都可以转化为void *
B: void *可以转化为任何指针
C:指针的大小为8个字节
D: 指针虽然高效、灵活但可能不安全
题目解析:
C选项,指针占几个字节要看平台,64位环境下8个字节,32位环境下4个字节
题目答案:
ABD
十、寻找峰值
题目链接:OJ链接
题目解析:
二分思想,
中间比右边大,认为从右往左半边递增,则把 right 不断向左靠拢 right=mid ,注意不能是 mid-1 ,因为这个位置有可能就是峰值点。
直到遇到中间比右边小了,意味着数据开始递降了,则 left 向右偏移, left=mid+1 ; 而一旦 mid+1 位置大于了right ,意味着刚好这个 mid+1 位置,是一个左半边-右往左递降,右半边-右往左递增的点,就是一个峰值点。
题目答案:
int findPeakElement(int* nums, int numsLen ) {//边界情况处理,1个元素前后都是负无穷 以及 0号位置大于1号位置,-1位置负无穷的情况if (numsLen == 1 || nums[0] > nums[1]) return 0;//末尾位置数据大于上一个位置数据,而nums[numsLen]负无穷的情况if (nums[numsLen - 1] > nums[numsLen - 2]) return numsLen - 1;int left = 0, right = numsLen - 1, mid;while (left < right) {mid = left + (right - left) / 2;if (nums[mid] < nums[mid + 1])//中间比右边小,意味着右边肯定有个峰值left = mid + 1;else //否则在左边包括当前位置肯定有个峰值right = mid;}return left;
}
十一、二级指针
请指出以下程序的错误【多选】( )
void GetMemory(char **p, int num)
{if(NULL == p && num <= 0)//1return;*p = (char*)malloc(num);return;
}
int main()
{char *str = NULL;GetMemory(&str, 80); //2if(NULL != str){strcpy(&str, "hello"); //3printf(str); //4} return 0;
}
A: 1 B: 2 C: 3 D: 4
题目解析:
第1处两种情况之一成立都是要返回的,应该用或,此处用与错误。在语句GetMemory(&str,100);中传入str的地址,在语句char*str=NULL;中str初始化为空指针,但是str指针变量也有地址,所以参数char**p里面的p保存的是指针变量str的地址,所以调用GetMemory函数之后,动态开辟的空间的地址存放在了str中,在函数返回之后没有释放内存,但是这不会导致程序错误,只会导致内存泄漏。第3处用&str是错的,应该直接用str,是刚申请下来的空间首地址,可以用来接收字符串的copy。
题目答案:
AC
十二、大端小端
请问下列代码的输出结果有可能是哪些【多选】( )
#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
题目答案:
AC
十三、无符号参数
下面这个程序执行后会有什么错误或者效果【多选】( )
#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语言系列没有内置检查机制来确保复制到缓冲区的数据不得大于缓冲区的大小,因此当这个数据足够大的时候,将会溢出缓冲区的范围
题目答案:
AB
十四、数对
题目链接:OJ链接
题目解析:
假设输入 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));
题目答案:
#include <stdio.h>
int main() {long n, k;while (scanf("%ld %ld", &n, &k) != EOF) {if (k == 0) {printf("%ld\n", n * n);//任意数对的取模结果都是大于等于0的continue;}long count = 0;for (long y = k + 1; y <= n; y++) {count += ((n / y) * (y - k)) + ((n % y < k) ? 0 : (n % y - k + 1));}printf("%ld\n", count);}return 0;
}
十五、截取字符串
题目链接:OJ链接
题目答案:
#include <stdio.h>
#include<string.h>
int main() {char str[1001]={0};int k;while (scanf("%s %d", str, &k) != EOF) {char*ptr1=str;char*ptr2=str+k-1;while(ptr1<=ptr2){printf("%c",*ptr1);ptr1++;}}return 0;
}
还有一种更简洁的方法
题目解析:
截取字符串前 n 个字符,只需要将数组 n 下标位置的数据替换为字符串结尾标志即可
#include <stdio.h>
int main()
{char str[101];while(scanf("%s", str) > 0) {int n;scanf("%d", &n);str[n] = '\0';printf("%s\n", str);}return 0;
}
总结
重要的事说三遍!
成功!成功!成功!
暑假期间所有的题目就到此为止啦!
让我们一起迎接下一个阶段的学习吧!
相关文章:
习题练习 C语言(暑期第四弹)
自我小提升! 前言一、数组二、指针运算三、统计每个月兔子的总数四、双指针的应用五、判断指针六、珠玑妙算七、两数之和八、数组下标九、指针十、寻找峰值十一、二级指针十二、大端小端十三、无符号参数十四、数对十五、截取字符串总结 前言 重要的事说三遍&#…...
【docker快速部署微服务若依管理系统(RuoYi-Cloud)】
工作原因,需要一个比较完整的开源项目测试本公司产品。偶然发现RuoYi-Cloud非常适合,它有足够多的中间件,而且官方提供docker安装,但我本人在安装过程中遇到了很多坑,在这里记录一下防止下次会再次遇到。 项目地址 ht…...
面试求职-简历编写技巧
没有高水平简历 只有高匹配的简历 试问一下:如果一个非常牛逼的软件工程的硕士,投递市场营销岗位,结果会是什么样呢? 这位同学大概率没办法通过简历。 不是因为他不够优秀,而是因为简历和岗位不够匹配。 在公司的招…...
云原生安全性:构建可信任的云应用的最佳实践
文章目录 云原生安全性的重要性1. 数据隐私2. 恶意攻击3. 合规性要求4. 业务连续性 构建可信任的云应用的最佳实践1. 安全开发2. 身份验证与授权3. 容器安全性4. 监控与审计5. 持续集成与持续交付(CI/CD)6. 安全培训和教育 未来趋势:服务网格…...
第一章 数据库SQL-Server(及安装管理详细)
❄️作者介绍:奇妙的大歪❄️ 🎀个人名言:但行前路,不负韶华!🎀 🐽个人简介:云计算网络运维专业人员🐽 前言 21 世纪,人类迈入了“信息爆炸时代”,…...
chrome extension无法获取window对象
背景见上一篇博客修改网页内容的方法 上一篇博客之后,我要修改的网页有一个新改版,然后有个数据存在了window中,我直接在js中使用window.xxx发现无法获取。所以有本文。 https://juejin.cn/post/7145749643316428830 https://onelinerhub.com…...
在linux虚拟机上安装docker(我的实践)
参考文章: https://blog.csdn.net/qq_29479041/article/details/82659218 步骤: 1.安装docker 参考文章: https://blog.csdn.net/qq_29479041/article/details/82659218 https://blog.csdn.net/qq_38345468/article/details/110128659 2.…...
Spring之事务开发
什么是事务? 事务是指数据库管理系统中的一个执行单位或一个逻辑工作单元,它由一个或多个数据库操作序列组成。事务具有以下四个特性,通常被称为ACID特性: 原子性(Atomicity):事务是一个不可分…...
干了三年的功能测试,让我女朋友跑了,太难受了...
简单概括一下 先说一下自己的情况,普通本科,19年通过校招进入深圳某软件公司,干了3年多的功能测试,21年的那会,因为大环境不好,我整个人心惊胆战的,怕自己卷铺盖走人了,我感觉自己不…...
JavaScript函数的使用
前言 程序中的foo、bar、baz 在学习编程的过程中,你可能会经常看到foo、bar、baz这些名词: 它们通常被用来作为函数、变量、文件的名词;目前已经编程了计算机编程的术语一部分;但是它们本身并没有特别的用途和意义;…...
【算法】Java-使用数组模拟单向链表,双向链表
目录 试题1:实现一个单链表,并实现以下功能: 试题2:实现一个双链表,并实现以下功能 思路总结: 什么情况下可能涉及到用数组实现链表呢? 在学习时了解到了可以用数组模拟链表,使其…...
Nessus简单介绍与安装
Nessus简单介绍与安装 1.Nessus简介 Nessus号称是世界上最流行的漏洞扫描程序,全世界有超过75000个组织在使用它。该工具提供完整的电脑漏洞扫描服务,并随时更新其漏洞数据库。Nessus不同于传统的漏洞扫描软件,Nessus可同时在本机或远端上遥…...
【每天一道算法题】day2-认识时间复杂度
认识时间复杂度: O:读作big O,在数学上指的是上限的意思 常数时间的操作 一个操作如果和样本的数据量没有关系,每次都是固定时间内完成的操作,叫做常数操作。时间复杂度为一个算法流程中,常数操作数量的一…...
前端报错合集
error Component name “index“ should always be multi-word vue/multi-word-component-names 的解决办法 原因组件命名是 没有采用驼峰 error Component name “index“ should always be multi-word vue/multi-word-component-names 的解决办法_error component name &qu…...
Milvus以及Web UI 安装
向量数据库懂的都懂 版本数据 [rootiZ7xv7q4im4c48qen2do2bZ project]# cat /etc/redhat-release CentOS Stream release 9 [rootiZ7xv7q4im4c48qen2do2bZ project]# docker version Client: Docker Engine - CommunityVersion: 24.0.5API version: 1.43Go v…...
Go for循环中的defer
背景 写个后台程序,定时抓取服务器指标,代码逻辑如下,使用一段时间后内存不断增加 func CollectInfo() {for {// 获取服务器信息代码// ...............resp, err : http.Post("http://server", "application/json", str…...
创建开机自启的脚本
在启动许多ros节点时有多种方式,我推荐使用launch来启动所有的节点,这也是一种规范的方式。以后会慢慢向这个方向靠。 除此之外还可以通过创建的脚本来启动: 脚本位置不限,只需要: sudo gedit xxx.sh在里面添加相应的…...
学生信息系统(python实现)
#codingutf-8 import os.path filenamestudent.txtdef menm():#菜单界面print(学生管理系统)print(-----------------------------功能菜单-----------------------------)print(\t\t\t\t\t\t1.录入学生信息)print(\t\t\t\t\t\t2.查找学生信息)print(\t\t\t\t\t\t3.删除学生信息…...
管理类联考——数学——汇总篇——知识点突破——数据分析——1. 计数原理——排列组合——公式
排列组合 排列与组合的推导: 从n个不同的元素中取出m(m≤n)个元素做排列为 A n m A_n^m An...
C#,《小白学程序》第十六课:随机数(Random)第三,正态分布的随机数的计算方法与代码
1 随机数的问题 用 C# Random 类生成的随机数是平均分布的。也就是各数据段的出现的次数差不多。彩票号码属于这种随机数。 而很多很多常见的随机数,比如:成绩,却是符合正态分布的。 因而很多时候需要生成符合正态分布规律的随机数。 2 文…...
一文读懂java变量类型
前言 在学习和使用Java编程语言时,理解变量类型是至关重要的基础知识。Java是一种静态类型语言,强调变量必须先声明其类型,才能进行后续操作。因此,对于初学者来说,了解Java中不同的变量类型及其特性是迈向编程成功的…...
解决windows下git操作提示用户名密码错误的问题
当代码从一个平台切换到另一个平台的时候,需要做两步操作,第一步就是更新git的仓库地址,在项目的.git/config文件里面修改,这一步做完之后,就可以推送代码到新的仓库了,这里就是重点来了。 一般第一次推动代…...
ESP32开发:Clion配置IDF
IDF环境搭建 使用安装包安装IDF 可以通过安装包进行安装,如下图: 下载链接如下:https://dl.espressif.cn/dl/esp-idf/?idf4.4 安装好后,IDF会添加环境变量IDF_TOOLS_PATH,如果要安装多个IDF,为了防止冲…...
伦敦金的走势高低的规律
伦敦金市场是一个流动性很强的市场,其价格走势会在诸多因素的影响下,出现反复的上下波动,如果投资者能够在这些高低走势中找到一定的规律,在相对有利的时机入场和离场,就能够通过不断的交易,累积大量的财富…...
【C#-1】C#调用matlab生成的dll库
matlab打包dll 1、matlab示例程序: function untitled4(x)z peaks(x);figuresurf(z) end 2、输入deploytool打包matlab程序,具体如下: 3、拷贝 打包成功后,将生成for_redistribution_files_only文件夹中的dll文件拷贝到C#程序…...
MATLAB中pdist和pdist2的区别
一、pdist 和 pdist2 是MATLAB中用于计算距离矩阵的两个不同函数,它们的区别在于输入和输出以及一些计算选项。 pdist: pdist函数用于计算一组点之间的距离。 输入:通常接受一个矩阵,矩阵的每一行代表一个数据点,矩阵的列代表数据…...
直播平台源码开发搭建APP的DASH协议:流媒体技术其中一环
在直播平台源码APP中,有着许许多多、多种多样的功能,比如短视频功能,帮助我们去获取信息,看到全世界用户身边发生的事情或是他们的生活;又比如直播功能,为用户提供了实时的娱乐享受,还让一些用户…...
【前端】js解码base64
【前端】js解码base64 //不会乱码 function strTob(base64) {// 对base64转编码var decode atob(base64)decode escape(decode)// 编码转字符串var str decodeURIComponent(decode)return str } atob 中文乱码的解决方案 decode escape(decode) // 编码转字符串 v…...
Apipost:API开发者的协同工作神器
在当今快速发展的数字化时代,API已成为企业与开发者实现数据互通、应用集成的重要桥梁。然而,随着API数量的不断增加,API开发、调试、测试、文档等工作也变得越来越复杂。为了解决这一痛点,一款名为Apipost的API协同研发工具应运而…...
照片动起来软件有哪些?试试这几个
照片动起来软件有哪些?将照片动起来可以让照片更加生动有趣,让人们更容易吸引到你的照片。在社交媒体和短视频的时代,人们需要更多的方式来吸引别人的注意力。让照片动起来可以让你的照片变得更加生动、更加有趣,让人们更容易停留…...
哪里找高清图片素材/东莞网站建设优化推广
见字如面,我是军哥!话说最近几天又来了一大波读者,有朋友说加我微信提示繁忙,所以军哥必须给解决一下!我的朋友圈会发一些公号之外的感悟,比如读者问题问卷调查、趣味抽奖,说实话还挺好玩的&…...
沈阳思路网站制作/企业网站seo多少钱
c语言程序设计课程设计报告gysC 语言程序设计课程设计材料C语言程序设计课程设计报告学生姓名: 钱朝政 学 号: 131408115系 (院): 信息工程学院专 业: 物联网工程设计(论 )题目: 职工信息管理系统完成日期: 2013年12月30 日&#…...
西安做网站排名/做网页
创建表的两种办法: 使用DBMS 提供的交互式创建和管理数据库表的工具;直接用SQL 语句创建。表创建基础 创建表示例: 1 CREATE TABLE Products 2 ( 3 prod_id CHAR(10) NOT NULL,--是否可以为null 4 vend_id CHAR(10) NOT NULL, 5 …...
分享一个网站能用的/徐州seo外包平台
[COGS2479]偏序 题目大意: \(n(n\le50000)\)个四元组,求四维偏序。 思路: CDQ分治套CDQ分治套树状数组。 细节: 第二层CDQ之前要备份数组\(a\),否则第二层CDQ结束以后\(a\)就不对了。 源代码: #include<…...
秦淮网站建设/提高百度快速排名
01-求一个整数存储在内存中的二进制中1的个数 法一:循环遍历 问题引入以在十进制中,求某一个数字n中的某个数字m的数量,来引入二进制中求1的个数。 要求一个十进制数n中某一位数字m的个数,只需要让n对10取模与m比较、再让n n /…...
wordpress全站pjax/百度公司招聘信息
持续更新中。。。 尝试用蓝牙hid协议 文章目录1.个人实践1.1 app在后台处于没有被系统杀死时,可以自动重连和发数据1.2 但在后台被系统杀死(没有被收到杀死),当连接状态发生变化的时候,系统会唤醒app,扫描后会调用1.3 因为后台获取位置时&…...