C語言程序設計試驗_第1頁
C語言程序設計試驗_第2頁
C語言程序設計試驗_第3頁
C語言程序設計試驗_第4頁
C語言程序設計試驗_第5頁
免費預覽已結束,剩余48頁可下載查看

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

C語言程序設計實驗VisualC++6.0上機指南§1VisualC++概述VisualC++是Microsoft公司推出的基于Windows平臺的可視化編程環(huán)境,它不僅提供了控制臺應用程序來學習和運行標準C程序,而且還提供了“可視”的資源編輯器與MFC類以及應用程序向導,為快速髙效地開發(fā)Windows應用程序提供了極大的方便,此外,還可進行Internet、數(shù)據(jù)庫及多媒體等多方而的程序開發(fā)。由于苴功能強大、靈活性好、完全可擴展,以及具有強有力的Internet支持,成為目前最為流行的C++語言集成開發(fā)環(huán)境。

VisualC++6.0分為標準版、專業(yè)版和企業(yè)版三種,但其基本功能是相同的。下而以企業(yè)版為編程環(huán)境,對就如何在VisualC++環(huán)境下調試和運行標準C程序進行簡單的介紹。§2進入VisualC++工作環(huán)境一、 建立個人子目錄:第一次上機時先在本地盤(如E:盤)上建立一個以自己學號命名的文件夾,如:030340136。然后按以下步驟進行操作;二、 啟動VisualC++6.0:雙擊Windows桌而上的VisualC++6.0圖標或單擊Windows桌而上"開始"按鈕,在“程序”中選擇“VisualC++6.0”運行即可?!?編輯、編譯、運行標準C程序一、創(chuàng)建一個新的工程文件(Projectfile)圖2-1創(chuàng)建新的工程文件1、 在VisualC++的主菜單中單擊“文件”菜單,在其下拉菜單中選擇“新建”,屏幕上出現(xiàn)一個'‘新建”對話框,在該對話框中選擇“工程”標簽,出現(xiàn)“工程”對話框,如圖2-1圖2-1創(chuàng)建新的工程文件2、 選擇工程類型為“Win32ConsoleApplicationw?這時,在右邊的“平臺”選框中就會出現(xiàn)Win32?3、 輸入工程名字。在“工程”選框中輸入所指泄的工程文件名字,例如:testlo4、 輸入路徑名。在“位置”選框中,輸入你將要把所建立的工程文件放人何處的路徑名。例如,要將工程文件放在E:盤下已建立好的子目錄E:\030340136子目錄中,所以該選取路徑為:E:\030340136\testE選擇“確定”按鈕,該工程文件已建立。

5、在出現(xiàn)的°Win32ConsoleApplication"對話框中選擇"AnEmptyproject建立一個空的工程文件,并點擊“完成”按鈕.如圖2-2所示:圖2?2選擇“建立空工程”6、系統(tǒng)彈出“新建工程信息”對話框,如圖2-3所示,點擊“確芒'按鈕,即可完成工程的創(chuàng)建。圖2?3確認工程信息建立源文件

再次選擇“File”菜單中的“Ne/選項,出現(xiàn)如圖2-4所示的對話框,在四個標簽中選擇“文件”標簽,在其中的對話框選項中,選擇“C++SourceFile".并在右邊的“添加工程”的選擇框內打勾,激活其下而的選項,然后在“文件”框內輸入源文件名(如1st),單擊“確定”按鈕,出現(xiàn)編輯屏幕(如圖2-5所示),即可在編借窗口中編寫程序。圖2-4新建源文件編譯連接和運行源程序程序編好后要進行編譯連接和運行,步驟如下:1、選擇“編譯”菜單.單擊下拉菜單中的“編譯lst.cpp”,這時系統(tǒng)開始對當前的源程序進行編譯,在編譯過程中,將所發(fā)現(xiàn)的錯誤顯示在屏幕下方的“編譯”窗口中,如圖2-5所示。根據(jù)錯誤提示,修改程序后再重新編譯,如還有錯誤,再繼續(xù)修改、編譯,直到沒有錯誤為止。

2、編譯無誤后進行鏈接,這時選擇"編譯”菜單中的“構件testl.exe”選項。同樣,對出現(xiàn)的錯誤要進行更改,直到編譯鏈接無錯為止。這時,在''編譯”窗口中會顯示如下信息:testl.exe-0error(s),0warning(s),如圖2-6所示,說明編譯鏈接成功,并生成以工程文件名為需字的可執(zhí)行文件testl.exeo3、運行程序,選擇"編譯”菜單中的“!執(zhí)行testl.exe"選項。這時?會出現(xiàn)一個“MS-DOS”窗口,輸出結果顯示在該窗口中(如圖2-7所示)。4、運行結朿后,可以回到“文件"菜單,點擊“關閉工作區(qū)”選項,關閉當前文件窗口。若要編輯新的源程序,可以再次打開“文件”菜單,重新建立工程文件,步驟如上所述;也可以點擊“文件”菜單中的“打開工作區(qū)”選項,打開一個已經存在的源文件。圖2?7程序運行的輸出結果窗口結果實驗一C語言程序初步一、 目的要求1、 了解所用計算機系統(tǒng)的基本操作方法,學會獨立使用該系統(tǒng)。熟悉C語言程序開發(fā)環(huán)境。2、 掌握在C語言開發(fā)環(huán)境中如何編輯、編譯、鏈接和運行C語言程序。3、 通過運行簡單的程序,熟悉C語言的基本格式規(guī)范,并初步了解它的結構特點。二、 預習內容1、 熟悉VC的編輯環(huán)境,了解開發(fā)環(huán)境中的編輯、編譯、連接和運行。2、 了解下列命令及函數(shù):include<stdio.h>^main、printfscanf三、 實驗內容1、 輸入如下程序,學會在VC下,如何編輯、編譯、運行C程序,以及如何查看運行結果。#include<stdio.h>main(){printf(“ &&& &&& &&&\n"):printf(“"):printf(“HellotthisisaCprogramv):printf( \nM):printf(“ &&& &&& &&&\n”):}2、 閱讀并輸入如下程序,分析英功能,查看結果。#include<stdio.h>main(){inta,b,c,s:a=5:b=4:c=6:s=(a+b+c)/3:printf(ua=%d?b=%d>c=%d\n,s=%dM>a?b,c?s):

