首页 > 其他分享 >C语言学习3

C语言学习3

时间:2024-10-14 13:17:22浏览次数:3  
标签:return 函数 int C语言 学习 查找 printf 目标值

二分法查找

       二分法查找,也称为折半查找,是一种在有序数组中查找特定元素的高效算法。该算法的基本思想是将数组分成两半,比较中间元素与目标值的大小,然后选择一半继续查找,直到找到目标值或确定目标值不存在。

步骤

  1. 确定数组的左右边界索引,通常左边界为0,右边界为数组长度减1。

  2. 在循环中,计算中间索引mid,并将中间元素与目标值进行比较。

  3. 如果中间元素大于目标值,则将右边界移动到mid - 1

  4. 如果中间元素小于目标值,则将左边界移动到mid + 1

  5. 如果中间元素等于目标值,则找到目标值的索引,结束查找。

  6. 如果左边界大于右边界,则表示目标值不在数组中

举例见刷题记录第三题 

函数讲解

1.函数是什莫

C语言中的函数就是⼀个完成某项特定的任务的⼀⼩段代码,这段代码是有特殊的写法和调⽤⽅法的。 C语⾔的程序其实是由⽆数个⼩的函数组合⽽成的,也可以说:⼀个⼤的计算任务可以分解成若⼲个较⼩的函数(对应较⼩的任务)完成。

函数一般会有输入参数并有返回值,提供对过程的分装和对细节的隐藏,这些代码常被集成为软件库。

2.C语言中函数的分类

1)库函数

分类:

IO函数

字符串操作函数

字符操作函数

内存操作函数

时间/日期函数

数学函数

其他库函数

使用库函数必须引用其对应的头文件

库函数查询工具

http://www.cplusplus.com

http://zh.cppreference.com

2)自定义函数 (重要)

自定义函数与库函数十分相似,有返回值,函数类型和函数参数不过都要自己设计

函数的组成

返回类型   函数名(函数的参数)

{                                     ---------------函数体

语句项;                        ---------------函数体

}                                     ---------------函数体

例如设计一个函数求出a,b中较大的数

#include<stdio.h>
int n(int x, int y)
{
	int a = 0;
	a = x > y ? x : y;
	return a;
}
int main()
{
	int a = 99;
	int b = 101;
	int max = n(a, b);
	printf("%d", max);
	return 0;


}

此时n这个函数就实现了求a,b中较大值的任务。

在这块n叫做函数名,n前面的int是n这个函数的返回类型,x,y是函数中的两个参数。

函数体中return a是让函数的返回值是a也就是说这个函数运行后会返回a。

可以通过n(a,b)来调用它

下面有一个问题,用一个例子来说明一下

#include<stdio.h>
void n(int x,int y)
{
	int z = 0;
	z = x;
	x = y;
	y = z;
}
int main()
{
	int a = 22;
	int b = 33;
    n(a,b);
	printf("%d%d", a, b);
	return 0;
}

这里n的目的是把a,b的值交换一下,因为只是交换所以不需要返回神莫东西

因此在返回类型处是void也就是无。

不过这个函数有个问题,它并不能把a和b交换过来。

理由:

a会在储存空间中开辟一个地址b也同样,22,和33分别放在其中而n这个函数它的参数x和y也会

弄两个与a和b不一样地址。在n函数内部x与y的确交换了不过他们的地址与ab并不一样,所以就

造成了一个情况,xy交换了但与ab没半毛钱关系就很尴尬。

这里要解决这个问题就需要做出如下更改

#include<stdio.h>
void n(int*px,int*py)
{
	int z = 0;
	z = *px;
	*px = *py;
	*py = z;

}
int main()
{
	int a = 22;
	int b = 33;
	n(&a, &b);
	printf("%d%d", a, b);
	return 0;
}

这里&a,&b会把a与b的地址给到指针变量px和py所以改变*px就能达到改变a的目的,*py同理

通过指针就把a与b和我们自定义函数中的两个参数联系起来了

函数的参数

n(a,b)在函数调用中a和b是真实传递给函数的参数叫做实际参数-----实参

在定义函数时的int x,int y叫做形式参数------形参

形参是实参的临时拷贝,改变形参对实参没有影响

刷题记录

1.求n的阶乘

2.求1!+2!+3!+...+10!

 

3.从一个有序数组中查找k并输出其下标

#include<stdio.h>
int main()

