主頁 > 軟體工程 > C語言 random和time的實作 資料查找

C語言 random和time的實作 資料查找

2020-09-22 06:25:52 軟體工程

[color=#FFFF00][color=#FFCC00]C語言中的一個資料查找的實驗
程式可以編譯通過,但是連接的時候就會出bug,小白表示不知道怎么改了,請大神賜教

附連接時代碼:[/color]
--------------------Configuration: schtb - Win32 Debug--------------------
Linking...
schtb.obj : error LNK2001: unresolved external symbol "int __cdecl random(int)" (?random@@YAHH@Z)
schtb.obj : error LNK2001: unresolved external symbol "int __cdecl random(int)" (?random@@YAHH@Z)
schtb.obj : error LNK2001: unresolved external symbol "int __cdecl random(int)" (?random@@YAHH@Z)
nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __endthreadex
nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __beginthreadex
Debug/schtb.exe : fatal error LNK1120: 3 unresolved externals
執行 link.exe 時出錯.




schtb.cpp中的代碼

#include <stdio.h>
#include <stdlib.h>
#include <afxinet.h>  
#include "schtb.h"
//創建查找表操作
void CreatSchTb(SeqList R)
{
   int i ;
   int random(int sum);
   //randomize() ;
   srand(n) ; //以相同的種子值,初始化亂數發生器
   for(i=1; i<=n; i++)
      R[i].key = random(n*10) ;//產生亂數
}
//排序查找表,采用簡單選擇排序
void SortSchTb(SeqList R)
{
   int i, j, k ;
   for(i=1; i<n; i++) {
      k = i ;
      for(j=i+1; j<=n; j++)
 if (R[k].key>R[j].key) k = j ;
      if (k!=i) {
 R[0] = R[i] ;
 R[i] = R[k] ;
 R[k] = R[0] ;
      }
   }
}
//順序查找操作
int SeqSearch(SeqList R, KeyType K)
{
   int i ;
   R[0].key = K ;
   for(i=n; R[i].key!=K; i--) ;
   return i ;
}
//折半查找操作
int BinSearch(SeqList R, KeyType K)
{
   int low = 1, high = n, mid ;
   while(low <= high) {
      mid= (low + high) / 2 ;
      if (R[mid].key < K) low = mid + 1 ;
      else if (R[mid].key == K) return mid ;
      else high = mid - 1 ;
   }
   return 0 ;
}
//輸出查找表資料
void PrtSchTb(SeqList R)
{
   int i ;
   for (i=1; i<=n; i++)
      printf("%4d", R[i].key) ;
   printf("\n") ;
}

//二叉排序樹的插入操作
void InsertBST(BSTree *BT, KeyType key)
{
   BSTNode *f, *p = *BT ;//f指向要插入的雙親結點
   while(p) {
      if (p->key == key) return ; //有相同關鍵字,不插入
      f = p ;
      p = (key<p->key) ? p->lchild : p->rchild ;
   }
   p = (BSTNode *)malloc(sizeof(BSTNode)) ;
   p->key = key ;
   p->lchild = p->rchild = NULL ;
   if (*BT == NULL)  *BT = p ; //如果二叉排序樹為空,則為根結點
   else
      if (key<f->key) f->lchild = p ;
      else f->rchild = p ;
}
//創建二叉排序樹操作
void CreatBST(BSTree *TP)
{
   int random(int sum);
   int i ;
   *TP = NULL ;
   srand(n) ;
   for (i=1; i<=n; i++)
      InsertBST(TP, random(n*10)) ;
}
//二叉排序樹的查找操作
BSTNode *SearchBST(BSTree BT, KeyType key )
{
   if (BT==NULL||BT->key==key) return BT ;
   if (BT->key>key) return SearchBST(BT->lchild, key) ;
   else return SearchBST(BT->rchild, key) ;
}
//輸出二叉排序樹結點的值操作,以中序遍歷輸出
void PrtBST(BSTree BT)
{
   if (BT) {
      PrtBST(BT->lchild) ;
      printf("%4d", BT->key) ;
      PrtBST(BT->rchild) ;
   }
}
//取得當前系統時間操作
double GetTime(void)
{
double T;
CTime t = CTime::GetCurrentTime();
    int h=t.GetHour(); //獲取當前為幾時
    int mm=t.GetMinute(); //獲取當前分鐘
    int s=t.GetSecond(); //獲取當前秒
    int w=t.GetDayOfWeek(); //獲取星期幾,注意1為星期天,7為星期六
double hund=s/100;
   //struct time;
   //struct t;
   //gettime(&t);
   T = ((h*60+mm)*60+s)*100+hund ;
   return 0 ;
}

//主程式
void main(void)
{
   SeqList SR, BR ;
   BSTree BT ;
   KeyType k[m] ;
   int i ;
   double t1, t2 ;
   int random(int sum);

   //randomize() ; 該用法在VC環境下不能使用,需要使用下面的用法
   srand(time(0));
   //產生待查找的資料
   for(i=0; i<m; i++)
      k[i] = random(n*10) ;
   //順序查找演算法
   printf("順序查找演算法的時間為:\n") ;
   CreatSchTb(SR) ;
   t1 = GetTime() ;
   for(i=0; i<m; i++)
      SeqSearch(SR, k[i]) ;
   t2 = GetTime() ;
   printf("%d毫秒\n", (int)(t2-t1)) ;
   //折半查找演算法
   printf("順序查找演算法的時間為:\n") ;
   CreatSchTb(BR) ;
   SortSchTb(BR) ;
   t1 = GetTime() ;
   for(i=0; i<m; i++)
      BinSearch(BR, k[i]) ;
   t2 = GetTime() ;
   printf("%d毫秒\n", (int)(t2-t1)) ;
   //二叉排序樹查找演算法
   printf("二叉排序樹查找演算法的時間為:\n") ;
   CreatBST(&BT) ;
   t1 = GetTime() ;
   for(i=0; i<m; i++)
      SearchBST(BT, k[i]) ;
   t2 = GetTime() ;
   printf("%d毫秒\n", (int)(t2-t1)) ;
   //PrtBST(BT) ;
}



schtb.h中的代碼
//以下是schtb.h的頭檔案內容。
//以下用于順序查找和折半查找
#define n 1000 //定義查找表長度
#define m 500  //定義待查找資料個數
typedef int KeyType ; //定義關鍵字型別
typedef struct node {  //定義查找結點結構
   KeyType key ;
   //如果查找表的結點包含其它資訊,在此加入
   //InfoType otherinfo ;
} NodeType ;
typedef NodeType SeqList[n+1] ;//定義查找表,含有監視哨

//以下用于二叉排序樹的查找
typedef struct treenode { //定義二叉排序樹結點
   KeyType key ;
   //InfoType otherinfo ; //結點的其它資訊
   //二叉鏈表結點的左右孩子指標
   struct treenode *lchild, *rchild ;
} BSTNode ;
typedef BSTNode *BSTree ; //定義二叉排序樹



uj5u.com熱心網友回復:

#include <stdio.h>
#include <stdlib.h>
#include <afxinet.h>
#include "schtb.h"
int random(int sum) {
    return rand()%sum;
}
//創建查找表操作
void CreatSchTb(SeqList R) {
    int i ;
    //randomize() ;
    srand(n) ; //以相同的種子值,初始化亂數發生器
    for(i=1; i<=n; i++)
        R[i].key = random(n*10) ;//產生亂數
}
//排序查找表,采用簡單選擇排序
void SortSchTb(SeqList R) {
    int i, j, k ;
    for(i=1; i<n; i++) {
        k = i ;
        for(j=i+1; j<=n; j++)
            if (R[k].key>R[j].key) k = j ;
        if (k!=i) {
            R[0] = R[i] ;
            R[i] = R[k] ;
            R[k] = R[0] ;
        }
    }
}
//順序查找操作
int SeqSearch(SeqList R, KeyType K) {
    int i ;
    R[0].key = K ;
    for(i=n; R[i].key!=K; i--) ;
    return i ;
}
//折半查找操作
int BinSearch(SeqList R, KeyType K) {
    int low = 1, high = n, mid ;
    while(low <= high) {
        mid= (low + high) / 2 ;
        if (R[mid].key < K) low = mid + 1 ;
        else if (R[mid].key == K) return mid ;
        else high = mid - 1 ;
    }
    return 0 ;
}
//輸出查找表資料
void PrtSchTb(SeqList R) {
    int i ;
    for (i=1; i<=n; i++)
        printf("%4d", R[i].key) ;
    printf("\n") ;
}

//二叉排序樹的插入操作
void InsertBST(BSTree *BT, KeyType key) {
    BSTNode *f, *p = *BT ;//f指向要插入的雙親結點
    while(p) {
        if (p->key == key) return ; //有相同關鍵字,不插入
        f = p ;
        p = (key<p->key) ? p->lchild : p->rchild ;
    }
    p = (BSTNode *)malloc(sizeof(BSTNode)) ;
    p->key = key ;
    p->lchild = p->rchild = NULL ;
    if (*BT == NULL)  *BT = p ; //如果二叉排序樹為空,則為根結點
    else
        if (key<f->key) f->lchild = p ;
        else f->rchild = p ;
}
//創建二叉排序樹操作
void CreatBST(BSTree *TP) {
    int i ;
    *TP = NULL ;
    srand(n) ;
    for (i=1; i<=n; i++)
        InsertBST(TP, random(n*10)) ;
}
//二叉排序樹的查找操作
BSTNode *SearchBST(BSTree BT, KeyType key ) {
    if (BT==NULL||BT->key==key) return BT ;
    if (BT->key>key) return SearchBST(BT->lchild, key) ;
    else return SearchBST(BT->rchild, key) ;
}
//輸出二叉排序樹結點的值操作,以中序遍歷輸出
void PrtBST(BSTree BT) {
    if (BT) {
        PrtBST(BT->lchild) ;
        printf("%4d", BT->key) ;
        PrtBST(BT->rchild) ;
    }
}
//取得當前系統時間操作
double GetTime(void) {
    double T;
    CTime t = CTime::GetCurrentTime();
    int h=t.GetHour(); //獲取當前為幾時
    int mm=t.GetMinute(); //獲取當前分鐘
    int s=t.GetSecond(); //獲取當前秒
    int w=t.GetDayOfWeek(); //獲取星期幾,注意1為星期天,7為星期六
    double hund=s/100;
    //struct time;
    //struct t;
    //gettime(&t);
    T = ((h*60+mm)*60+s)*100+hund ;
    return 0 ;
}

//主程式
void main(void) {
    SeqList SR, BR ;
    BSTree BT ;
    KeyType k[m] ;
    int i ;
    double t1, t2 ;

    //randomize() ; 該用法在VC環境下不能使用,需要使用下面的用法
    srand(time(0));
    //產生待查找的資料
    for(i=0; i<m; i++)
        k[i] = random(n*10) ;
    //順序查找演算法
    printf("順序查找演算法的時間為:\n") ;
    CreatSchTb(SR) ;
    t1 = GetTime() ;
    for(i=0; i<m; i++)
        SeqSearch(SR, k[i]) ;
    t2 = GetTime() ;
    printf("%d毫秒\n", (int)(t2-t1)) ;
    //折半查找演算法
    printf("順序查找演算法的時間為:\n") ;
    CreatSchTb(BR) ;
    SortSchTb(BR) ;
    t1 = GetTime() ;
    for(i=0; i<m; i++)
        BinSearch(BR, k[i]) ;
    t2 = GetTime() ;
    printf("%d毫秒\n", (int)(t2-t1)) ;
    //二叉排序樹查找演算法
    printf("二叉排序樹查找演算法的時間為:\n") ;
    CreatBST(&BT) ;
    t1 = GetTime() ;
    for(i=0; i<m; i++)
        SearchBST(BT, k[i]) ;
    t2 = GetTime() ;
    printf("%d毫秒\n", (int)(t2-t1)) ;
    //PrtBST(BT) ;
}

uj5u.com熱心網友回復:

請問為什么運行結果還是0?

uj5u.com熱心網友回復:

#include<windows.h>
#include<math.h>

uj5u.com熱心網友回復:

參考 2 樓 yanmengqi0 的回復:
請問為什么運行結果還是0?

代碼功能歸根結底不是別人幫自己看或講解或注釋出來的;而是被自己靜下心來花足夠長的時間和精力親自動手單步或設斷點或對執行到某步獲得的中間結果顯示或寫到日志檔案中一步一步分析出來的。
提醒:再牛×的老師也無法代替學生自己領悟和上廁所!
單步除錯和設斷點除錯(VS IDE中編譯連接通過以后,按F10或F11鍵單步執行,按Shift+F11退出當前函式;在某行按F9設斷點后按F5執行停在該斷點處。)是程式員必須掌握的技能之一。

uj5u.com熱心網友回復:

random 改為 rand
編譯環境屬性中 改為 MT 或 MTD

uj5u.com熱心網友回復:

參考 4樓趙4老師 的回復:
Quote: 參考 2 樓 yanmengqi0 的回復:

請問為什么運行結果還是0?

代碼功能歸根結底不是別人幫自己看或講解或注釋出來的;而是被自己靜下心來花足夠長的時間和精力親自動手單步或設斷點或對執行到某步獲得的中間結果顯示或寫到日志檔案中一步一步分析出來的。
提醒:再牛×的老師也無法代替學生自己領悟和上廁所!
單步除錯和設斷點除錯(VS IDE中編譯連接通過以后,按F10或F11鍵單步執行,按Shift+F11退出當前函式;在某行按F9設斷點后按F5執行停在該斷點處。)是程式員必須掌握的技能之一。
謝謝趙4老師的鼓勵,多謝指教

轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/102536.html

標籤:基礎類

上一篇:opencv擬合平面

下一篇:如何在win7 win10下獲取管理員權限

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • Git本地庫既關聯GitHub又關聯Gitee

    創建代碼倉庫 使用gitee舉例(github和gitee差不多) 1.在gitee右上角點擊+,選擇新建倉庫 ? 2.選擇填寫倉庫資訊,然后進行創建 ? 3.服務端已經準備好了,本地開始作準備 (1)Git 全域設定 git config --global user.name "成鈺" git c ......

    uj5u.com 2020-09-10 05:04:14 more
  • CODING DevOps 代碼質量實戰系列第二課,相約周三

    隨著 ToB(企業服務)的興起和 ToC(消費互聯網)產品進入成熟期,線上故障帶來的損失越來越大,代碼質量越來越重要,而「質量內建」正是 DevOps 核心理念之一。**《DevOps 代碼質量實戰(PHP 版)》**為 CODING DevOps 代碼質量實戰系列的第二課,同時也是本系列的 PHP ......

    uj5u.com 2020-09-10 05:07:43 more
  • 推薦Scrum書籍

    推薦Scrum書籍 直接上干貨,推薦書籍清單如下(推薦有順序的哦) Scrum指南 Scrum精髓 Scrum敏捷軟體開發 Scrum捷徑 硝煙中的Scrum和XP : 我們如何實施Scrum 敏捷軟體開發:Scrum實戰指南 Scrum要素 大規模Scrum:大規模敏捷組織的設計 用戶故事地圖 用 ......

    uj5u.com 2020-09-10 05:07:45 more
  • CODING DevOps 代碼質量實戰系列最后一課,周四發車

    隨著 ToB(企業服務)的興起和 ToC(消費互聯網)產品進入成熟期,線上故障帶來的損失越來越大,代碼質量越來越重要,而「質量內建」正是 DevOps 核心理念之一。 **《DevOps 代碼質量實戰(Java 版)》**為 CODING DevOps 代碼質量實戰系列的最后一課,同時也是本系列的 ......

    uj5u.com 2020-09-10 05:07:52 more
  • 敏捷軟體工程實踐書籍

    Scrum轉型想要做好,第一步先了解并真正落實Scrum,那么我推薦的Scrum書籍是要看懂并實踐的。第二步是團隊的工程實踐要做扎實。 下面推薦工程實踐書單: 重構:改善既有代碼的設計 決議極限編程 : 擁抱變化 代碼整潔代碼 程式員的職業素養 修改代碼的藝術 撰寫可讀代碼的藝術 測驗驅動開發 : ......

    uj5u.com 2020-09-10 05:07:55 more
  • Jenkins+svn+nginx實作windows環境自動部署vue前端專案

    前面文章介紹了Jenkins+svn+tomcat實作自動化部署,現在終于有空抽時間出來寫下Jenkins+svn+nginx實作自動部署vue前端專案。 jenkins的安裝和配置已經在前面文章進行介紹,下面介紹實作vue前端專案需要進行的哪些額外的步驟。 注意:在安裝jenkins和nginx的 ......

    uj5u.com 2020-09-10 05:08:49 more
  • CODING DevOps 微服務專案實戰系列第一課,明天等你

    CODING DevOps 微服務專案實戰系列第一課**《DevOps 微服務專案實戰:DevOps 初體驗》**將由 CODING DevOps 開發工程師 王寬老師 向大家介紹 DevOps 的基本理念,并探討為什么現代開發活動需要 DevOps,同時將以 eShopOnContainers 項 ......

    uj5u.com 2020-09-10 05:09:14 more
  • CODING DevOps 微服務專案實戰系列第二課來啦!

    近年來,工程專案的結構越來越復雜,需要接入合適的持續集成流水線形式,才能滿足更多變的需求,那么如何優雅地使用 CI 能力提升生產效率呢?CODING DevOps 微服務專案實戰系列第二課 《DevOps 微服務專案實戰:CI 進階用法》 將由 CODING DevOps 全堆疊工程師 何晨哲老師 向 ......

    uj5u.com 2020-09-10 05:09:33 more
  • CODING DevOps 微服務專案實戰系列最后一課,周四開講!

    隨著軟體工程越來越復雜化,如何在 Kubernetes 集群進行灰度發布成為了生產部署的”必修課“,而如何實作安全可控、自動化的灰度發布也成為了持續部署重點關注的問題。CODING DevOps 微服務專案實戰系列最后一課:**《DevOps 微服務專案實戰:基于 Nginx-ingress 的自動 ......

    uj5u.com 2020-09-10 05:10:00 more
  • CODING 儀表盤功能正式推出,實作作業資料可視化!

    CODING 儀表盤功能現已正式推出!該功能旨在用一張張統計卡片的形式,統計并展示使用 CODING 中所產生的資料。這意味著無需額外的設定,就可以收集歸納寶貴的作業資料并予之量化分析。這些海量的資料皆會以圖表或串列的方式躍然紙上,方便團隊成員隨時查看各專案的進度、狀態和指標,云端協作迎來真正意義上 ......

    uj5u.com 2020-09-10 05:11:01 more
最新发布
  • windows系統git使用ssh方式和gitee/github進行同步

    使用git來clone專案有兩種方式:HTTPS和SSH:
    HTTPS:不管是誰,拿到url隨便clone,但是在push的時候需要驗證用戶名和密碼;
    SSH:clone的專案你必須是擁有者或者管理員,而且需要在clone前添加SSH Key。SSH 在push的時候,是不需要輸入用戶名的,如果配置... ......

    uj5u.com 2023-04-19 08:41:12 more
  • windows系統git使用ssh方式和gitee/github進行同步

    使用git來clone專案有兩種方式:HTTPS和SSH:
    HTTPS:不管是誰,拿到url隨便clone,但是在push的時候需要驗證用戶名和密碼;
    SSH:clone的專案你必須是擁有者或者管理員,而且需要在clone前添加SSH Key。SSH 在push的時候,是不需要輸入用戶名的,如果配置... ......

    uj5u.com 2023-04-19 08:35:34 more
  • 2023年農牧行業6大CRM系統、5大場景盤點

    在物聯網、大資料、云計算、人工智能、自動化技術等現代資訊技術蓬勃發展與逐步成熟的背景下,數字化正成為農牧行業供給側結構性變革與高質量發展的核心驅動因素。因此,改造和提升傳統農牧業、開拓創新現代智慧農牧業,加快推進農牧業的現代化、資訊化、數字化建設已成為農牧業發展的重要方向。 當下,企業數字化轉型已經 ......

    uj5u.com 2023-04-18 08:05:44 more
  • 2023年農牧行業6大CRM系統、5大場景盤點

    在物聯網、大資料、云計算、人工智能、自動化技術等現代資訊技術蓬勃發展與逐步成熟的背景下,數字化正成為農牧行業供給側結構性變革與高質量發展的核心驅動因素。因此,改造和提升傳統農牧業、開拓創新現代智慧農牧業,加快推進農牧業的現代化、資訊化、數字化建設已成為農牧業發展的重要方向。 當下,企業數字化轉型已經 ......

    uj5u.com 2023-04-18 08:00:18 more
  • 計算機組成原理—存盤器

    計算機組成原理—硬體結構 二、存盤器 1.概述 存盤器是計算機系統中的記憶設備,用來存放程式和資料 1.1存盤器的層次結構 快取-主存層次主要解決CPU和主存速度不匹配的問題,速度接近快取 主存-輔存層次主要解決存盤系統的容量問題,容量接近與價位接近于主存 2.主存盤器 2.1概述 主存與CPU的聯 ......

    uj5u.com 2023-04-17 08:20:31 more
  • 談一談我對協同開發的一些認識

    如今各互聯網公司普通都使用敏捷開發,采用小步快跑的形式來進行專案開發。如果是小專案或者小需求,那一個開發可能就搞定了。但對于電商等復雜的系統,其功能多,結構復雜,一個人肯定是搞不定的,所以都是很多人來共同開發維護。以我曾經待過的商城團隊為例,光是后端開發就有七十多人。 為了更好地開發這類大型系統,往 ......

    uj5u.com 2023-04-17 08:18:55 more
  • 專案管理PRINCE2核心知識點整理

    PRINCE2,即 PRoject IN Controlled Environment(受控環境中的專案)是一種結構化的專案管理方法論,由英國政府內閣商務部(OGC)推出,是英國專案管理標準。
    PRINCE2 作為一種開放的方法論,是一套結構化的專案管理流程,描述了如何以一種邏輯性的、有組織的方法,... ......

    uj5u.com 2023-04-17 08:18:51 more
  • 談一談我對協同開發的一些認識

    如今各互聯網公司普通都使用敏捷開發,采用小步快跑的形式來進行專案開發。如果是小專案或者小需求,那一個開發可能就搞定了。但對于電商等復雜的系統,其功能多,結構復雜,一個人肯定是搞不定的,所以都是很多人來共同開發維護。以我曾經待過的商城團隊為例,光是后端開發就有七十多人。 為了更好地開發這類大型系統,往 ......

    uj5u.com 2023-04-17 08:18:00 more
  • 專案管理PRINCE2核心知識點整理

    PRINCE2,即 PRoject IN Controlled Environment(受控環境中的專案)是一種結構化的專案管理方法論,由英國政府內閣商務部(OGC)推出,是英國專案管理標準。
    PRINCE2 作為一種開放的方法論,是一套結構化的專案管理流程,描述了如何以一種邏輯性的、有組織的方法,... ......

    uj5u.com 2023-04-17 08:17:55 more
  • 計算機組成原理—存盤器

    計算機組成原理—硬體結構 二、存盤器 1.概述 存盤器是計算機系統中的記憶設備,用來存放程式和資料 1.1存盤器的層次結構 快取-主存層次主要解決CPU和主存速度不匹配的問題,速度接近快取 主存-輔存層次主要解決存盤系統的容量問題,容量接近與價位接近于主存 2.主存盤器 2.1概述 主存與CPU的聯 ......

    uj5u.com 2023-04-17 08:12:06 more