完全入门C语言

news2024/11/18 18:35:17

1.C语言

C语言是一门通用的计算机编程语言,广泛应用于底层开发。其设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。有良好的跨平台的特性。
同时C语言还是面向过程的编程语言,这与JAVA C++等面向对象的编程语言有所不同。
目前主流的C语言编译器有:GCC Clang MVSVC等

2.第一个C语言程序

初学者建议使用VS2022

#include <stdio.h> //头文件 
int main()//程序执行的开始 主函数
{
	printf("hello world");//库函数printf
	return 0;
	//这是你的第一个C语言程序。
	//运行后将会在你的屏幕上打印hello world
}

3.数据类型

在C语言当中我们会定义很多的数据变量,每个变量都要有他们的类型,这样才能方便我们为我们定义的变量赋予特定的性质。
系统自带的类型有:

char           //字符类型
short          //短整型
int            //整型
long           //长整型
long long      //更长的整型  
float          //单精度浮点型
double         //双精度浮点型

在C语言当中每一个数据类型都是有大小的,也就是说可以存储的数据是有限的。
有一个操作符可以计算数据类型的存储大小—sizeof + (类型)
比如

printf("%d",sizeof (int));
//运行结果:4

重复计算我们就可以知道每一个数据类型的大小了
数据类型 | 数据类型大小
char | 1
short | 2
int | 4
long | 4
long long | 8
float | 4
double | 8
这里的数字表示的是字节大小。1为1字节
在计算机中的单位:bit(比特) Byte(字节) Kb Mb Gb Tb Pb
一个Byte = 8bit
1Kb = 1024Byte 1Mb = 1024Kb 1Gb = 1024Mb …

2.1类型的使用:

所谓的类型就是为了更加丰富的表达生活中的各种值

char ch = 'w';//姓
int weight = 120;//体重
int salary = 20000;//工资

3.变量与常量

变量创建的本质:就是在内存当中开辟一块空间,来存放数据。
变量顾名思义就是可能会变的量,就像数学中的经常定义x为变量。
C语言中也可以定义变量,不过是有格式的。

3.1定义变量

变量名的要求:
1.数字不能开头
2.长度小于等于63
3.区分大小写
4.不能用关键字(后面讲)
5.只能由字母(大小写)数字 下划线_ 组成

//数据类型 变量名 = 赋值
int age = 18;
float weight = 45.5f;//最后的f的意思是,浮点型数的意思
char ch = 'y';

3.2变量的分类

局部变量与全局变量
从名字可以看出局部只在一个小区域起作用,而全局会在任何地方起作用
确定局部变量区域

int main()
{
	int a = 1;
	{
	int b = 1;
	}
	return 0;
}
//所谓的局部作用域就是变量被{}扩起来的区域,就是说变量只会在{}内起作用,当然{}内的变量也能{{}}内起作用。

全局变量

int a = 0;//全局变量
int main()
{
	int a = 1;//当变量范围起冲突时,优先使用的局部变量。
	printf("%d",a);
	return 0;
}
//输出结果为1

3.3变量的使用

简单的加法计算器

#include <stdio.h>
int main()
{
	int a = 0;
	int b = 0;
	scanf("%d %d",&a,&b);
	printf("%d",a+b);
	return 0;
}

简单结介绍:scanf与printf
scnaf:标准输入函数
作用是输入数据,数据从键盘读取到内存当中
格式

scanf("占位符",地址)

printf:标准输出函数
输出数据,数据从内存中取出,然后打印到屏幕

printf("占位符/字符串",变量名)

3.4变量的作用域和生命周期

作用域

作用域(scope)是程序设计概念,通常来讲,一段代码中所用到的名字并不总是有效/可用的
而限定这个名字的可用性的代码范围就是这个名字的作用域

1.局部变量的作用域就是变量所在的局部范围。
2.全局变量的作用域就是整个工程。
生命周期

变量的生命周期指的是变量的创建带变量的销毁之间的一个时间段
ps:销毁指的是把变量申请的空间还给操作系统。

1.局部变量的生命周期是:进入作用域为开始,出作用域为结束。
2.全局变量的生命周期是:整个程序的生命周期。
如果你想要使用其他文件的全局变量需要用到声明外部符号extern

extern 类型 变量名;
//假设你在其他文件当中定义了一个全局变量
//int a = 100;你就可以在当前文件中写:
extern int a;

3.5常量