{
	int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
	int l = 0;
	int all = sizeof(arr) / sizeof(arr[1]);
	int r = all - 1;
	int m = 0;
	int k = 0;
	scanf_s("%d", &k);
	while (l<=r)
	{
		m = (l + r) / 2;
		if (arr[m] > k)
		{
			r = m - 1;
		}
		else if (arr[m] < k)
		{
			l = m + 1;
		}
		else
		{
			printf("找到了,下标是%d\n", m);
			break;
		}

	}
	if (l > r)
	{
		printf("无\n");

	}
	
}

4.将三个整数从大到小输出

#include<stdio.h>
int main()
{
	int a, b, c;
	scanf_s("%d%d%d", &a, &b, &c);
	if (a < b)
	{
		int d = 0;
		d = a;
		a = b;
		b = d;
	}
	if (a < c)
	{
		a = a + c;
		c = a - c;
		a = a - c;
	}
	if (b < c)
	{
		b = b + c;
		c = b - c;
		b = b - c;
	}

	printf("%d %d %d ", a, b, c);
	return 0;
}

 

标签:return,函数,int,C语言,学习,查找,printf,目标值
From: https://blog.csdn.net/2402_87772772/article/details/142786849

相关文章

  • 初始C语言
    目录引语计算机语言的发展一.c语言的定义第一个c语言程序二.数据类型1.数据类型大小计算机单位换算......
  • Wx64ST:一款轻松可修改的C语言Shellcode模板
    原创Alpha_h4ckFreeBuf关于windows_x64_shellcode_templatewindows_x64_shellcode_template简称为Wx64ST,它是一款功能强大的Shellcode模板,该模板基于C语言编写,其简单、可扩展和易于修改等特性可以帮助广大安全研究人员轻松开发适用于Windowsx64的Shellcode。值得一提的是,......
  • C语言——指针全解
    目录一、指针变量  二、指针和指针类型        1、指针类型        2、指针变量大小 三、指针类型的意义        1、解引用         2、指针+-整数         3、void*指针类型 四、野指针 五、指针的运算     ......
  • C语言——自定义类型
    目录一、结构体        1、结构体的定义与声明        2、结构体变量的定义和初始化        3、结构体的自引用         4、结构体的内存对齐         5、为什么要结构体的内存对齐                1、性能......
  • 第十期机器学习基础 01深度学习基础
    一:机器学习和深度学习对比(一)传统机器学习什么是传统机器学习?传统机器学习是指一系列能够从数据中学习规律,并根据这些规律进行预测和决策的算法。它通常包括以下几种类型的算法:线性回归和逻辑回归:用于解决回归和分类问题----可以认为:逻辑回归是在线性回归基础上加上sigmod方法......
  • JavaScript中Promise学习
    Promise是强大的异步编程工具,它允许我们更好的管理和处理异步操作。这里将探讨Promise中的reject以及如何使用catch来处理异步错误 什么是promise?promise是一种代表异步操作最终完成或失败的对象。它有三种状态:1、Pending(进行中):初始状态,既不成功也不失败2、Fulfilled(已成......
  • 第十期机器学习基础 03GPT的发展
    一:GPT-1---预测未来在自然语言中,大量的未标记文本语料库非常丰富,但是有标签的数据训练的效果比较好,如果想要在没有标签的数据集上训练出好的模型比较难。因此作者提出了一个想法,在无标签的数据上训练一个预训练模型,然后在这些有标签的子任务上训练一个微调模型。(当时之前是CV领......
  • 第十期机器学习基础 02注意力机制和Transformer/Bert
    一:注意力机制(一)前提背景1.人类的选择性视觉注意力视觉注意力机制是人类视觉所特有的大脑信号处理机制。人类视觉通过快速扫描全局图像,获得需要重点关注的目标区域,也就是一般所说的注意力焦点,而后对这一区域投入更多注意力资源,以获取更多所需要关注目标的细节信息,而抑制其他无......
  • (C语言)算法数据结构
    王道数据结构以及本人上课的笔记             ......
  • 零基础学习网工第2天 —— 小白入门系列
    零基础学习网工第2天——小白入门系列静态路由手动配置而非动态决定,需要管理员进行手动配置。实验:通过两个路由器实现pc和server的通信PC去往不同的网段需要经过网关,网关需要查路由表,一步步将数据传到目标。实现跨路由器的数据包传递,ip如下图所示。配置PC1的IP、子......