1.绪论

目录

(1)C语言传值与传地址变量

(2)算法效率的度量

(3)基本操作

(4)主函数


主要由实现基本操作和算法的程序构成。这些程序有6类:

  1. 数据存储结构,文件名第一个字母为c,以h为扩展名。如c1-1.h是第1章的第1种存储结构。
  2. 每种存储结构的一组基本操作函数。以bo开头,cpp为扩展名。
  3. 调用基本操作的主程序。以main开头,cpp为扩展名。
  4. 实现算法的程序。以algo开头,cpp为扩展名。
  5. 不同于基本操作又被多次调用的函数,以func开头,cpp为扩展名。
  6. 数据文件,以txt为扩展名。

(1)C语言传值与传地址变量

#include <stdio.h>void fa(int a)
{a++;printf("在函数fa中:a=%d\n", a);
}
void fb(int *a)
{(*a)++;printf("在函数fb中:a=%d\n", *a);
}int main()
{int n = 1;printf("在主程序中,调用函数fa之前:n=%d\n", n);fa(n);printf("在主程序中,调用函数fa之后:n=%d\n", n);fb(&n);printf("在主程序中,调用函数fa之后:n=%d\n", n);
}

传地址变量,若变量值在函数中被修改,则变化的值会带回到主函数中,运行结果为:

(2)算法效率的度量

//计算1-1/x+1/(x*x)…的更快捷的算法
//计算程序运行时间
#include<sys/timeb.h>
#include<stdio.h>void main()
{timeb t1, t2;long t;double x, sum1=1, sum=1;int i, n;printf("请输入x n:");scanf("%lf%d", &x, &n);ftime(&t1); for(i=1; i<=n; i++){ sum1*=-1.0/x;sum+=sum1;}ftime(&t2); t=(t2.time-t1.time)*1000+(t2.millitm-t1.millitm); printf("sum=%lf,用时%ld毫秒\n", sum, t);
}

运行结果为,具体运行时间跟计算机有关。

(3)基本操作

这里介绍抽象数据类型的8个基本操作函数,返回值类型都是Status,即智能返回OK、ERROR.

// bo1-1.h 抽象数据类型Triplet和ElemType(由c1-1.h定义)的基本操作(8个)
Status InitTriplet(Triplet &T, ElemType v1, ElemType v2, ElemType v3)
{    //操作结果,构造三元组T,依次置T的3个元素的初值为v1,v2,v3T=(ElemType*)malloc(3*sizeof(ElemType)); if(!T)exit(OVERFLOW); //OVERFLOW为定义的宏变量T[0]=v1, T[1]=v2, T[2]=v3;return OK;
}Status DestroyTriplet(Triplet &T)
{     //操作结果,三元组T被销毁free(T); T=NULL; return OK;
}Status Get(Triplet T, int i, ElemType &e)
{     //初试条件:三元组T已存在,操作结果:用e返回T的第i个元素的值if(i<1 || i>3) return ERROR;e=T[i-1]; return OK;
}Status Put(Triplet T, int i, ElemType e)
{     //改变T的第i元的值为eif(i<1 || i>3) return ERROR;T[i-1]=e; return OK;
}Status IsAscending(Triplet T) 
{     // 判断T的3个元素是否按升序排列return(T[0]<=T[1] && T[1]<=T[2]); 
}Status IsDescending(Triplet T) 
{     //判断T的3个元素是否按降序排列return(T[0]>=T[1] && T[1]>=T[2]); 
}Status Max(Triplet T, ElemType &e)
{     //返回最大值e=(T[0]>=T[1]) ? (T[0]>=T[2] ? T[0] : T[2]) : (T[1]>=T[2] ? T[1] : T[2]);return OK; 
}Status Min(Triplet T, ElemType &e)
{      //返回最小值e=(T[0]<=T[1]) ? (T[0]<=T[2] ? T[0] : T[2]) : (T[1]<=T[2] ? T[1] : T[2]);return OK; 
}

(4)主函数

主函数是用来检验基本操作函数是否正确。

