irpas技术客

【第七章】 C语言之牛客网&力扣刷题笔记 【点进来保证让知识充实你一整天】_Dream_Y.Ocean_牛客网和力扣

irpas 879

💕全网最火特辑💕 第七章 C语言之牛客网&力扣刷题📖笔记 【?点进来保证让知识充实你一整天】


作者介绍:

🎓作者: 热爱编程不起眼的小人物🐐 🔎作者的Gitee:代码仓库 📌系列文章推荐:

1.【第一章】 C语言之牛客网刷题笔记 【点进来保证让知识充实你一整天】 2.【第二章】 C语言之牛客网刷题笔记 【点进来保证让知识充实你一整天】 3.【第三章】 C语言之牛客网刷题笔记 【点进来保证让知识充实你一整天】 4.【第四章】 C语言之牛客网刷题笔记 【点进来保证让知识充实你一整天】 5.【第五章】 C语言之牛客网刷题笔记 【点进来保证让知识充实你一整天】 6.【第六章】 C语言之牛客&力扣刷题笔记 【点进来保证让知识充实你一整天】 📒我和大家一样都是初次踏入这个美妙的“元”宇宙🌏 希望在输出知识的同时,也能与大家共同进步、无限进步🌟

🌐为大家推荐一款刷题网站呀👉点击跳转 以下题目&算法思想,都可以从此网站中找到并参考学习哟~


文章目录 💕全网最火特辑💕 第七章 C语言之牛客网&力扣刷题📖笔记 【?点进来保证让知识充实你一整天】前言🎒选择题【全面深度剖析】📗 考点:函数的理解和应用📕考点:函数在内存中存储的理解的和应用📘考点:函数使用的理解和应用📙考点:正确调用函数的理解和应用📓考点:递归函数计算方法的理解和应用 📖编程题【全面深度解析】🏷?【牛客网题号: HJ34 图片整理】【难度:中等】🏷?【 leetcode 题号:724. 寻找数组的中心下标】【难度:简单】 🌐 如何高效学习数据结构与算法??总结


前言

同学们,新的学期早已开始啦😚~相信大家都想在这学期偷偷地卷”死“同学吧😇大学里里可以做的事情有很多哦,我们一定要好好地利用好这段时间,努力地提升自己,大胆放手一搏吧!?

星光不负赶路人,时光不有心人

只要我们以深深地谦卑去忍耐 “暗无天日” 的日子,定会迎来属于我们豁然开朗地一刻!让我们一起为心中所想,去奋斗吧!!

以下内容干货满满,跟上步伐吧~


🎒选择题【全面深度剖析】 📗 考点:函数的理解和应用

1、 以下对C语言函数的有关描述中,正确的有【多选】( )

A:在C语言中,一个函数一般由两个部分组成,它们是函数首部和函数体

B:函数的实参和形参可以是相同的名字

C:在main()中定义的变量都可以在其它被调函数中直接使用

D: 在C程序中,函数调用不能出现在表达式语句中

🙈大家觉得答案是什么呢


🙉答案是 AB 啦~

🙊 如果有疑惑,且听我细细分析呀

本题的主要考点:“函数调用的理解和应用”

💡本题的解题关键:

主函数也是函数

??我们就一个一个来分析吧:

C:在main( )函数内部定义的局部变量,它们的生命周期和作用域只在主函数中有效,因为主函数也是函数,所以?

D:当函数有返回值时,函数调用可以出现在表达式中,所以?

?这也就是为什么这道题选AB啦~


📕考点:函数在内存中存储的理解的和应用

2、 在C语言中,以下正确的说法是( )

A:实参和与其对应的形参各占用独立的存储单元

B:实参和与其对应的形参共占用一个存储单元

C:只有当实参和与其对应的形参同名时才共占用存储单元

D:形参是虚拟的,不占用存储单元

🙈同学们觉得答案是什么呢


🙉答案是 A 啦~

🙊 如果同学们有疑惑,且听我细细分析呀

