軟件工程c上機(jī)實(shí)驗(yàn)指導(dǎo)書(shū)修訂_第1頁(yè)
軟件工程c上機(jī)實(shí)驗(yàn)指導(dǎo)書(shū)修訂_第2頁(yè)
軟件工程c上機(jī)實(shí)驗(yàn)指導(dǎo)書(shū)修訂_第3頁(yè)
軟件工程c上機(jī)實(shí)驗(yàn)指導(dǎo)書(shū)修訂_第4頁(yè)
軟件工程c上機(jī)實(shí)驗(yàn)指導(dǎo)書(shū)修訂_第5頁(yè)
已閱讀5頁(yè),還剩51頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

軟件設(shè)計(jì)基礎(chǔ)實(shí)驗(yàn)指導(dǎo)書(shū)PAGE文檔編號(hào):實(shí)驗(yàn)指導(dǎo)書(shū)英文名稱(chēng)縮寫(xiě)–版本《軟件設(shè)計(jì)基礎(chǔ)》課程實(shí)驗(yàn)指導(dǎo)書(shū)(適用于軟件工程專(zhuān)業(yè))軟件工程系遼寧工程技術(shù)大學(xué)軟件學(xué)院年月日目錄TOC\o"1-3"\h\z實(shí)驗(yàn)1C程序的運(yùn)行環(huán)境和運(yùn)行一個(gè)C程序的方法 1實(shí)驗(yàn)2數(shù)據(jù)類(lèi)型、運(yùn)算符和表達(dá)式 5實(shí)驗(yàn)3最簡(jiǎn)單的C程序設(shè)計(jì) 8實(shí)驗(yàn)4邏輯結(jié)構(gòu)程序設(shè)計(jì) 12實(shí)驗(yàn)5循環(huán)控制 16實(shí)驗(yàn)6數(shù)組 22實(shí)驗(yàn)7函數(shù) 26實(shí)驗(yàn)8指針 29實(shí)驗(yàn)9結(jié)構(gòu)體和共用體 36實(shí)驗(yàn)10位運(yùn)算 38實(shí)驗(yàn)11文件 39實(shí)驗(yàn)12綜合應(yīng)用實(shí)驗(yàn) 43-PAGE42-實(shí)驗(yàn)1C程序的運(yùn)行環(huán)境和運(yùn)行一個(gè)C程序的方法一、實(shí)驗(yàn)?zāi)康?、了解如何編輯、編譯、連接和運(yùn)行一個(gè)C程序;2、通過(guò)運(yùn)行簡(jiǎn)單的C程序,初步了解C程序的特點(diǎn)。二、實(shí)驗(yàn)內(nèi)容1、學(xué)習(xí)進(jìn)入C的工作環(huán)境并熟悉TurboC集成環(huán)境;2、練習(xí)輸入并運(yùn)行一個(gè)簡(jiǎn)單的C程序,掌握和理解C程序的結(jié)構(gòu);3、初步了解C程序的編譯、連接和運(yùn)行的過(guò)程。三、實(shí)驗(yàn)性質(zhì)驗(yàn)證性實(shí)驗(yàn)四、實(shí)驗(yàn)學(xué)時(shí)2學(xué)時(shí)五、實(shí)驗(yàn)環(huán)境TurboC2.0四、實(shí)驗(yàn)原理及步驟1、啟動(dòng)TurboC進(jìn)入TurboC集成環(huán)境后,首先在屏幕上顯示TurboC主菜單窗口。在該窗口,有8個(gè)菜單條目。每一個(gè)菜單的意義如下:File處理文件(包括裝入、存盤(pán)、選擇、建立、換名寫(xiě)盤(pán)),目錄操作(包括列表、改變工作目錄),退出系統(tǒng)及調(diào)用DOS;Edit建立、編輯源文件;Run控制運(yùn)行程序。如果程序已經(jīng)編譯連接好,且Debug/SourceDebugging以及Option/Compiler/Codegeneration/OBJDebugInformation開(kāi)關(guān)置為On,則可以用此菜單初始化調(diào)試階段;Compile編譯并生成目標(biāo)程序與可執(zhí)行文件;Project允許說(shuō)明程序中包含哪些文件的管理?xiàng)l目;Options可以選擇集成環(huán)境任選項(xiàng)(如存儲(chǔ)模式、編譯時(shí)的任選項(xiàng)、診斷及連接任選項(xiàng))及定義宏;也可以記錄IncludeOutput及Library文件目錄,保存編譯任選項(xiàng)和從配置文件加載任選;Debug檢查、改變變量的值,查找函數(shù),程序運(yùn)行時(shí)查看調(diào)用棧。選擇程序編譯時(shí)是否在執(zhí)行行代碼中插入調(diào)試信息;Break/Watch增加、刪除、編輯監(jiān)視表達(dá)式,及設(shè)置、清除、執(zhí)行至斷點(diǎn);特別要指出的是,除了Edit項(xiàng)外,每一個(gè)菜單又有對(duì)應(yīng)的子菜單。而選擇Edit項(xiàng)目后,只是進(jìn)入編輯器;為了從主菜單中選擇所需要的功能,可以用以下兩種方式之一:按F10鍵后,可以看到屏幕上部主菜單中有反白顯示,此時(shí),利用左、右光標(biāo)移動(dòng)鍵(←與→)選擇需要的菜單,然后按回車(chē)(Enter)鍵。直接按Alt+主菜單條目中的首字母(分別為F、E、R、C、P、O、D、B),此時(shí)就會(huì)出現(xiàn)相應(yīng)的子菜單。例如,按Alt+F表示選擇文件子菜單(File)。當(dāng)出現(xiàn)子菜單時(shí),其中某個(gè)條目是高亮度的,此時(shí)可以利用上、下光標(biāo)移動(dòng)鍵(↑與↓)來(lái)移動(dòng)該高亮度線(xiàn),從而選擇所需要的功能。在菜單調(diào)用時(shí),按Esc鍵后將直接返回到活動(dòng)窗口。2、輸入程序(1)輸入以下程序,并運(yùn)行。main(){printf("Howareyou!");}(2)有下面的C程序,計(jì)算由鍵盤(pán)輸入的任意兩個(gè)整數(shù)的積。#include(stdio.h);main()scanf(“%x,%y”,&x,%y)p=prodct(x,t)printf(“Theproductis:”,p)intprodct(inta,intb)intcc=a*breturnc調(diào)試上述程序:靜態(tài)地檢查上述程序,改正程序中的錯(cuò)誤;在編輯狀態(tài)下照原樣鍵入上述程序;編譯并運(yùn)行上述程序,記下所給出的出錯(cuò)信息;按照事先靜態(tài)檢查后所改正的情況,進(jìn)行糾錯(cuò);再編譯執(zhí)行糾錯(cuò)后的程序;如還有錯(cuò)誤,再編輯改正,直到不出現(xiàn)語(yǔ)法錯(cuò)誤為止。下面給出6組測(cè)試用例,你認(rèn)為哪幾組較好?為什么?0,00,9920,5033000,20-5,-2-5,2要測(cè)試出上述程序中所有錯(cuò)誤,你認(rèn)為應(yīng)當(dāng)用幾組測(cè)試用例?3、運(yùn)行程序按Ctrl+F9運(yùn)行程序,如果沒(méi)有報(bào)錯(cuò),可以按Alt+F5查看運(yùn)行結(jié)果,再按空格鍵回到編輯窗口。4、保存文件按F2鍵,彈出一個(gè)對(duì)話(huà)框,在對(duì)話(huà)框中輸入文件名,如:exam1.c。5、退出TC程序按Alt+X鍵,彈出對(duì)話(huà)框,提示是否真的要退出TC,如果輸入Y就會(huì)退出TC。6、打開(kāi)已經(jīng)存在的文件首選啟動(dòng)TC;按F3,彈出對(duì)話(huà)框;在該對(duì)話(huà)框中,輸入文件名即可。五、實(shí)驗(yàn)報(bào)告1.提交源程序2.總結(jié)實(shí)驗(yàn)中在編輯、編譯、運(yùn)行等各環(huán)節(jié)中所出現(xiàn)的問(wèn)題及解決方法。實(shí)驗(yàn)2數(shù)據(jù)類(lèi)型、運(yùn)算符和表達(dá)式一、實(shí)驗(yàn)?zāi)康?、掌握C語(yǔ)言數(shù)據(jù)類(lèi)型,熟悉如何定義一個(gè)整型、字符型和實(shí)型的變量,以及對(duì)它們賦值的方法;2、掌握不同的類(lèi)型數(shù)據(jù)之間賦值的規(guī)律;3、學(xué)會(huì)使用C的有關(guān)算術(shù)運(yùn)算符,以及包含這些運(yùn)算符的表達(dá)式,特別是自加(++)和自減(--)運(yùn)算符的使用;4、進(jìn)一步熟悉C程序的編輯、編譯、連接和運(yùn)行的過(guò)程。二、實(shí)驗(yàn)內(nèi)容1、輸入有代表性的程序,比較整型數(shù)據(jù)、字符型數(shù)據(jù)以及字符串型數(shù)據(jù)的區(qū)別與聯(lián)系;2、輸入程序,體會(huì)C編譯系統(tǒng)自動(dòng)的數(shù)據(jù)類(lèi)型轉(zhuǎn)換。三、實(shí)驗(yàn)性質(zhì)驗(yàn)證性實(shí)驗(yàn)四、實(shí)驗(yàn)學(xué)時(shí)2學(xué)時(shí)五、實(shí)驗(yàn)環(huán)境TurboC2.0六、實(shí)驗(yàn)原理及步驟1、用printf函數(shù)來(lái)輸出以下表達(dá)式運(yùn)行結(jié)果(1)當(dāng)x=5,y=6,z=7時(shí)x<yy>xx!=yx==z-2x=x-2x>=zx<=z(2)當(dāng)x=0,y=-1,z=1時(shí)x&&yx||yy&&zy||zx&yx|y2、下面的程序試圖計(jì)算由鍵盤(pán)輸入的任意兩個(gè)整數(shù)的平均值#include<stdio.h>main(){intx,y,a;scanf(“%x,%y,&x,&y);a=(x+y)/2;printf(“Theaverageis:”a);}調(diào)試無(wú)語(yǔ)法錯(cuò)誤后,分別使用下列測(cè)試用例對(duì)上述程序進(jìn)行測(cè)試:(1)2,6(2)1,3(3)-2,-6(4)-1,-3(5)-2,6(6)-1,3(7)1,0(8)1,6(9)32800,33000(10)-32800,33000分析上述哪幾組測(cè)試用例較好?通過(guò)測(cè)試,你發(fā)現(xiàn)程序有什么錯(cuò)誤了嗎?若有錯(cuò)誤,請(qǐng)指出錯(cuò)誤原因。操作符sizeof用以測(cè)試一個(gè)數(shù)據(jù)或類(lèi)型所占用的存儲(chǔ)空間的字節(jié)數(shù)。請(qǐng)編寫(xiě)一個(gè)程序,測(cè)試各基本數(shù)據(jù)類(lèi)型所占用的存儲(chǔ)空間大小。3、編寫(xiě)一個(gè)C語(yǔ)言程序,測(cè)試下列各表達(dá)式i,ji+1,j+1i++,j++++i,++ji+++++j++i+++++j++要求在各表達(dá)式中i和j都分別有相同的初值。在實(shí)驗(yàn)中注意下列問(wèn)題:哪些表達(dá)式是錯(cuò)誤的?為什么?理解+,++,++i,i++的意義和優(yōu)先級(jí)別。七、實(shí)驗(yàn)報(bào)告1.提交源程序2.分析以下兩個(gè)問(wèn)題:(1)“=”和“==”有什么區(qū)別?(2)“&”和“&&”、“|”和“||”有什么區(qū)別?實(shí)驗(yàn)3最簡(jiǎn)單的C程序設(shè)計(jì)一、實(shí)驗(yàn)?zāi)康?、掌握C語(yǔ)言中使用最多的一種語(yǔ)句——賦值語(yǔ)句的使用方法;2、掌握各種類(lèi)型數(shù)據(jù)的輸入輸出的方法,能正確使用各種格式轉(zhuǎn)換符。二、實(shí)驗(yàn)內(nèi)容1、掌握C語(yǔ)言程序輸入、輸出的方法和格式;2、掌握各種格式轉(zhuǎn)換符的正確使用方法;3、編寫(xiě)程序,練習(xí)小數(shù)的輸出用法;4、編程序,用getchar函數(shù)讀入兩個(gè)字符給c1、c2,然后分別用putchar函數(shù)和scanf函數(shù)輸出這兩個(gè)字符。三、實(shí)驗(yàn)性質(zhì)驗(yàn)證性實(shí)驗(yàn)四、實(shí)驗(yàn)學(xué)時(shí)2學(xué)時(shí)五、實(shí)驗(yàn)環(huán)境TurboC2.0六、實(shí)驗(yàn)原理及步驟第一組實(shí)驗(yàn)程序:1、輸入并編輯下面的程序main(){inta,b;floatc,d;longe,f;unsignedintu,v;charc1,c2;scanf(“%d,%d”,a,b);scanf(“%f,%f”,c,d);scanf(“%ld,%ld”,e,f);scanf(“%o,%o”,u,v);scanf(“%c,%c”,c1,c2);printf(“\n”);printf(“a=%7d,b=%7d\n”,&a,&b);printf(“c=%10.2f,d=%10.2f\n”,&c,&d);printf(“e=17ld,f=%17ld\n”,&e,&f);printf(“u=%o,d=%o\n”,&u,&v);printf(“c1=%c,d=%c\n”,&c1,&c2);這個(gè)程序有語(yǔ)法錯(cuò)誤嗎?為什么?2、調(diào)試上述程序無(wú)語(yǔ)法錯(cuò)誤后,用下面的測(cè)試數(shù)據(jù),對(duì)程序進(jìn)行測(cè)試。a=123,b=456,c=17.6,d=71837.65,e=70000,f=2174506u=62000,v=58765,c1=’a’,c2=’b’分析運(yùn)行結(jié)果。特別注意輸入c1,c2的值是什么?什么原因?3、將輸入e和f的語(yǔ)句改為:scanf(“%d,%d”,&e,&f);再用上述測(cè)試數(shù)據(jù)測(cè)試并分析結(jié)果。4、將輸入u、v的語(yǔ)句改為:scanf(“%d,%d”,&u,&v);再用上述測(cè)試數(shù)據(jù)測(cè)試并分析結(jié)果。5、將輸出e,f的語(yǔ)句改為:printf(“e=%17d,f=%17d\n”,e,f);再用上述測(cè)試數(shù)據(jù)測(cè)試并分析結(jié)果。6、將輸出u、v的語(yǔ)句改為:printf(“u=%u,v=%u\n”,u,v);或printf(“u=%d,v=%d\n”,u,v);再用上述測(cè)試數(shù)據(jù)測(cè)試并分析結(jié)果。7、請(qǐng)修改程序和改變數(shù)據(jù)輸入的形式,分析各種情況下的輸入與輸出。8、在scanf(“%c,%c”,&c1,&c2);語(yǔ)句之前加一個(gè)語(yǔ)句:getchar();9、驗(yàn)證轉(zhuǎn)義字符\n與\r的意義有何不同。第二組實(shí)驗(yàn)程序:1、輸入x,y,編寫(xiě)程序求z=x+|y|的值程序中用scanf函數(shù)輸入x和y的值,請(qǐng)分析以下兩個(gè)語(yǔ)句scanf(“%f%f”,x,y);scanf(“%f%f”,&x,&y);哪一個(gè)是正確的,分別運(yùn)行之,分析程序運(yùn)行結(jié)果。如果scanf函數(shù)改為scanf(“%f,%f”,&x,&y);應(yīng)該怎樣輸入數(shù)據(jù)。2、編寫(xiě)輸入三角形的三邊長(zhǎng)a、b、c,求三角形面積area的程序。輸入前要加提示語(yǔ)句;輸出結(jié)果前要有必要的文字說(shuō)明;輸入一組數(shù)據(jù)3、4、5,觀(guān)察運(yùn)算結(jié)果;輸入另外一組數(shù)據(jù)3、4、8,觀(guān)察運(yùn)算結(jié)果,分析這個(gè)運(yùn)算結(jié)果是否有效。*第三組實(shí)驗(yàn)程序:1、編寫(xiě)一個(gè)程序,由鍵盤(pán)輸入學(xué)生的三門(mén)課英語(yǔ)、數(shù)學(xué)和程序設(shè)計(jì)的成績(jī),計(jì)算并輸出總成績(jī)、平均成績(jī)。2、編寫(xiě)一個(gè)程序,輸入一個(gè)三位正整數(shù),要求反向輸出對(duì)應(yīng)的整數(shù),如輸入789,則輸出987。七、實(shí)驗(yàn)報(bào)告1.提交源程序2.分析以下兩個(gè)問(wèn)題:(1)總結(jié)在printf函數(shù)中可以使用的各種格式指定符,并給出樣例;(2)總結(jié)在printf函數(shù)中可以使用的各轉(zhuǎn)義字符及其功能。實(shí)驗(yàn)4邏輯結(jié)構(gòu)程序設(shè)計(jì)一、實(shí)驗(yàn)?zāi)康募皟?nèi)容1、了解條件與程序流程的關(guān)系;2、了解用不同的數(shù)據(jù)使程序的流程覆蓋不同的語(yǔ)句、分支和路徑;3、學(xué)會(huì)正確使用邏輯運(yùn)算符和邏輯表達(dá)式;4、熟練掌握if語(yǔ)句和switch語(yǔ)句。二、實(shí)驗(yàn)性質(zhì)驗(yàn)證性實(shí)驗(yàn)三、實(shí)驗(yàn)學(xué)時(shí)2學(xué)時(shí)四、實(shí)驗(yàn)環(huán)境TurboC2.0五、實(shí)驗(yàn)原理及步驟第一組實(shí)驗(yàn)程序:1、有如下程序段:{……if(a>1&&b==0)x=x/a;if(a==2||x>1)x=x+1;}為了更容易明白程序的邏輯結(jié)構(gòu),用流程圖來(lái)加以描述。a>1&&b==0x=x/aa>1&&b==0x=x/aa==2||x>1x=x+1YNYN要求增加一些輸入語(yǔ)句和輸出語(yǔ)句,以便使上述程序能在不同的a,b和x值下運(yùn)行,并且能觀(guān)察程序流程經(jīng)過(guò)(覆蓋)了哪些語(yǔ)句、哪些分支及哪些路徑。2、實(shí)驗(yàn)步驟記下分別使用下列各組數(shù)據(jù)運(yùn)行時(shí)的操作流程。a=1,b=1,x=1;a=1,b=1,x=2;a=3,b=0,x=1;a=2,b=1,x=4;a=2,b=1,x=1;a=1,b=0,x=2;a=2,b=1,x=1;a=3,b=0,x=2。3、分析討論用哪一組數(shù)據(jù)就可使程序中的每個(gè)處理語(yǔ)句都執(zhí)行一次?為了找出程序中各條處理語(yǔ)句中的錯(cuò)誤,應(yīng)該使用什么樣的數(shù)據(jù)對(duì)程序進(jìn)行測(cè)試?請(qǐng)上機(jī)驗(yàn)證自己的結(jié)論。用哪兩組數(shù)據(jù)就可以使程序段中的每個(gè)分支都運(yùn)行一次?這種情形與上面的討論有何不同?如果為了找出程序中積壓分支中的錯(cuò)誤,應(yīng)該使用什么樣的數(shù)據(jù)對(duì)程序進(jìn)行測(cè)試?請(qǐng)上機(jī)驗(yàn)證自己的結(jié)論。用哪兩組數(shù)據(jù)就可以把判定框中的每個(gè)條件運(yùn)算都進(jìn)行一次?如果為了測(cè)試出判定條件中的錯(cuò)誤,應(yīng)使用哪些數(shù)據(jù)對(duì)程序進(jìn)行測(cè)試?請(qǐng)上機(jī)驗(yàn)證自己的結(jié)論。用哪四組數(shù)據(jù)才可以把各種條件的組合都檢測(cè)一遍?如果為了測(cè)試各種條件的組合的情形,應(yīng)該使用什么樣的測(cè)試數(shù)據(jù)?請(qǐng)上機(jī)驗(yàn)證自己的結(jié)論。用哪四組數(shù)據(jù)才可以把起始到終止的各條路徑都覆蓋一次?如果為了測(cè)試出程序在不同路徑下的錯(cuò)誤,應(yīng)該使用什么樣的測(cè)試數(shù)據(jù)?請(qǐng)上機(jī)驗(yàn)證自己的結(jié)論。第二組實(shí)驗(yàn)程序:1、用scanf函數(shù)輸入一個(gè)年份year,計(jì)算這一年2月份的天數(shù)days,然后用輸出函數(shù)printf輸出days。實(shí)驗(yàn)步驟與要求:(1)有變量定義為整型;(2)輸入前要加提示語(yǔ)句;(3)輸出結(jié)果前要有必要的文字說(shuō)明。說(shuō)明:(1)閏年的條件是:year能被4整除但不能被100整除,或者year能被400整除。(2)如果year是閏年,則2月份的天數(shù)為29天,不是閏年則為28天。2、編寫(xiě)程序,輸入三角形三邊a、b、c,判斷a、b、c能否構(gòu)成三角形,若不能則輸出相應(yīng)的信息,若能則判斷組成的是等腰、等邊、直角還是一般三角形。實(shí)驗(yàn)步驟與要求:(1)輸入一組數(shù)據(jù)3,4,8,觀(guān)察程序運(yùn)行結(jié)果,并與實(shí)驗(yàn)二中程序2做比較。(2)另外再輸入幾組數(shù)據(jù)進(jìn)行測(cè)試。3,4,53,3,33,3,5(3)如果程序有誤,可采用“跟蹤打印”的調(diào)試方法,確定錯(cuò)誤的出處。3、編寫(xiě)程序,輸入獎(jiǎng)金數(shù)a,計(jì)算并輸出稅率、應(yīng)繳稅款和實(shí)得獎(jiǎng)金數(shù)。獎(jiǎng)金稅率a<5000.00500≤a<10000.051000≤a<20000.082000≤a<50000.105000≤a0.15實(shí)驗(yàn)步驟與要求:(1)用if語(yǔ)句編程,自變量和函數(shù)值均為雙精度類(lèi)型;(2)用scanf函數(shù)輸入獎(jiǎng)金數(shù)a,輸出結(jié)果采用以下形式:a=具體值rate=稅率值tax=應(yīng)繳稅款profit=實(shí)得獎(jiǎng)金數(shù)(3)分別輸入a=280,512,1000,4250,5100,運(yùn)行該程序(4)用if~elseif語(yǔ)句和switch語(yǔ)句編程,其它同上。*第三組實(shí)驗(yàn)程序:1、編寫(xiě)一個(gè)程序,要求輸入一個(gè)字符并判斷它是字母字符、數(shù)字字符、還是其他字符。2、編寫(xiě)一個(gè)程序,求一元二次方程ax2+bx+c=0的根。3、輸入一個(gè)無(wú)符號(hào)整數(shù),判斷該數(shù)是偶數(shù)還是奇數(shù)。六、實(shí)驗(yàn)報(bào)告1.提交源程序2.分析以下問(wèn)題:對(duì)于多分枝選擇結(jié)構(gòu)何時(shí)使用if語(yǔ)句的嵌套,何時(shí)使用switch語(yǔ)句?實(shí)驗(yàn)5循環(huán)控制一、實(shí)驗(yàn)?zāi)康募皟?nèi)容1、熟悉掌握用while語(yǔ)句,do-while語(yǔ)句和for語(yǔ)句實(shí)現(xiàn)循環(huán)的方法;2、掌握在程序設(shè)計(jì)中用循環(huán)的方法實(shí)現(xiàn)一些常用算法;3、掌握在程序設(shè)計(jì)條件型循環(huán)結(jié)構(gòu)時(shí),如何正確地設(shè)定循環(huán)條件、如何控制循環(huán)的次數(shù)以及條件型循環(huán)結(jié)構(gòu)的基本測(cè)試方法;4、掌握如何正確地控制計(jì)數(shù)型循環(huán)結(jié)構(gòu)的次數(shù)、對(duì)計(jì)數(shù)型循環(huán)結(jié)構(gòu)進(jìn)行測(cè)試的基本方法及在嵌套循環(huán)結(jié)構(gòu)中提高程序效率的方法。二、實(shí)驗(yàn)性質(zhì)驗(yàn)證性實(shí)驗(yàn)三、實(shí)驗(yàn)學(xué)時(shí)2學(xué)時(shí)四、實(shí)驗(yàn)環(huán)境TurboC2.0五、實(shí)驗(yàn)原理與步驟第一組實(shí)驗(yàn)程序(條件型循環(huán)結(jié)構(gòu))1、下面是一個(gè)計(jì)算e的近似值(使誤差小于給定的δ)的程序。//缺??//缺??main(){doublee=1.0,x=1.0,y,detax;inti=1;printf(“\npleaseinputenteraerror:”);//未定義函數(shù)scanf(“%lf”,&detax);//未定義函數(shù)y=1/x;while(y>=detax){ x=x*I;//未定義變量Iy=1/x;e=e+y;++i;}printf(“%12.10lf”,e);//未定義函數(shù)}2、實(shí)驗(yàn)步驟(1)閱讀上面的程序,寫(xiě)出程序所依據(jù)的計(jì)算公式。(2)當(dāng)輸入的detax各是什么值時(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)該在程序中增加一條什么樣的語(yǔ)句?(3)原程序中while語(yǔ)句中的y>=detax,分別換成y>detax,y=detax,y<detaxy<=detax,觀(guān)察程序運(yùn)行將會(huì)有什么變化。假如不知道機(jī)器內(nèi)的程序中的各語(yǔ)句實(shí)際上是什么,分別輸入什么樣的detax來(lái)測(cè)試出while語(yǔ)句的循環(huán)條件寫(xiě)錯(cuò)了。(4)把原程序中while語(yǔ)句之前的y=1/x語(yǔ)句去掉,觀(guān)察程序的運(yùn)行將會(huì)發(fā)生什么樣的變化。假如不知道機(jī)器內(nèi)的程序?qū)嶋H上是怎么寫(xiě)的,輸入什么樣的detax就能測(cè)試出少了上述這條語(yǔ)句。(5)若把原程序中的++i換成i++,觀(guān)察程序的運(yùn)行發(fā)生了什么變化?假如不知道這條語(yǔ)句到底是怎么寫(xiě)的,輸入什么樣的detax就能測(cè)試出這條語(yǔ)句寫(xiě)錯(cuò)了。(6)把原程序中的while結(jié)構(gòu)改寫(xiě)成do—while結(jié)構(gòu),再分別按上述的(2)、(3)兩步進(jìn)行實(shí)驗(yàn)。3、分析討論總結(jié)一下測(cè)試條件循環(huán)結(jié)構(gòu)的一般方法。第二組實(shí)驗(yàn)程序(計(jì)數(shù)型循環(huán)結(jié)構(gòu))1、下面是一個(gè)用以計(jì)算和的C程序。main(){inti,j;longsum=0;for(i=1,i<=20,i++)//查查錯(cuò)誤for(j=1;j<=3;j++)sum=sum+(i+1)*(i+1)*(j+2)printf(“sumis:%d\n”,sum);}2、實(shí)驗(yàn)步驟(1)

