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

下載本文檔

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

文檔簡(jiǎn)介

1、C語言程序設(shè)計(jì)實(shí)驗(yàn)指導(dǎo)書C語言程序設(shè)計(jì)實(shí)驗(yàn)指導(dǎo)書沈曦 呂元長(zhǎng)桂林電子科技大學(xué)信息科技學(xué)院2010-3-18前言 上機(jī)實(shí)驗(yàn)的目的和要求一 上機(jī)實(shí)驗(yàn)的目的上機(jī)實(shí)驗(yàn)的目的,絕不僅僅是為了驗(yàn)證教材和講課的內(nèi)容,或者驗(yàn)證自己所編程序正確與否。學(xué)習(xí)程序語言,上機(jī)實(shí)驗(yàn)的目的如下:1 加深對(duì)講授內(nèi)容的理解,尤其是一些語法規(guī)定,光靠課堂講授,既枯燥無味又難以記住,通過多次上機(jī),就能自然、熟練地掌握語法規(guī)定。2 了解和熟悉C語言程序開發(fā)環(huán)境。熟悉一兩種環(huán)境(計(jì)算機(jī)系統(tǒng)的軟件和硬件條件),再遇到其他的系統(tǒng)時(shí)便會(huì)觸類旁通,很快學(xué)會(huì)。3 學(xué)會(huì)上機(jī)調(diào)試程序,也就是善于發(fā)現(xiàn)程序中的錯(cuò)誤,并且能很快地排除這些錯(cuò)誤,使程序能夠

2、正確地運(yùn)行。要真正掌握計(jì)算機(jī)應(yīng)用技術(shù),就不僅應(yīng)當(dāng)了解和熟悉有關(guān)理論和方法,而且要求自己動(dòng)手實(shí)踐能力強(qiáng)。4 在做實(shí)驗(yàn)時(shí)千萬不要在程序通過后就認(rèn)為萬事大吉,完成任務(wù)了,應(yīng)當(dāng)在通過的程序上做一些調(diào)試和修改,看看會(huì)得到什么結(jié)果。多動(dòng)腦筋思考,將會(huì)對(duì)你有很大幫助。二 上機(jī)實(shí)驗(yàn)前的準(zhǔn)備工作1 了解所用的計(jì)算機(jī)系統(tǒng)的性能和使用方法;2 復(fù)習(xí)和掌握與本實(shí)驗(yàn)有關(guān)的教學(xué)內(nèi)容;3 準(zhǔn)備好上機(jī)所用的程序,切忌自己不思考、不編制程序或抄襲別人的程序;4 準(zhǔn)備好調(diào)試和運(yùn)行時(shí)所需的數(shù)據(jù)。三 上機(jī)實(shí)驗(yàn)的步驟1 調(diào)出C語言編譯系統(tǒng),進(jìn)入C語言工作環(huán)境;2 輸入自己編制好的程序;3 檢查輸入是否有錯(cuò),及時(shí)更正;4 進(jìn)行編譯和連接

3、;5 運(yùn)行程序,分析結(jié)果。四、實(shí)驗(yàn)結(jié)束,整理實(shí)驗(yàn)報(bào)告實(shí)驗(yàn)報(bào)告應(yīng)包括以下內(nèi)容:1 上機(jī)題目;2 程序清單;3 運(yùn)行結(jié)果;4 對(duì)結(jié)果的分析和本次獲得的經(jīng)驗(yàn)和體會(huì)。實(shí)驗(yàn)一 C語言程序初步數(shù)據(jù)類型、運(yùn)算符和表達(dá)式一 實(shí)驗(yàn)?zāi)康? 熟悉C語言運(yùn)行環(huán)境Microsoft Visual C+ 6.0中文版。2 掌握語言程序的書寫格式和語言程序的結(jié)構(gòu),初步了解C源程序的特點(diǎn)。3 掌握C語言上機(jī)步驟,了解如何編輯、編譯、調(diào)試和運(yùn)行一個(gè)C程序的方法。4 掌握C語言數(shù)據(jù)類型,熟悉如何定義一個(gè)整型、字符型和實(shí)型的變量,以及對(duì)他們賦值的方法。5 掌握不同的類型數(shù)據(jù)之間賦值的規(guī)律。二 實(shí)驗(yàn)內(nèi)容1 C語言上機(jī)步驟 開機(jī),啟動(dòng)

4、Microsoft Visual C+ 6。 建立工程文件:在“文件”菜單中選擇“新建”命令項(xiàng),在彈出的“新建”對(duì)話框的“工程”選項(xiàng)卡中選擇“Win32 Console Application”選項(xiàng),在“工程”框中輸入工程文件名sy1,在“c:位置”下拉框中輸入或選擇文件夾,單擊“確定”;在以下彈出的兩個(gè)對(duì)話框中分別單擊命令按鈕“完成”和“確定”。 建立C+源文件:在“工程”菜單中選擇“添加到工程”“新建”命令項(xiàng),在彈出的“新建”對(duì)話框的“文件”選項(xiàng)卡中選擇“C+ Source File”,在右邊的“文件”框中輸入文件名sy11后單擊“確定”。 輸入源程序:在彈出的文件編輯窗口中輸入下面的源程

