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,一经查实,立即删除!

相关文章

Java 新手习题()

循环 1.&#xff08;for 循环&#xff09;计算123…100 的和 package com.fxm.day03.test; public class day03test1{public static void main(String[] args){int sum 0;for(int i 1; i < 101; i){sum i;}System.out.println("1到100的和&#xff1a;"sum);…

(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(…

c语言3种链接属性: 外部(external), 内部(internal),无设置(none)

c语言中&#xff0c;多个文件组合的时候&#xff0c;有可能标示名相同&#xff0c;那么这个时候编译器如何判别的呢&#xff1f; c语言中有3种链接属性: 外部&#xff08;external&#xff1a;可以被其他文件访问到&#xff09;, 内部(internal&#xff1a;无法被其他文件访问到…

java 数组习题

2.写一个函数&#xff0c;返回一个整数数组的平均值 package com.fxm.day05.test; public class Day05test{public static void main(String[] args){int[] a1 {2,9,5,7,4};int n average(a1);System.out.println(n);}public static int average(int[] a){int sum 0;for(in…

机器学习笔记(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…

C++匿名命名空间

当定义一个命名空间时&#xff0c;可以忽略这个命名空间的名称&#xff1a; namespce {char c;int i;double d;}编译器在内部会为这个命名空间生成一个唯一的名字&#xff0c;而且还会为这个匿名的命名空间生成一条using指令。所以上面的代码在效果上等同于&#xff1a;namespa…

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

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

python 习题

使用蒙特-卡罗方法计算圆周率近似值 蒙特-卡罗方法是一种通过概率来得到问题近似解的方法。假设又一块边长为2的正方形木板&#xff0c;上面画一个单位圆&#xff0c;然后随意往木板上扔飞镖&#xff0c;落点坐标(x,y)必然在木板上(更多的是落在单位圆内)&#xff0c;如果扔的…

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…

C++11 FAQ中文版:std::function 和 std::bind

std::function 和 std::bind 标准库函数bind()和function()定义于头文件中&#xff08;该头文件还包括许多其他函数对象&#xff09;&#xff0c;用于处理函数及函数参数。bind()接受一个函数&#xff08;或者函数对象&#xff0c;或者任何你可以通过”(…)”符号调用的事物&am…

Java 习题(面向对象)

1.&#xff08;面向对象基础&#xff09;写一个Worker 类&#xff0c;并创建多个Worker 对象。 为Worker 类添加四个属性&#xff0c; <1>int 类型的id&#xff0c;表示工人的编号&#xff1b; <2>String 类型的name&#xff0c;表示工人的姓名&#xff1b; <3…

机器学习笔记(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…

指针右左法则----复杂指针解析

其实如果写得出&#xff08;其实不难&#xff09;指针和数组的声明的EBNF的话&#xff0c;那么直接看就可以反应过来了…… 右左法则是一个既著名又常用的方法。不过&#xff0c;右左法则其实并不是C标准里面的内容&#xff0c;它是从C标准的声明规定中归纳出来的方法。C标准的…

【POJ - 3694】Network(对dfn求lca 或 缩点+lca 或 边双连通+并查集)

题干&#xff1a; 网络管理员管理大型网络。该网络由N台计算机和成对计算机之间的M链路组成。任何一对计算机都通过连续的链接直接或间接连接&#xff0c;因此可以在任何两台计算机之间转换数据。管理员发现某些链接对网络至关重要&#xff0c;因为任何一个链接的故障都可能导…