### C语言数据结构算法知识点解析 #### 1.16 非递增排序算法 在本题目中,我们需要设计一个算法,使得三个整数 `X`、`Y` 和 `Z` 按照非递增顺序排列。具体实现方式如下: ```c void Descend(int &x, int &y, int &z) { int temp = 0; if (x < y) { temp = x; x = y; y = temp; } if (y < z) { temp = z; z = y; y = temp; if (x < temp) { y = temp; } else { y = x; x = temp; } } } ``` 该函数首先检查 `x` 和 `Y` 是否满足非递增顺序,如果不满足则交换它们的位置。接着检查 `y` 和 `z`,同样地,如果不符合条件则进行交换。还需要确保 `x` 和 `y` 依然保持非递增顺序。 #### 1.17 k阶裴波那契序列 本题目要求我们编写一个函数,计算 k 阶裴波那契序列的第 m 项值。k 阶裴波那契序列的定义如下: - `f0 = 0`, `f1 = 0`, …, `fk-2 = 0`, `fk-1 = 1`; - 对于 `n ≥ k`, `fn = fn-1 + fn-2 + ... + fn-k`. 我们可以使用动态规划的方法来解决这个问题,通过构建一个临时数组存储前 k 项的值,并逐步计算出第 m 项。 ```c Status Fibonacci(int k, int m, int &f) { if (k < 2 || m < 0) return ERROR; else if (k - 1 == m) f = 1; else if (m < k - 1) f = 0; else { int temp[50], i, j; for (i = 0; i <= k - 2; i++) { temp[i] = 0; } temp[k - 1] = 1; for (i = k; i <= m; i++) { int sum = 0; for (j = i - k; j < i; j++) { sum += temp[j]; } temp[i] = sum; } f = temp[m]; } return OK; } ``` 该函数首先检查输入的 k 和 m 是否有效。如果有效,则初始化一个大小为 50 的数组 `temp[]` 来存储序列中的值。然后按照 k 阶裴波那契序列的定义,逐步计算出第 m 项的值。 #### 1.18 统计院校田径对抗赛成绩 题目要求我们编写一个算法,处理包含五所高校(A、B、C、D、E)的田径比赛成绩表,表中每一行的数据形式为:项目名称、性别、校名、成绩、得分。目标是统计每所学校的男女总分以及团体总分。 为了实现这一功能,我们首先定义两个结构体类型:`ResultType` 用于存储单个项目的比赛结果,`ScoreType` 用于存储每个学校的总分。 ```c typedef enum { female, male } Sex; typedef struct { char *sport; // 项目名称 Sex gender; // 性别 char schoolname; // 学校名称 char *result; // 成绩 int score; // 得分 } ResultType; typedef struct { int malescore; // 男生总分 int femalescore; // 女生总分 int totalscore; // 团体总分 } ScoreType; void Scores(ResultType *result, ScoreType *score) { int i = 0; while (result[i].sport != NULL) { switch (result[i].schoolname) { case 'A': score[0].totalscore += result[i].score; if (result[i].gender == female) score[0].femalescore += result[i].score; else score[0].malescore += result[i].score; break; case 'B': score[1].totalscore += result[i].score; if (result[i].gender == female) score[1].femalescore += result[i].score; else score[1].malescore += result[i].score; break; case 'C': score[2].totalscore += result[i].score; if (result[i].gender == female) score[2].femalescore += result[i].score; else score[2].malescore += result[i].score; break; case 'D': score[3].totalscore += result[i].score; if (result[i].gender == female) score[3].femalescore += result[i].score; else score[3].malescore += result[i].score; break; case 'E': score[4].totalscore += result[i].score; if (result[i].gender == female) score[4].femalescore += result[i].score; else score[4].malescore += result[i].score; break; } i++; } } ``` 此算法遍历比赛结果数组 `result[]`,对于每一个项目,根据学校名称累加相应的分数到对应的 `ScoreType` 结构体中。这样可以方便地获取每所学校男女及团体的总分。 以上三个题目分别涉及了简单的排序算法、动态规划求解斐波那契序列以及基于结构体的应用程序设计。这些练习不仅有助于理解基本的数据结构和算法原理,还能提升编程实践能力。
的值不是依次非递增的,则通过交换,令其为
非递增。
要求实现下列函数:
void Descend(int &x, int &y, int &z);
/* 按从大到小顺序返回x,y和z的值 */
void Descend(int &x, int &y, int &z)
/* 按从大到小顺序返回x,y和z的值 */
{
int temp = 0;
if(x<y){
temp = x;
x = y;
y = temp;
}
if(y<z){
temp = z;
z = y;
y = temp;
if(x>=temp)
y = temp;
else {
y = x;
x = temp;
}
}
}
1.17③ 已知k阶裴波那契序列的定义为
f0=0, f1=0, ..., fk-2=0, fk-1=1;
fn=fn-1+fn-2+...+fn-k, n=k,k+1,...
试编写求k阶裴波那契序列的第m项值的函数算法,
k和m均以值调用的形式在函数参数表中出现。
要求实现下列函数:
Status Fibonacci(int k, int m, int &f);
/* 如果能求得k阶斐波那契序列的第m项的值f,则返回OK;*/
/* 否则(比如,参数k和m不合理)返回ERROR */
Status Fibonacci(int k, int m, int &f)
/* 求k阶斐波那契序列的第m项的值f */
{
if(k<2||m<0)
return ERROR;
else if(k-1==m)
f = 1;
else if(m<k-1)
f = 0;
else{
int temp[50],i,j;
for(i = 0;i<=k-2;i++ )
temp[i] = 0;
temp[k-1]=1;
for(i = k;i<=m;i++){
int sum = 0;
剩余6页未读,继续阅读
- angel9211252012-09-27是正确的~·~很好用~~
- 粉丝: 0
- 资源: 38
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 球磨机sw14全套技术资料100%好用.zip
- 清洗输送机step全套技术资料100%好用.zip
- 国内某电驱大厂内部电驱仿真模型,支持同步电机和异步电机模型,相电流控制输出稳定,自动计算弱磁模型调用各种脚本进行foc控制,扭矩无异常波动,适合电机控制的初学者构建自己的仿真模型时来参考搭建 (运行
- 汇川多合一上位机软件 ①支持宇通,东风凯普特,陕汽德龙等多车型 ②支持数据读取,修改,故障码读取,程序刷写等
- 图书管理程序,c语言主程序
- 电机控制器,IGBT结温估算(算法+模型)国际大厂机密算法,多年实际应用,准确度良好…… 能够同时对IGBT内部6个三极管和6个二极管温度进行估计,并输出其中最热的管子对应温度 可用于温度保护,降额
- 图书管理程序,c语言运行程序
- 基于Java和HTML的JavaExpert技术专家修炼之路设计源码
- 染色机sw21可编辑全套技术资料100%好用.zip
- Labview四工位相机同时扫二维码+HTTP协议Mes上传+汇川PLC通讯协议
- 手动装订机sw15可编辑全套技术资料100%好用.zip
- 适配器插头自动化振动盘上料机sw17全套技术资料100%好用.zip
- 适配器老化测试机sw17可编辑全套技术资料100%好用.zip
- 基于matlab的永磁同步电机(PMSM),磁场定向控制仿真模型 永磁同步电机(PMSM)是一个非线性系统,具有多变量、强耦合的特点
- 手摇机械折弯冲压机sw17可编辑全套技术资料100%好用.zip
- 基于matlab的多类结构动力学,凸轮机构、双凸轮、弦振动模拟、阻尼振动 、四连杆机构 、套杆运动 、三根弹簧作用的振子 程序已调通,可直接运行