5、序:#include <stdio.h>void main() printf("Hello,World!n"); ( printf("Welcome to the C language world!n"); printf("Everyone has been waiting for.n"); 編譯:用“編譯”菜單的“編譯”命令項(xiàng)對(duì)源文件sy11.cpp進(jìn)行編譯,如果程序有語法或語義錯(cuò)誤,在屏幕下面的窗口會(huì)出現(xiàn)錯(cuò)誤信息;這時(shí)候要修改源程序、保存后重新編譯。直到修改了全部錯(cuò)誤,屏幕下面的窗口會(huì)出現(xiàn)下面的信息:表示已通過編譯,生

6、成了目標(biāo)程序sy11.obj。 調(diào)試:接下來進(jìn)行調(diào)試,操作如下圖所示。完成調(diào)試后,生成可執(zhí)行程序文件sy1.exe。 運(yùn)行:最后用“編譯”菜單的“!執(zhí)行sy1.exe”命令項(xiàng)運(yùn)行可執(zhí)行程序文件sy.exe。運(yùn)行結(jié)果如下:2 用同樣的方法,完成下面程序的運(yùn)行1 輸入并運(yùn)行下面的程序,運(yùn)行后記錄并分析結(jié)果。#include <stdio.h>main() char c1,c2; /* 第2行 */ c1=97;c2=98; /* 第3行 */ printf ("%c %cn",c1,c2);在此基礎(chǔ)上: 在程序最后增加一個(gè)語句,再運(yùn)行,并分析結(jié)果。printf (&

7、quot;%d %dn", c1, c2);a c 97 98 將第2行改為:int c1,c2;再次運(yùn)行,并分析結(jié)果。a c 97 98 再將第3行改為:c1=305;c2=340; 1 c305 340再使之運(yùn)行,分析運(yùn)行結(jié)果。2 輸入并運(yùn)行下面的程序#include <stdio.h>main() char c1='a',c2='b',c3='c',c4='101',c5='116' printf("a%c b%ctc%ctabcn",c1, c2, c3); pri

8、ntf("ttb%c%cn", c4, c5);在上機(jī)前先用人工分析程序,寫出應(yīng)得結(jié)果,上機(jī)后將二者對(duì)照。三 分析與討論1 下在調(diào)試過程中所發(fā)現(xiàn)的錯(cuò)誤、系統(tǒng)給出的出錯(cuò)信息和對(duì)策。分析討論成功或失敗的原因。2 總結(jié)程序的結(jié)構(gòu)和書寫規(guī)則。四 思考題1 請(qǐng)寫出C語言程序的構(gòu)成和運(yùn)行C語言程序的一般步驟。2 編寫一個(gè)C語言程序,輸入a、b、c三個(gè)數(shù),輸出其中最大者。試想,如果求四個(gè)數(shù)中的最大者,則程序該如何編寫。五 注意事項(xiàng)1 當(dāng)程序在編譯時(shí)發(fā)現(xiàn)很多錯(cuò)誤,此時(shí)應(yīng)從上到下逐一改正,或改一個(gè)錯(cuò)誤,就重新再編譯,因?yàn)橛袝r(shí)一個(gè)錯(cuò)誤會(huì)引起很多錯(cuò)誤信息。2 當(dāng)需要用比較復(fù)雜的邏輯表達(dá)式時(shí),要避

9、免發(fā)生優(yōu)先級(jí)上的錯(cuò)誤,可以使用最高優(yōu)先級(jí)的運(yùn)算符()將其括起來,這樣既增加可讀性,又不會(huì)出現(xiàn)不必要的錯(cuò)誤。實(shí)驗(yàn)二 順序結(jié)構(gòu)與輸入/輸出方法一 實(shí)驗(yàn)?zāi)康? 學(xué)會(huì)使用C的有關(guān)算術(shù)運(yùn)算符,以及包含這些運(yùn)算符的表達(dá)式,特別是自加(+)和自減(-)運(yùn)算符的使用。2 掌握C語言中賦值語句的使用。3 掌握C語言中各種數(shù)據(jù)的輸入/輸出方法,能正確使用各種格式轉(zhuǎn)換符。4 理解C語言程序的順序結(jié)構(gòu)。二 實(shí)驗(yàn)內(nèi)容上機(jī)調(diào)通以下程序。1 輸入下面的程序#include <stdio.h>main() int i,j,m,n; i=8;j=10; m=+i; /* 第5行 */ n=j+; /* 第6行 */

10、 printf("%d,%d,%d,%dn",i,j,m,n);運(yùn)行程序,注意i、j、m、n各變量的值;然后分別作以下改動(dòng)并運(yùn)行: 將第5、6行改為如下以后再運(yùn)行:m=i+;n=+j; 將程序改為:#include <stdio.h>main() int i,j; i=8;j=10; printf("%d,%dn",i+,j+); /* 第5行 */ 在的基礎(chǔ)上,將第5行printf語句改為:printf("%d,%dn",+i,+j); 再將printf語句改為:printf("%d,%d,%d,%dn&quo