C语言当中的常量分为以下几种:

  • 字面常量
  • const修饰的常变量
  • #define 定义的标识常量
  • 枚举常量
#include <stdio.h>
//#define的标识符常量演示
#define MAX 100 
//枚举常量
enum week
{
	Monday,
	Tuesday,
	Wedneday
};
//{}内的Monday,Tuesday,Wednesday为枚举常量
//可以初始化赋值,如果不赋值就从0开始递增
int main()
{
	//字面常量
	3.141000//const 修饰的常变量
	const float pai = 3.14f//pai为const修饰的常变量 不能被修改
	
	return 0;
}

上面的例子中pai被const修饰的常变量,const 修饰的常变量在C语言中只是语法层面限制了变量pai的不能被改变,都是par的本质还是一个变量,所以叫常变量。

4.字符串/转义字符

4.1字符串

由双引号(“”)引起的一串字符称为字面值(String Literal),或者叫字符串。

"hello world";

值得注意的是:字符串的结束标志是一个[\0]的转义字符。在计算字符串长度时的[\0]是结束标识,不能作为字符串内容。

#include <stdio.h>
int main()
{
	char arr1[] = "hello";//字符数组
	char arr2[] = {'h','e','l','l','o'};
	char arr3[] = {'h','e','l','l','o','\0'};
	printf("%s\n",arr1);//printf打印%s是从你给的地址开始打印直到遇到\0停止
	printf("%s\n",arr2);
	printf("%s\n",arr3);
	return 0;
	//运行结果为
	//5
	//随机数
	//5
}

4.2转义字符

转义字符就是转变了意思的字符

转义字符释义
\?在书写连续多个问号时使用,防止被编译器解析为三字母词
\’用于表示字符常量’
\"用于表示一个字符串内部的双引号
\\用于表示一个反斜杠,防止它被解释为一个转义序列符
\a警告字符,发出蜂鸣声
\b退格符
\f进纸符
\n换行
\r回车
\t水平制表符
\v垂直制表符
\dddddd表示3个八进制数字。如:\130
\xdddd表示2个十六进制数字。如:\x30
#include <stdio.h>
int main()
{
	//q1:如何打印单引号'
	//q2:如何打印双引号"
	printf("%c\n",'\'');
	printf("%s"\n","\"");	
	return 0;
}

5.注释

1.不要的代码可以直接注释掉
2.利用注释对代码进行解释

注释的两种风格

  • C语言风格 /*xxxxxx*/
    • 缺点:不能嵌套注释
  • C++风格//xxxxxx

6.选择语句

在生活中经常有人说如果怎么这么样,就会怎么这么样。这就是一个选择语句,如果满足这个条件就会进入相应的事件。就像galgame当中选择合适的选项就可以进入相应人物的故事线,将其攻略。这就是选择!
常用的选择语句:

if else
switch

最简单的选择语句
最简单的选择语句

#include <stdio.h>
int main()
{
	int intput = 0;
	scanf("%d",&input);
	if(input==1)
	{
	//...
	}
	else
	{
	//...
	}
	return 0;
}

7.循环语句

有些事情就是会一直重复的做,吃饭,睡觉啊每天都在进行。这就是循环!
在C语言中有三种循环的模式:

  • while循环
  • for循环(以后讲)
  • do while循环 (以后讲)
//while循环示范
#include <stdio.h>
int main()
{
	int week = 1;
	while(week<6)
	{
		week++;
	}
	if(week == 6)
	{
		printf("已经周末了,该休息了!")}
	return 0;
}

8.函数

函数的特点就是简化代码,使得代码可以复用

#include <stdio.h>
//返回类型 int
int Add(int x,int y)//参数
{
	return x+y;//返回值
}
int Sub(int x,int y)
{
	return x-y;
}
int main()
{
	int input = 0;
	int a = 0,b = 0;
	do
	{
		scanf("%d",&input);
		scanf("%d,%d",&a,&b);
		switch(input)
		{
			case 1:
			Add(a,b);
			break;
			case 2:
			Sub(a,b);
			break;
			default:
			//...
			break;
		}
	}while(input);
	return 0;
}

9.数组

在生活中我们常要存储一群人的信息,就比如一个班的信息什么的。
所以为了存储一连串的信息,C语言就有了数组。
对于数组的定义有:一组相同元素的集合

9.1数组的定义