將上述程序中的和分別做什么樣修改,能使程序按如下要求運(yùn)行:不循環(huán);外循環(huán)1次,不進(jìn)入內(nèi)循環(huán);外循環(huán),內(nèi)循環(huán)各1次;外循環(huán)1次,內(nèi)循環(huán)2次;外循環(huán)2次,內(nèi)循環(huán)1次;外循環(huán)19次,內(nèi)循環(huán)3次;外循環(huán)20次,內(nèi)循環(huán)2次;外循環(huán)21次,內(nèi)循環(huán)3次。(2)試修改程序,以便能知道控制表達(dá)式i=1;j<=20;i++和j=1;j<3;j+=各執(zhí)行了多少次?(3)內(nèi)循環(huán)與外循環(huán)的控制表達(dá)式進(jìn)行對(duì)換,觀(guān)察程序的執(zhí)行結(jié)果有無(wú)變化,并且觀(guān)察對(duì)換后的外循環(huán)與內(nèi)循環(huán)控制表達(dá)式執(zhí)行的總次數(shù)有無(wú)變化?(4)將(3)中程序?qū)憺閙ain(){inti,j,k;longsum=0;for(j=1.j<=3.j++){k=j+2;for(i=1;i<=20;i++)//有錯(cuò)誤sum=sum+(i+1)*(i+1)**k;//有錯(cuò)誤}printf(“sumis:%d\n”,sum);}觀(guān)察程序的執(zhí)行結(jié)果有無(wú)變化?(5)將(3)中程序改寫(xiě)為main(){intI,j,m,n;longsum=0;for(j=1;j<=3;j++){m=j+2;for(I=1;j<=20;I++)//循環(huán)會(huì)終止嗎,為什么,注意觀(guān)察j的變化 {n=I+1;sum=sum+m*m*k;}}printf(“sumis:%d\n”,sum);}觀(guān)察程序的執(zhí)行結(jié)果有無(wú)變化?(6)在(5)的程序中,若將外循環(huán)控制表達(dá)式分別做如下修改:j=1;j<3;j++j=1;j=3;j++j=1;j>=3;j++j=1;j>3;j++j=1;j<=3;j--j=1;j>3;j--j=1;j<3;j++j=0;j<=3;j+=j=0;j<3;j++j=1;j<=3;j++j=1;j<3;++j觀(guān)察程序的執(zhí)行結(jié)果有無(wú)變化?*第三組實(shí)驗(yàn)程序:1、編寫(xiě)一個(gè)程序,將輸入的正文復(fù)制到輸出,復(fù)制過(guò)程中刪除每個(gè)輸入行的前置空格。2、求解滿(mǎn)足條件1+2+3+···+n≥300的最小的n及總和值。3、編寫(xiě)一個(gè)程序,把用戶(hù)輸入的數(shù)據(jù)累加,直到輸入零為止,輸出累加的結(jié)果。4、輸入一個(gè)正整數(shù)n,求sum=1+(1+2)+(1+2+3)+…+(1+2+3+…+n)的值。5、打印輸出半徑為1到10的圓的面積,若面積在40到90之間則予以打印,否則,不予打印。六、實(shí)驗(yàn)報(bào)告1.提交源程序2.分析以下兩個(gè)問(wèn)題:(1)如何測(cè)試計(jì)數(shù)型循環(huán)結(jié)構(gòu)的控制表達(dá)式中的錯(cuò)誤?(2)從實(shí)驗(yàn)中你得到了哪些提高嵌套循環(huán)程序效率的啟示?實(shí)驗(yàn)6數(shù)組一、實(shí)驗(yàn)?zāi)康募皟?nèi)容1、掌握一維數(shù)組和二維數(shù)組的定義、賦值和輸入輸出的方法;2、掌握字符數(shù)組和字符串函數(shù)的使用;3、掌握與數(shù)組有關(guān)的算法,特別是排序算法。二、實(shí)驗(yàn)性質(zhì)驗(yàn)證性實(shí)驗(yàn)三、實(shí)驗(yàn)學(xué)時(shí)2學(xué)時(shí)四、實(shí)驗(yàn)環(huán)境TurboC2.0五、實(shí)驗(yàn)原理與步驟1、編寫(xiě)程序,測(cè)試下列數(shù)組的定義方式是否正確(1)main(){intn;scanf(“%d”,&n);inta[n];……}(2)main(){constintn=10;inta[n];

}(3)

#include<stdio.h>#defineM10main(){inta[M];

}(4)main(){inta[2+2*4];

}(5)#include<stdio.h>#defineM2#defineN8main(){inta[M+N];}通過(guò)這一實(shí)驗(yàn),可以說(shuō)明什么問(wèn)題?2、運(yùn)行下面的C程序,根據(jù)運(yùn)行結(jié)果,可以說(shuō)明什么?main(){intnum[5]={1,2,3,4,5};intii;for(i=0;i<=5;i++)//尤其注意最后一次循環(huán)printf(“%d”,num[i]);}3、操作符&用以求一個(gè)變量的地址,這在函數(shù)scanf中已經(jīng)使用過(guò)了?,F(xiàn)在要你設(shè)計(jì)一個(gè)程序,返回一個(gè)3*5的二維數(shù)組各元素的地址,并由此說(shuō)明二維數(shù)組中各元素是按什么順序存諸的。4、為一個(gè)起泡排序程序設(shè)計(jì)測(cè)試用例,并測(cè)試之。5、1983年,在A(yíng)CM圖林獎(jiǎng)?lì)C獎(jiǎng)大會(huì)上,杰出的計(jì)算機(jī)科學(xué)家,UNIX的鼻祖,C語(yǔ)言的創(chuàng)始人之一,圖林大獎(jiǎng)得主,KenThompson上臺(tái)的第一句話(huà)是:“我是一個(gè)程序員,在我的1040表上,我自豪地寫(xiě)上了我的職業(yè)。作為一個(gè)程序員,我的工作就是寫(xiě)程序,今天我將向大家提供一個(gè)我曾經(jīng)寫(xiě)過(guò)的最精練的程序?!边@個(gè)程序如下:#include<stdio.h>chars[]={'\t','0','\n','}',';','\n','\n','/','*','\n',0};/*(213linesdeleted)*//**Thestringisa*representationofthebody*ofthisprogramfrom'0'*totheend*/voidmain(void){inti;printf("char\ts[]={\"");for(i=0;s[i];i++){printf("\t%d,\n",s[i]);}printf("%s",s);}6、用冒泡法對(duì)10個(gè)整數(shù)排序。10個(gè)整數(shù)用scanf函數(shù)輸入;7、對(duì)一個(gè)有序數(shù)列,用折半查找法找出該數(shù)是第幾個(gè)元素的值;8、將兩個(gè)字符串連接起來(lái),不要用strcat函數(shù)。請(qǐng)上機(jī)運(yùn)行這個(gè)程序,指出它的功能和運(yùn)行結(jié)果。六、實(shí)驗(yàn)報(bào)告1.提交源程序2.通過(guò)實(shí)驗(yàn),分析定義與引用數(shù)組的區(qū)別。實(shí)驗(yàn)7函數(shù)一、實(shí)驗(yàn)?zāi)康募皟?nèi)容1、掌握定義函數(shù)的方法;2、掌握函數(shù)實(shí)參與形參的對(duì)應(yīng)關(guān)系以及“值傳遞”的方式;3、掌握函數(shù)的嵌套調(diào)用和遞歸調(diào)用的方法;4、掌握全局變量和局部變量動(dòng)態(tài)變量、靜態(tài)變量的概念和使用方法;5、學(xué)習(xí)對(duì)多文件程序的編譯和運(yùn)行。二、實(shí)驗(yàn)性質(zhì)驗(yàn)證性實(shí)驗(yàn)三、實(shí)驗(yàn)學(xué)時(shí)2學(xué)時(shí)四、實(shí)驗(yàn)環(huán)境TurboC2.0五、實(shí)驗(yàn)原理與步驟1、上機(jī)調(diào)試下面的程序,記錄系統(tǒng)給出的出錯(cuò)信息,并指出出錯(cuò)原因。main(){int,y;//這在定義什么東西?printf("%d\n",sum(x+y));//sum的頂用形式正確嗎?intsum(a,b)//函數(shù)可以嵌套定義嗎?{inta,b;//形式參數(shù)是這樣聲明的嗎?return(a+b);}}2、編寫(xiě)并調(diào)試一個(gè)求(n為整數(shù))的遞歸函數(shù),希望能在程序運(yùn)行過(guò)程中動(dòng)態(tài)地顯示遞歸函數(shù)被調(diào)用的軌跡。3、編寫(xiě)一個(gè)函數(shù),判斷一個(gè)數(shù)是不是素?cái)?shù)。在主函數(shù)中輸入一個(gè)整數(shù),輸出是否是素?cái)?shù)的信息。實(shí)驗(yàn)步驟與要求:(1)編寫(xiě)一個(gè)函數(shù)prime(n),返回給定整數(shù)n是否為素?cái)?shù)。(2)編寫(xiě)一個(gè)主函數(shù),輸入一個(gè)整數(shù),調(diào)用(1)中的函數(shù),判斷此整數(shù)是否為素?cái)?shù),并輸出結(jié)果。(3)對(duì)于屬于多函數(shù)程序,可以采用每個(gè)函數(shù)分別進(jìn)行編輯、編譯的方法,然后再連接、運(yùn)行。如果編譯有錯(cuò)時(shí),可分別修改,這樣便于調(diào)試。實(shí)驗(yàn)4和實(shí)驗(yàn)4也可以使用這樣的調(diào)試方法。4、用梯形法求函數(shù)的定積分。實(shí)驗(yàn)步驟與要求:(1)編制一個(gè)函數(shù)sab(a,b,n),其功能是求函數(shù)f(x)在[a,b]上的定積分,其中n為區(qū)間[a,b]的等分?jǐn)?shù)。要求該函數(shù)在一個(gè)獨(dú)立的文件中。(2)編制一個(gè)主函數(shù)以及計(jì)算被積函數(shù)值的函數(shù)f(x),在主函數(shù)中調(diào)用(1)中的函數(shù)計(jì)算并輸出下列積分值。要求主函數(shù)與函數(shù)f(x)在同一個(gè)文件中。(3)編制另一個(gè)主函數(shù)以及計(jì)算被積函數(shù)值的函數(shù)f(x),在主函數(shù)中調(diào)用(1)中的函數(shù)計(jì)算并輸出下列積分值。要求主函數(shù)與函數(shù)f(x)在同一個(gè)文件中。說(shuō)明:用梯形法求定積分,梯形公式為:s=h[f(a)+f(b)]/2+hf(a+kh)其中,h=(b-a)/n5、用遞歸方法編寫(xiě)程序,求n階勒讓德多項(xiàng)式的值,遞歸公式為:1(n=0)pn(x)=x(n=1)((2n-1)xpn-1(x)-(n-1)pn-2(x))/n(n>1)實(shí)驗(yàn)步驟與要求:(1)根據(jù)遞歸公式編制計(jì)算n階勒讓德多項(xiàng)式的遞歸函數(shù)p(n,x);(2)編制一個(gè)主函數(shù),由鍵盤(pán)輸入n,x,調(diào)用(1)中的函數(shù)計(jì)算n階勒讓德多項(xiàng)式的值;(3)輸入(n,x)=(4,2)運(yùn)行該程序,然后自定義幾組數(shù)據(jù)再運(yùn)行該程序。程序調(diào)試說(shuō)明:多模塊的調(diào)試除了可以采用前面實(shí)驗(yàn)中采用的各種調(diào)試方法以外,還可以采用“回聲打印”的調(diào)試方法。當(dāng)函數(shù)之間要傳遞的數(shù)據(jù)較多時(shí),容易出錯(cuò)。這時(shí),在有關(guān)的輸入數(shù)據(jù)之后加上輸出語(yǔ)句,以便反映數(shù)據(jù)輸入的情況。在函數(shù)之間有數(shù)據(jù)傳遞后,再用輸出語(yǔ)句把傳遞后的數(shù)據(jù)輸出,這樣可以找到數(shù)據(jù)的錯(cuò)誤處,以便分析原因。*6、求幻方:對(duì)于n行n列的方陣(n為奇數(shù)),將1~n2共n2個(gè)數(shù)填于此方陣中,如果所得方陣中的每一行、每一列以及兩個(gè)對(duì)角線(xiàn)上各數(shù)之和均相等,則稱(chēng)此方陣為魔幻縱橫圖。請(qǐng)編寫(xiě)程序?qū)崿F(xiàn)(n從鍵盤(pán)輸入)。*7、求解組合數(shù):計(jì)算在總數(shù)為n個(gè)的對(duì)象中,任意取p個(gè)的所有不同組合數(shù)(其中n為>0的正整數(shù),p為>=0的正整數(shù)且p<=n)及其具體的組合情況。要求用遞歸函數(shù)調(diào)用的方法實(shí)現(xiàn)。六、實(shí)驗(yàn)報(bào)告1.提交源程序2.分析以下兩個(gè)問(wèn)題:(1)針對(duì)以上實(shí)驗(yàn)內(nèi)容寫(xiě)出相應(yīng)的參數(shù)傳遞過(guò)程并分析結(jié)果;(2)討論參數(shù)的傳遞的幾種形式。實(shí)驗(yàn)8指針一、實(shí)驗(yàn)?zāi)康募皟?nèi)容1、通過(guò)實(shí)驗(yàn)進(jìn)一步掌握指針的概念,會(huì)定義和使用指針變量;2、能正確使用數(shù)組的指針和指向數(shù)組的指針變量;3、能正確使用字符串的指針和指向字符串的指針變量;4、能正確使用指向函數(shù)的指針變量;5、了解指向指針的指針的概念及其使用方法。二、實(shí)驗(yàn)性質(zhì)驗(yàn)證性實(shí)驗(yàn)三、實(shí)驗(yàn)學(xué)時(shí)2學(xué)時(shí)四、實(shí)驗(yàn)環(huán)境TurboC2.0五、實(shí)驗(yàn)原理與步驟第一組實(shí)驗(yàn)程序:1、指出下面程序錯(cuò)誤的原因。#include<stdio.h>voidmain(void){intx=10,y=5,*px,*py;px=py;//此前,py并未初始化。px=&x;py=&y;printf("*px=%d,*py=%d,*px,*py);//格式控制字符串不全}2、下面的程序試圖有如下運(yùn)行結(jié)果:whichstyleyouwantto:Capital(c)oruncapital(a):c↙COMPUTERWhichsytleyouwantto:Capital(c)oruncapital(a):u↙computer請(qǐng)調(diào)試下面的程序,使其有如上執(zhí)行結(jié)果。#include<stdio.h>//缺某庫(kù)函數(shù)包含語(yǔ)句voidmain(void){char*s;charc;printf("whichstyleyouwantto:ln");printf("capital(c)oruncapital(a):");c=getchar();if(c='c')strcpy(s,"COMPUTER");//注意s指針指向了誰(shuí)?elsestrcpy(s,"computer");//庫(kù)函數(shù)put(s);//庫(kù)函數(shù),名字對(duì)嗎?}分析出錯(cuò)原因。3、下面的程序能獲得上述運(yùn)行結(jié)果嗎?#include<stdio.h>#include<string.h>voidmain(void){char*S="COMPUTER";//??charc;printf("whichstyleyouwantto\n");printf("capital(c)oruncapital(u);");c=getchar();if(c='c')//此處判斷關(guān)系,形式對(duì)嗎?{puts(s);}else{s="computer";puts(s);}}分析出錯(cuò)原因。4、設(shè)計(jì)一個(gè)C程序,用以測(cè)試下列各表達(dá)式的運(yùn)算。(1)y=*px++(2)y=*++py(3)y=(*py)++(4)y=--*ppx++第二組實(shí)驗(yàn)程序:1、想使指針變量pt1指向a和b中的大者,pt2指向小者,以下程序能否實(shí)現(xiàn)此目的?#include<stdio.h>#include<string.h>voidswap(int*p1,int*p2){int*p;p=p1;p1=p2;p2=p;}voidmain(void){inta,b,*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)題目要求,指出原因,并修改之。2、下面的程序,注意其中的復(fù)雜聲明語(yǔ)句:int(*function[4])();和各標(biāo)記符的含義,并記錄執(zhí)行結(jié)果。#include<stdio.h>#include<string.h>voidmain(void){intfun1();intfun2();intfun3();intfun4();int*execute(intx,inty,int*fun());int(*function[4])();inta=10,b=5,i;function[0]=fun1;function[1]=fun2;function[2]=fun3;function[3]=fun4;for(i=0;i<4;i++)printf("funno.%d->%d\n",i+1,execute(a,b,function[i]));}int*execute(intx,inty,int*fun()){return(*fun)(x,y);}intfun1(intx,inty){return(x+y);}intfun2(intx,inty){return(x-y);}intfun3(intx,inty){return(x*y);}intfun4(intx,inty){return(x/y);}3、程序voidmain(intargc,char*argv[]){while(argc-->1)printf("%s\n",*++argv);}假設(shè)該程序的文件名為shiyan.cpp,編譯后可執(zhí)行程序名為shiyan.exe(用DOS時(shí)),在dos下運(yùn)行時(shí),輸入下面命令行:shiyan.exeBASICC++COBOLPASCL分析輸出結(jié)果。可運(yùn)行程序:#include<stdio.h>#include<string.h>voidswap(int*p1,int*p2)//思考為何如此修改即可達(dá)到交換的目的?{intiTemp;iTemp=*p1;*p1=*p2;*p2=iTemp;}voidmain(void){inta,b,*pt1,*pt2;scanf("%d,%d",&a,&b);pt1=&a;pt2=&b;if(a<b){swap(pt1,pt2);}printf("%d,%d\n",*pt1,*pt2);}第三組實(shí)驗(yàn)程序:*1、篩選法求素?cái)?shù)用篩選法找出n以?xún)?nèi)的所有素?cái)?shù)(就是質(zhì)數(shù)),并按每行10個(gè)數(shù)的形式打印出來(lái)。*2、報(bào)數(shù)問(wèn)題有n個(gè)人圍成一圈,順序編號(hào)。從第一個(gè)人開(kāi)始報(bào)數(shù)(從1到m),凡報(bào)到m的人退出圈子,問(wèn)最后一個(gè)圈中的人的編號(hào)?*3、統(tǒng)計(jì)整數(shù)輸入一段文字,將其中連續(xù)的數(shù)字作為整數(shù)存放在另一數(shù)組中,并統(tǒng)計(jì)整數(shù)的個(gè)數(shù)。六、實(shí)驗(yàn)報(bào)告1.提交源程序2.分析:數(shù)組與指針的聯(lián)系。實(shí)驗(yàn)9結(jié)構(gòu)體和共用體一、實(shí)驗(yàn)?zāi)康?、掌握結(jié)構(gòu)體類(lèi)型變量的定義和使用;2、掌握結(jié)構(gòu)體類(lèi)型數(shù)組的概念和使用;3、掌握鏈表的概念,初步學(xué)會(huì)對(duì)鏈表進(jìn)行操作;4、掌握共用體的概念與使用。二、實(shí)驗(yàn)內(nèi)容編程序并上機(jī)調(diào)試運(yùn)行:1、由10個(gè)學(xué)生,每個(gè)學(xué)生的數(shù)據(jù)包括學(xué)號(hào)、姓名、3門(mén)課的成績(jī),從鍵盤(pán)輸入10個(gè)學(xué)生數(shù)據(jù),要求打印出3門(mén)課總平均成績(jī),以及最高分的學(xué)生的數(shù)據(jù)。2、13個(gè)人圍成一圈,從第1個(gè)人開(kāi)始順序報(bào)號(hào)1、2、3。凡報(bào)到3者退出圈子,找出最后留在圈子中的人原來(lái)的序號(hào)。3、本題要求用鏈表實(shí)現(xiàn)。建立一個(gè)鏈表,每個(gè)結(jié)點(diǎn)包括:學(xué)號(hào)、姓名、性別、年齡。輸入一個(gè)年齡,如果鏈表中的結(jié)點(diǎn)所包含的年齡等于此年齡,則將此結(jié)點(diǎn)刪去。4、練習(xí)一個(gè)使用共用體的程序。三、實(shí)驗(yàn)性質(zhì)驗(yàn)證性實(shí)驗(yàn)四、實(shí)驗(yàn)學(xué)時(shí)2學(xué)時(shí)五、實(shí)驗(yàn)環(huán)境TurboC2.0六、實(shí)驗(yàn)原理與步驟1、建立一個(gè)鏈表每個(gè)結(jié)點(diǎn)包括的成員為:職工號(hào)、工資。用malloc打印出來(lái)。用一個(gè)creat來(lái)建立鏈表,用list來(lái)輸出數(shù)據(jù)。5個(gè)職工號(hào)為101,103,105,107,109。2、在上題基礎(chǔ)上,新增加一個(gè)職工的數(shù)據(jù),按職工號(hào)的順序插入鏈表,新插入的職工號(hào)為106。寫(xiě)一函數(shù)insert來(lái)插入新結(jié)點(diǎn)。3、在上面的基礎(chǔ)上,寫(xiě)一函數(shù)delete,用來(lái)刪除一個(gè)結(jié)點(diǎn)。要求刪除職工號(hào)為103的結(jié)點(diǎn)。打印出刪除后的鏈表。4、你有無(wú)辦法測(cè)試構(gòu)造鏈表時(shí),內(nèi)存空間的動(dòng)態(tài)分配情形?*5、現(xiàn)有一個(gè)班有30個(gè)學(xué)生,每個(gè)學(xué)生信息包括姓名、學(xué)號(hào)、以及期末總成績(jī)。要求編寫(xiě)程序找出其中總分最高和最低的學(xué)生,并分別打印出其所有信息。七、實(shí)驗(yàn)報(bào)告提交源程序分析在上機(jī)過(guò)程中遇到的問(wèn)題及解決方法。實(shí)驗(yàn)10位運(yùn)算一、實(shí)驗(yàn)?zāi)康募皟?nèi)容1、掌握按位運(yùn)算的概念和方法,學(xué)會(huì)使用位運(yùn)算符;2、學(xué)會(huì)通過(guò)位運(yùn)算實(shí)現(xiàn)對(duì)某些位的操作。二、實(shí)驗(yàn)性質(zhì)驗(yàn)證性實(shí)驗(yàn)三、實(shí)驗(yàn)學(xué)時(shí)2學(xué)時(shí)四、實(shí)驗(yàn)環(huán)境TurboC2.0五、實(shí)驗(yàn)原理與步驟1、編一個(gè)程序,將一個(gè)整數(shù)的高字節(jié)和低字節(jié)分別輸出(用位運(yùn)算方法)。上機(jī)運(yùn)行。2、編一個(gè)程序,止將一個(gè)整數(shù)的低4位翻轉(zhuǎn)。上機(jī)運(yùn)行,用十六進(jìn)制數(shù)輸入和輸出。3、將一個(gè)整數(shù)i的各位循環(huán)左移4位,設(shè)i的值為十六進(jìn)制數(shù)65。4、設(shè)計(jì)一個(gè)函數(shù),當(dāng)給定一個(gè)整數(shù)后,能得到該數(shù)的補(bǔ)碼(應(yīng)考慮該整數(shù)是正數(shù)或負(fù)數(shù))。5、編寫(xiě)一程序,檢查所用的計(jì)算機(jī)系統(tǒng)的C編譯在執(zhí)行右移時(shí)是按照邏輯右移的原則,還是按照算術(shù)右移的原則進(jìn)行操作。6、編一個(gè)函數(shù)getbits,從一個(gè)16位的單元中取出某幾位,用八進(jìn)制數(shù)打印出來(lái)。7、設(shè)計(jì)一個(gè)函數(shù),使給出一個(gè)數(shù)的原碼,能得到該數(shù)的補(bǔ)碼。 六、實(shí)驗(yàn)報(bào)告1.提交源程序2.分析在上機(jī)過(guò)程中遇到的問(wèn)題及解決方法。實(shí)驗(yàn)11文件一、實(shí)驗(yàn)?zāi)康募皟?nèi)容1、掌握文件以及緩沖文件系統(tǒng)、文件指針的概念;2、學(xué)會(huì)使用文件打開(kāi)、關(guān)閉、讀、寫(xiě)文件操作函數(shù);3、學(xué)會(huì)用緩沖文件系統(tǒng)對(duì)文件進(jìn)行簡(jiǎn)單的操作。二、實(shí)驗(yàn)性質(zhì)驗(yàn)證性實(shí)驗(yàn)三、實(shí)驗(yàn)學(xué)時(shí)2學(xué)時(shí)四、實(shí)驗(yàn)環(huán)境TurboC2.0五、實(shí)驗(yàn)原理與步驟1、從鍵盤(pán)輸入一個(gè)字符串,然后將其以文件形式存到磁盤(pán)上。磁盤(pán)文件名為file1.c。2、從磁盤(pán)文件file1.c讀入一行字符,將其中所有小寫(xiě)字母改為大寫(xiě)字母,然后輸出到磁盤(pán)文件file2.c中。3、已有兩個(gè)文本文件,今要求編程序從這兩個(gè)文件中讀出各行字符,逐個(gè)比較這兩個(gè)文件中相應(yīng)的行和列上的字符,如果遇到互不相同的字符,輸出它是第幾行第幾列的字符。4、統(tǒng)計(jì)一篇文章中大寫(xiě)字母的個(gè)數(shù)和文章中的句子數(shù)(句子的結(jié)束標(biāo)志是句點(diǎn)后跟一個(gè)或多個(gè)空格)。5、建立一個(gè)磁盤(pán)文件,其內(nèi)容是0~90°之間每隔5°的正弦值。程序如下:#include<iostream.h>#include<fstream.h>#include<math.h>#definePI3.14159main(){floatS[19];inti,a;ofstreamout(“fsin.bny”);if(!out){cout<<”Cannotopenfile.”<<endl;return1;}for(i=0,a=-5;i<19;i++){a+=5;S[i]=sin(a*PI/180.0);}out.write((unsignedchar*)&s,sizeofs);out.close();return0;}6、把實(shí)驗(yàn)題5所建立的文件的內(nèi)容讀出并打印。程序如下:#include<iostream.h>#include<fstream.h>main(){floatS[19];inti,a;ifstreamin(“fsin.bny”);if(!in){cout<<“Cannotopenfile.”<<endl;return1;}in.read((unsignedchar*)s,sizeofs);cout<<endl;cout<<“isin(i)”<<endl;for(i=0,a=-5;i<19;i++){a+=5;cout<<“a<<S[i]<<”<<endl;}in.close();return0;}7、有5個(gè)學(xué)生,每個(gè)學(xué)生有3門(mén)課的成績(jī),從鍵盤(pán)輸入以上數(shù)據(jù),計(jì)算出平均成績(jī),將原有數(shù)據(jù)和計(jì)算出的平均分?jǐn)?shù)存放在磁盤(pán)文件stud中。*8、TYPE命令模擬:在windows的MS-DOS方式下有一個(gè)DOS內(nèi)部命令TYPE,用于顯示文本文件的內(nèi)容,其命令使用格式為:TYPEFILE。在此我們使用C語(yǔ)言來(lái)模擬實(shí)現(xiàn)該程序。*9、存儲(chǔ)文件:從鍵盤(pán)輸入若干行文本,直到輸入字符串”END”位置,將其中包含英文字母的行,送到文件SAVE01.TXT中存儲(chǔ)起來(lái),并顯示SAVE01.TXT中的最后5行(不足5行的以實(shí)際行數(shù)為準(zhǔn))。*10、文件復(fù)制:編寫(xiě)程序?qū)崿F(xiàn)文件的復(fù)制,其中源文件名稱(chēng)和目標(biāo)文件名稱(chēng)使用命令行參數(shù)提供。六、實(shí)驗(yàn)報(bào)告1.提交源程序2.分析以下兩個(gè)問(wèn)題:(1)緩沖文件系統(tǒng)和非緩沖文件系統(tǒng)的區(qū)別?(2)文件打開(kāi)和關(guān)閉的含義?為什么要打開(kāi)和關(guān)閉文件?實(shí)驗(yàn)12綜合應(yīng)用實(shí)驗(yàn)一、實(shí)驗(yàn)?zāi)康呐c內(nèi)容1、掌握用C語(yǔ)言進(jìn)行簡(jiǎn)單的數(shù)據(jù)庫(kù)管理。2、了解C程序菜單設(shè)計(jì)的一般方法。3、理解鏈表的概念及應(yīng)用。