11、t;,i,j,i+,j+); 將程序改為:#include <stdio.h>main() int i,j,m=0,n=0; i=8;j=10; m+=i+;n-=- -j; printf("i=%d,j=%d,m=%d,n=%dn",i,j,m,n);2 運(yùn)行以下程序,并分析其輸出結(jié)果#include <stdio.h>main() short i; i=-2; printf("n i:dec=%d,oct=%o,hex=%x,unsigned=%un",i,i,i,i);【注意】在VC+ 6.0中,short和int類型的數(shù)據(jù)

12、在內(nèi)存中占用4個(gè)字節(jié)。3 按格式要求輸入、輸出數(shù)據(jù)。#include <stdio.h>main() int a,b; float x,y; char c1,c2; scanf("a=%d,b=%d",&a,&b); scanf("%f,%e",&x,&y); scanf("%c%c%c",&c1,&c1,&c2); /* 第8行 */ printf("a=%d,b=%d,x=%f,y=%f,c1=%c,c2=%cn",a,b,x,y,c1,c2)

13、;運(yùn)行該程序,按如下方式在鍵盤上輸入數(shù)據(jù):a=3,b=785,71.82aA請(qǐng)同學(xué)們寫出輸出的結(jié)果?!舅伎肌砍绦虻?行中,為什么變量c1要輸入兩次?4 運(yùn)行以下程序,并分析其輸出結(jié)果#include <stdio.h>main() float f; f=3.1415; printf("n %f,%4.3f,%5.3f,%-10.3f,%10.3fn",f,f,f,f,f);4 運(yùn)行以下程序,并分析其輸出結(jié)果#include <stdio.h>main() int a,b; float c,d; char c1,c2; a=61;b=62;c=31.5

14、;d=-68.87;c1='a'c2='A' printf("n"); printf("a=%d,b=%dn",a,b); printf("c=%f,d=%fn",c,d); printf("c=%e,d=%en",c,d); printf("c1=%c,%cn",c1,c2);【注意】在VC+ 6.0中,實(shí)數(shù)的指數(shù)形式是:±X.XXXXXXe±XXX5 以下程序的功能是從鍵盤輸入一個(gè)整型數(shù),一個(gè)實(shí)型數(shù)和一個(gè)字符型數(shù),并把他們?cè)谄聊簧陷敵?。完?/p>

15、以下填空,并把程序調(diào)通,寫出當(dāng)輸入為45,34.5,A<回車>時(shí)程序的運(yùn)行結(jié)果。#include <stdio.h>main() int a; float b; char c; scanf("%d,%f,%c", ); printf("a= n",a); printf("b= n",b); printf("c= n",c);6 指出以下程序的錯(cuò)誤并改正,并上機(jī)把程序調(diào)通。#include <stdio.h>main() int a; scanf("%f",a)

16、; printf("a=%f, a); char c; c=A; printf("%f,c)三 思考題1 編寫程序,用getchar函數(shù)讀入兩個(gè)字符c1,c2,然后分別用putchar函數(shù)和printf函數(shù)輸出這兩個(gè)字符。并思考以下問題: 變量c1,c2應(yīng)定義為字符型或整型?還是二者皆可? 要求輸出c1和c2的ASCII碼,應(yīng)如何處理?用putchar函數(shù)還是printf函數(shù)? 整型變量和字符型變量是否在任何情況下都可以互相代替?2 設(shè)圓半徑r=2,圓柱高h(yuǎn)=3,求圓周長(zhǎng),圓柱底面積,圓柱體積。用scanf輸入數(shù)據(jù),用printf輸出計(jì)算結(jié)果,輸出時(shí)要求有文字說明,取小數(shù)點(diǎn)

17、后兩位數(shù)字。實(shí)驗(yàn)三 邏輯運(yùn)算和選擇結(jié)構(gòu)程序設(shè)計(jì)一 實(shí)驗(yàn)?zāi)康? 掌握C語言表示邏輯量的方法(0代表“假”,1代表“真”);2 學(xué)會(huì)正確使用邏輯運(yùn)算符和邏輯表達(dá)式;3 熟練掌握if語句和switch語句。二 實(shí)驗(yàn)內(nèi)容 1 已知三個(gè)數(shù)a,b,c,找出最大值放在max中。#include <stdio.h>main() int a,b,c,max; printf("請(qǐng)輸入3個(gè)整數(shù)(中間用逗號(hào)分開):"); scanf("%d,%d,%d",&a,&b,&c); if(a>=b) max=a; else max=b; if

