




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
實(shí)驗(yàn)指導(dǎo)書(shū)
一、實(shí)驗(yàn)環(huán)境簡(jiǎn)介
(一)、C程序的開(kāi)發(fā)過(guò)程
開(kāi)發(fā)一個(gè)C語(yǔ)言程序,要經(jīng)過(guò)以下4個(gè)階段:
(1)編輯源程序文件;
(2)編譯源程序;
(3)程序連接;
(4)運(yùn)行程序。
1、編輯C語(yǔ)言源程序
編寫(xiě)源程序就是程序設(shè)計(jì)人員用C程序設(shè)計(jì)語(yǔ)言描述解決某問(wèn)題的過(guò)程和
具體實(shí)現(xiàn)的方法。這樣寫(xiě)出的程序叫做C語(yǔ)言源程序。源程序以文件(File)的
形式存儲(chǔ)在計(jì)算機(jī)的的軟盤(pán)或硬盤(pán)中,通常它是一種文本文件,所謂文本文件就
是以ASCII碼存儲(chǔ)的文件,它可以用仟何文本編輯軟件編寫(xiě)。
文件要有文件名,文件以其文件名在磁盤(pán)中存儲(chǔ)和與其他文件相區(qū)別。文件
名由兩部分組成:文件名和擴(kuò)展名。其書(shū)寫(xiě)格式為:
文件名.擴(kuò)展名
按C語(yǔ)言編寫(xiě)的源程序,其文件擴(kuò)展名通常為c。例如,filel.c
2.編譯源程序
計(jì)算機(jī)系統(tǒng)只能認(rèn)識(shí)和執(zhí)行用機(jī)器語(yǔ)言編寫(xiě)的程序,不能理解用c語(yǔ)言或其
他非機(jī)器語(yǔ)言編寫(xiě)的程序。所以,源程序必須翻譯成機(jī)器語(yǔ)言程序。翻譯是通過(guò)
一個(gè)稱為編譯器(Compiler)或編譯系統(tǒng)的軟件實(shí)現(xiàn)的。編譯系統(tǒng)編譯源程序時(shí),
首先對(duì)源程序進(jìn)行語(yǔ)法檢查,如果發(fā)錯(cuò)誤,就會(huì)顯示錯(cuò)誤的位置和錯(cuò)誤的性質(zhì)并
終止編譯。這時(shí),用戶需要對(duì)源程序進(jìn)行再編輯,修改源程序文件中的錯(cuò)誤。然
后,重新進(jìn)行編譯。這個(gè)過(guò)程反復(fù)進(jìn)行,直到編譯器認(rèn)為沒(méi)有語(yǔ)法錯(cuò)誤為止。源
程序通過(guò)編譯后,產(chǎn)生一個(gè)目標(biāo)文件。目標(biāo)文件的文件名就是源程序文件的文件
名,但擴(kuò)展名為。bj,例如源文件filel.c,經(jīng)編譯后產(chǎn)生目標(biāo)文件:filel.objo
目標(biāo)文件由計(jì)算機(jī)的機(jī)器指令和其他一些二進(jìn)制信息組成,它仍不能由計(jì)算機(jī)直
接執(zhí)行,還要經(jīng)過(guò)一個(gè)所謂的連接過(guò)程。
3.連接程序
由編譯系統(tǒng)中稱為連接程序(Linker)的軟件,將目標(biāo)文件和編譯系統(tǒng)的系
統(tǒng)函數(shù)庫(kù)連接生成可執(zhí)行的機(jī)器語(yǔ)言程序,這一過(guò)程稱為連接。連接程序在連接
過(guò)程中也要對(duì)程序進(jìn)行語(yǔ)法檢查,如果發(fā)現(xiàn)錯(cuò)誤,則給出相應(yīng)的錯(cuò)誤信息并終止
連接。這時(shí),程序設(shè)計(jì)人員要再次對(duì)源程序文件作相應(yīng)修改,重新進(jìn)行編譯,重
新進(jìn)行連接,這個(gè)過(guò)程要一直進(jìn)行到連接成功為止。目標(biāo)文件經(jīng)成功連接后,最
終產(chǎn)生一個(gè)計(jì)算機(jī)直接可執(zhí)行的機(jī)器語(yǔ)言程序文件。可執(zhí)行程序文件以源程序文
件名存儲(chǔ),但擴(kuò)展名為exe。例如,目標(biāo)文件filel.obj經(jīng)連接后產(chǎn)生可執(zhí)行文
件:filel.exe。
4、運(yùn)行程序
運(yùn)行程序,即執(zhí)行程序。通過(guò)運(yùn)行程序,實(shí)現(xiàn)程序的功能。如果程序運(yùn)行不
正?;虿荒艿玫筋A(yù)期的結(jié)果,還需要從檢查源程序開(kāi)始,重復(fù)上述過(guò)程,直到程
序運(yùn)行正確為止。
運(yùn)行可執(zhí)行文件,既可以在不同的操作系統(tǒng)中執(zhí)行,常見(jiàn)的有DOS系統(tǒng)、
WINDOWS系統(tǒng)等狀態(tài)下執(zhí)行,也可以在C語(yǔ)言系統(tǒng)提供的集成開(kāi)發(fā)環(huán)境下進(jìn)行。
圖1說(shuō)明了C程序的開(kāi)發(fā)過(guò)程。
圖1C程序的開(kāi)發(fā)過(guò)程示意圖
(二)C語(yǔ)言的集成開(kāi)發(fā)環(huán)境
為完成上述的程序開(kāi)發(fā)過(guò)程,在不同的系統(tǒng)中可以采用不同的操作方式,在
windows環(huán)境,可以采用VC++,來(lái)實(shí)現(xiàn),但他對(duì)計(jì)算機(jī)的環(huán)境要求稍高一些,在
課程視頻中給予描述和實(shí)驗(yàn)。C語(yǔ)言系統(tǒng)還提供兩種獨(dú)立的操作方式(對(duì)環(huán)境要
求不高)。一種是傳統(tǒng)的命令行方式,就是在DOS狀態(tài)下,用戶直接通過(guò)鍵入命
令進(jìn)行工作;另一種是在集成開(kāi)發(fā)環(huán)境(IDE)方式下操作。本節(jié)簡(jiǎn)要介紹IDE
方式的使用。
IDE方式的優(yōu)點(diǎn),就在于它將源程序的編輯。編譯。連接。調(diào)試和運(yùn)行等多
種操作集成在一個(gè)平臺(tái)之上進(jìn)行,從而為用戶創(chuàng)造了一個(gè)非常方便的良好的工作
環(huán)境。本節(jié)以TurboC++的IDE為例,簡(jiǎn)要介紹在IDE方式下開(kāi)發(fā)C程序的方
法。更詳細(xì)的內(nèi)容可參考相關(guān)的手冊(cè)。
1.IDE的啟動(dòng)
在啟動(dòng)之前,首先要安裝TurboC++系統(tǒng)軟件。關(guān)于安裝方面的細(xì)節(jié),這
里就不介紹了。系統(tǒng)是在操作系統(tǒng)DOS環(huán)境下運(yùn)行的。在TurboC++系統(tǒng)裝
入之后,為了進(jìn)入IDE只需在DOS狀態(tài)下鍵入如下的命令行:
TC<回車(chē))
系統(tǒng)被啟動(dòng)后,屏幕顯示如圖2所示的集成開(kāi)發(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集成開(kāi)發(fā)環(huán)境示意圖
由圖2可以看到,集成開(kāi)發(fā)環(huán)境最上面的一行是主菜單。所有的操作命令都
可以從這個(gè)菜單中或它的子菜單中找到。所以,即使用戶記不住許多操作命令的
快捷鍵,也沒(méi)有關(guān)系,只需用鼠標(biāo)從菜單中選擇所要執(zhí)行的操作命令和輸入必要
的信息即可。
主菜單下面是程序的編輯區(qū)。用戶在這里輸入和編輯自己的c源程序。編輯
區(qū)的頂部顯示程序文件名,編輯區(qū)的底部顯示當(dāng)前編輯字符(光標(biāo)處)所在的行
號(hào)和列號(hào)。
編輯區(qū)的下方是狀態(tài)信息輸出區(qū)。在這里可以看到編譯和連接過(guò)程中的信
息,包括編譯系統(tǒng)給出的錯(cuò)誤信息。狀態(tài)信息區(qū)的下面是一行提示信息,稱為提
示行。提示行給出一些快捷鍵及其含義。
在后臺(tái)輸出區(qū)則顯示程序運(yùn)行時(shí)輸出的結(jié)果,用戶可以通過(guò)CTRL+F5進(jìn)后臺(tái)
輸出區(qū)查看運(yùn)行結(jié)果。
2.輸入和編輯源程序
源程序的輸入和編輯是在編輯區(qū)進(jìn)行的。這里可能有兩種情況:第一種情
況是第一次輸入程序,第二種情況是源程序文件已經(jīng)在磁盤(pán)中存在。在第一種情
況下,用戶需要在編輯窗口直接用鍵盤(pán)逐個(gè)字符地輸入源程序。操作過(guò)程:
(1)啟動(dòng)TC
(2)選擇主菜單中的File
(3)選擇子菜單中的New,就可以在編輯窗口直接用鍵盤(pán)逐個(gè)字符輸入源
程序。
(4)當(dāng)源程序完成之后,取新文件名存放,方法:選擇主菜單中的File
后,再選子菜單中的Saveas,然后輸入希望的文件名后,就按給定的文件名保
存了源文件信息。
在第二種情況下源程序文件已在磁盤(pán)中,,如果想要編輯的該文件,通過(guò)下
面的操作,將文件讀到編輯窗口:
(1)選擇主菜單中的File;
(2)選擇File下拉菜單中的Open;
(3)選中或輸入所需的文件名并單擊OK按鈕。
系統(tǒng)提供豐富的編輯命令,使用戶能夠輕松地編輯源程序。程序編輯完畢,
一般要立即存盤(pán),這個(gè)操作可以通過(guò)選擇主菜單的File及其下面的Save或Save
as來(lái)實(shí)現(xiàn)。
3.編譯源程序文件
編澤源程序的步驟是:
(1)將待編譯的源程序輸入編輯區(qū);
(2)選主菜單中的Compile;
(3)選Compile下拉菜單中的CompiletoOBJ。
如果源程序文件中沒(méi)有語(yǔ)法錯(cuò)誤的話,編譯的結(jié)果是在磁盤(pán)中產(chǎn)生一個(gè)擴(kuò)
展名為,.obj的中間代碼文件(目標(biāo)程序)。否則進(jìn)入編輯狀態(tài),修改程序,即
進(jìn)入第2步,直到正確為止。
4.程序連接
產(chǎn)生了.obj文件后,就可以進(jìn)行程序的連接了。連接的操作方法是:使用主
菜單Compile下面的MakeEXEFile,命令。如果沒(méi)有錯(cuò)誤的話,將產(chǎn)生一個(gè)擴(kuò)
展名為?exe的可執(zhí)行文件。
5.運(yùn)行可執(zhí)行文件
運(yùn)行程序的命令是主菜單中Run下面的子菜單中的Run命令。程序運(yùn)行中的
輸出,將顯示在屏幕的后臺(tái)輸出區(qū)。如果程序運(yùn)行的結(jié)果產(chǎn)生了不合邏輯的垢果,
這可能意味著程序有錯(cuò)誤。應(yīng)該檢查程序,找出錯(cuò)誤,再進(jìn)行相應(yīng)的編輯、編譯、
連接和運(yùn)行。
在C++的集成開(kāi)發(fā)環(huán)境下,上述的編譯、連接和運(yùn)行3個(gè)過(guò)程,也可以通過(guò)
一次操作完成。操作方法是:執(zhí)行主菜單中Run下面的子菜單中的Run命令,這
時(shí),3個(gè)過(guò)程依次完成。當(dāng)然,在3個(gè)過(guò)程中的任何階段,只要系統(tǒng)發(fā)現(xiàn)了程序
中的語(yǔ)法錯(cuò)誤,都會(huì)立即在狀態(tài)信息輸出區(qū)給出錯(cuò)誤信息,并停止進(jìn)一步的操作。
二、微型計(jì)算機(jī)系統(tǒng)配置
1.硬件
PC系列微型計(jì)算機(jī),包括XT、AT、286、386、486、奔騰及各種兼容機(jī),
要求內(nèi)存為640KB以上,一個(gè)硬盤(pán)驅(qū)動(dòng)器和一個(gè)軟盤(pán)驅(qū)動(dòng)器。彩色顯示器,并配
備鼠標(biāo)器。
2軟件
安裝操作系統(tǒng)(可以為WINDOWS、也可以為DOS操作系統(tǒng))。TurboC(或
TurboC++)軟件一套。
三、實(shí)驗(yàn)項(xiàng)目
實(shí)驗(yàn)Lc++的IDE基本操作與簡(jiǎn)單程序
1.實(shí)驗(yàn)?zāi)康?/p>
掌握在IDE環(huán)境下運(yùn)行C語(yǔ)言程序的操作方法。
2.實(shí)驗(yàn)內(nèi)容
按下面的步驟進(jìn)行實(shí)驗(yàn)。
(1)開(kāi)機(jī)后在DOS狀態(tài)下,啟動(dòng)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)分別把源程序以文件的形式寫(xiě)入磁盤(pán);
(5)分別運(yùn)行兩個(gè)程序,觀察程序的輸出結(jié)果;
實(shí)驗(yàn)2:分支程序設(shè)計(jì)
1.實(shí)驗(yàn)?zāi)康?/p>
掌握分支與循環(huán)程序設(shè)計(jì)的方法和有關(guān)語(yǔ)句。
2.實(shí)驗(yàn)內(nèi)容
(1)編寫(xiě)一個(gè)C程序,輸入a、b、c三個(gè)值,輸出其中最大值。
#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():求絕對(duì)值庫(kù)函數(shù)
printf(uxl=x2=%7.2f\n",-b/(2*a));〃兩個(gè)根相等
else
{if(disc>le-6)
(x1=(-b+sqrt(disc))/(2*a);〃兩個(gè)不相等的實(shí)根
x2=(-b-sqrt(disc))/(2*a);
printf("x1=%7.2f,x2=%7.2f\n,',xl,x2);
)
else
{p=-b/(2*a);〃求出兩個(gè)共鮑復(fù)根
q=sqrt(fabs(disc))/(2*a);
printf(Hx1=%7.2f+%7.2fi\n",p,q);//輸出兩個(gè)共輾復(fù)根
printf(Hx2=%7.2f-%7.2fi\n",p,q);
return0;
)
(3)編一程序,按下關(guān)系式,輸入一個(gè)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;
)
實(shí)驗(yàn)3:循環(huán)程序設(shè)計(jì)
1.實(shí)驗(yàn)?zāi)康?/p>
掌握循環(huán)程序設(shè)計(jì)方法。
2.實(shí)驗(yàn)內(nèi)容
(1)請(qǐng)編制成程序?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ù)”是指一個(gè)3位數(shù),其各位數(shù)
字立方和等于該數(shù)本身。例如,153是一水仙花數(shù),因?yàn)?53=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)計(jì)一行字符中的單詞個(gè)數(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〃);
)
)
實(shí)驗(yàn)4:數(shù)組與字符串
1.實(shí)驗(yàn)?zāi)康?/p>
掌握有關(guān)數(shù)組和字符串的程序設(shè)計(jì)方法。
2.實(shí)驗(yàn)內(nèi)容
(1)請(qǐng)編制成程序?qū)崿F(xiàn):將100~200之間的素?cái)?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)用冒泡法對(duì)10個(gè)整數(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)將一個(gè)數(shù)組中的直按逆序重新存放,例如,原來(lái)順序?yàn)?,6,5,4,10
要求改為L(zhǎng)4,5,6,8o
#include<stdio.h>
voidmain()
(
inti;
inttemp;
intj,m,n=0;
intx[20];
printf(〃輸入需排序的個(gè)數(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)編寫(xiě)一個(gè)函數(shù),由實(shí)參傳來(lái)一個(gè)字符串,統(tǒng)計(jì)此字符串中字母、數(shù)字、
空格和其他符的個(gè)數(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ù)字?jǐn)?shù)二%d空格數(shù)二機(jī)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)計(jì)總字符數(shù)
}
實(shí)驗(yàn)5:函數(shù)
1.實(shí)驗(yàn)?zāi)康?/p>
掌握函數(shù)的應(yīng)用和編寫(xiě)帶函數(shù)的程序設(shè)計(jì)的方法。
2.實(shí)驗(yàn)內(nèi)容
(1)用遞歸方式計(jì)算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個(gè)學(xué)生5門(mén)課的成績(jī),分別用函數(shù)實(shí)現(xiàn)下列功能:
①計(jì)算每個(gè)學(xué)生的平均分;
②計(jì)算每門(mén)課的平均分;
③找出所有50個(gè)分?jǐn)?shù)中最高的分?jǐn)?shù)所對(duì)應(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個(gè)學(xué)生的5門(mén)成績(jī):\n〃);
for(i=0;i<10;i++)
{for(j=0;j<5;j++)
scanf&score[i][j]);
)
printfC\n輸出10個(gè)學(xué)生的平均成績(jī)\n〃);
average(score);
printfC\n輸出各門(mén)課程的平均成績(jī)\n〃);
scoreclass(score);
printff\n找出最好成績(jī)的學(xué)生及課程\n〃);
maxaverage(score);
return0;
)
voidaverage(floatarray[10][5])〃計(jì)算每個(gè)學(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])〃計(jì)算每門(mén)課的平均分
(
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門(mén)課程的平均分%5.2f\n〃,n+1,aver);
sum=O:
)
)
voidmaxaverage(floatarray[10][5])
//50個(gè)分?jǐn)?shù)中最高的分?jǐn)?shù)所對(duì)應(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é)生號(hào):%d,課程號(hào):%d\n〃,Max,n+1,m+1);
)
實(shí)驗(yàn)6:指針
1.實(shí)驗(yàn)?zāi)康?/p>
掌握指針的程序設(shè)計(jì)的方法。
2.實(shí)驗(yàn)內(nèi)容
(1)寫(xiě)一個(gè)函數(shù),將一個(gè)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ù)中輸入字符串,并輸出字符串的長(zhǎng)度。
#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)編制程序:要求能從鍵盤(pán)上輸入任意五個(gè)字符串,用指向指針的指針的方
法或指針數(shù)組的方法對(duì)5個(gè)字符串排序并輸出排序后的結(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;
}
實(shí)驗(yàn)7:用戶定義數(shù)據(jù)類型
1.實(shí)驗(yàn)?zāi)康?/p>
掌握結(jié)構(gòu)數(shù)據(jù)類型的應(yīng)用及程序設(shè)計(jì)。
2.實(shí)驗(yàn)內(nèi)容
(1)編寫(xiě)一個(gè)函數(shù)print,打印一個(gè)學(xué)生的成績(jī)數(shù)組,該數(shù)組中有5個(gè)學(xué)生的
數(shù)據(jù)記錄,每個(gè)記錄包括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ě)對(duì)鏈表的處理程序?實(shí)現(xiàn)鏈表的建立、輸出、刪除和插入的功能,在
主函數(shù)中指定需要?jiǎng)h除和插入的結(jié)點(diǎn)的數(shù)據(jù)。編寫(xiě)一個(gè)主函數(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. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 品牌口碑提升計(jì)劃
- 創(chuàng)新思維與解決方案探討計(jì)劃
- 《四川省木里縣灰?guī)r山金礦普查實(shí)施方案》評(píng)審意見(jiàn)書(shū)
- 2025年美術(shù)元宵燈會(huì)標(biāo)準(zhǔn)教案
- 三年級(jí)數(shù)學(xué)下冊(cè)7小數(shù)的初步認(rèn)識(shí)教學(xué)反思二新人教版
- 健康保險(xiǎn)類知識(shí)培訓(xùn)課件
- 2025年山西道路貨運(yùn)從業(yè)資格證考試
- 2025年甘肅貨運(yùn)從業(yè)資格證模擬考試試題答案
- 人教版八年級(jí)歷史與社會(huì)下冊(cè)教學(xué)設(shè)計(jì):5.1.3《農(nóng)耕文明的繁盛》
- 2025年巢湖道路運(yùn)輸從業(yè)資格證
- GB/T 29334-2012用于非石油基液壓制動(dòng)液的汽車(chē)液壓制動(dòng)缸用的彈性體皮碗和密封圈
- GB/T 14706-1993校對(duì)符號(hào)及其用法
- 高二數(shù)學(xué)平面向量的基本定理
- 高中美術(shù)-美術(shù)鑒賞《審美自律》
- 強(qiáng)讀和弱讀-(課堂)課件
- 裕興新概念英語(yǔ)第二冊(cè)筆記第42課
- 管理高爾夫?qū)崙?zhàn)訓(xùn)練課程課件
- 輸電線路工程導(dǎo)線壓接技術(shù)培訓(xùn)
- 《變電站二次回路》By:國(guó)網(wǎng)技術(shù)學(xué)院-2018年版
- 2022年義務(wù)教育語(yǔ)文課程標(biāo)準(zhǔn)(2022版)解讀【新課標(biāo)背景下的初中名著閱讀教學(xué)質(zhì)量提升思考】
- 班級(jí)管理(第3版)教學(xué)課件匯總?cè)纂娮咏贪?完整版)
評(píng)論
0/150
提交評(píng)論