C語(yǔ)言實(shí)驗(yàn)指導(dǎo)書(shū) (一)_第1頁(yè)
C語(yǔ)言實(shí)驗(yàn)指導(dǎo)書(shū) (一)_第2頁(yè)
C語(yǔ)言實(shí)驗(yàn)指導(dǎo)書(shū) (一)_第3頁(yè)
C語(yǔ)言實(shí)驗(yàn)指導(dǎo)書(shū) (一)_第4頁(yè)
C語(yǔ)言實(shí)驗(yàn)指導(dǎo)書(shū) (一)_第5頁(yè)
已閱讀5頁(yè),還剩20頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論