18、(c>max) max=c; printf("max=%dn",max);若輸入下列數(shù)據(jù),分析程序的執(zhí)行順序并寫出輸出結(jié)果。序號(hào)輸入的3個(gè)整數(shù)a、b、c輸出max11,2,321,3,232,1,342,3,153,1,263,2,12 輸入某學(xué)生的成績(jī),經(jīng)處理后給出學(xué)生的等級(jí),等級(jí)如下:90分以上(包括90):A 8090分(包括80):B7080分(包括70):C 6070分(包括60):D60分以下:E方法一:用嵌套的if語句#include "stdio.h"main() int score; char grade; printf(&quo

19、t;請(qǐng)輸入學(xué)生成績(jī):"); scanf("%d",&score); if(score>100|score<0) printf("n輸入成績(jī)錯(cuò)誤!n"); else if(score>=90) grade='A'else if(score>=80) grade='B' else if(score>=70) grade='C'else if(score>=60) grade='D' else grade='E'printf(&

20、quot;n成績(jī)等級(jí)是%cn",grade); 輸入測(cè)試數(shù)據(jù),調(diào)試程序。測(cè)試數(shù)據(jù)要覆蓋所有路徑,注意臨界值,例如此題中100分,60分,0分以及小于0和大于100的數(shù)據(jù)。如果稍不注意就會(huì)出現(xiàn)小的程序缺陷。方法二:用switch語句分析:switch語句是用于處理多分支的語句。注意,case后的表達(dá)式必須是一個(gè)常量表達(dá)式,所以在用switch語句之前,必須把0100之間的成績(jī)分別化成相關(guān)的常量。所有A(除100以外)、B、C、D類的成績(jī)的共同特點(diǎn)是十位數(shù)相同,此外都是E類。則由此可把score除十取整,化為相應(yīng)的常數(shù)。請(qǐng)同學(xué)們自己根據(jù)分析寫出完整的程序段,并編譯、運(yùn)行、查看結(jié)果。三 思

21、考題1 有一函數(shù):x (-5<x<0)y = x-1 (x=0)x+1 (0<x<10)要求輸入x的值,輸出y的值。分別用: 不用嵌套的if語句; 用嵌套的if語句; 用switch語句編寫程序。2 從鍵盤上輸入三個(gè)實(shí)數(shù),它們分別代表三條線段的長(zhǎng)度,請(qǐng)寫一個(gè)判斷這三條線段所組成的三角形屬于什么類型(不等邊,等腰,等邊或不構(gòu)成三角形)的C程序;如果能構(gòu)成三角形,求出三角形的面積(取小數(shù)2位)。用下面的數(shù)據(jù)運(yùn)行程序,記錄程序的輸出結(jié)果:abc類型三角形面積1.582.371.583.214.255.162.482.482.482.359.283.83【提示】已知三角形邊長(zhǎng)a

22、、b、c,計(jì)算三角形面積s的公式是:四 注意事項(xiàng):1 if-else語句書寫時(shí)應(yīng)采用分層縮進(jìn)的格式。2 switch語句的句法格式。實(shí)驗(yàn)四 循環(huán)結(jié)構(gòu)程序設(shè)計(jì)一 目的和要求1 掌握在設(shè)計(jì)條件型循環(huán)結(jié)構(gòu)時(shí),如何正確地設(shè)定循環(huán)條件,以及如何正確地控制計(jì)數(shù)型循環(huán)結(jié)構(gòu)的次數(shù)。2 熟悉用while語句,do-while語句和for語句實(shí)現(xiàn)循環(huán)的方法。3 掌握在程序設(shè)計(jì)中用循環(huán)的方法實(shí)現(xiàn)各種算法(如窮舉、選代、遞推等)。4 掌握選擇結(jié)構(gòu)與循環(huán)結(jié)構(gòu)的嵌套。二 實(shí)驗(yàn)內(nèi)容1 程序分析下面是一個(gè)計(jì)算e的近似值(使誤差小于給定的)的程序。#include <stdio.h>main() double e=

23、1.0,x=1.0,y,delta; int i=1; printf("請(qǐng)輸入給定的誤差:"); scanf("%lf",&delta); y=1/x; while(y>=delta) e=e+y;i+;x=x*i;y=1/x; printf("計(jì)算結(jié)果是:%12.10lfn",e); 閱讀上面的程序,寫出程序所依據(jù)的計(jì)算公式。 當(dāng)輸入的delta是什么值時(shí),能分別使程序按下面的要求運(yùn)行: 不進(jìn)入循環(huán); 只循環(huán)一次; 只循環(huán)兩次; 進(jìn)入死循環(huán)(程序?qū)⒂肋h(yuǎn)循環(huán)下去)。 為了能知道程序循環(huán)了多少次,應(yīng)該在程序中增加一條什么樣

24、的語句? 原程序中while語句中的y>=delta,分別換成y>delta,y=delta,y<delta,y<=detax觀察程序運(yùn)行將會(huì)有什么變化。 把程序中的while結(jié)構(gòu)改寫成do-while結(jié)構(gòu),再運(yùn)行程序,說明兩種結(jié)構(gòu)的區(qū)別。 將程序改成用for循環(huán)結(jié)構(gòu),計(jì)算前50項(xiàng),并運(yùn)行程序,寫出運(yùn)行結(jié)果。2 有一數(shù)列:2/1,3/2,5/3,8/5,求出這個(gè)數(shù)列的前10項(xiàng)之和。#include <stdio.h>main() int n,t; float a=2,b=1,s=0; for(n=1;n<=10;n+) s=s+a/b;t=a;a=a+

