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