// main1-1.cpp 检验基本操作bo1-1.h的主函数
// 以下两行可根据需要选其一(且只能选其一),而无须改变基本操作.
typedef int ElemType;
//typedef double ElemType; // 定义抽象数据类型ElemType在本程序中为双精度型。
#include"c1-1.h"
#include"bo1-1.h"
#include"func1-1.h"int main()
{Triplet T;ElemType m;Status i;i=InitTriplet(T, 5, 7, 9);//i=InitTriplet(T, 5.0, 7.1, 9.3); // 当ElemType为双精度型时,可取代上句。第15行printf("调用初始化函数后,i=%d(1:成功)。T的3个值为",i);PrintT(T);i=Get(T, 2, m);if(i==OK){printf("T的第2个值为");PrintE(m);}i=Put(T, 2, 6);if(i==OK){printf("将T的第2个值改为6后,T的3个值为");PrintT(T);}i=IsAscending(T);printf("调用测试升序的函数后,i=%d(0:否 1:是)\n", i);i=IsDescending(T);printf("调用测试降序的函数后,i=%d(0:否 1:是)\n", i);if((i=Max(T, m))==OK){printf("T中的最大值为");PrintE(m);}if((i=Min(T, m))==OK){ printf("T中的最小值为");PrintE(m);}DestroyTriplet(T);printf("销毁T后,T=%u\n", T);return 0;
}

运行结果为:

 

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

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

相关文章

(ECC)椭圆曲线加密算法原理和C++实现源码

目录 &#xff08;1&#xff09;ECC加密原理&#xff1a; &#xff08;2&#xff09;编译生成LibTommath静态库 &#xff08;3&#xff09;ECC源码 今天介绍一下利用LibTommath数学库实现椭圆曲线加密算法的原理和源码。 &#xff08;1&#xff09;ECC加密原理&#xff1a;…

【POJ - 2553】The Bottom of a Graph(tarjan强连通分量缩点,模板题)

题干&#xff1a; We will use the following (standard) definitions from graph theory. Let V be a nonempty and finite set, its elements being called vertices (or nodes). Let E be a subset of the Cartesian product VV, its elements being called edges. Then G(…

机器学习笔记(1):Introduction

目录 1&#xff09;welcome 2&#xff09;What is Machine Learning 3&#xff09;Supervised Learning 4&#xff09;Unsupervised Learning 1&#xff09;welcome 第一个视频主要介绍了机器学习目前的案例&#xff0c;主要有&#xff1a;数据库挖掘、医疗记录、生物工程…

【POJ - 3352】Road Construction(Tarjan,边双连通分量)

题干&#xff1a; Its almost summer time, and that means that its almost summer construction time! This year, the good people who are in charge of the roads on the tropical island paradise of Remote Island would like to repair and upgrade the various roads…

机器学习简易入门-附推荐学习资料

目录 &#xff08;1&#xff09;机器学习正规学习路线 &#xff08;2&#xff09;机器学习快速入门 &#xff08;3&#xff09;总结 感谢黄海广博士的分享 原创&#xff1a; 机器学习初学者 机器学习初学者 今天 机器学习如何入门&#xff1f;目前没有明确的答案。本站面向…

C++11中的std::function

原文地址&#xff1a;http://www.jellythink.com/archives/771 看看这段代码 先来看看下面这两行代码&#xff1a; std::function<void(EventKeyboard::KeyCode, Event*)> onKeyPressed; std::function<void(EventKeyboard::KeyCode, Event*)> onKeyReleased; 这两…

【HDU - 3394】Railway(点双连通分量,Tarjan算法,思维tricks)

题干&#xff1a; There are some locations in a park, and some of them are connected by roads. The park manger needs to build some railways along the roads, and he would like to arrange tourist routes to each circuit. If a railway belongs to more than one …

飞机大战(简易版)

一、游戏分析 飞机大战中的主要“角色”有&#xff1a; 1.英雄 2.敌方飞机 3.英雄发射的子弹 我们需要控制的有&#xff1a; 1.绘制屏幕内的角色 2.控制角色的逻辑&#xff0c;比如&#xff1a;敌方飞机与我方飞机的碰撞检测&#xff0c;我方飞机发射的子弹与敌方飞机之间的碰撞…

在Ubuntu上安装Keras深度学习框架