25、b;b=t; printf("%fn",s);要求:跟蹤執(zhí)行,觀察s、t、a、b的變化。方法:使用功能鍵F10單步跟蹤執(zhí)行程序,可以在監(jiān)視窗口設(shè)置要觀察的變量或表達(dá)式。停止調(diào)試運(yùn)行的程序單步運(yùn)行此處監(jiān)視窗口3 計(jì)算兩個(gè)數(shù)的最大公約數(shù)。算法: 輸入兩個(gè)整數(shù)m、n,并求m除以n的余數(shù)k。 當(dāng)k0,將除數(shù)n作為被除數(shù)m,余數(shù)k作為除數(shù)n,繼續(xù)求m除以n的余數(shù)k;反復(fù)做第步,直到余數(shù)為0結(jié)束循環(huán)。 結(jié)束循環(huán)后,除數(shù)n就是m與n的最大公約數(shù)。請(qǐng)同學(xué)們根據(jù)算法寫出完整的程序,并編譯、運(yùn)行、檢查結(jié)果的正確性。三 思考題編寫程序:輸入6名學(xué)生5門課程的成績(jī),分別統(tǒng)計(jì)出每個(gè)學(xué)生5門課程的平均

26、成績(jī)。四、注意事項(xiàng)1 while語句的句法格式及用法。2 for語句的正確使用方法。注意它的初始值、終止條件及步長(zhǎng)的確定。3 當(dāng)循環(huán)不能停止(出現(xiàn)死循環(huán)),應(yīng)該用Ctrl+break中斷程序的運(yùn)行。實(shí)驗(yàn)五 數(shù)組一 實(shí)驗(yàn)?zāi)康? 掌握一維數(shù)組和二維數(shù)組的定義、賦值和輸入輸出的方法;2 掌握字符數(shù)組和字符串函數(shù)的使用;3 掌握與數(shù)組有關(guān)的算法(特別是排序算法)二、實(shí)驗(yàn)內(nèi)容編程序并上機(jī)調(diào)試運(yùn)行。1 調(diào)試下列錯(cuò)誤程序,使之具有如下功能:輸入12個(gè)整數(shù),按每行3個(gè)數(shù)輸出這些整數(shù),最后輸出12個(gè)整數(shù)的平均值。寫出調(diào)試過程。#include <stdio.h>#define N 12main()

27、int i,aN,av; for(i=0;i<N;i+) scanf("%d",ai); for(i=0;i<N;i+) printf("%d",ai);if(i%3= =0) printf("n"); for(i=0;i!=N;i+) av+=ai; printf("av=%fN",av);上面給出的程序有錯(cuò)誤和缺陷,請(qǐng)找出程序中的錯(cuò)誤并改正?!咎崾尽空?qǐng)注意輸入提示、變量賦初值、循環(huán)結(jié)束條件、輸出格式等問題。2 編寫程序,任意輸入10個(gè)整數(shù)的數(shù)列,并按從小到大的順序進(jìn)行排序。10個(gè)整數(shù)用scanf函數(shù)

28、輸入。排序的方法很多,教材P134介紹了冒泡排序法,算法如下: 定義變量,輸入排序數(shù)據(jù)數(shù)n和待排序的n個(gè)數(shù)據(jù)。 n個(gè)數(shù)排序要進(jìn)行n-1遍。以下是一遍排序(第i遍)的算法: 設(shè)本趟排序中沒有交換,即flag=0。 從下標(biāo)j=n-1的元素起,到i+1個(gè)元素,比較aj與aj-1:若aj<aj-1,將aj與aj-1交換;并置flag=1。 若沒有交換(flag=0),排序完成,退出循環(huán)。 輸出排序結(jié)果。上述算法的、在main函數(shù)中實(shí)現(xiàn),其余各步調(diào)用sort函數(shù)完成。主函數(shù)如下:#include <stdio.h>int a100; /* 外部數(shù)組 */main() int i,n;

29、void sort(int); /* 說明被調(diào)函數(shù) */ printf("請(qǐng)輸入排序的數(shù)據(jù)個(gè)數(shù)n:"); scanf("%d",&n); printf("請(qǐng)輸入要排序的%d個(gè)整數(shù):",n); for(i=0;i<n;i+) scanf("%d",&ai); sort(n); /* 調(diào)用sort函數(shù)完成排序 */ printf("排序結(jié)果:"); for(i=0;i<n;i+) printf("%6d",ai); printf("n&quo

30、t;);請(qǐng)編寫sort函數(shù)(注意:函數(shù)只有一個(gè)形參int n)。3 有一個(gè)3×4的矩陣,要求輸出其中值最大的元素的值,以及它的行號(hào)和列號(hào)。#include <stdio.h>#define M 3#define N 4main() int max,i,j,r,c; int aMN=123,94,-10,218,3,9,10,-83,45,16,44,-99; max=a00; for(i=0;i<M;i+) for(j=0;j<N;j+) if(aij>max) max=aij; r=i; c=j; printf("max=%d,row=%d,