二、實(shí)驗(yàn)性質(zhì)綜合性實(shí)驗(yàn)三、實(shí)驗(yàn)學(xué)時(shí)2學(xué)時(shí)四、實(shí)驗(yàn)環(huán)境TurboC2.0五、實(shí)驗(yàn)原理和步驟*1、學(xué)生信息處理:一個(gè)學(xué)生的信息包括學(xué)號(hào)、姓名、年齡、身高四項(xiàng)信息?,F(xiàn)分別編寫(xiě)以下程序?qū)崿F(xiàn)對(duì)學(xué)生信息的處理。(1)輸入若干學(xué)生的信息,下一次輸入之前進(jìn)行提示選擇,輸入的選擇為字符串“END”則結(jié)束,否則繼續(xù)。輸入的信息以文本文件格式保存,文件名通過(guò)命令行參數(shù)給出;學(xué)生信息各個(gè)信息項(xiàng)之間用制表符隔開(kāi),每個(gè)學(xué)生信息占一行。(2)通過(guò)運(yùn)行程序(1),生成學(xué)生信息文件。編寫(xiě)程序統(tǒng)計(jì)學(xué)生的人數(shù)、平均年齡、平均身高。將所有學(xué)生的信息和統(tǒng)計(jì)信息送打印機(jī)打印。2、建立一個(gè)鏈表,每個(gè)結(jié)點(diǎn)包括學(xué)號(hào)、姓名、及三科成績(jī)、平均成績(jī)。除平均成績(jī)外,各項(xiàng)均由鍵盤(pán)輸入。要求:(A)計(jì)算平均成績(jī);(B)要實(shí)現(xiàn)插入功能;(C)要有排序功能;(D)要有存取功能。參考程序:#include<stdio.h>structSStudent{unsignednumber;charname[11];intscore1,score2,score3;structSStudent*link;};structSStudent*CreateTable();voidAppendToTable(structSStudent*stu);voidInsertToTable(structSStudent*stu);voidQueryTable(structSStudent*stu,unsignedage);voidSortTable(structSStudent*stu);voidPrintTable(structSStudent*stu);voidSave(structSStudent*stu);voidLoad(structSStudent*stu);voidHelp();voidmain(){structSStudent*student;unsignednumber;charkeyValue;student=CreateTable();clrscr();Help();printf("\n=");while((keyValue=getche())!='q'&&keyValue!='Q'&&keyValue!=27){puts("");switch(keyValue){case'l':case'L': PrintTable(student);break;case'd':case'D': printf("Pleaseinputthenumberyouwantdelete:"); scanf("%d",&number); QueryTable(student,number); break;case'a':case'A': AppendToTable(student);break;case'i':case'I': InsertToTable(student);break;case's':case'S': SortTable(student); puts("Sortcomplished!PleaseusecommandLtolist."); break;case'v':case'V': Save(student);break;case'o':case'O': Load(student);break;case'c':case'C': clrscr();break;case'h':case'H': Help();break;default:puts("Errorcommand!");}printf("\n=");}}