目录 1&#xff09;安装pip 2&#xff09;安装Python科学套件 3&#xff09;安装TensorFlow 4&#xff09;安装keras 5&#xff09;安装Jupyter Notebook 6&#xff09;运行Keras 本文介绍如何在Ubuntu上安装Keras深度学习框架。 1&#xff09;安装pip 安装pip包&#…

【POJ - 1523】SPF(Tarjan求割点,求分割成的连通块数,模板题,tricks)

题干&#xff1a; Consider the two networks shown below. Assuming that data moves around these networks only between directly connected nodes on a peer-to-peer basis, a failure of a single node, 3, in the network on the left would prevent some of the still…

机器学习笔记(2):单变量线性回归

目录 1&#xff09;Model representation 2&#xff09;Cost function 3&#xff09;Cost function intuition 1 4&#xff09;Cost function intuition2 5&#xff09;Gradient descent 6&#xff09;Gradient descent intuition 7&#xff09;Gradient descent for li…

安装VMware tools

点击“虚拟机” 安装VMware tools提取图中文件到“下载” 提取登入root 进入 cd 下载/vmware-tools-distrib 执行 ./vmware-install-pl 输入yes或者点击“enter”出现图中&#xff0c;即为成功安装

Keras入门实战(1):MNIST手写数字分类

目录 1)首先我们加载Keras中的数据集 2&#xff09;网络架构 3&#xff09;选择编译(compile参数) 4&#xff09;准备图像数据 5) 训练模型 6&#xff09;测试数据 前面的博客中已经介绍了如何在Ubuntu下安装Keras深度学习框架。 现在我们使用 Keras 库来学习手写数字分…

【BZOJ - 2574】[Poi1999] Store-Keeper(点双连通分量,求割点,记忆化bfs)

题干&#xff1a; 有一个仓库被分成n*m 个矩形区域&#xff0c;如果两个区域有一条公共边&#xff0c;则被认为这两个区域相邻。包裹都放在一个区域中&#xff0c;剩余的区域或者空闲或者被集装箱占有&#xff0c;这是因为集装箱太重&#xff0c;仓库管理员不能将集装箱搬走。…

机器学习笔记(3):线性代数回顾

目录 1&#xff09;Matrices and vectors 2&#xff09;Addition and scalar multiplication 3&#xff09;Matrix-vector multiplication 4&#xff09;Matrix-matrix multiplication 5&#xff09;Matrix multiplication properties 6&#xff09;Inverse and transpos…

hadoop 安装

Hadoop单机和伪分布式安装 更新apt 用root用户登录 先更新一下 apt apt-get update然后安装vim apt-get install vim安装VMware tools tools 安装 安装SSH、配置SSH无密码登陆 单节点模式都需要用到 SSH 登陆&#xff0c;Ubuntu 默认已安装了 SSH client&#xff0c;此…

机器学习笔记(4):多变量线性回归

目录 1&#xff09;Multiple Features 2&#xff09;Gradient descent for multiple variables 3&#xff09;Gradient descent in practice 1: Feature Scaling 4&#xff09;Gradient descent in pratice2: Learning rate 5&#xff09;Features and polynomial regress…

zookeeper单节点部署

hadoop 安装 在/install-package目录下查看zookeeper的安装包 本文中安装的是zookeeper-3.4.12.tar.gz 下方为百度云链接 链接&#xff1a;https://pan.baidu.com/s/1bzq4ILH41owtS__3tBCcRQ 提取码&#xff1a;6q4r 把下载好的zookeeper-3.4.12.tar.gz 放到/install-packa…

机器学习笔记(五):逻辑回归

目录 1&#xff09;Classification 2&#xff09;Hypothesis Representation 3&#xff09;Decision boundary 4&#xff09;Cost function 5&#xff09;Simplified cost function and gradient descent 6&#xff09;Multi-class classification:One-vs-all 7&#xf…

xrdp完美实现Windows远程访问Ubuntu 16.04

前言&#xff1a; 在很多场景下&#xff0c;我们需要远程连接到Linux服务器(本文是Ubuntu)&#xff0c;传统的连接主要分为两种。 第一种&#xff1a;通过SSH服务&#xff08;使用xshell等工具&#xff09;来远程访问&#xff0c;编写终端命令&#xff0c;不过这个是无界面的&a…