C語言實驗指導(dǎo)書 (一)_第1頁
C語言實驗指導(dǎo)書 (一)_第2頁
C語言實驗指導(dǎo)書 (一)_第3頁
C語言實驗指導(dǎo)書 (一)_第4頁
C語言實驗指導(dǎo)書 (一)_第5頁
已閱讀5頁,還剩20頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

實驗指導(dǎo)書

一、實驗環(huán)境簡介

(一)、C程序的開發(fā)過程

開發(fā)一個C語言程序,要經(jīng)過以下4個階段:

(1)編輯源程序文件;

(2)編譯源程序;

(3)程序連接;

(4)運行程序。

1、編輯C語言源程序

編寫源程序就是程序設(shè)計人員用C程序設(shè)計語言描述解決某問題的過程和

具體實現(xiàn)的方法。這樣寫出的程序叫做C語言源程序。源程序以文件(File)的

形式存儲在計算機的的軟盤或硬盤中,通常它是一種文本文件,所謂文本文件就

是以ASCII碼存儲的文件,它可以用仟何文本編輯軟件編寫。

文件要有文件名,文件以其文件名在磁盤中存儲和與其他文件相區(qū)別。文件

名由兩部分組成:文件名和擴展名。其書寫格式為:

文件名.擴展名

按C語言編寫的源程序,其文件擴展名通常為c。例如,filel.c

2.編譯源程序

計算機系統(tǒng)只能認識和執(zhí)行用機器語言編寫的程序,不能理解用c語言或其

他非機器語言編寫的程序。所以,源程序必須翻譯成機器語言程序。翻譯是通過

一個稱為編譯器(Compiler)或編譯系統(tǒng)的軟件實現(xiàn)的。編譯系統(tǒng)編譯源程序時,

首先對源程序進行語法檢查,如果發(fā)錯誤,就會顯示錯誤的位置和錯誤的性質(zhì)并

終止編譯。這時,用戶需要對源程序進行再編輯,修改源程序文件中的錯誤。然

后,重新進行編譯。這個過程反復(fù)進行,直到編譯器認為沒有語法錯誤為止。源

程序通過編譯后,產(chǎn)生一個目標(biāo)文件。目標(biāo)文件的文件名就是源程序文件的文件

名,但擴展名為。bj,例如源文件filel.c,經(jīng)編譯后產(chǎn)生目標(biāo)文件:filel.objo

目標(biāo)文件由計算機的機器指令和其他一些二進制信息組成,它仍不能由計算機直

接執(zhí)行,還要經(jīng)過一個所謂的連接過程。

3.連接程序

由編譯系統(tǒng)中稱為連接程序(Linker)的軟件,將目標(biāo)文件和編譯系統(tǒng)的系

統(tǒng)函數(shù)庫連接生成可執(zhí)行的機器語言程序,這一過程稱為連接。連接程序在連接

過程中也要對程序進行語法檢查,如果發(fā)現(xiàn)錯誤,則給出相應(yīng)的錯誤信息并終止

連接。這時,程序設(shè)計人員要再次對源程序文件作相應(yīng)修改,重新進行編譯,重

新進行連接,這個過程要一直進行到連接成功為止。目標(biāo)文件經(jīng)成功連接后,最

終產(chǎn)生一個計算機直接可執(zhí)行的機器語言程序文件。可執(zhí)行程序文件以源程序文

件名存儲,但擴展名為exe。例如,目標(biāo)文件filel.obj經(jīng)連接后產(chǎn)生可執(zhí)行文

件:filel.exe。

4、運行程序

運行程序,即執(zhí)行程序。通過運行程序,實現(xiàn)程序的功能。如果程序運行不

正常或不能得到預(yù)期的結(jié)果,還需要從檢查源程序開始,重復(fù)上述過程,直到程

序運行正確為止。

運行可執(zhí)行文件,既可以在不同的操作系統(tǒng)中執(zhí)行,常見的有DOS系統(tǒng)、

WINDOWS系統(tǒng)等狀態(tài)下執(zhí)行,也可以在C語言系統(tǒng)提供的集成開發(fā)環(huán)境下進行。

圖1說明了C程序的開發(fā)過程。