int arr[10] = {1,2,3,4,5,6,7,8,9,10};//定义一个整型数组,最多存放10个元素
//注意数组的下表是从0开始的。如果我要访问数组的第1个元素,就是arr[0].

9.2数组的下标

C语言规定:数组的每个元素都有下标,下标是从0开始的。
数组可以通过下标来访问。
比如

int arr[10] = {0};//一个10个元素的数组,下标范围为0~9

9.3数组的使用

//计算公元年对应的月份天数
#include <stdio.h>
int main()
{
	int year = 0,month = 0;
	int month_1[13] = {0,31,29,31,30,31,30,31,31,30,31,30,31};//润年月份
	int month_2[13] = {0,31,28,31,30,31,30,31,31,30,31,30,31};//平年月份
	scanf("%d",&year);
	scanf("%d",&month);
	if(year%4==0&&year&100!=0||year%400==0)//为闰年
	{
		printf("%d\n",month_1[month]);
	}
	else
	{
		printf("%d\n",month_2[month]);
	}

	return 0;
}

10.操作符

简单介绍操作符

算术操作符

+ - * / %

位移操作符

>> <<

位操作符

& ^ |

赋值操作符

= += -= *= /= &= ^= |= >>= <<=
单目操作符

! 取反

  •                 负值
    
  •                正值
    

& 取地址
sizeof 操作数的类型大小(以字节位单位)
~ 对一个数的二进制位进行取反
– 前置、后置–
++ 前置、后置++

  •                 间接访问操作符(解引用操作符)
    

(类型) 强制类型转换

关系操作符

>
>=
<
<=
!= 用来判断不相等
== 用来判断相等

逻辑操作符

&& 逻辑与
|| 逻辑或

三目操作符

exp1?exp2:exp3 exp(表达式)

逗号表达式

exp1,exp2,exp3,…expn

从左往右依次计算。
赋值的结果取最后一个

下标引用、函数调用和机构成员

[] () . ->

11.常见关键字

C语言提供了丰富的关键字,这些关键字都是语言本身预先设定好的,用户自己是不能创作关键字的。

auto break case char const continue default do double else enum
extern float for goto if int long register return short signed
sizeof static struct switch typedef union unsigned void volatile while

11.1关键字的分类

修饰变量循环分支数据类型修饰类型函数计算机变量/类型 大小自定义类型
autobreak(退出循环)breakcharconstreturn(返回)sizeofenum(枚举)
extern(声明外部符号)continueswitch caseshortsigned(有符号的)struct(结构体)
register(寄存器)do whiledefaultintunsigned(无符号的)union(联合体)
staticforif elselongtypedef(类型重定义)
whilegotolong long
float
double
void(无)
C语言当中的auto一般写在类型的前面,如 auto int a = 1
auto 的作用是使局部变量自动创建与销毁,绝大多数的情况都直接省略了,所以我可以不写出来。

11.2关键字typedef

typedef是类型定义,可以理解为类型重命名

//将long long 重命名成LL
typedef long long LL;
int main()
{
	LL a = 1;
	long long b = 2;
	return 0;
}

利用typedef对类型重命名可以方便我们书写复杂的类型。

11.3关键字static

在C语言中
static是用来修饰变量和函数的
1.修饰局部变量-称为静态局部变量
2.修饰全局变量-称为静态全局变量
3.修饰函数-称为静态函数

11.3.1修饰局部变量

static修饰局部变量改变了变量的生命周期和存储类型(位置)
让静态局部变量出了作用域依然存在,直到程序结束,生命周期才结束。
但是所修饰的局部变量仍受作用域的限制
static所修饰的局部变量在编译时就已经创建,后续程序运行时不会在走初始化那一步。

//代码1
#include <stdio.h>
void test()
{
	int i = 0;
	i++;
	printf("%d ",i);
}
int main()
{
	for(int i = 0;i<10;++i)
	{
		test();
	}
	return 0;
}
//打印结果1 1 1 1 1 1 1 1 1 1

//代码2
#include <stdio.h>
void test()
{
//static修饰局部变量
	static int i = 0;
	i++;
	printf("%d ",i);
}
int main()
{
	for(int i = 0;i<10;++i)
	{
		test();
	}
	return 0;
}
//打印结果1 2 3 4 5 6 7 8 9 10

