首页 > 其他分享 >学习C语言的第十一天

学习C语言的第十一天

时间:2023-09-25 23:32:20浏览次数:27  
标签:第十一天 sz arr 函数 int C语言 学习 Add num

写一个函数,实现一个整形有序数组的二分查找

#include <stdio.h>

int Binary(int arr[], int k)   //这里的arr本质上是个指针
{
	int sz = sizeof(arr) / sizeof(arr[0]); //由于上面的是指针,所以这里sz计算的是指针的大小,在win32系统下是4,而arr[0]是一个整形的大小,也是4,所以sz=4/4=1
	int left = 0;
	int right = sz - 1;

	while (left <= right)
	{
		int mid = left + (right - left) / 2; // 更新mid的值

		if (arr[mid] == k)
		{
			return mid; // 找到了元素,返回索引
		}
		else if (arr[mid] < k)
		{
			left = mid + 1;
		}
		else
		{
			right = mid - 1;
		}
	}

	return -1; // 找不到元素,返回-1
}

int main()
{
	int arr[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
	int k = 7;
	int ret = Binary(arr, k);  //这里arr传递过去的是数组首元素的地址

	if (ret != -1)
	{
		printf("找到啦,下标是 %d\n", ret);
	}
	else
	{
		printf("找不到\n");
	}

	return 0;
}

上述代码由于在定义函数时是用指针去接收来自主函数里传递来的东西,所以导致在函数体中计算数组元素个数不靠谱,所以应该把计算数组元素个数拿到主函数里去计算。

修改后在给函数传递参数时,应该多加上一个数组元素个数(sz),如:

#include <stdio.h>

int Binary(int arr[], int k,int sz)  
{

	int left = 0;
	int right = sz - 1;

	while (left <= right)
	{
		int mid = left + (right - left) / 2; 

		if (arr[mid] == k)
		{
			return mid; 
		}
		else if (arr[mid] < k)
		{
			left = mid + 1;
		}
		else
		{
			right = mid - 1;
		}
	}

	return -1;
}

int main()
{
	int arr[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
	int k = 7;
	int sz = sizeof(arr) / sizeof(arr[0]);
	int ret = Binary(arr, k,sz);

	if (ret != -1)
	{
		printf("找到啦,下标是 %d\n", ret);
	}
	else
	{
		printf("找不到\n");
	}

	return 0;
}

写一个函数,每调用一次这个函数,就会将num的值增加1

#include<stdio.h>

void Add(int* p)  //
{
	(*p)++;  //由于++的优先级比较高,如果写作*p++则代表只有p++,所以应该加括号
}

int main()
{
	int num = 0;
	Add(&num);
	printf("num = %d\n", num);//Add调用一次,num自加1,所以num的改变时在函数内部改变的,而想在函数内改变外面变量的值,需要用传址的方式
	Add(&num);
	printf("num = %d\n", num);
	Add(&num);
	printf("num = %d\n", num);
	return 0;
}

想在函数内改变外面变量的值,需要用传址的方式!

标签:第十一天,sz,arr,函数,int,C语言,学习,Add,num
From: https://blog.51cto.com/u_16263798/7600680

相关文章

  • 数据结构学习记录(四)
    排序一、知识要点1、选择排序简单选择排序思想:在未排序的数组中选出一个最大值或最小值与序列首位元素交换,然后在剩下未排序序列再选出最大值或最小值与第二位元素交换,依次类推,直到排序完成typedefintElementType;//太简单了我就不写注释了voidSSSort(ElementType......
  • 基于Vgg16和Vgg19深度学习网络的步态识别系统matlab仿真
    1.算法运行效果图预览  2.算法运行软件版本MATLAB2022A 3.算法理论概述       步态识别作为生物特征识别领域的一个重要分支,在人体运动分析、身份验证、健康监测等方面具有广泛的应用前景。步态能量图(GaitEnergyImage,简称GEI)是一种有效的步态表示方法,通过......
  • C语言的发展及特点
    C语言的发展历程C语言作为计算机编程领域的重要里程碑,其发展历程承载着无数开发者的智慧和创新。C语言诞生于20世纪70年代初,由计算机科学家DennisRitchie在贝尔实验室首次推出。当时,Ritchie的目标是为Unix操作系统开发一门能够更方便地进行系统编程的语言。事实证明,C语言不仅在Un......
  • 综合概念映射和网络问题解决方法对学生学习成绩、感知和认知负荷的影响
    (Effectsofanintegratedconceptmappingandweb-basedproblem-solvingapproachonstudents’learningachievements,perceptionsandcognitiveloads) Computers&Education71(2014)77–86一、摘要研究目的:虽然学生可以通过适当的关键词有效地搜索到网络数据,并......
  • express的学习
    在学习了node.js两天之后终于也算是快入门了在node.js环境上陆续学习了fs模块,http快速搭建一个服务,path路径模块,以及npm包管理工具今天主要学习的内容是express框架这个框架的主要作用是简化http的书写只需要constexpress=require("express") constapp=express()即可......
  • Markdowm学习day01
    Markdowm学习标题一级到六级标题用Ctrl1~6字体前加#为一级标题,加两个#为二级标题,以此类推字体Helloworld两边加一个星变斜体/crtl+iHelloworld加两个变粗体/crtl+bHelloworld加三个变斜粗体/crtl+i+bHelloworld加两个波浪号删除/alt+shift+5引用狂神说Java......
  • 【学习笔记】(29) 笛卡尔树
    定义与性质笛卡尔树是一种二叉树,每一个结点由一个键值二元组\((k,w)\)构成。要求\(k\)满足二叉搜索树的性质,而\(w\)满足堆的性质。,也就是说,对于一个节点\(i\)的左儿子\(l_i\)和右儿子\(r_i\),一定满足\(l_i<i<r_i\)(下标\(k\)满足二叉搜索树的性质)且\(v_{l_i}\)与......
  • 组合数学学习笔记
    这是一位数学小萌新看oi-wiki的一点点收获。二项式定理二项式定理是组合数学中很基础且很重要的定理,它的式子为:\((a+b)^n=\sum_{i=0}^n\binom{n}{i}a^ib^{n-i}\)可以通过归纳法剖析\((a+b)^n\)的过程证明其正确性。范德蒙德卷积:\(\large\sum_{i=0}^k\binom{n}{i}......
  • 【笔记】机器学习基础 - Ch6.5-6 Kernel Methods
    6.5Sequencekernels考虑拓展\(K:\calX\timesX\to\mathbb{R}\)到\(\calX\)不是向量空间的情况,例如序列、图像等等。现在令\(\calX\)为字符串的集合,对应的核称为序列核sequencekernels;一种序列核的框架,称为rationalkernels,建立在称为加权转换器weightedtransduce......
  • Python学习笔记1
    a="好的,测试字符tester"b=17c=3print(a[1:5])#从第1(包含)个字符取到第5(不包含)个字符print(a[:3])#取到第3个字符(不含3)print(a[-5:-1])#取倒数第5个到倒数第1个print(a[-1:])#取最后一个字符print(len(a))#字符长度#exit()#退出与quit()一样,里面......