圖1C程序的開發(fā)過程示意圖

(二)C語言的集成開發(fā)環(huán)境

為完成上述的程序開發(fā)過程,在不同的系統(tǒng)中可以采用不同的操作方式,在

windows環(huán)境,可以采用VC++,來實現(xiàn),但他對計算機的環(huán)境要求稍高一些,在

課程視頻中給予描述和實驗。C語言系統(tǒng)還提供兩種獨立的操作方式(對環(huán)境要

求不高)。一種是傳統(tǒng)的命令行方式,就是在DOS狀態(tài)下,用戶直接通過鍵入命

令進行工作;另一種是在集成開發(fā)環(huán)境(IDE)方式下操作。本節(jié)簡要介紹IDE

方式的使用。

IDE方式的優(yōu)點,就在于它將源程序的編輯。編譯。連接。調(diào)試和運行等多

種操作集成在一個平臺之上進行,從而為用戶創(chuàng)造了一個非常方便的良好的工作

環(huán)境。本節(jié)以TurboC++的IDE為例,簡要介紹在IDE方式下開發(fā)C程序的方

法。更詳細的內(nèi)容可參考相關(guān)的手冊。

1.IDE的啟動

在啟動之前,首先要安裝TurboC++系統(tǒng)軟件。關(guān)于安裝方面的細節(jié),這

里就不介紹了。系統(tǒng)是在操作系統(tǒng)DOS環(huán)境下運行的。在TurboC++系統(tǒng)裝

入之后,為了進入IDE只需在DOS狀態(tài)下鍵入如下的命令行:

TC<回車)

系統(tǒng)被啟動后,屏幕顯示如圖2所示的集成開發(fā)環(huán)境。

FileEditRunCompileProjectOptionsDebugBienk八Vntch

3MS-DOS方式-TC

1。X】8q口||洛|圖I回百A]知

Line1Col1InsertIndentTaCompiler£103.C

Hinclude"stdio.h'Linker

main()Environment

