C语言(根据阿辉学长的课程)-(1~4节)

还有不到一周就考二级C语言了,借用scdn作为自己备考的回忆备用

-------------------------------------------------------------------------------所有内容都是基于B站阿辉不会敲代码

总统4小时17分钟

1.1计算机的内存

1TB=1024GB

1GB=1024MB

1MB=1024KB

1KB=1024B(Byte字节)

1B=8bit(比特)

1.2内存地址

地址的定义:为了有效的管理和使用计算机的内存,我们就把内存空间划分成了一个个小的内存单元, 每个内存单元的大小是1字节,为了能够方便访问到内存的每个单元,我们就给内存单元进行了编号, 这些编号也就是内存单元的地址。(要明白,比特是最小的数据单位,字节是最小的存储单位,故字节跳动的公司名字的由来)

2.1变量和常量

对应的数据类型

2.2数据类型

Tips:加粗内容需重点掌握,其余内容只需了解即可。

2.3变量的定义

变量的定义:变量相当于内存中一个数据存储空间的表示,你可以把变量看做是一个房间的门牌号,通过门牌号我们可以找到房间,从而通过变量名可以访问到变量值。(通过这种方式,后面讲到指针会尤为的清晰)

2.4变量的命名规则

变量命名的硬性规定:

  1. 变量名只能由字母(A~Z和a~z)、数字(0~9)和下划线( _ )组成。但是,变量名必须以字母 或下划线开头,不能以数字开头。
  2. 变量名区分大小写。例如:age和Age是两个不同的变量名。
  3. 变量名不能是C语言的关键字。例如:int、float、char等。

变量命名的阿辉建议:

1.听名知意。可以使用有意义的单词或单词缩写来进行命名,比如需要创建变量存储年龄 时,可以直接命名为age。

2.尽量不要用拼音命名。比如需要创建变量存储年龄时,不要直接命名为nianling。

后面数据结构写代码的时候(命令写是,最好记几个常用的英文单词)

变量的定义及初始化

分号与注释

注释的作用:通俗的讲,注释是我们能看到,而计算机 看不到的部分。注释常用于对代码进行解释、说明或者 标记。写注释可。

注释可以多行表示,如果遇到说只能单行表示的,就一定是错误的。

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

  1. 变量的作用域:在程序中可以访问该变量的范围。
  2. 如果变量在一个代码块(由一对花括号 {} 包围的代码区域)内声明,则其只能在该代码块内部使用。例如: 在if选择语句或者for循环中声明的变量具有块作用域。
  3. 如果变量在函数内部声明,则只能在该函数内部使用。函数参数和在函数内部使用的变量通常具有函数 作用域。
  4. 全局变量在整个程序中声明,可以被程序中的任何函数访问。全局变量具有全局作用域。

与后面的函数调用,联系紧密,主函数和所调用的功能所在变量可以不一致的。

变量的生命周期:变量存在于内存中的时间范围。

  1. 局部变量的生命周期从它们所在的代码块执行开始,直到该代码块执行结束。
  2. 全局变量的生命周期从程序开始执行到程序结束,它们在整个程序中都是可访问的。

2.6常量

常量的定义:常量是指在程序执行过程中其值不会改变的标识符或者数值。

define:用于定义标识符常量。

#define PI 3.14 //define定义标识符常量,注意,这里不用加分号

