【第七章】 C语言之牛客网&力扣刷题笔记 【点进来保证让知识充实你一整天】_13天突破c语言电子书(1)

img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以戳这里获取

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

💡本题的解题关键:

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

特别注意:

  • 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,而是指向了es的值指向发生了改变
  • 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++)
    {


![img](https://img-blog.csdnimg.cn/img_convert/2da3405a2b14b6eba5d5b4b1523aeb5f.png)
![img](https://img-blog.csdnimg.cn/img_convert/f54fafe01ca0046a8c5c6458614553cc.png)

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!**

**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**

**[如果你需要这些资料,可以戳这里获取](https://bbs.csdn.net/topics/618668825)**

;i<numsSize;i++)
    {
        total += nums[i];
    }
    
    int sum = 0; // 左边下标的和
    
    for(i=0;i<numsSize;i++)
    {


[外链图片转存中...(img-NU8h1IWw-1715791606675)]
[外链图片转存中...(img-GaSQTyCJ-1715791606675)]

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!**

**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**

**[如果你需要这些资料,可以戳这里获取](https://bbs.csdn.net/topics/618668825)**

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值