{printf(**V\\*isachdruDirectories

Hincludedirectories:E:\LfiNGUIGE\TC\INCLUDE

printf("\rb\n");Librarydirectories:E:\LANGUIGE\TC\LIB

getch();Outputdirectory:E:\LRNGUIGE\TC

)TurboCdirectoryE:\LANGUIGE\TC

Pickfilename:L:\LANGUIGC\TCTCPICK.TCP

Currentpickfile\LANGUIGE\TCTCPICK.TCP

Message■

Fl-HelpF5-Zoon?F6-SwitchF7-TraceF8-StepF9-MakeF10-N[CAPS

?I

圖2集成開發(fā)環(huán)境示意圖

由圖2可以看到,集成開發(fā)環(huán)境最上面的一行是主菜單。所有的操作命令都

可以從這個菜單中或它的子菜單中找到。所以,即使用戶記不住許多操作命令的

快捷鍵,也沒有關(guān)系,只需用鼠標(biāo)從菜單中選擇所要執(zhí)行的操作命令和輸入必要

的信息即可。

主菜單下面是程序的編輯區(qū)。用戶在這里輸入和編輯自己的c源程序。編輯

區(qū)的頂部顯示程序文件名,編輯區(qū)的底部顯示當(dāng)前編輯字符(光標(biāo)處)所在的行

號和列號。

編輯區(qū)的下方是狀態(tài)信息輸出區(qū)。在這里可以看到編譯和連接過程中的信

息,包括編譯系統(tǒng)給出的錯誤信息。狀態(tài)信息區(qū)的下面是一行提示信息,稱為提

示行。提示行給出一些快捷鍵及其含義。

在后臺輸出區(qū)則顯示程序運行時輸出的結(jié)果,用戶可以通過CTRL+F5進后臺

輸出區(qū)查看運行結(jié)果。

2.輸入和編輯源程序

源程序的輸入和編輯是在編輯區(qū)進行的。這里可能有兩種情況:第一種情

況是第一次輸入程序,第二種情況是源程序文件已經(jīng)在磁盤中存在。在第一種情

況下,用戶需要在編輯窗口直接用鍵盤逐個字符地輸入源程序。操作過程:

(1)啟動TC

(2)選擇主菜單中的File

(3)選擇子菜單中的New,就可以在編輯窗口直接用鍵盤逐個字符輸入源

程序。

(4)當(dāng)源程序完成之后,取新文件名存放,方法:選擇主菜單中的File

后,再選子菜單中的Saveas,然后輸入希望的文件名后,就按給定的文件名保

存了源文件信息。

在第二種情況下源程序文件已在磁盤中,,如果想要編輯的該文件,通過下

面的操作,將文件讀到編輯窗口:

(1)選擇主菜單中的File;

(2)選擇File下拉菜單中的Open;

(3)選中或輸入所需的文件名并單擊OK按鈕。

系統(tǒng)提供豐富的編輯命令,使用戶能夠輕松地編輯源程序。程序編輯完畢,

一般要立即存盤,這個操作可以通過選擇主菜單的File及其下面的Save或Save

as來實現(xiàn)。

3.編譯源程序文件

編澤源程序的步驟是:

(1)將待編譯的源程序輸入編輯區(qū);

(2)選主菜單中的Compile;

(3)選Compile下拉菜單中的CompiletoOBJ。

如果源程序文件中沒有語法錯誤的話,編譯的結(jié)果是在磁盤中產(chǎn)生一個擴

展名為,.obj的中間代碼文件(目標(biāo)程序)。否則進入編輯狀態(tài),修改程序,即

進入第2步,直到正確為止。

4.程序連接

產(chǎn)生了.obj文件后,就可以進行程序的連接了。連接的操作方法是:使用主

菜單Compile下面的MakeEXEFile,命令。如果沒有錯誤的話,將產(chǎn)生一個擴

展名為?exe的可執(zhí)行文件。

5.運行可執(zhí)行文件

運行程序的命令是主菜單中Run下面的子菜單中的Run命令。程序運行中的

輸出,將顯示在屏幕的后臺輸出區(qū)。如果程序運行的結(jié)果產(chǎn)生了不合邏輯的垢果,

這可能意味著程序有錯誤。應(yīng)該檢查程序,找出錯誤,再進行相應(yīng)的編輯、編譯、

連接和運行。

在C++的集成開發(fā)環(huán)境下,上述的編譯、連接和運行3個過程,也可以通過

一次操作完成。操作方法是:執(zhí)行主菜單中Run下面的子菜單中的Run命令,這

時,3個過程依次完成。當(dāng)然,在3個過程中的任何階段,只要系統(tǒng)發(fā)現(xiàn)了程序

中的語法錯誤,都會立即在狀態(tài)信息輸出區(qū)給出錯誤信息,并停止進一步的操作。

二、微型計算機系統(tǒng)配置

1.硬件

PC系列微型計算機,包括XT、AT、286、386、486、奔騰及各種兼容機,

要求內(nèi)存為640KB以上,一個硬盤驅(qū)動器和一個軟盤驅(qū)動器。彩色顯示器,并配

備鼠標(biāo)器。

2軟件

安裝操作系統(tǒng)(可以為WINDOWS、也可以為DOS操作系統(tǒng))。TurboC(或

TurboC++)軟件一套。

三、實驗項目

實驗Lc++的IDE基本操作與簡單程序

1.實驗?zāi)康?/p>

掌握在IDE環(huán)境下運行C語言程序的操作方法。

2.實驗內(nèi)容

按下面的步驟進行實驗。

(1)開機后在DOS狀態(tài)下,啟動TurboC(或TurboC++)的IDE環(huán)境;

(2)觀察菜單欄(或子菜單)的作用:

(3)分別輸入下列源程序;

源程序1:

#include<stdio.h>

main()

(

printfCHeUo,World!”);

)

源程序2:

#include<stdio.h>

main()/*Thisisthemainprogram*/

{inta,b,sum;

a=10;

b=24;

sum=add(a,b);

printT'sumr%d\nn,sum);

)

intadd(intx,inty)

{intz;

z=x+y;

return(z);}

(4)分別把源程序以文件的形式寫入磁盤;

(5)分別運行兩個程序,觀察程序的輸出結(jié)果;

實驗2:分支程序設(shè)計

1.實驗?zāi)康?/p>

掌握分支與循環(huán)程序設(shè)計的方法和有關(guān)語句。