本题主要考点:“函数在栈区中存储的理解的和应用”

💡本题的解题关键:

函数在栈区中是通过压栈的方式存储的

?特别注意:

1??在调用函数的时候,内存会为函数开辟一块空间,传参的时候,函数会用 形参接收,是真实的通过压栈的方式开辟了内存存储实参的内容,占用了内存空间

2??即使实参和形参的名字相同,但是它们也是占用不同的内存空间

3??在函数没被调用的时候,形参是为形式上的存在,不会为其分贝空间,直到被调用的时候,才会为其分配内存空间

?这也就是为什么选B啦~


📘考点:函数使用的理解和应用

3、 在上下文及头文件均正常的情况下,下列代码的输出是( )(注: print 已经声明过)

int main() { char str[] = "Geneius"; print(str); return 0; } print(char *s) { if(*s) { print(++s); printf("%c", *s); } }

A: suiene

B: neius

C: run-time error

D: suieneG

🙈同学们觉得答案是什么呢


🙉答案是 A 啦~

🙊 如果同学们有疑惑,且听我细细分析呀

本题主要考点:“函数适应的理解和应用”

💡解题关键:

直接分析即可

?特别注意: 为什么此函数可以写在主函数后面呢?

这是因为此函数已经提前被声明过的哦

?声明和不声明有什么区别呢

??因为程序是从上往下按顺序走的,如果其它函数写在主函数后面而且没有被声明的话,此时程序是不知道有这个函数,那程序走到这些函数被调用的地方的时候,是找不到它们函数的本体的,因为从头都没发现函数体

??但如果在程序开头声明过的话,在程序走到函数声明的地方时,就相当于将最后的函数体整体替代了声明的语句,就告诉程序是有这个函数的,那在调用的时候就能被调用了

👉回到题目:

1??传给print函数的是字符串的首元素地址【即G的地址】

2??第一次进入函数后,先对s的地址前置++了,所以此时s不再指向G,而是指向了e,s的值指向发生了改变

3??函数进行递归逆序打印字符串的功能

?综上:

因为2??,所以没有打印G,且是逆序打印的

?这也就是这题为什么选A啦~


📙考点:正确调用函数的理解和应用

4、 对于函数void f(int x); ,下面调用正确的是( )

A: int y=f(9);

B: f(9);

C: f(f(9));

D: x=f();

🙈同学们觉得答案是什么呢


🙉答案是 B 啦~

🙊 如果同学们有疑惑,且听我细细分析呀

本题主要考点:“正确调用函数的理解和应用”

💡解题关键:

对于函数调用,我们只需要对照函数的返回值和参数进行正确调用即可

?? 让我们一起来解题吧~

1??函数的返回值为void,所以调用的时候我们不需要去接收函数的返回值

2??函数传参需要一个整型,所以C中的f(9)不能作为参数,因为这个传的是f(9)的返回值,即void,不符合传int

?综上:

这也是为什么选B啦~
📓考点:递归函数计算方法的理解和应用

5、 给定 fun 函数如下,那么 fun(10) 的输出结果是( )

int fun(int x) { return (x==1) ? 1 : (x + fun(x-1)); }

A: 0

B: 10

C: 55

D: 3628800

🙈同学们觉得答案是什么呢


🙉答案是 C 啦~

🙊 如果同学们有疑惑,且听我细细分析呀

本题主要考点:“递归函数计算方法的理解和应用”

💡解题关键:

对于递归类题目,我们最好画图耐心分析

👉如下:

??我们便发现:

本质就是求等差数列的和:1+2+3+4+……+10 = 55

?综上:

这也是为什么选C啦~
📖编程题【全面深度解析】 🏷?【牛客网题号: HJ34 图片整理】【难度:中等】

1、 Lily上课时使用字母数字图片教小朋友们学习英语单词,每次都需要把这些图片按照大小(ASCII码值从小到大)排列收好。请大家给Lily帮忙,通过C语言解决。

