1.绪论
目錄
(1)C語言傳值與傳地址變量
(2)算法效率的度量
(3)基本操作
(4)主函數
主要由實現基本操作和算法的程序構成。這些程序有6類:
(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; }運行結果為:
?
總結
- 上一篇: 在银行可以买到什么理财产品?银行常见的理
- 下一篇: 图解算法学习笔记(五):散列表