structSStudent*CreateTable(){structSStudent*stu;stu=(structSStudent*)malloc(sizeof(structSStudent));stu->number=0;stu->score1=stu->score2=stu->score3=0;stu->name[0]='\0';stu->link=NULL;return(stu);}

voidAppendToTable(structSStudent*stu){structSStudent*next,*last;intnumber;last=stu;while(last->link)last=last->link;printf("Pleaseinputthenumber(0toquit):");scanf("%d",&number);while(number){next=(structSStudent*)malloc(sizeof(structSStudent));next->number=number;printf("Pleaseinputname:");scanf("%10s",next->name);printf("Pleaseinputthefirstscore:");scanf("%d",&next->score1);printf("Pleaseinputthesecondscore:");scanf("%d",&next->score2);printf("Pleaseinputthethirdscore:");scanf("%d",&next->score3);last->link=next;last=last->link;printf("\nPleaseinputthenumber(0toquit):");scanf("%d",&number);}last->link=NULL;}

voidInsertToTable(structSStudent*stu){structSStudent*next,*last;intnumber;printf("Pleaseinputthenumber(0toquit):");scanf("%d",&number);while(number){next=(structSStudent*)malloc(sizeof(structSStudent));next->number=number;printf("Pleaseinputname:");scanf("%10s",next->name);printf("Pleaseinputthefirstscore:");scanf("%d",&next->score1);printf("Pleaseinputthesecondscore:");scanf("%d",&next->score2);printf("Pleaseinputthethirdscore:");scanf("%d",&next->score3);last=stu;while(last->link){if(last->link->number>next->number){ next->link=last->link; last->link=next; break;}elselast=last->link;}printf("\nPleaseinputthenumber(0toquit):");scanf("%d",&number);}}

voidQueryTable(structSStudent*stu,unsignednumber){structSStudent*temp,*next;next=stu;while(next->link){if(next->link->number==number){temp=next->link;next->link=next->link->link;free(temp);}elsenext=next->link;}}

voidPrintTable(structSStudent*stu){stu=stu->link;if(!stu){puts("ThetableisEMPTY!");return;}printf("number\tname\t\tscore1\tscore2\tscore3\n");while(stu){printf("%3d\t",stu->number);printf("%-10s\t",stu->name);printf("%4d\t",stu->score1);printf("%4d\t",stu->score2);printf("%4d\t\n",stu->score3);stu=stu->link;}}

voidSortTable(structSStudent*stu){structSStudent*next,*last,*temp;intflag;last=stu;while(last->link){next=stu;flag=1;while(next->link!=last->link){if(next->link->number>last->link->number){ temp=last->link; last->link=last->link->link; temp->link=next->link; next->link=temp; flag=0; break;}elsenext=next->link;}if(flag)last=last->link;}}

voidSave(structSStudent*stu){unsignedcharfilename[13];FILE*fileSave;printf("Pleaseinputthefilenameyouwantsavein:");scanf("%s",filename

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論