输入描述: Lily使用的图片包括 "A" 到 "Z" 、 "a" 到 "z" 、 "0" 到 "9" 。输入字母或数字个数不超过 1024

输出描述: Lily的所有图片按照从小到大的顺序输出

🔍题目传送门:OJ链接

示例: 输入:Ihave1nose2hands10fingers 输出:0112Iaadeeefghhinnnorsssv

💡解题关键:

这道题考察的其实就是字符排序,每个 ascii 字符在内存都有一个对应的 ascii 值,通过内存中数据的存储进行排序就行

??思路: 冒泡排序

相邻数据之间进行比较交换,将较大或较小的数据向后推到数组末尾,然后开始下一轮次大数据的冒泡过程

👉实现:

int main() { char str[1025]; while (scanf("%s", &str) != EOF) { int len = strlen(str); for (int i = 0; i < len - 1; i++) { for (int j = i + 1; j < len; j++) { if (str[i] > str[j]) { char temp = '\0'; temp = str[i]; str[i] = str[j]; str[j] = temp; } } } printf("%s\n", str); } return 0; }
🏷?【 leetcode 题号:724. 寻找数组的中心下标】【难度:简单】

2、 给你一个整数数组 nums ,请计算数组的 中心下标

数组 中心下标 是数组的一个下标,其左侧所有元素相加的和等于右侧所有元素相加的和。

如果中心下标位于数组最左端,那么左侧数之和视为0 ,因为在下标的左侧不存在元素。这一点对于中心下标位于数组最右端同样适用。

如果数组有多个中心下标,应该返回 最靠近左边 的那一个。如果数组不存在中心下标,返回 -1 。

🔍题目传送门:OJ链接

示例: 输入:nums = [1, 7, 3, 6, 5, 6] 输出:3 解释: 中心下标是 3 。 左侧数之和 sum = nums[0] + nums[1] + nums[2] = 1 + 7 + 3 = 11, 右侧数之和 sum = nums[4] + nums[5] = 5 + 6 = 11 , 二者相等。 输入:nums = [2, 1, -1] 输出:0 解释: 中心下标是 0 。 左侧数之和 sum = 0 ,(下标 0 左侧不存在元素), 右侧数之和 sum = nums[1] + nums[2] = 1 + -1 = 0 。

💡解题关键:

1??我们先计算整体的总下标之和【total】

2??再循环遍历一遍,用sum表示左边的下标之和,一边走一边判断左边下标之和是否等于右边下标值和

若相等,则返回走到的地方的下标

若遍历完也不相等,则返回-1

👉实现:

int pivotIndex(int* nums, int numsSize) { int i = 0; int total = 0; for(i=0;i<numsSize;i++) { total += nums[i]; } int sum = 0; // 左边下标的和 for(i=0;i<numsSize;i++) { if(sum == total - nums[i] - sum) //判断 左边下标之和 是否等于 右边下标之和 { return i; } sum = sum + nums[i]; } return -1; }
🌐 如何高效学习数据结构与算法?

数据结构与算法的学习还是得基础知识?自己动手同步进行

如果是初学者,需要找一个可以在线练习得网站,我建议你去牛客网多练习呀(快点击跳转学起来吧!)

就如上述讲解的面试OJ题,牛客网内还有大神提供题解思路,对新手玩家及其友好,有不清楚的语法,不理解的地方,看看别人的思路,别人的代码,也许就能豁然开朗~


?总结

综上,特辑的第七章呐🍭~

让我们大家一同在平凡的生活中奔赴热爱吧~

毕竟,

“热爱的东西 永远不要说放弃”

💫如果有错误?,欢迎指正呀💫

?如果觉得收获满满,可以点点赞👍支持一下哟~?


1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,会注明原创字样,如未注明都非原创,如有侵权请联系删除!;3.作者投稿可能会经我们编辑修改或补充;4.本站不提供任何储存功能只提供收集或者投稿人的网盘链接。

标签: #牛客网和力扣