double circle_area(){ double r=3.0;//定义浮点型变量r存储圆的半径

double S=PI*r*r;//定义浮点型变量S存储圆的面积

return S;//上行代码的PI*r*r就相当于3.14*r*r }

注意,定义常量时,不能将变量引入概念。

3.1输入和输出

输入:读取键盘的输入数据,并将输入数据存储到指定的变量中。

输出:将数据输出到屏幕上。


我觉得与这题有关联,函数的返回值,允许有多个return语句,但每次调用只能有一个return语句被执行,所以只能返回一个函数值。

3.2 scanf函数输入

主要理解&取地址符的含义,后面和“与”运算符号是不一样的含义。

3.3 printf函数输出

说到占位符,就与下面的知识点相联系起来

2d表示所占的宽度

4.1算术运算符

  1. 运算符也叫操作符,表格中的a和b叫做操作数。
  2. 当两个操作数都是整型时,其运算结果也为整型,如果结果为小数,则直接舍去小数部分,而不是四舍五入。 例如:整型变量a为3,整型变量b为2,3/2的数学运算结果为1.5,但计算机a/b运算结果为整型1。
  3. 当操作数中有一个为浮点型时,则运算结果为浮点型。例如:整型变量a为3,a*2.0的运算结果为浮点型6.0。
  4. 取余运算符的操作数只能是整型,因为浮点型没有余数,而加减乘除的操作数整型和浮点型均可。

4.2赋值运算符

  1. C语言中的=是赋值符号,其具有方向性,是把=右边的值赋给=左边。
  2. 不允许连续赋值。错误方式:int x=y=1; 正确方式:int x=1,y=1;
  3. 假设整型变量a为3,整型变量b为2,那执行a=b+3; 后a的值更新为5,b的值没有改变。

 

 与这个题加上,作为相互补充。

 

 

### Prim算法教程与实现 #### 理解Prim算法的概念 Prim算法是一种贪心算法,用于寻找加权无向图中的最小生成树(MST)[^1]。MST是一棵连接所有顶点的子树,并且其所有边的权重之和是最小的。 #### Python代码示例 下面提供了一段Python代码来演示如何利用Prim算法构建最小生成树: ```python import sys def prim(graph, start): mst = [] # 存储最终得到的最小生成树 keys = {v: float('inf') for v in graph} # 初始化键值表,默认为无穷大 parent = {v: None for v in graph} # 记录每个点的父亲点 keys[start] = 0 # 起始结点到自身的距离设为零 while len(mst) != len(graph)-1: # 当mst中不包含所有的边时继续循环 min_key_node = min((k for k in keys if k not in (e[1] for e in mst)), key=lambda x:keys[x]) current_edge = (parent[min_key_node],min_key_node) mst.append(current_edge) del keys[min_key_node] for neighbor, weight in graph[min_key_node].items(): if neighbor in keys and weight < keys[neighbor]: keys[neighbor]=weight parent[neighbor]=min_key_node return mst if __name__ == '__main__': g={ 'A':{'B':7,'D':5}, 'B':{'A':7,'C':8,'D':9,'E':7}, 'C':{'B':8,'E':5}, 'D':{'A':5,'B':9,'E':15,'F':6}, 'E':{'B':7,'C':5,'D':15,'F':8,'G':9}, 'F':{'D':6,'E':8,'G':11}, 'G':{'E':9,'F':11} } result=prim(g,'A') print(result) ``` 这段程序展示了怎样通过给定的一张带权有向图`g`作为输入参数调用`prim()`函数并输出由`(u,v)`形式组成的列表表示出来的最小生成树[^2]。 #### C++代码片段展示 对于更喜欢使用静态类型的开发者来说,在C++环境下也可以很容易地编写类似的逻辑: ```cpp #include<bits/stdc++.h> using namespace std; const int MAXN = 1e3; int n,m; //n代表顶点数量,m代表边的数量 bool vis[MAXN]; //标记是否加入集合U int dis[MAXN]; //记录当前最短路径长度 vector<pair<int,int>> adj[MAXN]; void prim(){ memset(dis,0x3f,sizeof(dis)); priority_queue<pair<int,int>, vector<pair<int,int>>, greater<>> pq; pq.push({dis[1]=0,1}); int sumw=0,cnt=0; while(!pq.empty()){ auto [d,u]=pq.top(); pq.pop(); if(vis[u]) continue; cnt++,sumw+=d,vis[u]=true; for(auto &[v,w]:adj[u]){ if(d+w<dis[v]) pq.push({dis[v]=d+w,v}); } } cout<<(cnt==n?to_string(sumw):"-1")<<'\n'; } int main() { cin >> n >> m; for(int i=1;i<=m;++i){ int u,v,w; scanf("%d%d%d",&u,&v,&w); adj[u].emplace_back(v,w); adj[v].emplace_back(u,w); } prim(); return 0; } ``` 此版本采用了优先队列优化的方式处理大规模稀疏图的情况,使得时间复杂度降低至O(ElogV),其中E是边数而V则是顶点数目[^4]。 #### 应用场景探讨 除了经典的求解连通网络中最优传输线路外,Prim算法还能够应用于其他领域,比如机器学习当中的某些特定任务—如基于图结构的聚类分析当中就可以借助于它来进行样本间的相似关系建模。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值