局部变量的生命周期的延长本质是局部变量的的存储位置由栈区变为了静态区
当前我们只需要知道:
栈区是存放局部变量和形式参数的。临时作用的变量都在栈区
特点:进入作用域创建,出作用域销毁
静态区存放全局变量,静态变量
特点:创建好后直到程序结束才销毁。

11.3.2修饰全局变量

一个全局变量被static所修饰,会使得这个全局变量只能在本地源文件内使用,不能在其他源文件内使用。

//代码1
//add.c
int g = 2024;
//test.c
extern int g;
int main()
{
	printf("%d\n",g);
	return 0;
}
//可以打印

//代码2
//add.c
static int g = 2024;
//test.c
extern int g;
int main()
{
	printf("%d\n",g);
	return 0;
}
//无法打印,连接性错误

要知道的是,全局变量是具有外部链接属性的,在方法正确的情况下,其他文件是可以使用的,但是static会改变这种外部链接属性,使得变成看内部链接属性。

11.3.3修饰函数

一个函数被static所修饰,会使得这个全局变量只能在本地源文件内使用,不能在其他源文件内使用。

//代码1
//add.c
int add(int x,int y)
{
	return x+y;
}
//test.c
extern int add(int int);
int main()
{
	printf("%d\n",add(2,3));
	return 0;
}
//可以打印

//代码2
//add.c
static int add(int x,int y)
{
	return x+y;
}
//test.c
extern int add(int int);
int main()
{
	printf("%d\n",add(2,3));
	return 0;
}
//无法打印,连接性错误

12.#define定义宏常量和宏

//define定义标识符常量
#define MAX 10000
//define定义宏
#define Add(x,y) ((x)+(y))

#include <stdio.h>
int main()
{
	int sum = Add(2,3);
	printf("%d\n",sum);
	return 0;
}

13.指针

内存是电脑上特别重要的存储器,计算机中程序的运行都是在内存中进行的。
所以为了有效的使用内存,就要把内存划分成一个个小的内存单元,每个内存单元的大小都是一个字节。
为了能够有效的访问到内存的每个单元,就要给内存单元进行编号,这些编号被称为内存单元的地址。
内存表示

变量是创建内存中的(在内存中分配空间的),每个内存单位都有地址,所以变量也是有地址的。
可以利用&来取出变量的地址

#include <stdio.h>
int main()
{
	int a = 1;
	&a;//取出a的地址
	//要注意的是,因为a是整型有4个字节,每个字节都要自己对于的地址,这个取出的地址的第一个字节的地址(较小的地址)
	printf("%p\n",&a)//打印a的地址,%p是以地址的形式打印
	
	return 0;
}

a的地址表示

13.1指针变量

知道了地址以后,我们要怎么存储它呢?这个时候就需要指针变量了
指针变量顾名思义就是存放指针(地址)的变量
实例

#include <stdio.h>
int main()
{
	int a = 0;
	int* pa = &a;
	*pa = 10;//*就是根据a的地址取找到a
	//这样我们就可以间接的改变a的值
	printf("%d\n",a);
	return 0;
}
//打印结果:10

指针变量的地址

以整型指针为例子的话,我们也可以推广到其他类型

#include <stdio.h>
int main()
{
	char ch = 'w';
	char* pc = &ch;
	*pc = 'y';
	//...
	return 0;
}

13.2指针变量的大小

在计算机上,有地址线,物理的电线高低电平的信号,转化数字信号:1/0
32位机器上面有32根地址线。
指针的大小就和机器的位数有关。

//指针变量的大小取决于地址的大小
//32位平台下地址为32个bit位(即4字节)
//64位平台下地址位64个bit位(即8字节)
#include <stdio.h>
int main()
{
	int a = 1;
	int* pa = &a;
	char c = 'w';
	char* pc = &c;
	printf("%d ",sizeof(pa));
	printf("%d\n",sizeof(pc));
	return 0;
}
//打印结果:
//在32位的计算机上:4 4
//在64位的计算机上:8 8

由此可以看出,指针大小在32位平台是4个字节,64位平台是8字节。

14.结构体

结构体是C语言中特别重要的知识点,因为结构体的存在C语言才能有能力描述复杂的类型。比如在描述学生时:学生就包括了,名字,年龄,性别等等。
就只能利用结构体来描述了