31、colum=%dn",max,r,c); 輸入并調(diào)試、運(yùn)行程序,記錄程序的輸出;若將a00改為1230,程序運(yùn)行結(jié)果有錯(cuò),應(yīng)如何修改程序?4 按照下面算法編一個(gè)程序,將兩個(gè)字符串連接起來,不能用strcat函數(shù)。 定義整型變量i、j,字符串s1、s2 輸入字符串s1、s2 當(dāng)字符串s1尚未結(jié)束,改變字符串s1的下標(biāo),使之到s1結(jié)束處 當(dāng)字符串s2尚未結(jié)束,將字符串s2逐個(gè)字符連接到字符串s1的后面 為字符串s1添加結(jié)束標(biāo)志 輸出連接后的字符串三 思考題1 將一個(gè)數(shù)組中的值按逆序重新存放,例如,原來順序?yàn)?,6,5,4,1,要求改為1,4,5,6,8。2 最常用的排序方法除了冒泡排序外

32、,還有選擇排序。程序設(shè)計(jì)思路:設(shè)有10個(gè)元素a0a9,將a0與a1a9比較,若a0比a1a9都小,則不進(jìn)行交換,即無任何操作。若a1a9中有一個(gè)以上比a0小,則將其中最小的一個(gè)(假設(shè)為ai)與a0交換,此時(shí)a0中存放了10個(gè)中最小的數(shù)。第二遍將a1與a2a9比較,將剩下9個(gè)數(shù)中的最小者ai與a1對(duì)換,此時(shí)a1中存放的是10個(gè)中第2小的數(shù)。依此類推,共進(jìn)行9遍比較,a0到a9就已按由小到大順序存放。n個(gè)數(shù)的選擇排序的N-S圖如下:真假定義變量、輸入n及數(shù)組a各元素for(i=0;i<n-1;i+)k=ifor(j=i+1;j<n;j+)aj<akk=j交換ak與ai輸出已排序的

33、n個(gè)數(shù)用冒泡排序同樣的主函數(shù),請(qǐng)根據(jù)上面的N-S圖編寫選擇排序函數(shù)。四、注意事項(xiàng)1 在C語言中,數(shù)組元素的下標(biāo)從0開始,最大下標(biāo)總是比定義的數(shù)組長(zhǎng)度少1。2 在C語言中,定義數(shù)組時(shí),其長(zhǎng)度必須指定且必須用常量表示。實(shí)驗(yàn)六 函數(shù)一 實(shí)驗(yàn)?zāi)康? 掌握定義函數(shù)的方法;2 掌握函數(shù)實(shí)參與形參的對(duì)應(yīng)關(guān)系以及“值傳遞”的方式;3 掌握函數(shù)的嵌套調(diào)用和遞歸調(diào)用的方法;4 掌握全局變量和局部變量動(dòng)態(tài)變量、靜態(tài)變量的概念和使用方法。二 實(shí)驗(yàn)內(nèi)容1 編寫兩個(gè)函數(shù),分別求兩個(gè)正整數(shù)的最大公約數(shù)和最小公倍數(shù),用主函數(shù)調(diào)用這兩個(gè)函數(shù),并輸出結(jié)果,兩個(gè)正整數(shù)由鍵盤輸入?!咎崾尽吭O(shè)有兩個(gè)正整數(shù)m和n 實(shí)驗(yàn)五介紹了求最大公約

34、數(shù)的算法,下面介紹用遞歸求m和n的最大公約數(shù)h的方法。設(shè)hcf(int m,int n)是用來求m和n的最大公約數(shù)h函數(shù),k=m%n,則: 若最大公約數(shù)為h,則最小公倍數(shù)l=m*n/h 。實(shí)驗(yàn)時(shí),完成以下兩個(gè)函數(shù)的定義,使之和主程序構(gòu)成完整的程序,實(shí)現(xiàn)題目的要求。#include <stdio.h>int hcf(int m,int n) /* 求最大公約數(shù)的函數(shù) */ int lcd(int m,int n,int h) /* 求最小公倍數(shù)的函數(shù) */ void main() int m,n,h,l; printf("請(qǐng)輸入兩個(gè)正整數(shù)m、n:"); scanf