2.實驗內(nèi)容

(1)編寫一個C程序,輸入a、b、c三個值,輸出其中最大值。

#include<stdio.h>

intmain()

{floata,b,c,t;

scanf("%f,%f,%『,&a,&b,&c);

if(a<b)

{t=a;a=b;b=t;}

if(a<c)

{t-a;a-c;c-t;}

printf(“輸出最大值:%5.2f;a);

return0;

)

(2)求一元二次方程ax2+bx+c=0的根。分別考慮d=b2-4ac大于0、等于。和

小于。這3種情況。

#include"math.h"http://cpp107

#include<stdio.h>

main()

{floata,b,c,disc,xl,x2,p,q;

scanf("%f%f%r,&a,&b,&c);

disc=b*b-4*a*c;

if(fabs(disc)<=le-6)//fabs():求絕對值庫函數(shù)

printf(uxl=x2=%7.2f\n",-b/(2*a));〃兩個根相等

else

{if(disc>le-6)

(x1=(-b+sqrt(disc))/(2*a);〃兩個不相等的實根

x2=(-b-sqrt(disc))/(2*a);

printf("x1=%7.2f,x2=%7.2f\n,',xl,x2);

)

else

{p=-b/(2*a);〃求出兩個共鮑復(fù)根

q=sqrt(fabs(disc))/(2*a);

printf(Hx1=%7.2f+%7.2fi\n",p,q);//輸出兩個共輾復(fù)根

printf(Hx2=%7.2f-%7.2fi\n",p,q);

return0;

)

(3)編一程序,按下關(guān)系式,輸入一個x值,輸出y值。

fl(X<0)

y<o&=0)

b(x>o)

#include<stdio.h>

intmain()

{intx,y;

scanf(”%d",&x);

if(x<0)

{y=-h1

else

{if(x=0)

{y=0;}

else

{y=i;}

}

printf(Hx=%d,y=%d\n”,x,y);

return0;

)

實驗3:循環(huán)程序設(shè)計

1.實驗?zāi)康?/p>

掌握循環(huán)程序設(shè)計方法。

2.實驗內(nèi)容

(1)請編制成程序?qū)崿F(xiàn):九九表算法。

Sinclude<stdio.h>

main()

{inti,j;

for(i=l;i<10;i++)

printf:〃%4d〃,i);

printf(,z\n---------------------------------------------------\n〃);

for(i=l;i<10;i++)

for(j=l;j<10;j++)

printf((J=9)?〃%4d\n〃:〃Md〃,i*j);

return0;

}

(2)輸出所有的“水仙花數(shù)",所謂“水仙花數(shù)”是指一個3位數(shù),其各位數(shù)

字立方和等于該數(shù)本身。例如,153是一水仙花數(shù),因為153=r+6+33。

#include<stdio.h>

voidmain()

{inti,j,k,n;

printf(,zNarcissusnumberare:");

for(n=100;n<1000;n++)

{i=n/100;

j=n/l

k=n%10;

if(n==i*i*i+j*j*j+k*k*k)

printf(/z%5d/z,n);

)

printf(〃\rT);

)

(3)統(tǒng)計一行字符中的單詞個數(shù),單詞之間用空格分隔。

^include<stdio.h>

intmain()

{charstring[81];

inti;

intnum=0;

intword=0;

charc;

//從終端獲取字符串

gets(string);

for(i=0;(c=string[i])!='\0';i++)

if(c*')

word=0;

elseif(word==0)

word=l;

num++;

)

printf(^Thereare%dwordsintheline.\n\num);

return0;

)

(4)輸出以下圖案:

#####

#####

#####

#####

#####

#include<stdio.h>

voidmain(i

{chara[]=,#,;

charspace='';

inti,j;

for(i=0;i<5;i++)

{for(j=0;j<=i;j++)

printf(〃%c〃,space);

for(j=0;j<5;j++)

putchar(a);

printf("\n〃);

)

)

實驗4:數(shù)組與字符串

1.實驗?zāi)康?/p>

掌握有關(guān)數(shù)組和字符串的程序設(shè)計方法。

2.實驗內(nèi)容

(1)請編制成程序?qū)崿F(xiàn):將100~200之間的素數(shù)輸出。

#include<stdio.h>

intmain()

{intx=100;

inta=2;

mmm:x++;

while(x<=200)

{if(x%a二二0)

gotonunm;

if(a>=x/2)

{printf(/z%d〃,x);

a=2;

gotommm;

}

else++a;

)

return0;

}

(2).輸出以下的楊輝三角形(要求輸出10行),

1

11

121

1331

14641

15101051

SdefineN10

intmain()

{inti,j,a[N][N];

for(i=l;i<N;i++)

(

a[i][i]=l;

a[i][l]=l;

)

for(i=3;i<N;i++)

for(j=2;j<=i-l;j++)

a[i][j-l]+a[i-l][j];

for(i=l;i<N;i++)

(

for(j=l;j<=i;j++)

printf(〃%6d〃,a[i][j]);

printfCW);

)

printf(〃\n〃);

)

(3)用冒泡法對10個整數(shù)排序。

Sinclude<stdio.h>

intmain()

inta[10];

inti;

intj;

intt;

printf("input10numbers:\n〃);

for(i=0;i<10;i++)

(

scanf&a[i]);

)

printfC\n9;

//排序

for(j=0;j<9;j++)

{

for(i=0;i<9-j;i++)

(

if(a[i]>a[i+l])

(

t=a[i];

a[i]=a[i+l];

a[i+l]=t;

)

}

)

//打印

printf(,zthesortednumbers:\n〃);

for(i=0;i<10;i++)

(

printf('%d",

)

printf(〃\n〃);

return0;

)

(4)將一個數(shù)組中的直按逆序重新存放,例如,原來順序為8,6,5,4,10

要求改為L4,5,6,8o

#include<stdio.h>

voidmain()

(

inti;

inttemp;

intj,m,n=0;

intx[20];

printf(〃輸入需排序的個數(shù)%d\n〃,n);

scanf("%d〃,&n);

printf(,zTheoriginalarray:\n〃);

for(i=0;i<n;i++)

(

scanf;"%d,",&x[i]);

)

printf(〃\n〃);

m=(n-l)/2;

for(i=0;i<=m;i++)

(

j=n-l-i;

temp=x[i];

x[i]=x[j];

x[j]=temp;

)

printf(^Thearrayhasbeeninverted:\n,/);

for(i=0;i<n;i++)

(

printf(〃%d,”,x[i]);

)

printf(〃\n");

)

(5)編寫一個函數(shù),由實參傳來一個字符串,統(tǒng)計此字符串中字母、數(shù)字、

空格和其他符的個數(shù),在主函數(shù)中輸入字符串以及輸出上述的結(jié)果。

ttinclude〃stdio.h〃

intn=0,m=0,k=0,o=0;〃外部變量

voidtest(charstr[]);

main()

(

chara[80];

printf(,zinputstring:");

gets(a);

test(a);

printf("\n字母數(shù)二%d數(shù)字數(shù)二%d空格數(shù)二機1其他字符數(shù)與d\n〃,n,m,k,o):

return0;

}

voidtest(str)

charstr[];

{inti;

for(i=0;str[i]!='\0';i++)

{if(str[i]>='a'='z'||str[i]>='A'='Z')

n++;〃。為字母數(shù)

elseif(str[i]>=,0J&&str[i]<=,9?)

m++;〃m為數(shù)字

elseif(str[i]==,')

k++;〃k為空格

elseo++;〃統(tǒng)計總字符數(shù)

}

實驗5:函數(shù)

1.實驗?zāi)康?/p>

掌握函數(shù)的應(yīng)用和編寫帶函數(shù)的程序設(shè)計的方法。

2.實驗內(nèi)容

(1)用遞歸方式計算a!+b!+c!,并要求有輸出結(jié)果。

#include<stdio.h>

intfact(int);

intmain()

(

inta,b,c;

printf(,zEnterthreenumbers:");

scanf(〃%d%d%d〃,&a,&b,&c);

printf(/z%d!+%d!+%d!=%d+%d+%d\n〃,a,b,c,fact(a),fact(b),fact(c));

return0;

}

fact(intn)

(

intresult;

if(n==l)

return(1);

result=fact(nT)*n;/*遞歸調(diào)用*/

return(result);

)

(2)輸入10個學(xué)生5門課的成績,分別用函數(shù)實現(xiàn)下列功能:

①計算每個學(xué)生的平均分;

②計算每門課的平均分;

③找出所有50個分數(shù)中最高的分數(shù)所對應(yīng)的學(xué)生和課程;

ttinclude<stdio.h>

voidaverage(floatarray[10][5]);

voidscoreclass(floatarray[10][5]);

voidmaxaverage(floatarray[10][5]);

intmain()

{

floatscore[10][5];

inti,j;

printf(〃輸入10個學(xué)生的5門成績:\n〃);

for(i=0;i<10;i++)

{for(j=0;j<5;j++)

scanf&score[i][j]);

)

printfC\n輸出10個學(xué)生的平均成績\n〃);

average(score);

printfC\n輸出各門課程的平均成績\n〃);

scoreclass(score);

printff\n找出最好成績的學(xué)生及課程\n〃);

maxaverage(score);

return0;

)

voidaverage(floatarray[10][5])〃計算每個學(xué)生的平均分

(

intn,m:

floataver;

floatsum=0;

for(n=0;n<10;n++)

{for(nF0;m<5;m++)

sum=sum+array[n][m];

aver=sum/5;

printf(",%dstudentaveragescoreis%5.2f\n〃,

n+1,aver);

sum=0:

)

)

voidscore_class(floatarray[10][5])〃計算每門課的平均分

(

intn,m;

floataver;

floatsum=0;

for(n=0;n<5;n++)

{fur(UF0;UI<10;UI++)

sum=sum+array[m][n];

aver=sum/10;

printf(〃第%d門課程的平均分%5.2f\n〃,n+1,aver);

sum=O:

)

)

voidmaxaverage(floatarray[10][5])

//50個分數(shù)中最高的分數(shù)所對應(yīng)的學(xué)生和課程;

{

floatMax=0;

inti,j,n,m;

for(i=0;i<10;i++)

(

for(j=0;j<5;j++)

if(array[i][j]>Max)

(

Max=array[i][j];

n=i;

m=j;

)

)

printf("max=%6.2f,學(xué)生號:%d,課程號:%d\n〃,Max,n+1,m+1);

)

實驗6:指針

1.實驗?zāi)康?/p>

掌握指針的程序設(shè)計的方法。

2.實驗內(nèi)容

(1)寫一個函數(shù),將一個3X3的矩陣轉(zhuǎn)置。

intmain()

{inta[3][3],*p,i;

printf(〃按行輸入3X3的矩陣:\n〃);

for(i=0;i<3;i++)

scanfC%d%d%d\&a[i][0],&a[i][1],&a[i][2]);

p=&a[0][0];

move(p);

printf(〃轉(zhuǎn)置后的矩陣為:\n");

for(i=0;i<3;i++)

printf(/z%d%d%d\n〃,a[i][0],a[i]⑴,a[i]⑵);

}

move(pointer)

int*pointer;

{inti,j,t;

for(i=0;i<3;i++)

for(j=i;j<3;j++)

{t=*(pointer+3*i+j);

*(pointer+3*i+j)=*(pointer+3*j+i);

*(pointer+3*j+i)=t;

)

)

(2)在main函數(shù)中輸入字符串,并輸出字符串的長度。

#include<stdio.h>

intlen(char*);

voidmain()

(charstr[80];

printf(,zPleaseinputastring:");

scanf(〃%s〃,str);

printf("Thelengthofthestringis%d.\n",len(str));

)

intlen(char*p)

{intn=0;

while(*p!=,\0*)

{n++;

p++;

)

return(n);

)

(3)編制程序:要求能從鍵盤上輸入任意五個字符串,用指向指針的指針的方

法或指針數(shù)組的方法對5個字符串排序并輸出排序后的結(jié)果。

intmain()

(inti;

char**p,*pstr[5],str[5][20];

for(i=0;i<5;i++)

pstr[i]=str[i];

printf(''input5stringsvalue:\n,z);

for(i=0;i<5;I++)

scanf("%s〃,pstr[i]);

p=pstr;

sort(p);

printf(''outputstringsaftersort:\nz/);

for(i=0;i<5;i++)

printfpstr[i]);

)

sort(p)

char**p;

{inti,j;

char*pchange;

for(i=0;i<5;i++)

(

for(j=i+l;j<5;j++)

{if(strcmp(*(p+i),*(p+j))>0)

{pchange=*(p+i);

*;p+i)=*(p+j);

*;p+j)=pchange;

}

實驗7:用戶定義數(shù)據(jù)類型

1.實驗?zāi)康?/p>

掌握結(jié)構(gòu)數(shù)據(jù)類型的應(yīng)用及程序設(shè)計。

2.實驗內(nèi)容

(1)編寫一個函數(shù)print,打印一個學(xué)生的成績數(shù)組,該數(shù)組中有5個學(xué)生的

數(shù)據(jù)記錄,每個記錄包括num,name,scoreF3J,主函數(shù)已有這些記錄,

用print函數(shù)輸出這些記錄。

#include<stdio.h>

structstudent

{intnum;

charname[20];

floatscore[3];

}stu[5]={{10100,Z/LiLi",67.5,89,78.6},{10101/zLiLin〃,76,87,98),\

{10102,"ZhangFun〃,88.5,76.5,97),\

{10104,z,WangMin",88,77,87},\

{10105,"YangBin",81,79,87}};

voidprint(structstudent*p)〃輸出函數(shù)

,/,,

{printf(%d\n%s\n%f\n%f\n%f\n,p->num,p->name,p->score[0],\

p->score[l],p->score[2]);

printf(〃\n〃):

)

voidmain()

print(stu);

(4)編寫對鏈表的處理程序?實現(xiàn)鏈表的建立、輸出、刪除和插入的功能,在

主函數(shù)中指定需要刪除和插入的結(jié)點的數(shù)據(jù)。編寫一個主函數(shù),先后調(diào)

用這些函數(shù)。

廿include<stdio.h>

ttinclude<malloc.h>

structstudent

{intnum;

intscore;

structstudent*next;

};

intn=0;

structstudent*creat()

(

structstudent*head=NULL;

structstudent*pl=NULL;

structstudent*p2=NULL;

intLEN;

LEN=sizeof(structstudent);

pl=(structstudent*)malloc(LEN);

scanf(z,%d%dz,,&pl->num,&pl->score);

head=pl;

while(pl->num!=0)

{if(p2!=NULL)

{p2->next=pl;}

p2=pl;

pl=(structstudent*)malloc(LEN);

scanf(,z%d%(]*,&pl->num,&pl->score);

)

if(pl->num==0)

{free(pl);)

p2->next=NULL;

return(head);

}

structstudent*insert(structstudent*head,structstudent*stud)

(structstudent*p0;

structstudent*pl;

structstudent*p2;

pl=head;

p0=stud;

if(head==NULL)

(

head=pO;

pO->next=NULL;

)

else

(

//插入定位(用pl定位)

while((pO->num>pl->num)&&(pl->next!=NULL))

(

p2=pl;

pl=pl->next;

)

if(pO->num<=pl->num)//插入位置不是表尾,插入到pl之前

(

if(head=pl)//插入位置是表頭

(

head=pO;

)

else//插入位置不是表頭

{

p2->next=pO;

)

pO->ncxt=pl;

}

else//插入到表尾

(

pl->next=pO;

pO->next=NULL;

}

)

n=n+l;

returnhead;

)

structstudent*del^structstudent*head,intnum)

{structstudent*pl;

structstudent*p2;

if(head==NULL)

{printf(〃\nlistnull!\nz,);

returnhead;

)

//查找

pl=head;

while(num!=pl->num&&pl->next!=NULL)

P2=pl;

pl=pl->next;

)

//刪除

if(num==pl->num)//查找待被刪除的元素

(

if(pl==head)//刪除的是表頭元素

{

head=pl->next;

)

else//刪除的是非表頭元素

(

p2->next=pl->next;

)

printf("delete:%ld\n”,num);

n=n-l;

}

else//未找到待被刪除的元素

(

printf(,z%ldnotbeenfound!\n〃,num):

}

returnhead;

)

voidprint(structstudent*head)

(

structst

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論