#include <stdio.h>
struct stu//struct stu为类型名
{
	char name[20];//名字
	int age;//年龄
	char sex[6];//性别
};
int main()
{
	//结构体的初始化
	struct stu s = {"yui",17,"female"};
	//.为结构成员访问操作符
	printf("name:%s,age:%d,sex:%s\n",s.name,s.age,s.sex);
	//->操作符,用来访问结构体的地址对应的数据
	struct stu* ps = &s;
	printf("name:%s,age:%d,sex:%s\n",ps->name,ps->age,ps->sex);
	//当然还有一种写法,利用*操作符
	printf("name:%s,age:%d,sex:%s\n",(*ps).name,(*ps).age,(*ps).sex);//括号的目的是因为.操作符的优先级高于*,为了完成目标,所以打上了括号。
	return 0;
}
//在实际写代码的时候可能会为了简化代码而进行typedef进行重命名。
typedef struct stu
{
	char name[20];//名字
	int age;//年龄
	char sex[6];//性别
}stu;
//这样我们在下面定义变量的时候就可以直接用stu来定义了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1882393.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

汇编基础语法

指令格式 1、立即数 一个常数&#xff0c;该常数必须对应8位位图&#xff0c;即一个8位的常数通过循环右移偶数位得到该数&#xff0c;该数位合法立即数 在指令中表示方法&#xff1a;#数字&#xff0c;例如&#xff1a;#100 快速判定是否是合法立即数&#xff1a; 首先将这…

一款可以编辑SVG矢量图形的方法(以桑基图为例)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 一、svg矢量图片在线绘制网站二、保存SVG格式图片二、修改SVG图片中的字体大小一、svg矢量图片在线绘制网站 提示:有些图不想用代码出图时,可以采用这个网站,无需注册,无VIP: 网站地址https…

FFmpeg视频处理工具安装使用

一、前言 FFmpeg是流行的开源视频处理工具&#xff0c;用于转码、合并、编辑等。以下是安装和使用方法&#xff1a; 二、步骤 1.下载 1.1 ffmpeg下载 官网下载地址 wget https://www.ffmpeg.org/releases/ffmpeg-6.1.1.tar.xz1.2 nasm下载 https://www.nasm.us/pub/nasm/…

桥感应加热主电路拓扑结构及控制原

1 桥感应加热主电路拓扑结构及控制原理 1.1 主电路拓扑 本文所述中频感应加热电源采用交—直—交的变频原理&#xff0c;三相50Hz的正弦交流输入电压经过整流滤波为540V平滑直流电压&#xff0c;再经逆变器将直流电压变成不同频率的交流电压供负载使用。本文采用半桥串联谐振…

【echarts】如何关闭dataZoom-silder 组件中数据阴影(缩略图、数据走势图)

echarts开启 “滑动条型数据区域缩放组件&#xff08;dataZoomInside&#xff09;”后&#xff0c;默认会显示数据的走势图。 但有时候我们并不需要。 如何关闭呢&#xff1f; 官方有提供一个属性&#xff1a;showDataShadow https://echarts.apache.org/zh/option.html#da…

无线物联网题集

测试一 未来信息产业的发展在由信息网络向 全面感知和 智能应用两个方向拓展、延伸和突破。 各国均把 物联网作为未来信息化战略的重要内容,融合各种信息技术,突破互联网的限制,将物体接入信息网络。 计算机的出现,开始了第四次工业革命,开始了人机物的高度融合&#xff08;&…

【Unity】 HTFramework框架(五十二)使用 HybridCLR 热更新

更新日期&#xff1a;2024年7月1日。 Github源码&#xff1a;[点我获取源码] Gitee源码&#xff1a;[点我获取源码] 索引 HybridCLR 热更新一、启用宏定义二、导入HybridCLR三、设置热更新程序集四、资源、代码热更 HybridCLR 热更新 HybridCLR是一个特性完整、零成本、高性能…

探索 ONLYOFFICE 8.1:云端协作的新纪元

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

如果对方没做幂等!记一次生产订单重复的反思

最近公司公司的旧系统中发现了一个bug。业务部门反馈&#xff0c;尽管用户只支付了一年的服务费用&#xff0c;系统却将有效期增加了两年。 原因分析&#xff1a; 到底是什么原因呢&#xff1f; 经过日志分析&#xff0c;发现消息队列&#xff08;MQ&#xff09;向第三方服务发…

EDI是什么?与ERP有何关系