35、("%d,%d",&m,&n); h=hcf(m,n); printf("%d和%d的最大公約數(shù)是:%dn",m,n,h); l=lcd(m,n,h); printf("%d和%d的最大公約數(shù)是:%dn",m,n,l);程序調(diào)試通過后,用m=350、n=125和m=96、n=64兩組數(shù)據(jù)運(yùn)行程序,記錄程序的輸出。2 上機(jī)調(diào)試下面的程序,記錄系統(tǒng)給出的出錯(cuò)信息,并指出錯(cuò)誤原因。main() int x,y; printf("%dn",sum(x+y); int sum(a,b); int a,b;re

36、turn(a+b); 3 編寫求n!的函數(shù)f(int n),在主函數(shù)中輸入兩個(gè)整數(shù)m、n,然后調(diào)用函數(shù)求:【注意】函數(shù)f的類型應(yīng)用long或double 。4 有一個(gè)字符串,內(nèi)有若干個(gè)字符,今輸入一個(gè)字符,要求程序?qū)⒆址兄付ǖ淖址麆h去,用外部函數(shù)實(shí)現(xiàn)。整個(gè)程序由4個(gè)文件組成,這4個(gè)文件如下:sy64a.cpp#include <stdio.h>void main() extern void enter_string(char str); extern void delete_string(char str,char ch); extern void print_string(c

37、har str);/* 以上3行聲明在本函數(shù)中要調(diào)用在其他文件中定義的3個(gè)函數(shù) */ char c; char str80; enter_string(str); printf("請(qǐng)輸入欲刪除的字符:"); scanf("%c",&c); delete_string(str,c); print_string(str);sy64b.cpp#include <stdio.h>void enter_string(char str80) /* 定義外部函數(shù)enter_string */ printf("請(qǐng)輸入字符串:");

38、 gets(str); /* 從鍵盤輸入字符串到數(shù)組str */sy64c.cpp#include <stdio.h>void delete_string(char str,char ch) /* 定義外部函數(shù)delete_string */ int i,j; for(i=j=0;stri!='0'i+) if(stri!=ch) strj+=stri; strj='0'sy64d.cpp#include <stdio.h>void print_string(char str) /* 定義外部函數(shù)printr_string */ prin

39、tf("刪除指定字符后的結(jié)果:%sn",str); 建立工程sy64,然后在工程sy64中建立這4個(gè)文件,調(diào)試并運(yùn)行程序:輸入字符串: abcdceccfg輸入要?jiǎng)h去的字符:c記錄運(yùn)行后的輸出結(jié)果。三 注意事項(xiàng)1 參數(shù)是一個(gè)函數(shù)與外界的接口,其有無、多少,取決于在實(shí)現(xiàn)該函數(shù)功能時(shí)是否需要已知數(shù)據(jù),以及需要多少,它的所需,即為參數(shù)。2 注意函數(shù)調(diào)用返回的特點(diǎn):返回調(diào)用處,而后繼續(xù)執(zhí)行下面的語句。3 函數(shù)中無return語句時(shí),函數(shù)的類型定義為void或int,不可定義為其他。4 當(dāng)被調(diào)函數(shù)定義在主調(diào)函數(shù)之后時(shí),應(yīng)在主調(diào)函數(shù)中說明被調(diào)函數(shù),否則,調(diào)用時(shí)將出現(xiàn)錯(cuò)誤。5 當(dāng)一個(gè)程序

40、由2個(gè)或2個(gè)以上的源程序文件組成時(shí),必須將這些源程序文件組織在一個(gè)工程項(xiàng)目文件中。在編譯時(shí),系統(tǒng)會(huì)分別對(duì)項(xiàng)目文件中的每個(gè)文件進(jìn)行編譯,然后將所得到的目標(biāo)文件連接成一個(gè)整體,再與系統(tǒng)的有關(guān)資源連接,生成一個(gè)可執(zhí)行文件,最后執(zhí)行這個(gè)文件。實(shí)驗(yàn)七 指針一 實(shí)驗(yàn)?zāi)康? 了解指針的概念,學(xué)會(huì)定義和使用指針變量。2 掌握指針、變量和數(shù)組的關(guān)系及使用方法。3 學(xué)會(huì)使用指向函數(shù)的指針變量。二 實(shí)驗(yàn)內(nèi)容1 運(yùn)行下列程序,寫出運(yùn)行結(jié)果。#include "stdio.h"main() int a5,*p,j; for(j=0;j<5;j+) aj=j+1; p=a; for(j=0;j&

41、lt;5;j+) printf("*(p+%d)=%dn",j,*(p+j);將輸出語句中的*改成方括號(hào)的形式,修改后再運(yùn)行程序。2 函數(shù)void fun(float *sn,int n)的功能是:根據(jù)以下公式計(jì)算S,計(jì)算結(jié)果通過形參指針sn傳回;n通過實(shí)參傳入,n的值大于等于0。請(qǐng)?zhí)羁?,并編寫出主函?shù),使之成為完整程序,上機(jī)調(diào)試運(yùn)行。void fun(float *sn,int n) float s=0.0,w,f=-1.0; int i=0; for (i=0;i<=n;i+); f= * f;w=f/(2*i+1);s+=w; =s;3 想使指針變量pt1指向a

