計算機軟件基礎 上機實驗報告(一)
XXXXXX 班 XXX
1. 實驗目的 掌握線性表在順序分配下的插入與刪除運算;掌握線性表的鏈式存儲結構;掌握插入排序的方法;并掌握一種產生隨機數的方法。
2. 實驗內容 1. 產生 1000 個 0 至 999 間的隨機整數,并以產生的次序存入一個數據文件中。
2. 編制一個程序,依次實現以下功能:
(1) 定義一個有序(非遞減)線性表,其最大容量為 1000,初始時為空。
(2) 從由 1 產生的數據文件中依次取前 N 個隨機整數,陸續插入到此線性表中,并要求在每次插入后保持線性表的有序性。最后將此有序線性表打印輸出。
(3) 在由(2)產生的線性表中,依在 1 中產生的次序逐個將元素刪除,直至表空為止。
3. 以 N=100 及 N=400 分別運行 2 的程序,并比較它們的運行時間。
4. 編寫一個程序,用插入排序依次將 1 中產生的 1000 個隨機整數鏈接成有序鏈表(不改變原隨機數在存儲空間中的順序)。
3. 源代碼與運行結果 #include<stdio.h> #include<stdlib.h> #include<time.h>
/** 1_1 產生 1000 個 0 至 999 間的隨機整數,并以產生的次序存入一個數據文件(1_1.txt)中。
**/
main() {
FILE *fo=fopen("1_1.txt","w");
int i,j;
srand((unsigned)time(0));
for (i=0;i<=999;i++) fprintf(fo,"%d\n",rand()%1000);
fclose(fo);
printf("1000 個隨機數已輸出至目錄下 1_1.txt 文件\n");
system("pause"); } 輸出文件 1_1.txt 如下:(因輸出文本長度緣故,此處只截了一幅圖)
#include<stdio.h> #include<stdlib.h> #include<time.h>
/** 1_2 從數據文件(1_1.txt)中讀取數據,進行插入排序,然后屏幕輸出。
再依序刪除。
1_3 以 N=100 及 N=400 分別運行 2 的程序,并比較它們的運行時間。
**/
#define N 1000
main() {
int a[N]={0};
int i,j,m,w,num=0;
FILE *fi=fopen("1_1.txt","r");
clock_t start,finish;
double duration;
//Part 1 :
start=clock();
m=0;
fscanf(fi,"%d",&num);
a[0]=num;
w=m;
for (j=1;j<=N-1;j++)
{
w=m;
fscanf(fi,"%d",&num);
while ((a[w]>num)&&(w>=0)) w--;
w++;
for(i=m;i>=w;i--) a[i+1]=a[i];
a[w]=num;
m++;
}
finish=clock();
duration=(double)(finish - start)/CLOCKS_PER_SEC;
printf("執行 %d 個數據插入操作完成!用時:%f 秒,得到線性表如下:\n",m+1,duration);
for (i=0;i<N;i++) printf("%d ",a[i]);
fclose(fi);
//Part 2 :
start=clock();
for (j=0;j<=N-1;j++)
{
w=0;
fscanf(fi,"%d",&num);
while (a[w]<num) w++;
for(i=m;i<m;i++) a[i]=a[i+1];
a[m]=0;
m--;
}
finish=clock();
duration=(double)(finish - start)/CLOCKS_PER_SEC;
printf("\n\n 刪除操作完成!用時:%f 秒,得到線性表如下:\n",duration);
for (i=0;i<N;i++) printf("%d ",a[i]);
printf("\n");
fclose(fi);
system("pause"); }
程序運行輸出結果如下:(因輸出文本長度緣故,此處只截了兩幅圖)
#include<stdio.h> #include<stdlib.h>
/**
1_4 編寫一個程序,用插入排序依次將 1_1.txt 中的 1000 個隨機整數鏈接成有序鏈表 (不改變原隨機數在存儲空間中的順序)
**/
#define N 1000 main() {
struct data
{
int num;
struct data *next;
};
struct data *n, *head, *temp;
FILE *fi=fopen("1_1.txt","rt");
int i,a=0;
n=(struct data*)malloc(sizeof(struct data));
n->next=NULL;
fscanf(fi,"%d",&a);
n->num=a;
head=n;
for (i=1;i<=N-1;i++)
{
n=(struct data*)malloc(sizeof(struct data));n->next=NULL;
fscanf(fi,"%d",&a);
n->num=a;
temp=head;
if ((n->num)<=(temp->num)) // n 為目前最小值
{
n->next=temp;
head=n;
}
else
{
while ( ((temp->next)!=NULL) && ((n->num) > ((temp->next)->num)) )
temp=temp->next;
if (temp->next==NULL) temp->next=n; // n 為目前最大值
else // n 插入鏈表
{
n->next=temp->next;
temp->next=n;
}
}
}
printf("插入排序完成\n");
printf("數據最小元素:%d\n",head->num);
printf("完整數據輸出:\n");
temp=head;
while (temp->next!=NULL) {printf("%d ",temp->num); temp=temp->next;}
fclose(fi);
system("pause");
}
程序運行輸出結果如下:(因輸出文本長度緣故,此處只截了一幅圖)
4. 實驗總結 通過本次試驗,我熟練掌握了線性表在順序分配下的插入與刪除運算,還有鏈表的存儲結構、插入排序的方法,并且學習了產生隨機數、文件數據輸入輸出、取得當前系統時間的方法。
? srand 函數用來將系統隨機種子設定為當前時間(強制轉化為 unsigned),否則得到的偽隨機數每次都相同,而 rand()%1000 則用來產生 1-999 的偽隨機數。
? 在添加 time.h 庫函數后,可以使用 clock_t 類型變量和 clock()函數獲取當前時間,從而進行程序運行時間計算(但精度貌似較低)。到每過千分之一秒,clock()函數的返回值就會增加 1,而常量CLOCKS_PER_SEC,它用來表示一秒鐘有多少個時鐘計時單元,故 duration=(double)(finish - start)/CLOCKS_PER_SEC 即可得到程序運行的時間(秒)。
? 文件讀取輸出可以通過以下語句簡單完成:
FILE *fi=fopen("fi.txt","r");
FILE *fo=fopen("fo.txt","w");
fscanf(fi,"%d",int);
fprintf(fo,"文件輸出\n");
fclose(fi); fclose(fo);
推薦訪問: 北航 實驗 報告上一篇:項目管理自查報告
同志們:今天這個大會,是市委全面落實黨要管黨、從嚴治黨要求的一項重大舉措,也是對縣市區委書記履行基層黨建工作第一責任人情況的一次集中檢閱,同時是對全市基層黨建工作的一次再部署、再落實的會議。前面,**
***年,我認真履行領班子、帶隊伍、抓黨員、保穩定的基層黨建工作思路,以學習貫徹習近平新時代中國特色社會主義思想和黨的十九大歷次全會精神為主線,以市局基層黨建工作考核細則為落腳點,落實全面從嚴治黨主體
根據會議安排,現將2022年履行抓基層黨建工作職責情況報告如下:一、履職工作特色和亮點1 突出政治建設,著力在思想認識上提高。牢固樹立抓黨建就是抓政績的理念,以“黨建工作抓引領、社區治理求突破,為民服
2022年以來,在**黨委的正確領導下,堅持以習近平新時代中國特色社會主義思想為指導,深入學習宣傳貫徹黨的二十大精神,以黨建工作為統領,扎實開展夯實“三個基本”活動,以“四化四力”行動為抓手,聚力創建
各位領導,同志們:根據會議安排,現就2022年度抓基層黨建工作情況匯報如下:一、主要做法及成效(一)強化政治引領。一是不斷強化理論武裝。堅持通過黨組會、中心組學習會和“三會一課”,第一時間、第一議題學
2022年度抓基層黨建工作述職報告按照黨委工作部署,現將本人2022年度抓基層黨建工作情況報告如下:一、2022年度抓基層黨建工作情況(一)旗幟鮮明講政治將旗幟鮮明講政治放在全局發展首要位置,積極開展
2022年,是我在數計系黨總支書記這個新崗位上度過的第一個完整的工作年度。回首一年來在校黨委的正確領導下,與數計系領導班子和全體師生共同走過的日子,艱辛歷歷在目,收獲溫潤心田。作為黨總支書記,我始終牢
按照考核要求,現將本人一年來,作為統戰部長履行職責、廉潔自律等方面情況報告如下:一、著眼增強政治素質,不斷深化理論學習堅持把旗幟鮮明講政治作為履職從政的第一位要求,帶領統戰系統干部堅決擁護“兩個確立”
**年,緊緊圍繞黨工委、管委會的決策部署,全體人員團結協作、凝心聚力,緊扣黨工委“**”基本工作思路,全力開拓進取,認真履職盡責,圓滿完成各項工作任務。一、個人思想政治狀況檸檬文苑www bgzjy
按照縣委關于開展抓基層黨建述職評議會議的有關要求,經請示縣委組織部同意,今天,我們在此召開2022年度基層黨組織書記抓基層黨建述職評議會議。1 首先,請**黨委書記,**同志述職。**黨委能夠主動研究