EDI的发展过程 电子数据交换&#xff08;Electronic Data Interchange&#xff0c;EDI&#xff09;是一种通过电子方式传输商业文件的技术。EDI的历史可以追溯到20世纪60年代&#xff0c;当时企业开始使用计算机进行数据处理。最早的EDI系统是为解决大型企业间的信息交换问题而…

【刷题汇总--数字统计、两个数组的交集、点击消除(栈)】

C日常刷题积累 今日刷题汇总 - day0011、数字统计1.1、题目1.2、思路1.3、程序实现 2、两个数组的交集2.1、题目2.2、思路2.3、程序实现 3、点击消除(栈)3.1、题目3.2、思路3.3、程序实现 今日刷题汇总 - day001 1、数字统计 1.1、题目 请统计某个给定范围[L, R]的所有整数中…

智能制造企业CRM系统推荐清单(2024版)

当前&#xff0c;CRM市场呈现出“国际龙头优势逐渐下降&#xff0c;国产CRM奋起直追”的格局。智能制造企业在选型CRM时&#xff0c;如何选择合适的系统是一个需要重视的课题。 在我们之前的文章《一文读懂CRM&#xff0c;2023年30家CRM系统对比&#xff08;近年最全&#xf…

如何在AWS上使用免费的服务器

要在AWS上免费使用的服务器&#xff0c;你可以按照以下步骤操作&#xff1a; &#xff08;1&#xff09;注册AWS账户&#xff1a; 访问AWS官方网站&#xff08;https://aws.amazon.com/cn/&#xff09;&#xff0c;点击右上角的“完成注册”&#xff0c;按照页面提示填写相关…

经典小游戏(一)C实现——三子棋

switch(input){case 1:printf("三子棋\n");//这里先测试是否会执行成功break;case 0:printf("退出游戏\n");break;default :printf("选择错误&#xff0c;请重新选择!\n");break;}}while(input);//直到输入的结果为假&#xff0c;循环才会结束} …

基于FreeRTOS+STM32CubeMX+LCD1602+MCP23S09(SPI接口)的I/O扩展器Proteus仿真

一、仿真原理图: 二、运行效果: 三、STM32CubeMX配置: 1)、GPIO配置: 2)、SPI配置: 四、部分软件: 1)、主函数: /* USER CODE BEGIN Header */ /** ****************************************************************************** * @file : mai…

游戏AI的创造思路-技术基础-关于艾宾浩斯遗忘曲线的迷思

对于艾宾浩斯遗忘曲线和函数&#xff0c;我一直都有小小的迷思&#xff0c;总想实验下用艾宾浩斯函数来替换sigmoid函数作为激活函数&#xff0c;打造更接近人类的AI算法&#xff0c;这篇文章旨在讨论下 目录 3.10. 艾宾浩斯曲线 3.10.1. 定义 3.10.1.1. 曲线计算公式 3.10…

想用AI高端算力训练模型?试试英智BayStone平台

随着生成式人工智能的迅猛增长&#xff0c;各大公司纷纷推出强大的 AI产品以提升自身核心竞争力&#xff0c;对于依赖基础模型进行推理训练&#xff0c;同时需要高级基础设施的人工智能初创企业&#xff0c;急需使用高端智算算力来加速模型训练与产品研发创新。 算力是否充足&…

测试接口的完整流程

背景 今天睿哥给我布置了一个任务&#xff0c;叫我学习一下如何测试接口。 然后我就上网搜索去了解了一下&#xff0c;看看测试接口是什么。看了很久之后&#xff0c;我大概对接口测试有了一定的理解。 通俗来说&#xff0c;接口测试就是使用某种工具模拟客户端发送http请求…

Github 上 Star 数最多的大模型应用基础服务 Dify 深度解读(一)

背景介绍 接触过大模型应用开发的研发同学应该都或多或少地听过 Dify 这个大模型应用基础服务&#xff0c;这个项目自从 2023 年上线以来&#xff0c;截止目前&#xff08;2024-6&#xff09;已经获得了 35k 多的 star&#xff0c;是目前大模型应用基础服务中最热门的项目之一…

HEC-HMS水文模型教程

原文链接&#xff1a;HEC-HMS水文模型教程https://mp.weixin.qq.com/s?__bizMzUzNTczMDMxMg&mid2247607904&idx5&sn1a210328a3fc8f941b433674d8fe2c85&chksmfa826787cdf5ee91d01b6981ebd89deac3e350d747d0fec45ce2ef75d7cb8009341c6f55114d&token90645021…