42、和b中的大者,pt2指向小者,以下程序能否實(shí)現(xiàn)此目的?swap(int *p1,int *p2) int *p; p=p1;p1=p2;p2=pmain() int a,b; int *pt1,*pt2 ; scanf("%d,%d",&a,&b); pt1=&a; pt2=&b ; if(a<b) swap(pt1,pt2); printf("%d,%d n",*pt1,*pt2) ;上機(jī)調(diào)試此程序。如果不能實(shí)現(xiàn)題目要求,指出原因并修改之。4 分析并驗(yàn)證以下程序的運(yùn)行結(jié)果。#include "stdio.

43、h"main() char str="ABC",*p=str; printf("%cn",*(p+1);5 分析并驗(yàn)證以下程序的運(yùn)行結(jié)果:#include "stdio.h"main() char a45="ABCD","EFGH","IJKL","MNOP" char (*p)5; int i,j; p=a; for(i=0;i<4;i+) for(j=0;j<4;j+) printf("%c",*(*(p+i)

44、+j); /* 第9行 */printf("n"); 若將程序第9行中的%c改成%s,應(yīng)該怎樣修改?6 分析以下程序運(yùn)行結(jié)果,說明程序的作用。#include "stdio.h"char *strc(char *s1,char *s2) char *p=s1; while(*s2!='0') *p+=*s2+; return s1;main() char s130="computer ok!",s2="language",*pt; pt=strc(s1,s2); printf("%sn&q

45、uot;,pt);三 思考題1 下面的程序用來實(shí)現(xiàn)將一個(gè)3×3的矩陣轉(zhuǎn)置。#include "stdio.h"void tranf(int (*p)3) int t,i,j; for(i=0;i<3;i+) for(j=0;j<i;j+) t=pij; pij=pji; pji=t; main() int i,j,a33; for(i=0;i<3;i+) for(j=0;j<3;j+) scanf("%d",&aij); tranf(a); for(i=0;i<3;i+) for(j=0;j<3;j+

46、) printf("%3d",aij);printf("n"); 將上面程序tranf函數(shù)中的的方括號(hào)改成*號(hào)的表示形式,調(diào)試并運(yùn)行程序。程序輸入:1 2 3 4 5 6 7 8 9,記錄程序的輸出。2 用指向指針的方法對(duì)n個(gè)整數(shù)排序并輸出。要求將排序單獨(dú)寫一個(gè)函數(shù)。n和各個(gè)整數(shù)在主函數(shù)中輸入,最后在主函數(shù)中輸出。四 注意事項(xiàng)1 一個(gè)指針變量定義后,必須使其指向確定值(即給它賦值),否則,如果直接應(yīng)用它的目標(biāo),就會(huì)破壞內(nèi)存,使程序出錯(cuò),甚至造成死機(jī)。2 注意二維數(shù)組元素的不同表示方法,必須靈活掌握。3 字符數(shù)組保存一字符串后,其長(zhǎng)度一般不再起作用,對(duì)它的

47、各種操作以字符串結(jié)束,標(biāo)志'0'作為結(jié)束條件。4 字符串中%s格式整體輸入和輸出時(shí),其輸入輸出項(xiàng)均為數(shù)組名。5 當(dāng)用一個(gè)字符串給一字符型變量賦值時(shí),是把該字符串的首地址賦值給它,而不是該字符串。字符型指針變量的目標(biāo)是一個(gè)字符,而不是整個(gè)字符串。實(shí)驗(yàn)八 結(jié)構(gòu)體和文件一 實(shí)驗(yàn)?zāi)康? 掌握結(jié)構(gòu)體類型的概念和定義方法與使用。2 掌握指向結(jié)構(gòu)體變量的指針變量的概念和應(yīng)用。3 掌握文件的基本概念4 掌握文件指針與打開、關(guān)閉文件的相關(guān)函數(shù)二 實(shí)驗(yàn)內(nèi)容1 定義一個(gè)結(jié)構(gòu)體類型,其成員包括:學(xué)號(hào)(num),姓名(name20),性別(sex),年齡(age),三門課的成績(jī)(score3)。2 按上

48、面的結(jié)構(gòu)體類型定義一個(gè)結(jié)構(gòu)體數(shù)組并初始化,然后調(diào)用一個(gè)函數(shù)count,在該函數(shù)中計(jì)算出每個(gè)學(xué)生的總分和平均分,最后返回主函數(shù)輸出所有各項(xiàng)數(shù)據(jù)(包括原有的和新求出的)。【提示】 在定義結(jié)構(gòu)體類型時(shí)應(yīng)預(yù)留出準(zhǔn)備計(jì)算結(jié)果的成員項(xiàng)。 設(shè)結(jié)構(gòu)體變量為函數(shù)參數(shù),將各數(shù)據(jù)傳給count函數(shù)。#include "stdio.h"struct student char num9, name20, sex; int age,score3,sum; float av;st3="06040106","Li Ping", 'M', 18, 87,89,91, "06040125","Chen Fen", 'F', 19, 78,75,81, "06040132","Wang Yifei",'M', 19, 65,67,69;void count

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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)論