3、下而是一正方形面積的汁算程序,#include<stdio.h>

main()

{intr,

scanf(通過輸入不同的邊長,求出不同的而積。s=:r*3、下而是一正方形面積的汁算程序,#include<stdio.h>

main()

{intr,

scanf(通過輸入不同的邊長,求出不同的而積。s=:r*printf(注意:程序中含有輸入語句,4、修改以下C程序中的錯誤#include stdio.hmain()運行時將會停留在另一屏等待輸入數(shù)據(jù)。intbtc/*/*a,b,caresides,visvolumeofcubeintv:v=a*b*c:printf("v二include<stdio.h>main{printf( *printf(“**printf(“實驗二數(shù)據(jù)類型、運算符和表達式一、 目的要求1、 掌握C語言數(shù)據(jù)類型的槪念,熟悉如何立義一個整型、字符型、實型變量,以及如何對它們進行賦值。2、 掌握整型、字符型、實型變量數(shù)據(jù)輸出時所用的格式轉換符。3、 學會使用C的有關算術運算符,正確使用由這些運算符構成的表達式。4、 進一步熟悉如何編輯、編譯、連接和運行一個C程序。二、 預習內容1、 各種數(shù)據(jù)類型變量的左義形式,熟悉下列標識符的泄義:int、short[int]、long[int]、float、double[float]xchar2、 常量和變量的異同。三、 上機內容1、閱讀分析以下程序,上機運行驗證結果。分析結果數(shù)據(jù)。注意:下而有些代碼可讀性不好,最好不要寫這樣的代碼,當然可能二級考試比較注重這些語法細節(jié),但是自己寫代碼的時候,一泄要把可讀性放在重要的位巻上,下而的一些代碼可讀性就不是很好(1)^include<stdio.h>main(){charsi二'3’ ,s2二'4',s3二'5’ :intcl=101,c2=102:printf( 3%c\t4%c\t5%c\n?si,s2?s3):printf(“sl=%d\ts2二%d'\ts3:=%d\n?si,s2?s3):printf(“cl=%d\t~%c"?cl.cl):printf( c2=%d\t"%c"?c2,c2):}(2)Sinclude<stdio.h>main(){floatx=8.3>y=4.2,s;inta=7:s=x4-a%5*(int)(x—y)%2/3;printf(s=%f?s):}(3)riinclude<stdio.h>main(){intitj,p?q:i二3;j=6;P=i++ : q= j:printf("%d,%dt%d,%d>i>j,p,q):p=i +3;q=++j—4;printf(d,%di%d?%d?i,j?p,q);}(4)riinclude<stdio.h>main(){intm=15,n二9,s:m*=34-2:printf(%d>m):n+二n—=n*二n:printf("%dM?n):/*逗號表達式的求解過程是:先求解表達式1,再求解表達式2。整個逗號表達式的值是表達式2的值*/printf("%d\n”,(s二6*5>m+n+s)):printf( %d\ns);}2、請改正以下程序的錯誤。#include<stdio.h>#defineMM40main():{inta=3:b=6:t:t二MM/(3+6):print(%d>t,MM):}#include<stdio.h>main(){intm:doublex:scanf(“%ld" ,&m):x=3.14*m*mprintf("f”,x);/*double類型記得用%If,float類型用%f*/}#include〈stdio.h>main(){intm=8,n=5:printf(“%d m*二m—n):/*注:下而的代碼需要輸出三個值,請修改*/printf("%d” ,m=m+1,n—1,m+n):}3、如下程序將兩個數(shù)a,b進行交換,請?zhí)羁胀暾?include<stdio.h>main(){inta=9>b=5;a+二b; /*執(zhí)行完后,a的值是a+b*/b= *執(zhí)行完后,b的值是原本a的值*/a—= :/*執(zhí)行完后,a中的值是原本b的值*/printf(%d%dMIa,b):}}實驗三順序結構和輸入/輸出方法一、 目的要求1、 掌握C語言中賦值語句的使用。2、 掌握數(shù)據(jù)輸入輸出函數(shù)的使用,能正確使用各種格式轉換符。3、 熟悉順序結構程序中語句的執(zhí)行過程,并學會基本調試程序方法。4、 能設計簡單的順序結構程序。二、 預習內容1、 賦值語句的使用2、 scanf函數(shù)、printf函數(shù)的使用方法。三、 上機內容1、改正以下程序的錯誤#include<stdio.h>main(){intm=345:floatn=2?56:/*修改后輸出m的值,n的值,n*100的值*/print(um=%dtn*100=%d\n,m>n,n*100"):}#include<stdio.h>main(){doublea>b,c,s,v;/*輸入語句中需要注意的問題*/scanf(“%d%d%d",a,b,c):s=a*b:v=a*b*c;print(“%dt%d>%dM,a,b,c):/*修改后能輸岀s的值,V的值*/printf(“s=%f\n,s,v=%d\n>v):}}2、程序填空按程序中注釋的要求填輸出語句。#include<stdio.h>main0{intm>n:floatx=3?5,y=6?2;scanf(%d,%d”,&m?&n):printf( ,m,n):/*每個數(shù)的輸出寬度為6,兩數(shù)之間逗號間隔。*/printf(“x= ,y二 “> ):/*每個數(shù)的輸出寬度為7,小數(shù)位數(shù)為2*/}要求運行時必須按如下格式輸入數(shù)據(jù),請?zhí)羁?。注:①分析好下而的?shù)據(jù)類型,然后進行scanf語句的設計下而第一行是int類型,第二行是float,第三、四行是long類型另外,第一行的輸入格式不推薦使用,因為對用戶并不友好,真正的輸入方式應該是用printf語句打印出需要輸入什么變量值,然后再進行輸入的。a=4?b=84.23, 5.7234567main(){inta,b;longm,n:floatp>q:TOC\o"1-5"\h\zscanf :scanf ;scanf ;printf( =%d,b=%d\nm=%ld,n=%ld\n ,a,b,m,n);printf( p=%f>q=%f\n,p,q):程序編譯成功,只是說明沒有語法錯誤,但并不一泄能得出正確結果。因為有可能存在編程邏借錯誤。這時候,我們需要跟蹤變量、調試程序,找出問題所在。VC中的調試方式:F9設宜斷點,F(xiàn)5進入單步調試,F(xiàn)10單步運行,F(xiàn)11單步運行。F10和F11的區(qū)別在于,F(xiàn)11能進入函數(shù)內部進行單步調試。單步運行如下程序,按要求進行變量跟蹤,寫岀調試結果數(shù)據(jù)。#include<stdio.h>main(){inti?j.k?ss.m=1,n=1:scanf( "%d%d”,&i,&j):/*察看變量i,j取值,讀入數(shù)據(jù)是否正確?*/m+二i++:/*觀察變疑m,i結果值,為什么?*/n*二 j:/*觀察變量n,j結果值,為什么?*/ss=(k=m+2,n—5,k+n);/*觀察變量k的結果值*/printf( **%d”,ss):/*查看最終結果,為什么?*/}3、 編寫程序。用getchar函數(shù)讀入兩個字符cl,c2,然后分別用putchar函數(shù)和printf函數(shù)輸出這兩個字符。并思考以下問題:(cl二getchar();)變量cl,c2應定義為字符型或整型?還是二者皆可?若要求輸岀cl和c2的ASCII碼的十進制值,應如何處理?用putchar函數(shù)還是printf函數(shù)?4、 編寫程序。讀入三個數(shù)給a,b,c,然后交換它們的取值,把a中原來的數(shù)給b,把b中原來的數(shù)給c,把c中原來的數(shù)給a。提示:用一個中間變量記錄其中某個元素的值。5、 ?計算定期存款本利之和設銀行左期存款的年利率rate為2.25%,并已知存款期為n年,存款本金為capital元,試編程計算”年后的本利之和deposit。要求左期存款的年利率rate、存款期n和存款本金capital均由鍵盤輸入提示1:銀行定期存款為復利,計算公式為:deposit=captialx(l+rate)n提示2:使用函數(shù)pow,具體見如下從幫助文檔中的摘錄doublepow(doublex、doubley);Parametersx:Base?y:Exponent?Example//crt_pow?cSinclude<math?h>^include<stdio.h>intmain(void){doublex=2.0,y=3.0,z;z=pow(x,y);printf("%?Iftothepowerof%?Ifis%? x,y,z);}Output0tothepowerof3.0is8.0實驗四邏輯運算和選擇控制一、 目的要求1、 掌握C語言表示邏輯星的方法(以0代表“假”,以1代表“真”):2、 能夠正確使用邏輯運算符和邏輯表達式。3、 學會運用邏輯表達式或關系表達式等表示條件。4、 熟練掌握if語句和switch語句。5、 進一步練習跟蹤調試程序,針對具體數(shù)據(jù)組織輸入測試數(shù)據(jù),觀察程序運行能否得到預期的輸出結果。二、 預習內容1、 熟悉邏輯運算符和邏輯表達式、關系運算符和關系表達式。2、 熟悉下列語句:辻、if—else、switch、break條件運算符?:三、 上機內容K若&和b均是正整數(shù)變量,請改正下列程序段中錯誤的switch語句。注意:如果要上機檢測,需先編寫一簡單程序,左義變量,將下列程序段嵌入其中。果要上機檢測,需先編寫一簡單程序,左義變量,將下列程序段嵌入其中。a.switch(a/b){case0:case5:y=a-b:case1:case3:y=a+b: break:}b.switch(a*a+b*b):{case3■■case1:y=a+b;break:case0:y=b-a:break:}c.switcha{defaultx=a+b;break:break:case 10: ybreak:break:case 11: x=a*d:

d.switch(a+b)(caselO:x=a+b:break:casell:casell:y=a~b}break:2、有一函數(shù)如下:廠x (—5<x<0)y二&x-1 (x=0)jx+1 (0<x<10)要求輸入X的值,求岀y值。下而分別用(1)不嵌套的if語句(2)嵌套的辻語句編寫了程序,請?zhí)羁諏⒊绦蛲暾?。注意:寫語句的時候,不要這樣寫if(-5<x<0),而應該如此if(x>-5&&x<0)不嵌套的if語句#include<stdio.h>mainO{intx,y:scanf(“%d",&x);TOC\o"1-5"\h\zif y 二 x;if y = x—1;if y = x+1:printf("%d”,y):}嵌套的辻語句注意:下而的寫法雖然能實現(xiàn)功能,但是,不是好的寫法。規(guī)范的程序寫法應該是在適當?shù)牡胤郊由洗罄ㄌ?,即使是只有一條語句,這樣程序的可讀性才好nclude<stdio.h>mainO{intx,y:scanf("%d”9&x);if((x>—5)&&(x<0)) :elseif y=x—1:

y=x+1:printf( y);}3、 如下程序運用條件運算符求變量的絕對值,請?zhí)羁諏⒊绦蛲暾?include<stdio.h>main(){inta,M;scanf(u%dM> &a):M= ? : :printf(“abs(a)=%d,M):}4、 已知三個數(shù)a,b,c,編寫程序找出最大值,放于max中。輸入下列幾組數(shù)據(jù)分析調試程序,觀察程序執(zhí)行順序并寫出運行結果。5、編程題:從鍵盤輸入三個數(shù),5、編程題:從鍵盤輸入三個數(shù),分別讓它們代表三條線段的長度,請編寫程序,判斷⑴a=1 ,b=2,c=3⑵a=2 ?b=1 ,c=3⑶a—39b=2,c二1⑷a—3?b=1 ,c=2a—3?b=3,c二2⑹a—2 ?b=1 ,c=2由這三條線段所組成的三角形將屬于什么類型(不等邊,等腰,等邊或不構成三角形兒6、(選做題)編程:定義一個不多于4位的正整數(shù),要求:求出它是幾位數(shù);按逆序打印出每一位數(shù)字,例如原數(shù)357輸出753。提示:(這道題用循環(huán)做比較方便,否則結構比較混亂)(1)判斷位數(shù):方法一:使用循環(huán)判斷數(shù)字位數(shù),循環(huán)體內使用除法,每次除以10,得到商,當商為0的時候,可以知道循環(huán)結朿,得到該正整數(shù)的位數(shù)方法二:因為題目條件,不多于4位數(shù),所以可以直接進行判斷,比如如果在100到999之間的數(shù)就是3位數(shù)(2)按逆序打印出每一位數(shù)字:使用%運算符,可以逆序分離出每個數(shù)字(每次除以10得到的余數(shù))實驗五循環(huán)結構一、 目的要求練習并掌握利用while語句、for語句、do_wh訂e語句實現(xiàn)循環(huán)結構的方法:掌握循環(huán)結構和選擇結構的嵌套設計方法,以及多重循環(huán)的設計方法:掌握控制語句break、continue語句的使用方法。二、 預習內容循環(huán)結構語句while語句、for語句、do_while語句等的基本使用方法:循環(huán)和選擇結構的嵌套方法、及多重循環(huán)的設計方法:控制語句breakxcontinue語句的使用方法;循環(huán)結構中的循環(huán)起始終止條件以及循環(huán)變量的使用:三、 上機內容調試以下程序,分別輸入5和6,以單步跟蹤的方式運行程序,觀察循環(huán)中命令的執(zhí)行及轉向情況,并記錄程序的運行結果。#include<stdio.h>main(){intn;/*永循環(huán),一般永循環(huán)中應該有break語句用于在適當?shù)臅r候結朿循環(huán)*/while(1){printf(z,Enteranumber:^);sc^nf&n);if(n%2==l){printf("Isaid");continue;}break;}printf('"Thanks?Ineededthat!");}以下程序的功能是:假設樹髙k厘米,小蠶每天白天向上爬m(xù)厘米,每天晚上因睡覺向下滑n厘米,爬到頂后不再下滑(n<m<k)。計算小蠶需要多少天才能爬到樹頂?請勿改動程序中現(xiàn)有的任何內容,在花括號中注明處補充編寫若干語句,使程序完整。要求使用循環(huán)語句完成。(編寫程序的時候要注意,小蠶是白天爬上去的,只要爬到頂了,晚上就不會再滑下來,所以,最后一天,不用再減去晩上滑下的距離了!!因此爬到頂后,回顧一下,會發(fā)現(xiàn)爬的天數(shù)比滑下來的天數(shù)要多一的)測試數(shù)據(jù):若分別給k.m、n輸入253、71、29,則輸出結果應為6。若分別給k、m、n輸入72、71、29,則輸出結果應為2。若分別給k、m、n輸入100、120、90,則輸岀結果應為1。^include<stdio.h>mainO{intk,m,n,day二0;printf("\nPleaseenter3numbers:”);scanf(z/%d%d%d/z,&k,&m,&n);{/*在此處編寫若干語句,使程序完整*/}printf("\nFor%ddays,wormwillbeatthetop.“,day);}使用循環(huán)語句編程,輸出下三角形狀的九九乘法表(見下圖)。*12345678911224336944812165510152025661218243036771421283542498816243240485664991827364554637281九九乘法表注意:雙重循環(huán),并且可以用%5d這樣的格式控制進行輸出控制實驗六數(shù)組一、 目的要求掌握一維數(shù)組與二維數(shù)組的定義、使用及初始化方法。學習數(shù)組作為函數(shù)參數(shù)的用法。掌握字符數(shù)組和字符串函數(shù)的使用方法。掌握與數(shù)組有關的常用排序算法,進一步理解模塊化程序設計的方法。二、 預習內容一維數(shù)組與二維數(shù)組的泄義、使用及初始化方法:字符數(shù)組和字符串函數(shù)的使用方法;三、 上機內容以下程序的功能是:設數(shù)組XX(有n個元素),求出英中偶數(shù)和奇數(shù)的個數(shù)分別是多少。以下程序的功能是:對a數(shù)組中n種商品價格進行分段統(tǒng)計,商品各段價格的數(shù)目存到b數(shù)組中;英中:價格為100元以下的個數(shù)存到b[0]中,價格為100元到199元的個數(shù)存到b[l],價格為200元到299元的個數(shù)b[2],價格為300元到399元的個數(shù)存到b[3],價格為400元到499元的個數(shù)存到b[4],價格為500元以上的個數(shù)b[5]中。例如,當a數(shù)組中的數(shù)據(jù)為:90、180、270、380、590、530、140、750、380時:調用該函數(shù)后,b中存放的數(shù)據(jù)應是:1、2、1、2、0、3。請勿改動程序中原有的任何內容,僅在花括號中注明處編寫若干語句使程序完整。提示:(1) 涉及到數(shù)組,肯立要考慮到用循環(huán)使程序的編寫簡單,而有固定次數(shù)的循環(huán)用for比較方便(2) 分析該題要求,給b數(shù)組元素進行賦值的時候,可以用辻語句做簡單的判斷,這是一種想法,沒有問題,但是不夠簡潔。經過分析,可以發(fā)現(xiàn),只有b[5]比較特殊,別的都可以用將價格除以100,得到的商就決立了英價格區(qū)間。比如299/100得到的商是2,就是要給b[2]卄,因此代碼可以在用if語句排除b[5]后,簡單的寫為b[a[i]/100]++;由于b數(shù)組是作為累加存在的,所以,不要忘記為其里而的每個元素賦初值為0。^include<stdio.h〉mainO{inti,a[100]={90,180,270,380,590,530,140,750,380},b[6];{/*在此處編寫若干語句,使程序完整*/}printfCTheresultis:3;for(i=0;i<6;i++)printf(z,%d"、b[i]);printf("\n");}a是一個M行N列的整數(shù)矩陣,編寫程序求出此矩陣周邊元素之和。例如:矩陣的值為13579a=299946999813570則結果值為61o提示:用二維數(shù)組arr[M][N]存放該矩陣在二重循環(huán)中將該矩陣讀入分別用四個一重循壞,求出矩陣四個邊的和,再累加就可以了實驗七函數(shù)一、 目的要求掌握C語言中泄義和調用函數(shù)的方法。理解和掌握多模塊的程序設計與調試的方法。掌握函數(shù)嵌套調用和遞歸調用的方法。掌握函數(shù)實參與形參的對應關系以及通過'‘值傳遞”調用函數(shù)的方法。理解變量作用域和存在期的概念,掌握全局變量和局部變量的左義和使用方法。二、 預習內容C語言中左義和調用函數(shù)的方法:函數(shù)嵌套調用和遞歸調用的方法:函數(shù)實參與形參的對應關系以及通過“值傳遞”調用函數(shù)的方法;全局變雖:和局部變雖:,動態(tài)變量和靜態(tài)變量的左義、說明和使用方法:函數(shù)的單步調試。三、 上機內容輸入以下程序并執(zhí)行,觀察程序的運行結果。#include<stdio.h>inta=3,b=5;max(inta,intb)c=a>b?a:b;return(c);}mainO{printf(/z%d\n,z,max(a,b));}在主函數(shù)的printf語句前加入inta二8;語句后重新執(zhí)行,觀察其運行結果。分析變量a的作用域,程序修改前后兩次調用max函數(shù)時的實參a是否為同一變量?將inta二3,b二5;以及inta二8;語句刪除,主函數(shù)改為:mainO{externinta,b;printf("弔d\n",max(a,b));}inta二3,b—□;運行并觀察英結果。若將關鍵字extern去掉再運行,觀察結果有何變化?編寫一個函數(shù),判斷一個數(shù)是不是素數(shù)。在主函數(shù)中輸入一個整數(shù),輸出是否是素數(shù)的信息。要求:編寫一個函數(shù)prime(n),返回給定整數(shù)n是否為素數(shù)。編寫一個主函數(shù),輸入一個整數(shù),調用(1)中的函數(shù),判斷此整數(shù)是否為素數(shù),并輸出結果。實驗八指針一、 目的要求掌握指針的概念、指針變量迫義格式和引用:掌握指針的運算方法;掌握數(shù)組的指針和指向數(shù)組的指針變疑:二、 預習內容指針變疑的泄義格式、賦值、各種操作(存儲單元的引用,移動指針的操作,指針的比較),取地址運算符(&)和間接運算符(*)的功能,數(shù)組元素的多種表示形式。指針是一種特殊的變量,它具有變量的三要素(名、值、類型),特別要注意指針的值及(基)類型。指針的值是某個變量的地址值,它的(基)類型是它所指向的變疑的類型。*一一說明符,說明某一變量是指針&一一對變量取地址三、 上機內容改錯,修改下列程序,使之具有如下功能:用指針法輸入12個數(shù),然后按每行4個數(shù)輸出。(提示:應該先讓P指向數(shù)組a的首地址)Sinclude<stdio.h>mainO{intj,k,a[12],*p;for(j=0;j<12;j++)scanf( ,p++);for(j=0;j<12;j++){printf(d”,*p++);if(j%4=0)printf("\n");}}寫出運行結果:上機驗證下列程序的運行結果,使之具有如下功能:輸入3個整數(shù),按由小到大的順序輸出。Sinclude<stdio.h>mainO{intnl,n2,n3;int*pl,*p2,*p3;printf(ainputthreeintegersnl,n2,n3:M;scanf( %d,%d"f&nl,&n2,&n3);pl二&nl;p2=&n2;p3二&n3;if(nl>n2)swap(pl,p2);if(nl>n3)swap(pl,p3);if(n2>n3)swap(p2,p3);printf(Now,theorderis:%d%d%d\n",nl,n2,n3);}swap(int*pl,int*p2){intp;p二*pl;*pl二*p2;*p2二p;}寫出運行結果:指岀以下程序問題所在(程序功能:輸出a數(shù)組的10個元素)。Sinclude<stdio.h>mainO{intallO];int*p,i;P=a;for(i=0;i<10;i++){*P=i;P++;}for(i=0;i<10;i++;p++)printf(%dM,*p);}這道題輸出結果不是0~9,原因是指針變量P的初值為a的首地址,但經過第一循環(huán)后,P已指向a數(shù)組末尾。因此,在執(zhí)行第二個循環(huán)時,P的地址不再是&a[0],修改應在第二個循環(huán)前加上一句:將數(shù)組需a重新賦值給指針變量P(請自己用一條語句完成)。寫出輸出結果:下而的程序是用來從鍵盤輸入十個整數(shù),然后求出其中的最小值。填寫空缺部分。#include<stdio.h>voidlookup(int*t,intintn){intk;*a=t[0];for(k=l;k<n;k++)辻( )*a=t[k];}mainO{inttable[10]:intk,min,*p=&min;for(k=0;k<10;k++)scanf( %dM,table+k);lookup( , ,10);printf(“min=%d\nf,,min);}選擇填空,再上機驗證。程序功能:建立一個如下所示的二維數(shù)組,并按以下格式輸出。請從對應的一組選擇項中,選擇正確的填入。10001010100010001010#include<stdio.h>mainOinta[5][5]={0},*p[5],i,j;for(i=0;i<5;i++)p[i]=(D;for(i=0;i<5;i++){*(p[i]+ ② )二1:/*從左上角到右下角的斜線*/*(p[i]+5- ③ )二1;/*從左下角到右上角的斜線*/}for(i=0;i<5;i++){for(j=0;j<5;j++)printf(“%2d”,p[i][j]);printf("\n");①A)&a[i][0]B)&a[i][l]0&p[i]D)②A)0B)10iD)(i+1)③A)0B)1C)iD)(i+1)的正確答案: 的正確答案: 的正確答案: 實驗九結構體與公用體一、 目的要求(1) 掌握結構體類型變量的泄義和使用。(2) 掌握結構體類型數(shù)組的概念和使用。(3) 掌握公用體的概念與使用。二、 實驗內容輸入程序并運行,觀察運行結果riinclude"stdio.hMintmain(){structcmplx{intx:inty:}cnum[2]={l,3,2,7}:printf(“%d\n",cnum.O].y/cnum[O]?x*cnum[l]?x):return(0);}運行結果:6輸入程序并運行,觀察運行結果unionks{inta;intb;};union ks s[4];union ks *p;riinclude〃stdio.h〃intmain(){intn=l,i;printfCXn");for(i=0;i<4;i++){s.a=n;s.b=s?a+1;n=n+2;}p二&s[0];printf“,p->a);printf(z,%d/?,++p->a);return(0);}運行結果:2,3編寫程序有10個學生,每個學生的數(shù)據(jù)包括學號、姓需、3門課的成績,從鍵盤輸入10個學生數(shù)據(jù),要求打印出3門課總平均成績,以及最高分的學生的數(shù)據(jù)(包括學號、姓劃、3門課成績、平均分數(shù))。要求用input函數(shù)輸入10個學生數(shù)據(jù);用average函數(shù)求總平均分:用max函數(shù)找岀最高分的學生數(shù)據(jù):總平均分和最高分學生的數(shù)據(jù)都在主函數(shù)中輸岀。/*Note:YourchoiceisCIDE*/^defineSIZE10ridefineSIZE110ridefinePprintfridefineSscanf#include〃stdio.h〃structyeet{longinta;charb[8];floatc;floatd;floate;}pcx[SIZE];voidinput(structyeetpcx[SIZE],intn){inti;for(i=0;i<n;i++){P("請輸入第%d個人的學號\n",i+1);&pcx.a);P("請輸入第%d個人的姓名\n",i+1);pcx.b);P("請輸入第%d個人的語文成績\n",i+1);&pcx.c);P("請輸入第%d個人的數(shù)學成績\n",i+1);SC%f,z,&pcx.d);P("請輸入第紀個人的英語成績\n",i+1);&pcx?e);}return;}floataverage(floatx,inty)(floataverage;average=x/y;return(average);}intmax(structyeetpcx[SIZE],inty){inti,t;floatsum[SIZE],max=-32768;for(i=0;i<y;i++)sum=pcx?c十pcx?d+pcx?e;for(i=0;i<y;i++)if(sum>max)max=sum,t=i;return(t);voidmainO{intn,t,i;floataESIZEl],sum=0;P("請輸入學生人數(shù):\『);sr%d",&n);input(pcx,n);for(i=0;i<n;i++)sum二sum+pcx?c;a[0]=average(sum,n);P("語文的平均成績是%f\n",a[0]);sum=0;for(i=0;i<n;i++)sum=sum+pcx.d;ail]=average(sum,n);P("數(shù)學的平均成績是%f\n",a[l]);sum=0;for(i=0;i<n;i++)sum=sum+pcx.e;a[2]=average(sum,n);P("英語的平均成績是%f\n",a[2]);sum^O;t=max(pcx,n);PC總分最高的學生是:%s\n^pcx[t].b);P("學號是:%ld\n",pcx[t].a);P("語文成績是:%f\n",pcx[t].c);P("數(shù)學成績是:%f\n",pcx[t].d);P("英語成績是:%f\n",pcx[t].e);sum二pcx[t]?c+pcx[t]?d+pcx[t]?e;a[3]=average(sum,3);P("平均分是:%f\n",a[3]);三、 思考及總結結構體、公用體左義方式、引用方式和功能的相同點與不同點。枚舉類型的定義及應用場合。用typedef怎義類型的方法。四、 易犯錯誤及糾正方法(1) 在做實驗內容(1)、(2)時,先分析運行結果,注意結構體、公用體的不同特性,再上機運行,對照結果是否一致。(2) 實驗內容(3)綜合性較強,包括函數(shù)調用和結構體的應用,提前做好預習工作,再上機實驗鏈表及應用實驗目的1、 熟悉C語言的上機環(huán)境,掌握C語言的基本結構。2、 會左義線性表的鏈式存儲結構。3、 熟悉對鏈表的一些基本操作和具體的函數(shù)定義。4、 本章的主要任務是使用有關單鏈表的操作來實現(xiàn)通訊錄信息系統(tǒng)的管理。二、 設計內容現(xiàn)假設鏈表結點僅含一個數(shù)拯域和一個指針域。數(shù)據(jù)域是為了描述通訊者的相關信息,加義通訊者的結點類型:typedefstruct{charnum[5]; //編號charname[9];//姓洛charsex[3]; //性別charphone[13];//電話charaddr[31];//地址}DataT^e;typedefstructnode{//結點類型上義typedefstructnode{//結點類型上義〃結點數(shù)據(jù)域〃結點指針域DataTypedata;structnode*next;}ListNode;typedefListNode*LinkList;ListNode*p; //沱義一個指向結點的指針變雖:LinkListhead; //沱義指向單鏈表的頭指針這里的LinkList和ListNode*是不同名字的同一指針類型,取不同的名是為了在概念上更明確。特別值得注意的是指針變量和指針指向的變量(結點變量)這兩個概念。指針變量要么為空(Null),不指向任何結點:要么英值為非空,即它的值是一個結點的存儲地址。指針變量所指向的結點并沒有具體說明,而是在程序執(zhí)行過程中,需要存儲結點時才產生,它是通過C語言的標準函數(shù)malloc()實現(xiàn)的。例如,給指針變量p分配一個結點的地址:p=(ListNode*)malloc(sizeof(ListNode)):該語句的功能是申請分配—個類型為ListNode的結點的地址空間,并將其首地址存入指針變量p中。當結點不需要時可以用標準函數(shù)free(p)釋放結點的存儲空間,這時p為空值(Null)。為了驗證算法,本章的設計分為兩個實驗:其一是通訊錄的管理,包括單通訊錄鏈表的建立、通訊者的插入、通訊者的刪除、通訊者的查詢以及通訊錄表的輸岀等。三、通訊錄管理為了實現(xiàn)通訊錄管理的幾種操作功能,首先設計一個含有多個菜單的主控菜單程序,然后再為這些菜單配上相應功能。1、主控菜單設計要求菜單內容程序運行后,給岀6個菜單項的內容和輸入提示:通訊錄鏈表的建立通訊者結點的插入通訊者結點的查詢通訊者結點的刪除通訊錄鏈表的輸出退出管理系統(tǒng)請選擇0-5:設計要求使用數(shù)字0-5來選擇菜單項,其它輸入不起作用。四、完整程序淸單riinclude〃stdio.h〃Sinclude''string?h"riinclude〃stdlib?h〃typedefstruct{//通訊錄結點類型charnum[5]; //編號charname[9];//姓需charsex[3]; //性別charphone[13];//電話charaddr[31];//地址}DataType;typedefstructnode{ //結點類型泄義DataTypedata; //結點數(shù)據(jù)域structnode*next;//結點指針域}ListNode;typedefListNode*LinkList;LinkListhead;ListNode*p;//函數(shù)說明intmenu_select0;LinkListCreateList(void);voidInsertNode(LinkListhead,ListNode*p);ListNode*ListFind(LinkListhead);voidDeINode(LinkListhead);voidprintList(LinkListhead);//主函數(shù)voidmainOfor(;;){switch(menu_select())case1:case2:printf(”**********************************\n");printf("* 通訊者信息的添加 *\『);printf(〃**********************************\n");printf(-編號(4)姓名(8)性別(3)電話(11)地址(31)\『);printf("*************************************\『);p=(ListNode*)malloc(sizeof(ListNode));//申請新結點scanf(/z%s%s%s%s%sz\p->data?num,p->data?name,p->data?sex,p->data?phone,p->data?addr);InsertNode(head,p);break;case3:printf(“***********************************\n〃);printf("* 通訊錄信息的查詢 *\n");printf(”***********************************\n");p=ListFind(head);if(p!二NULL){printfC編號姓名性別聯(lián)系電話地址\『);printf(” \n");printf(/z%s,%st%s,%s,%s\n,z,p->data?num,p->data?name,p->data?sex,p->data?phone,p->data?addr);printfC \n");}elseprintfr沒有査到要查詢的通訊者!\n");break;case4:printfC***********************************\n");printfC* 通訊錄信息的刪除 *\n");printfC***********************************\n");DelNode(head);//刪除結點break;case5:printf ***********************************\n");printf(?,* 通訊錄鏈表的輸岀 *\n");printf("************************************\n");printList(head);break;case0:printf(^Xt再見!\n");return;}}}/*******************//*菜單選擇函數(shù)程序 *//***************************/intmenu_select(){intsn;printf(,z 通訊錄管理系統(tǒng)\n");printf("二==========\n”);printf(" 1.通訊鏈表的建立\n");printf(/z 2.通訊者結點的插入\n");printf(/z 3.通訊者結點的查詢\n");printf(w 4.通訊者結點的刪除\n");printf(" 5.通訊錄鏈表的輸岀\n");printf(/z 0.退出管理系統(tǒng)\n");printf(”二=========二二二==\n");printf(z/ 請選擇0-5: ”);for(;;){scanf("弔d",&sn);if(sn<0 sn>5)printf(w\n\t輸入錯誤,重選0-5O;elsebreak;}returnsn;}/**************************//*用尾插法建立通訊錄鏈表函數(shù) *//**************************/LinkListCreateList(void){//尾插法建立帶頭結點的通訊錄鏈表算法LinkListhead=(ListNode*)malloc(sizeof(ListNode))://申請頭結點ListNode*p,intflag=0; //結束標志置0rear=head;//尾指針初始指向頭結點

while(flag==O){p=(ListNode*)malloc(sizeof(ListNode)); //申新結點printf(”編號(4)姓名(8)性別電話(11)地址(31)\『);printf(?, \n");scanf(/,%s%s%s%s%s/\p->data?num,p->data?name,p->data?sex,p->data?phone,p->data?addr);rear->next=p; //新結點連接到尾結點之后rear二p; //尾指針指向新結點printfC結束建表嗎?(1/0)0;scanf&flag);}rear-〉next二NULL; //終端結點指針置空returnhead; //返回鏈表頭指針/******************************//*在通訊錄鏈表head/******************************//*在通訊錄鏈表head中插入結點*/voidInsertNode(LinkListhead,ListNode*p)ListNode*pl,*p2;pl=head;ListNode*pl,*p2;pl=head;p2=pl->next;while(p2!=NULL&&strcmp(p2->data?num,p->data?num)〈0){pl二p2; //pl指向剛訪問過的結點p2=p2->next; //p2指向表的下一個結點}pl->next=p; //插入p所指向的結點p->next=p2; //連接表中剩余的結點/******************************************//* 有序通訊錄鏈表的査找/* 有序通訊錄鏈表的査找/******************************************/ListNode*ListFind(LinkListhead){///******************************************/ListNode*ListFind(LinkListhead){//有序通訊錄鏈表上的查找ListNode*p;charnum[5];charname[9];intxz;printf(”==二===二二=二=\11");TOC\o"1-5"\h\zprintf(v1.按編號査詢 \n");printfC2.按姓名查詢 \n");printfr=============\n);printf(?, 請選擇: ”);p=head->next; //假立通訊錄表帶頭結點scanf(W&xz);if(xz==l){printfC請輸入要查找者的編號:");scanf(z/%s/z,num);while(p&&strcmp(p->data?num,num)<0)p=p->next;if((p==NULL)strcmp(p->data?num,num))0;p二NULL; //沒有査到要查找的通訊者}else辻(xz==2){printf(”請輸入要查找者的姓名:”);scanfname);while(p&&strcmp(p->,name)!二0)p=p->next;}returnp;}/*******************************//* 通訊錄鏈表上的結點刪除 *//*********************************/voidDeINode(LinkListhead){charjx;ListNode*p,*q;p二ListFind(head); //調用查找函數(shù)if(p二二NULL){printfC沒有查到要刪除的通訊者!\n");return;}printfC真的要刪除該結點嗎?(y/n)scanf &jx);if(jx二二'yjx—Y‘){q=head;wh訂e((q!二NULL)&&(q->next!=p))q=q->next;q->next=p->next; //刪除結點free(p); //釋放被刪結點空間printfC通訊者已被刪除!\n");}}/?*********************************//* 通訊錄鏈表的輸岀函數(shù) *//**********************************/voidprintList(LinkListhead){ListNode*p;p=head->next;printf("編號姓名 性別 聯(lián)系電話 地址 \n");printf \n");while(p!二NULL){printf(z,%s,%s,%s,%s,玄s\n",p->data?num,p->data?name,p->data?sex,p->data?phone,p->data?addr);printf(z, \n");p=p->next; //后移一個結點附錄實驗報告編寫規(guī)范實驗報告是對實驗工作的全而總結,如實記錄實驗的操作過程和實驗中觀測到的情況,并分析實驗的結果,要對實驗的目的、原理、任務、設備、過程和分析等主要方而進行明確的敘述。軟件實驗撰寫實驗報告的主要工作是如實記錄實驗的操作過程、程序源代碼以及實驗測試時輸入的數(shù)據(jù)和觀測到的輸出結果。為了保證整理后的數(shù)據(jù)的可信度,實驗報告中必須保留原始記錄數(shù)據(jù)。此外,實驗報告中還應包括實驗中發(fā)現(xiàn)的問題、現(xiàn)象及對結果的分析、實驗的收獲和心得體會,并回答思考問題。實驗報告最重要的部分是實驗總結,它是實驗的成果。是對實驗過程的分析和總結,其中所作出的結論必須有科學根據(jù)和來自理論及實驗的分析。

溫馨提示

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

最新文檔

評論

0/150

提交評論