高級(jí)語(yǔ)言程序設(shè)計(jì)實(shí)驗(yàn)教案_第1頁(yè)
高級(jí)語(yǔ)言程序設(shè)計(jì)實(shí)驗(yàn)教案_第2頁(yè)
高級(jí)語(yǔ)言程序設(shè)計(jì)實(shí)驗(yàn)教案_第3頁(yè)
高級(jí)語(yǔ)言程序設(shè)計(jì)實(shí)驗(yàn)教案_第4頁(yè)
高級(jí)語(yǔ)言程序設(shè)計(jì)實(shí)驗(yàn)教案_第5頁(yè)
已閱讀5頁(yè),還剩21頁(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)介

2011~2012學(xué)年第2學(xué)期《高級(jí)語(yǔ)言程序設(shè)計(jì)》實(shí)驗(yàn)教案教學(xué)院(部)計(jì)算機(jī)學(xué)院教研室基礎(chǔ)教研室授課班級(jí)授課教師職稱(chēng)職務(wù)教材名稱(chēng)《C程序設(shè)計(jì)》譚浩強(qiáng)主編2012年2月11日

實(shí)驗(yàn)一順序結(jié)構(gòu)程序設(shè)計(jì)一、實(shí)驗(yàn)?zāi)康募耙笳莆誄語(yǔ)言中使用最多的一種語(yǔ)句——賦值語(yǔ)句的使用方法。掌握各種類(lèi)型數(shù)據(jù)的輸入輸出的方法,能正確使用各種格式轉(zhuǎn)換符。二、實(shí)驗(yàn)學(xué)時(shí)4學(xué)時(shí)三、實(shí)驗(yàn)任務(wù)1.以下c30101.c程序多處有錯(cuò)。要按下面指定的形式輸入數(shù)據(jù)和輸出數(shù)據(jù)時(shí),請(qǐng)對(duì)該程序做相應(yīng)的修改。#include<stdio.h>voidmain(){doublea,b,c,s,v;printf(inputa,b,c:\n);scanf("%d%d%d",a,b,c);s=a*b;v=a*b*c;printf("%d%d%d",a,b,c);printf("s=%f\n",s,"v=%d\n",v);}當(dāng)程序執(zhí)行時(shí),屏幕的顯示和要求輸入形式如下:inputa,b,c:1.02.03.0à此處的1.02.03.0是用戶(hù)輸入的數(shù)據(jù)a=1.000000b=2.000000,c=3.000000à此處是要求的輸出格式s=2.000000,v=6.000000相關(guān)知識(shí):①檢查程序錯(cuò)誤時(shí)應(yīng)注意幾點(diǎn):a)有時(shí)程序中一個(gè)錯(cuò)誤會(huì)引發(fā)一系列錯(cuò)誤信息,工作中不應(yīng)被這種情況所迷惑,改正了一些錯(cuò)誤后應(yīng)及時(shí)對(duì)源程序重新進(jìn)行編譯;b)如果修改錯(cuò)誤時(shí)增刪了行,或是一個(gè)行里有多個(gè)錯(cuò)誤,更正前面錯(cuò)誤時(shí)增刪了字符,就可能導(dǎo)致系統(tǒng)對(duì)錯(cuò)誤定位不準(zhǔn),此時(shí)應(yīng)該重新編譯;c)系統(tǒng)給出的警告信息一般都說(shuō)明程序中有問(wèn)題,因?yàn)橄到y(tǒng)發(fā)現(xiàn)了可疑情況。對(duì)于警告信息同樣要逐個(gè)仔細(xì)分析。除非明確認(rèn)定不是問(wèn)題,否則絕不能簡(jiǎn)單地認(rèn)為不是錯(cuò)誤而不予理睬。實(shí)際上,很多警告都是因?yàn)槌绦蛑写_實(shí)有嚴(yán)重的隱含錯(cuò)誤。d)在連接中發(fā)現(xiàn)新錯(cuò)誤也需要仔細(xì)檢查和修改程序。連接時(shí)發(fā)現(xiàn)的錯(cuò)誤一般是由于函數(shù)名或外部變量名字寫(xiě)錯(cuò),或者一些函數(shù)、外部變量沒(méi)有定義引起的。系統(tǒng)不能對(duì)連接錯(cuò)誤給以自動(dòng)定位,只能提供有關(guān)的名字信息等。對(duì)于這類(lèi)問(wèn)題,可以借助編輯器的字符串查找命令進(jìn)行定位。②正確調(diào)用scanf函數(shù)和printf函數(shù)構(gòu)成輸入和輸出語(yǔ)句。2.有以下c30102.c程序#include<stdio.h>voidmain(){charc1,c2;intn1,n2;c1=getchar();c2=getchar();n1=c1-'0';n2=n1*10+(c2-'0');printf("%d\n",n2);}程序運(yùn)行時(shí)輸入:12<回車(chē)>,執(zhí)行后輸出結(jié)果是什么?相關(guān)知識(shí):①getchar()函數(shù)用來(lái)輸入兩個(gè)字符分別賦給變量c1和c2;②n1=c1-'0'相當(dāng)于n1='1'-'0',字符1的ASCII碼值比0大一,所以n1中的值為1,c2-'0'相當(dāng)于'2'-'0';③把字符串轉(zhuǎn)換為多位數(shù)的算法。3.若有以下c30103.c程序#include<stdio.h>voidmain(){inti,j;intx,y;scanf("i=%d,j=%d",&i,&j);scanf("%d%d",&x,&y);printf("i=%d,j=%d\n",i,j);printf("%4d%4d\n",x,y);}要求給i賦值為10,j賦值為20,則應(yīng)該怎樣從鍵盤(pán)輸入數(shù)字?相關(guān)知識(shí):①在調(diào)用scanf()函數(shù)時(shí)在格式串中若包含有格式描述符之外的字符時(shí),則要求在輸入數(shù)據(jù)時(shí)在對(duì)應(yīng)的位置上輸入完全匹配的字符;②scanf()函數(shù)只包含格式描述符時(shí)可用跳格鍵Tab、空格和回車(chē)分隔數(shù)據(jù);③在調(diào)用printf()函數(shù)時(shí)在格式串中若包含有格式描述符之外的字符時(shí),則在輸出數(shù)據(jù)時(shí)在對(duì)應(yīng)的位置上輸出完全匹配的字符,%d之類(lèi)的格式符位置輸出對(duì)應(yīng)輸出項(xiàng)的值;故輸出時(shí)要注意插入適當(dāng)?shù)姆歉袷椒员銋^(qū)分各個(gè)輸出結(jié)果。4.計(jì)算定期存款本利之和設(shè)銀行定期存款的年利率rate為2.25%,并已知存款期為n年,存款本金為capital元,試編程計(jì)算n年后的本利之和deposit。要求定期存款的年利率rate、存款期n和存款本金capital均由鍵盤(pán)輸入。四、實(shí)驗(yàn)重點(diǎn)、難點(diǎn)符數(shù)據(jù)輸入輸出函數(shù)格式輸入輸出函數(shù)五、操作要點(diǎn)按Alt+R可進(jìn)入Run菜單,其中Run:運(yùn)行由Project/Projectname項(xiàng)指定的文件名或當(dāng)前編輯區(qū)的文件。如果對(duì)上次編譯后的源代碼未做過(guò)修改,則直接運(yùn)行到下一個(gè)斷點(diǎn)(沒(méi)有斷點(diǎn)則運(yùn)行到結(jié)束)。否則先進(jìn)行編譯、連接后才運(yùn)行,其熱鍵為Ctrl+F9。Userscreen:顯示程序運(yùn)行時(shí)在屏幕上顯示的結(jié)果。其熱鍵為Alt+F5。六、注意事項(xiàng)輸入輸出的數(shù)據(jù)類(lèi)型與所用格式說(shuō)明符不一致輸入變量時(shí)忘記使用地址符號(hào)實(shí)驗(yàn)二邏輯結(jié)構(gòu)程序設(shè)計(jì)一、實(shí)驗(yàn)?zāi)康募耙罅私釩語(yǔ)言表示邏輯量的方法(以0代表“假”,以非代表“真”)。學(xué)會(huì)正確使用邏輯運(yùn)算符和邏輯表達(dá)。熟練掌握if語(yǔ)句和switch語(yǔ)句.學(xué)習(xí)調(diào)試程序。二、實(shí)驗(yàn)學(xué)時(shí)6學(xué)時(shí)三、實(shí)驗(yàn)任務(wù)1源程序c30105.c中包含有一些錯(cuò)誤,調(diào)試下列程序,使之具有如下功能:輸入a、b、c三個(gè)整數(shù),求最小值。#include“stdio.h”voidmain()

{

inta,b,c;

scanf("%d%d%d",a,b,c);

if((a>b)&&(a>c))

if(b<c)

printf("min=%d\n",b);

else

printf("min=%d\n",c);

if((a<b)&&(a<c))

printf("min=%d\n",a);

}再次運(yùn)行程序,輸入為“2,1,3”,程序輸出卻是“min=2”。用單步執(zhí)行的方法,馬上發(fā)現(xiàn)變量a、b、c的值是不對(duì)的,原因是程序要求輸入數(shù)據(jù)的分隔符是空格(還允許使用回車(chē)或<Tab>鍵)。改正輸入數(shù)據(jù)的分隔方式后,程序沒(méi)有輸出,還是用單步執(zhí)行的方法,監(jiān)視程序的執(zhí)行過(guò)程,發(fā)現(xiàn)程序中條件設(shè)計(jì)有誤,經(jīng)過(guò)改正的程序如下:

#include“stdio.h”voidmain()

{inta,b,c;

scanf("%d%d%d",&a,&b,&c);

if((a<b)&&(a<c))

printf("min=%d\n",a)

elseif((b<a)&&(b<c))

printf("min=%d\n",b);

elseif((c<a)&&(c<b))

printf("min=%d\n",c);

else

printf("Nofindminimum\n");

}上述程序是按在三個(gè)數(shù)中僅有一個(gè)最小值時(shí)才稱(chēng)其為最小值進(jìn)行設(shè)計(jì)的。另外,注意程序的書(shū)寫(xiě)格式,一定要采用縮進(jìn)格式,即不同層次(分支)的語(yǔ)句左起的空格不同,這樣可以有效地提高程序的可讀性。相關(guān)知識(shí):①類(lèi)似a<b<c表達(dá)式的表示方法;②if語(yǔ)句的嵌套;③調(diào)試工具的使用。④求最值的簡(jiǎn)單算法。2.參考上一題,編寫(xiě)一個(gè)C程序,求a、b、c、d四個(gè)數(shù)中的最大者。編程點(diǎn)撥:①多定義一個(gè)變量,并一開(kāi)始令變量max=a;②if(max<b)max=b;其余多個(gè)數(shù)據(jù)中求最值依此類(lèi)推。3.輸入4個(gè)整數(shù),要求按由小到大順序輸出。得到正確結(jié)果后,修改程序使之按由大到小順序輸出。相關(guān)知識(shí):①輸入函數(shù)scanf()的使用;②簡(jiǎn)單的排序算法;③通過(guò)中間變量t交換a和b值的方法:t=a;a=b;b=t;。4.根據(jù)以下c30108.c函數(shù)關(guān)系,對(duì)輸入的每個(gè)x值,計(jì)算出相應(yīng)的y值。當(dāng)x取其他值時(shí)當(dāng)x取其他值時(shí)#includevoidmain(){floatx,y;scanf("%f",&x);if()y=;elseif()y=;elseprintf("x=%f,y=%f",x,y);}相關(guān)知識(shí)點(diǎn):if語(yǔ)句的嵌套;數(shù)學(xué)函數(shù)的調(diào)用方式。5模仿第4題,寫(xiě)程序?qū)崿F(xiàn)以下函數(shù):用scanf函數(shù)輸入x的值,求y值。運(yùn)行程序,輸入x的值(分別為x<1、1≤x<10、x≥10三種情況),檢查輸出的y值是否正確。相關(guān)知識(shí):①用if的嵌套實(shí)現(xiàn)分段函數(shù);②比較運(yùn)算符的正確使用;③算術(shù)運(yùn)算符*的正確使用。6.閱讀分析以下c30110.c程序的功能。#include<stdio.h>voidmain(){ intchoice; intvalue; printf("Convert:\n");/*顯示菜單*/printf("1:decimaltohexadecimal\n");printf("2:hexadecimaltodecimal\n");printf("3:decimaltooctal\n");printf("4:octaltodecimal\n");printf("enteryourchoice:");scanf("%d",&choice); switch(choice){ case1:/*選中1時(shí)處理*/ printf("enterdecimalvalue:"); scanf("%d",&value); printf("%dinhexadecimalis:%x\n",value,value); break;case2:/*選中2時(shí)處理*/ printf("enterhexadecimalvalue:"); scanf("%x",&value); printf("%xindecimalis:%d\n",value,value); break; case3:/*選中3時(shí)處理*/ printf("enterdecimalvalue:"); scanf("%d",&value); printf("%dinoctalis:%o\n",value,value); break; case4:/*選中4時(shí)處理*/ printf("enteroctalvalue:"); scanf("%o",&value); printf("%oindecimalis:%d\n",value,value); break; }}相關(guān)知識(shí):①用switch語(yǔ)句實(shí)現(xiàn)菜單的方法;②數(shù)制轉(zhuǎn)換的方法。7.模仿第6題,,要求對(duì)輸入的數(shù)字1~7轉(zhuǎn)換成文字星期幾,對(duì)其它數(shù)字不轉(zhuǎn)換。例如,輸入5時(shí),程序應(yīng)該輸出Friday。=1\*GB3①編輯、調(diào)試和運(yùn)行該程序,然后輸入4。其輸出結(jié)果是什么?為什么是這樣的結(jié)果?=2\*GB3②該程序有哪些錯(cuò)誤?如何修改?相關(guān)知識(shí):①switch語(yǔ)句的正確使用;②break在switch語(yǔ)句中的作用。四、實(shí)驗(yàn)重點(diǎn)、難點(diǎn)表達(dá)式選擇型程序設(shè)計(jì)語(yǔ)句邏輯表達(dá)式五、操作要點(diǎn)按Alt+C可進(jìn)入Compile菜單,Buildall:重新編譯項(xiàng)目里的所有文件,并進(jìn)行裝配生成.EXE文件。該命令不作過(guò)時(shí)檢查

。六、注意事項(xiàng)誤把“=”作為關(guān)系運(yùn)算符“等于”沒(méi)有注意大寫(xiě)字母和小寫(xiě)字母代表不同的標(biāo)識(shí)符當(dāng)一個(gè)復(fù)合語(yǔ)句中使用多層括號(hào)時(shí),常出現(xiàn)大括號(hào)不配對(duì)的現(xiàn)象。實(shí)驗(yàn)三循環(huán)控制一、實(shí)驗(yàn)?zāi)康募耙笫煜ふ莆沼谜Z(yǔ)句,語(yǔ)句和語(yǔ)句實(shí)現(xiàn)循環(huán)的方法。掌握在程序設(shè)計(jì)中用循環(huán)的方法實(shí)現(xiàn)一些常用算法(如窮舉、迭代、遞推等)。二、實(shí)驗(yàn)學(xué)時(shí)6學(xué)時(shí)三、實(shí)驗(yàn)任務(wù)程序c40101.c求1+…+100,填空,實(shí)現(xiàn)該功能。#include<stdio.h>voidmain(){ints,i;s=0;/*第5行*/for()s=s+i;printf("1+...+100=%d\n",s);}思考:(1)第5行能不能去掉?其作用是什么?(2)不用for語(yǔ)句,用while語(yǔ)句改寫(xiě)該程序,實(shí)現(xiàn)同樣的功能。比較下列兩個(gè)程序。(驗(yàn)證)/*c40102_1.c*/#include<stdio.h>voidmain(){inti,n,sum=0;scanf("%d",&i);n=i;while(i<=10){sum+=i; i++;}printf("%d+...+10=%d",n,sum);}/*c40102_2.c*/#include<stdio.h>voidmain(){inti,n,sum=0;scanf("%d",&i);n=i;do{sum+=i; i++;}while(i<=10);printf("%d+...+10=%d",n,sum);}分別運(yùn)行這兩題,若輸入7,這兩個(gè)程序的結(jié)果分別是多少?若輸入12,這兩個(gè)程序的結(jié)果又分別是多少?比較為什么會(huì)有這樣的區(qū)別?預(yù)習(xí)c40103.c程序,若輸入12345,分析輸出結(jié)果是多少?上機(jī)驗(yàn)證。#include<stdio.h>voidmain(){longdata;scanf("%ld",&data);while(data){printf("%ld,",data%10);data=data/10;}}程序c40104.c實(shí)現(xiàn)求Fibonacci數(shù)列的前n個(gè)數(shù)。(驗(yàn)證、調(diào)試)運(yùn)行程序,寫(xiě)出運(yùn)行結(jié)果;采用單步跟蹤技術(shù)運(yùn)行該程序,觀察一下變量的變化。#include<stdio.h>voidmain(){longintf1,f2;inti,n;printf("Inputn:");/*第5行*/scanf("%d",&n);/*第6行*/f1=f2=1;for(i=1;i<n;i++){printf("%ld\t%ld\n",f1,f2);/*第9行*/f1=f1+f2;f2=f2+f1;}}思考:(1)f1、f2這兩個(gè)變量為什么定義為longint型?(2)第5行和第6行的相互作用,你會(huì)用這種方式來(lái)實(shí)現(xiàn)輸入嗎?(3)注意第9行的輸出“%ld”中的“1”是字母“L”的小寫(xiě)形式,不是數(shù)字1。預(yù)習(xí)c40105.c,寫(xiě)出預(yù)習(xí)結(jié)果并上機(jī)驗(yàn)證。(驗(yàn)證)#include<stdio.h>voidmain(){inti,j,x;for(i=0,x=0;i<2;i++){x++;for(j=0;j<3;j++){if(j%2)continue;x++;}x++;}printf("x=%d\n",x);}思考:用一句話概括if(j%2)語(yǔ)句的作用。相關(guān)知識(shí):嵌套for循環(huán)的執(zhí)行過(guò)程及continue語(yǔ)句的作用。6.程序c40201.c輸入一批考試分?jǐn)?shù),用-1作為結(jié)束標(biāo)志,若輸入大于100分,則提示重新輸入,然后計(jì)算最高分、最低分與平均分。請(qǐng)調(diào)試、檢查程序中的錯(cuò)誤,并改正之。#include<stdio.h>voidmain(){intmark;intn=0;sum=0;intmax=100;min=0;for(;;);{scanf("%d",&mark);if(mark>100){printf("Mark>100,Pleasereinput\n");break;}if(mark=-1)break;n++;sum=sum+mark;if(mark>max)max=mark;if(mark<min)min=mark;}sum=sum/n;printf("max=%d,min=%d,aver=%d\n",max,min,sum);}提示:該程序有很多錯(cuò)誤,下面給出某些錯(cuò)誤的說(shuō)明。當(dāng)求一批數(shù)中的最大值時(shí),若已知一批數(shù)的最小值,則將這個(gè)最小值作為最大值的初始值;當(dāng)求最小值時(shí),情況相反,即若已知這批數(shù)的最大值,則將這個(gè)最大值作為最小值的初始值。本例中求一批分?jǐn)?shù)的最高分,則最高分的初始值應(yīng)該設(shè)為0,然后在程序循環(huán)中逐漸地升高,直至求出最高分;本例中還要求這批分?jǐn)?shù)的最低分,則最低分的初始值設(shè)為100,然后在程序循環(huán)中逐漸地降低,直至求出最小值。實(shí)現(xiàn)“若輸入大于100分,則提示重新輸入”功能的語(yǔ)句有錯(cuò);實(shí)現(xiàn)“用-1作為結(jié)束標(biāo)志”功能的語(yǔ)句有錯(cuò)。思考:(1)“一批數(shù)據(jù)”是幾個(gè)數(shù)據(jù)?輸入的數(shù)據(jù)如何結(jié)束?程序中哪一行是實(shí)現(xiàn)結(jié)束這個(gè)要求的,寫(xiě)出該語(yǔ)句。(2)程序中哪個(gè)語(yǔ)句是實(shí)現(xiàn)”若輸入大于100分,則提示重新輸入”這個(gè)要求的,寫(xiě)出該語(yǔ)句。(3)寫(xiě)出您的測(cè)試數(shù)據(jù)及運(yùn)行結(jié)果,注意輸入的數(shù)據(jù)序列中最后一個(gè)應(yīng)是-1。7.編程:輸入20個(gè)1~90的整數(shù),分類(lèi)統(tǒng)計(jì)1~30、31~60、61~90的數(shù)各有多少個(gè)?編程點(diǎn)撥:count1計(jì)1~30的個(gè)數(shù),count2計(jì)31~60的個(gè)數(shù),count3計(jì)61~90的個(gè)數(shù)。用for循環(huán)20次實(shí)現(xiàn)該程序的功能:輸入一個(gè)整數(shù)x,判斷該數(shù)所在的范圍,若x是1~30,則count1加1;若x是31~60,則count2加1;若x是61~90,則count3加1。最后,輸出統(tǒng)計(jì)的結(jié)果。#include<stdio.h>voidmain(){intcount1=0,count2=0,count3=0;inti,x;printf(“Pleaseinput20numbers:”);for(i=0;i<20;i++){scanf(“%d”,&x);………/*補(bǔ)充完成程序*/}/*輸出統(tǒng)計(jì)結(jié)果*/……………}補(bǔ)充完成該程序。8.編程:素?cái)?shù)是除了1和其本身以外,不能被其他自然數(shù)整除的自然數(shù)。從鍵盤(pán)輸入一個(gè)數(shù),判斷該數(shù)是不是素?cái)?shù)?編程點(diǎn)撥:輸入這個(gè)數(shù)x。用for循環(huán)2~x-1,用2~x-1的每一個(gè)數(shù)去除x,若有一個(gè)數(shù)整除x,則說(shuō)明x不是素?cái)?shù);否則,x就是素?cái)?shù)。最后,將判斷結(jié)果輸出。#include<stdlib.h>voidmain(){inti,x;printf("Enteronenaturalinteger:");scanf("%d",&x);for(i=2;i<x-1;i++)/*補(bǔ)充完成該程序*/……………}思考:其實(shí),只需要判斷2~之間的整數(shù)能否整除x就可以判斷x是否為素?cái)?shù),此時(shí),如何修改程序?9.編程:顯示所有的水仙花數(shù)。謂水仙花數(shù),是指一個(gè)3位數(shù),其各位數(shù)字立方和等于該數(shù)字本身。例,153是水仙花數(shù),因?yàn)?53=13+53+33。有兩種解題思路,選擇其中之一編程實(shí)現(xiàn):利用三重循環(huán),將這三個(gè)數(shù)通過(guò)一定的運(yùn)算符連接成一個(gè)3位數(shù),然后判斷是否是水仙花數(shù)。for(i=1;i<=9;i++)for(j=0;j<=9;j++)for(k=0;k<=9;k++)注意,因水仙花是一個(gè)三位數(shù),百位i是從1開(kāi)始,不能從0開(kāi)始,十位j和個(gè)數(shù)位k可以從0開(kāi)始。利用一個(gè)循環(huán),對(duì)100~999范圍內(nèi)的每個(gè)3位數(shù)逐位分離后進(jìn)行判斷。for(i=100;i<999;i++){a=i/100;b=(i-a*100)/10;c=i%10;………}*****************************分析:這是由星號(hào)構(gòu)成的5行5列的三角形圖形。每一行的星號(hào)數(shù)量為:1、3、5、7、9。考慮兩點(diǎn),一是每一行上星號(hào)的生成規(guī)則,二是每一行第一個(gè)星號(hào)字符的輸出位置。每一行的星號(hào)與行號(hào)有關(guān),即2*i+1,其中i是行號(hào);每一行的輸出位置比上一行少一個(gè)空格,可以這樣實(shí)現(xiàn):for(j=1;j<=40-i;j++)printf(“%c”,‘’),其中i是行號(hào)。四、實(shí)驗(yàn)重點(diǎn)、難點(diǎn)循環(huán)語(yǔ)句循環(huán)的嵌套break和continue語(yǔ)句五、操作要點(diǎn)Run菜單中Gotocursor::調(diào)試程序時(shí)使用,選擇該項(xiàng)可使程序運(yùn)行到光標(biāo)所在行。光標(biāo)所在行必須為一條可執(zhí)行語(yǔ)句,否則提示錯(cuò)誤。其熱鍵為F4。Traceinto:在執(zhí)行一條調(diào)用其它用戶(hù)定義的子函數(shù)時(shí),若用Traceinto項(xiàng),則執(zhí)行長(zhǎng)條將跟蹤到該子函數(shù)內(nèi)部去執(zhí)行,其熱鍵為F7。六、注意事項(xiàng)對(duì)應(yīng)該有花括號(hào)的復(fù)合語(yǔ)句,忘記加花括號(hào)在不該加分號(hào)的地方加了分號(hào)引用數(shù)組元素時(shí)誤用圓括號(hào)引用數(shù)組元素超界對(duì)二維或多維數(shù)組定義和引用的方式不對(duì)誤以為數(shù)組名代表整個(gè)數(shù)組混淆字符數(shù)組與字符指針的區(qū)別實(shí)驗(yàn)四數(shù)組一、實(shí)驗(yàn)?zāi)康募耙笳莆找痪S數(shù)組和二維數(shù)組的定義、賦值和輸入輸出的方法;掌握字符數(shù)組和字符串函數(shù)的使用;掌握與數(shù)組有關(guān)的算法(特別是排序算法)。二、實(shí)驗(yàn)學(xué)時(shí)6學(xué)時(shí)三、實(shí)驗(yàn)任務(wù)1.調(diào)試下列c50101.c程序,使之具有如下功能:輸入10個(gè)整數(shù),按每行3個(gè)數(shù)輸出這些整數(shù),最后輸出10個(gè)整數(shù)的平均值。寫(xiě)出調(diào)試過(guò)程。#inclue<stdio.h>#defineN10voidmain(){inti,a[N],av;for(i=0;i<N;i++)

scanf("%d",a[i]);

for(i=0;i<N;i++)

{printf("%d",a[i]);

if(i%3==0)

printf("\n");

}

for(i=0;i!=N;i++)

av+=a[i];

printf("av=%f\n",av);

}上面給出的程序是完全可以運(yùn)行的,但是運(yùn)行結(jié)果是完全錯(cuò)誤的。調(diào)試時(shí)請(qǐng)注意數(shù)組元素的輸入問(wèn)題、輸出格式問(wèn)題等。請(qǐng)使用前面實(shí)驗(yàn)所掌握的調(diào)試工具,判斷程序中的錯(cuò)誤并改正。相關(guān)知識(shí):①數(shù)組元素值的輸入;②求和求平均值的相關(guān)變量初始化問(wèn)題;③輸出格式符的正確使用。④數(shù)組元素的格式化輸出。2.下面c50102.c程序是輸入5個(gè)數(shù)據(jù),然后求它們的和并輸出結(jié)果。#include<stdio.h>voidmain(){inti,a[5],sum=0;scanf("%d,%d,%d,%d,%d",a);for(i=0;i<=4;i++)sum+=a[i];printf("sum=%d\n",sum);}該程序中有哪些錯(cuò)誤?如何修改?寫(xiě)出正確運(yùn)行后的結(jié)果。相關(guān)知識(shí):數(shù)組元素的輸入和輸出只能逐個(gè)元素操作,而不能以數(shù)組名作整體操作。3.有一個(gè)3行4列的距陣,現(xiàn)要求編程求出其中最大的那個(gè)元素的值,以及它所在的行號(hào)與列號(hào)。程序c50103.c的初始說(shuō)明和輸出語(yǔ)句如下所示,請(qǐng)補(bǔ)充完成該程序。#include<stdio.h>voidmain(){ inti,j,row,colum,max; staticinta[3][4]={{1,2,3,4},{9,8,7,6},{-10,10,-5,2}};…… printf("Max=%d,Row=%d,Colum=%d\n",max,row,colum);}編程點(diǎn)撥:①初始化row、colum及max。②使用for循環(huán)的雙重循環(huán)逐行把元素值與max值進(jìn)行比較,比較結(jié)果如果元素值比max值大,則改變max值,同時(shí)改變r(jià)ow和colum的值。③最后輸出max,row和colum的值。相關(guān)知識(shí):①二維數(shù)組的定義和初始化;②使用二重循環(huán)對(duì)二維數(shù)組元素的訪問(wèn);③求最值時(shí)相關(guān)變量初值的設(shè)定。4.數(shù)組中已存互不相同的10個(gè)整數(shù),從鍵盤(pán)輸入一個(gè)整數(shù),輸出與該值相同的數(shù)組元素下標(biāo)。編程點(diǎn)撥:輸入要查找的變量x的值;使用循環(huán)將輸入的數(shù)和數(shù)組元素逐個(gè)進(jìn)行比較,若找到,則提前退出循環(huán);根據(jù)循環(huán)是正常結(jié)束還是提前結(jié)束來(lái)判斷是否找到x。c50104.c部分源代碼:#include<stdio.h>voidmain(){inti,x,a[10]={1,2,3,4,5,6,7,8,9,10};/*輸入x變量的值*/for(i=0;i<10;i++)printf("%4d",a[i]);printf("\n");/*循環(huán)查找與x相等的元素*/if()printf("%d\n",i);/*輸出查找結(jié)論,輸出下標(biāo)值*/elseprintf("Notfound%d\n",x);}5.編寫(xiě)程序,任意輸入10個(gè)整數(shù)的數(shù)列,先將整數(shù)按照從大到小的順序進(jìn)行排序,然后輸入一個(gè)整數(shù)插入到數(shù)列中,使數(shù)列保持從大到小的順序。編程點(diǎn)撥:①定義數(shù)組時(shí)多開(kāi)辟一個(gè)存儲(chǔ)單元;②找合適的插入位置;2018161412108642a0123456789下標(biāo)=10k15找合適的插入位置:j=3j=3j=0a[j]≥k?即20≥15?是j++j=1a[j]≥k?即18≥15?是j++j=2a[j]≥k?即16≥15?是j++j=3a[j]≥k?即14≥15?不是,結(jié)束循環(huán)while(a[j]>=k&&j<10)j++;找不到比k小的元素時(shí)也要退出循環(huán)③向右移動(dòng)插入點(diǎn)后的元素;先把a(bǔ)[9]移到a[10],a[8]移到a[9],…a[i]移到a[i+1],直到把a(bǔ)[j]移到a[j+1],即:i=j停止移動(dòng)元素。for(i=9;i>=j;i--)a[i+1]=a[i];202018161412108642a0123456789下標(biāo)=10k15④插入。#include<stdio.h>#defineN11voidmain(){inti,j,a[N];printf(“Pleaseinput10numbers:”);for(i=0;i<N-1;i++)scanf(“%d”,&a[i]);/*亂序輸入10個(gè)整數(shù)*/……}相關(guān)知識(shí):①比較排序法、選擇排序法和冒泡排序法;②數(shù)據(jù)元素的插入。6.輸入十個(gè)互不相同的整數(shù)并存在數(shù)組中,找出最大元素,并刪除。編程點(diǎn)撥:求最大值所在元素下標(biāo):不必用max記住最大值,只要用k記住最大值所在的元素下標(biāo);刪除最大值:從最大值開(kāi)始將其后面元素依次前移一個(gè)位置。2816141108164206a0123456789下標(biāo)=10部分源代碼:k=0;if(a[k]<a[1])真k=0;for(i=1;i<10;i++)if(a[k]<a[i])k=0;for(i=1;i<10;i++)if(a[k]<a[i])k=i;if(a[k]<a[2])假k=2;不執(zhí)行if(a[k]<a[3])真k=3;執(zhí)行相關(guān)知識(shí):①刪除數(shù)組元素的概念;②移動(dòng)數(shù)組元素的算法;③求最大值位置的算法。7.以下c50107.c程序的功能是:從鍵盤(pán)上輸入若干個(gè)學(xué)生的成績(jī),統(tǒng)計(jì)計(jì)算出平均成績(jī),并輸出低于平均分的學(xué)生成績(jī),用輸入負(fù)數(shù)結(jié)束輸入。請(qǐng)?zhí)羁眨?include<stdio.h>voidmain(){floatx[1000],sum=0.0,ave,a;intn=0,i;printf("Entermark:\n");scanf("%f",&a);while(a>=0.0&&n<1000){sum+=;x[n]=;n++;scanf("%f",&a);}ave=;printf("Output:\n");printf("ave=%f\n",ave);for(i=0;i<n;i++)if()printf("%f\n",x[i]);}8.綜合編程題:打印如下楊輝三角形11112113311464115101051編程點(diǎn)撥:楊輝三角形有如下特點(diǎn):只有下半三角形有確定的值;第一列和對(duì)角線上的元素值都是1;其它元素值均是前一行同一列元素與前一行前一列元素之和。9.調(diào)試下列c50201.c程序,使之具有如下功能:任意輸入兩個(gè)字符串(如:“abc123”和“china”),并存放在a,b兩個(gè)數(shù)組中。然后把較短的字符串放在a數(shù)組,較長(zhǎng)的字符串放在b數(shù)組。并輸出。#include<stdio.h>#include<string.h>voidmain(){chara[10],b[10];intc,d,k,ch;scanf("%s",&a);scanf("%s",&b);printf("a=%s,b=%s\n",a,b);c=strlen(a);d=strlen(b);if(c>d)for(k=0;k<d;k++){ch=a[k];a[k]=b[k];b[k]=ch;}printf("a=%s\n",a);printf("b=%s\n",b);}相關(guān)知識(shí):程序中的strlen()是庫(kù)函數(shù),功能是求字符串的長(zhǎng)度,它的原型保存在頭文件"string.h"中。調(diào)試時(shí)注意庫(kù)函數(shù)的調(diào)用方法,不同的字符串輸入方法,通過(guò)錯(cuò)誤提示發(fā)現(xiàn)程序中的錯(cuò)誤。10.閱讀下面的c50202.c程序,然后回答后面的問(wèn)題:#include<stdio.h>#include<string.h>voidmain(){ chars1[80],s2[40]; inti=0,j=0; printf("\nPleaseinputstring1:"); scanf("%s",s1); printf("\nPleaseinputstring2:"); scanf("%s",s2); while(s1[i]!='\0') i++; while(s2[j]!='\0') s1[i++]=s2[j++];s1[i]='\0'; printf("\nNewstring:%s",s1);}編輯、運(yùn)行該程序,然后分別輸入Country和side。請(qǐng)問(wèn):=1\*GB3①程序執(zhí)行的結(jié)果是什么?=2\*GB3②該程序的功能是什么?相關(guān)知識(shí):=1\*GB3①串結(jié)束符’\0’;=2\*GB3②自編寫(xiě)庫(kù)函數(shù)。11.填空完成c50203.c程序,使其功能是對(duì)從鍵盤(pán)上輸入的兩個(gè)字符串進(jìn)行比較,然后輸出兩個(gè)字符串中第一個(gè)不相同字符的ASCII碼之差。例如:輸入的兩個(gè)字符串分別為abcdefg和abceef,則輸出為-1。程序如下:#include<stdio.h>voidmain(){charstr1[100],str2[100];inti,s;printf("\nInputstring1:\n");gets(str1);printf(“\nInputstring2:\n”);gets(str2);i=(1);while((str1[i]==str2[i])&&(str1[i]!=(2)))i++;s=(3);printf("%d\n",s);}12.填空完成c50204.c程序,使其的功能是統(tǒng)計(jì)從終端輸入字符中每個(gè)大寫(xiě)字母的個(gè)數(shù)。用#號(hào)作為輸入結(jié)束標(biāo)志。程序如下:#include<stdio.h>#include<ctype.h>voidmain(){intnum[26],i;charc;for(i=0;i<26;i++)num[i]=0;while((1)!='#')/*統(tǒng)計(jì)從終端輸入的大寫(xiě)字母?jìng)€(gè)數(shù)*/if(isupper(c))num[c-65](2);for(i=0;i<26;i++)/*輸出大寫(xiě)字母和該字母的個(gè)數(shù)*/if(num[i])printf("%c:%d\n",i(3),num[i]);}13.編寫(xiě)程序,輸入若干個(gè)字符串,求出每個(gè)字符串的長(zhǎng)度,并打印最長(zhǎng)一個(gè)字符串的內(nèi)容。以“stop”作為輸入的最后一個(gè)字符串。相關(guān)知識(shí):①字符數(shù)組的輸入輸出可以有兩種方法:逐個(gè)字符輸入輸出。用格式符“%c”輸入或輸出一個(gè)字符,此時(shí)輸入輸出函數(shù)中的輸入輸出項(xiàng)是數(shù)組元素名,而不是字符數(shù)組名;將整個(gè)字符串一次輸入或輸出。用“%s”格式符,意思是輸出字符串(string),此時(shí)輸入輸出函數(shù)中的輸入輸出項(xiàng)是字符數(shù)組名,而不是數(shù)組元素名。寫(xiě)成下面這樣是不對(duì)的:printf("%s",c[0]);②gets()函數(shù)和scanf()函數(shù)輸入字符串的區(qū)別,puts()函數(shù)和printf()函數(shù)輸出字符串的區(qū)別;③求每個(gè)字符串的長(zhǎng)度函數(shù)strlen()的使用,字符串比較函數(shù)strcmp()的使用;④二維數(shù)組處理多個(gè)字符串。14.編寫(xiě)程序,輸入字符串s1和s2以及插入位置f,在字符串s1中的指定位置f處插入字符串s2。如:輸入"BEIJING"、"123"和位置3,則輸出:"BEI123JING123"。四、實(shí)驗(yàn)重點(diǎn)、難點(diǎn)一維數(shù)組二維數(shù)組和多維數(shù)組字符數(shù)組五、操作要點(diǎn)Run菜單中Gotocursor::調(diào)試程序時(shí)使用,選擇該項(xiàng)可使程序運(yùn)行到光標(biāo)所在行。光標(biāo)所在行必須為一條可執(zhí)行語(yǔ)句,否則提示錯(cuò)誤。其熱鍵為F4。Traceinto:在執(zhí)行一條調(diào)用其它用戶(hù)定義的子函數(shù)時(shí),若用Traceinto項(xiàng),則執(zhí)行長(zhǎng)條將跟蹤到該子函數(shù)內(nèi)部去執(zhí)行,其熱鍵為F7。六、注意事項(xiàng)對(duì)應(yīng)該有花括號(hào)的復(fù)合語(yǔ)句,忘記加花括號(hào)在不該加分號(hào)的地方加了分號(hào)引用數(shù)組元素時(shí)誤用圓括號(hào)引用數(shù)組元素超界對(duì)二維或多維數(shù)組定義和引用的方式不對(duì)誤以為數(shù)組名代表整個(gè)數(shù)組混淆字符數(shù)組與字符指針的區(qū)別實(shí)驗(yàn)五函數(shù)與編譯預(yù)處理一、實(shí)驗(yàn)?zāi)康募耙笳莆蘸瘮?shù)定義的方法;掌握函數(shù)實(shí)參與形參的對(duì)應(yīng)關(guān)系以及“值傳遞”的方式;掌握函數(shù)的嵌調(diào)用和遞歸調(diào)用的方法;掌握全局變量和局部變量動(dòng)態(tài)變量、靜態(tài)變量的概念和使用方法。學(xué)習(xí)對(duì)多文件程序的編譯和運(yùn)行。二、實(shí)驗(yàn)學(xué)時(shí)4學(xué)時(shí)三、實(shí)驗(yàn)任務(wù)閱讀c60101.c程序,通過(guò)調(diào)試該程序,熟悉函數(shù)的調(diào)用方法及單步跟蹤鍵F7和F8的不同。#include<stdio.h>voidmain(){voidfun(inti,intj,intk);intx,y,z;x=y=z=6;fun(x,y,z);printf("%x=%d;y=%d;z=%d\n",x,y,z);}voidfun(inti,intj,intk){intt;t=(i+j+k)*2;printf("t=%d\n",t);}閱讀c60102.c程序,注意在調(diào)試時(shí)F11和F10的區(qū)別,還要注意函數(shù)調(diào)用過(guò)程中形參、實(shí)參的關(guān)系。#include<stdio.h>voidmain(){intx=10,y=20;voidswap(int,int);printf("(1)inmain:x=%d,y=%d\n",x,y);swap(x,y);printf("(4)inmain:x=%d,y=%d\n",x,y);}voidswap(intm,intn){inttemp;printf("(2)inmain:m=%d,n=%d\n",m,n);temp=m;m=n;n=temp;printf("(3)inmain:m=%d,n=%d\n",m,n);}把用戶(hù)自定義函數(shù)swap()中的形式參數(shù)m和n對(duì)應(yīng)改成x和y,使其與實(shí)參變量同名,再用F7跟蹤程序的運(yùn)行,看看有什么變化。相關(guān)知識(shí):形參具有“用之則建,用完則撤”的特點(diǎn)。在函數(shù)定義時(shí),函數(shù)名后面圓括號(hào)內(nèi)的參數(shù)稱(chēng)為形參;在函數(shù)調(diào)用時(shí),函數(shù)名后面圓括號(hào)內(nèi)的參數(shù)稱(chēng)為實(shí)參。對(duì)于實(shí)參,在調(diào)用函數(shù)中對(duì)其進(jìn)行定義時(shí),不僅指明它的類(lèi)型,而且系統(tǒng)還為其分配存儲(chǔ)單元。而對(duì)于形參,定義時(shí)僅僅只是指明它的類(lèi)型,并不在內(nèi)存中為它們分配存儲(chǔ)單元,只是在調(diào)用時(shí)才為其分配臨時(shí)存儲(chǔ)單元,函數(shù)執(zhí)行結(jié)束,返回調(diào)用函數(shù)時(shí),該存儲(chǔ)單元立即撤銷(xiāo)。程序c60103.c是實(shí)現(xiàn)求素?cái)?shù)的,請(qǐng)?zhí)羁胀瓿稍摮绦?,并上機(jī)運(yùn)行測(cè)試。#include<math.h>#include<stdio.h>voidmain(){intm;;/*申明求素?cái)?shù)函數(shù)*/printf("Pleaseinputadatam=:");scanf("%d",&m);;/*調(diào)用求素?cái)?shù)函數(shù)*/}voidprime(intn){inti,k;k=sqrt(n);for(i=2;i<=k;i++)if(n%i==0)break;if(i>=k+1)printf("Thisisaprimenumber");elseprintf("Thisisn’taprimenumber");}程序c60104.c的功能是從鍵盤(pán)上輸入的若干個(gè)數(shù)并求出最大值。請(qǐng)?zhí)羁胀瓿稍摮绦颉?include<stdio.h>voidmain(){ inti; ints[10],max;/*Findmax()函數(shù)的申明*/; printf("Input10number:\n"); /*輸入10個(gè)數(shù)據(jù)到s數(shù)組中*/; /*調(diào)用Findmax函數(shù)*/; for(i=0;i<10;i++) printf("%4d",s[i]); printf("\nthemaxis%d",max);}intFindmax(intx[],intn){intmax,i;max=x[0];for(i=1;i<n;i++)if(max<x[i])max=x[i];returnmax;}相關(guān)知識(shí):練習(xí)形參是數(shù)組的函數(shù)申明、調(diào)用格式;復(fù)習(xí)數(shù)組的輸入方法。程序c60105.c的功能是從鍵盤(pán)上輸入的若干個(gè)數(shù)按升序排序。請(qǐng)調(diào)試檢查該程序中的錯(cuò)誤,程序如下:#include<stdio.h>voidmain(){ inti,k; floats[100],j; printf("Inputnumber:\n"); for(i=0;scanf("%f",&j);i++) s[i]=j; sort(s,i); for(k=0;k<i;k++) printf("%f",s[k]); printf("\n");}voidsort(intx[n],intn){inti,j,temp,min;for(i=0;i<n-1;i++){min=i;for(j=i+1;j<n;j++) if(x[j]<x[min]) min=j;if(min!=i){temp=x[i];x[i]=x[min];x[min]=temp;} } }錯(cuò)誤提示:形參和實(shí)參的數(shù)據(jù)類(lèi)型不一致;一般形參數(shù)組在說(shuō)明時(shí)不指定數(shù)組的長(zhǎng)度,而僅給出類(lèi)型、數(shù)組名和一對(duì)方括號(hào);用戶(hù)自定義函數(shù)sort()沒(méi)有申明過(guò)。注意:for(i=0;scanf("%f",&j);i++)這一行中for語(yǔ)句第二個(gè)表達(dá)式的使用形式,此處用了scanf()函數(shù)的出錯(cuò)來(lái)結(jié)束輸出循環(huán)。請(qǐng)讀者查一下教材后面的附錄,看看什么時(shí)候scanf()函數(shù)返回0,此時(shí)就可以結(jié)束循環(huán)。編寫(xiě)程序,實(shí)現(xiàn)由主函數(shù)輸入m、n,按下述公式計(jì)算并輸出的值。提示:定義一個(gè)求階層的函數(shù),然后在主函數(shù)中調(diào)用三次即可求得。閱讀如下遞歸程序c60107.c,其功能是什么?上機(jī)調(diào)試。#include<stdio.h>voidmain(){ intm,k;voiddtoo(intn,intr); printf("Pleaeinputthedecimalnumber:");scanf("%d",&m); printf("\nPleaseinputanumberin(2,8,16):"); scanf("%d",&k);dtoo(m,k);}voiddtoo(intn,intr){if(n>=r)dtoo(n/r,r);printf("%d",n%r);}8.預(yù)習(xí)c60201.c程序,寫(xiě)出預(yù)習(xí)結(jié)果,上機(jī)驗(yàn)證并寫(xiě)出分析。變量的作用范圍#defineLOW10#defineHIGH5#defineCHANGE2inti=LOW;#include<stdio.h>voidmain(){intworkover(inti),reset(inti);inti=HIGH;reset(i/2);printf("i=%d\n",i);reset(i=i/2);printf("i=%d\n",i);reset(i/2);printf("i=%d\n",i);workover(i);printf("i=%d\n",i);}intworkover(inti){i=(i%i)*((i*i)/(2*i)+4);printf("i=%d\n",i);return(i);}intreset(inti){i=i<=CHANGE?HIGH:LOW;return(i);}相關(guān)知識(shí):“變量用之不盡,一寫(xiě)就走”。在main()主函數(shù)中reset(i/2)和reset(i=i/2)不同,第一個(gè)reset的i沒(méi)有被賦值到,所以該函數(shù)調(diào)用結(jié)束后還保持原來(lái)的值;而第二個(gè)reset的i被賦值了,所以函數(shù)調(diào)用結(jié)束后以前的值就沒(méi)有。全局變量:在所函數(shù)外面定義的變量,其有效范圍到整個(gè)源程序結(jié)尾;局部變量:在函數(shù)內(nèi)部定義的變量或在函數(shù)頭部定義的形參,其有效范圍只在所定義的函數(shù),局部變量具有“用之則建,用完則撤”的特點(diǎn)。在不同函數(shù)內(nèi)定義的變量同名互不干擾。如果一個(gè)源程序中的局部變量和全局變量同名,則局部變量?jī)?yōu)先。9.上機(jī)調(diào)試c60202.c程序,觀察靜態(tài)局部變量在調(diào)用過(guò)程中的變化。#include<stdio.h>voidmain(){ inti;intf(int); for(i=1;i<=5;i++) printf("(%d):%d\n",i,f(i));printf("\n");}intf(intn){ staticintj=1;j=j*n;return(j);}相關(guān)知識(shí):靜態(tài)局部變量。如果希望在函數(shù)調(diào)用結(jié)束后仍然保留函數(shù)中定義的局部變量的值,則可以將該局部變量定義為靜態(tài)局部變量(或稱(chēng)局部靜態(tài)變量)。靜態(tài)局部變量具有這樣一些特點(diǎn):①全局壽命:靜態(tài)局部變量的數(shù)據(jù)存儲(chǔ)在靜態(tài)存儲(chǔ)區(qū)的存儲(chǔ)單元中,在函數(shù)調(diào)用結(jié)束后,它的值并不消失,直到整個(gè)應(yīng)用程序執(zhí)行結(jié)束,它的存儲(chǔ)空間才被收回去。②局部可見(jiàn)性:其作用域只在定義它的函數(shù)內(nèi)部,盡管它的值在函數(shù)調(diào)用結(jié)束后并不消失,但其他函數(shù)仍然不能訪問(wèn)它,在進(jìn)入到它所在的函數(shù)內(nèi),它的值才可見(jiàn)。③初始化的特點(diǎn):若在定義該局部變量時(shí)有賦初值的,則賦初值只在編譯過(guò)程中進(jìn)行,只賦值一次;若沒(méi)有賦初值,則默認(rèn)的初值為0(數(shù)值型)或空字符(字符型)。10.預(yù)習(xí)程序c60203.c,分析在程序運(yùn)行前宏NUM的值,并上機(jī)運(yùn)行,比較一下的預(yù)習(xí)結(jié)果和實(shí)際結(jié)果。#include"stdio.h"#defineN2#defineMN+1#defineNUM(M+1)*M/2main(){inti,n=0;for(i=1;i<=NUM;i++){n++;printf("%d\n",n);}printf("\n");}11.分析程序c60104.c的運(yùn)行結(jié)果,上機(jī)驗(yàn)證。#definePOWER(x)((x)*(x))#defineMAX(x,y)(x)>(y)?(x):(y)#definePRprintf#include<stdio.h>voidmain(){inta,b,c,d,x;a=5;b=10;x=200;c=POWER(a+b);x=x/POWER(a+b);d=MAX(a+6,b);PR("c=%d,d=%d,x=%d\n",c,d,x);}12.編寫(xiě):輸入10個(gè)學(xué)生的3門(mén)課的成績(jī),分別用函數(shù)求:每個(gè)學(xué)生的平均分。每門(mén)課的平均分。按學(xué)生平均分降序排列輸出學(xué)生信息。統(tǒng)計(jì)不及格學(xué)生,輸出其相應(yīng)信息。編寫(xiě)一菜單主函數(shù),菜單內(nèi)容包括以上4部分。分析:本題要求完成的操作有錄入數(shù)據(jù)、求平均分、排序、統(tǒng)計(jì)。這些操作分別用函數(shù)來(lái)實(shí)現(xiàn)。先分析表示這些數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu),可用如下結(jié)構(gòu)來(lái)表示學(xué)生的成績(jī):課程1課程2課程3平均分687450………即10個(gè)學(xué)生的3門(mén)課程成績(jī)可以登記在一個(gè)二維數(shù)組中score[10][4],其中最后一列用于保存平均分,學(xué)生的學(xué)號(hào)不單獨(dú)記錄,學(xué)生的序號(hào)用二維表的行號(hào)來(lái)表示。下面給出了主菜單的參考程序c60205.c,其他功能的函數(shù)學(xué)生自己編寫(xiě)。#include<stdio.h>#defineN10#defineM4voidmain(){intscore[N][M];charchoice='1';voidinput(int[][],int,int);voidaver_stu(int[][],int,int);voidaver_cour(int[][],int,int);voidorde_aver(int[][],int,int);voidfailed(int[][],int,int);input(score,N,M);/*顯示主菜單*/while(choice!='0'){clrscr();printf("==========theScoreProcessingSystem===============\n");printf("1.printeachstudent'saverage\n");printf("2.printeachcourse'saverage\n");printf("3.Orderthestudentsbystudent'saveragedecreasingly\n");printf("4.printthefailedstudent\n");printf("0.Exitthesystem\n");printf("==============================================\n");printf("Pleasechoise(0-4):\n");choice=getchar();switch(choice){case'1':aver_stu(score,N,M);break;case'2':aver_cour(score,N,M);break;case'3':orde_aver(score,N,M);break;case'4':failed(score,N,M);break;case'0':exit(0);default:printf("ChoiceError,Pleaseselectagain(0-4).");}}}四、實(shí)驗(yàn)重點(diǎn)、難點(diǎn)函數(shù)的定義函數(shù)的參數(shù)及返回值函數(shù)的調(diào)用數(shù)組作為函數(shù)參數(shù)局部變量和全局變量變量的存儲(chǔ)類(lèi)別五、操作要點(diǎn)按Alt+D可選擇Debug菜單,該菜單主要用于查錯(cuò),它包括以下內(nèi)容EvaluateExpression要計(jì)算結(jié)果的表達(dá)式。Result顯示表達(dá)式的計(jì)算結(jié)果。Newvalue賦給新值。Callstack:該項(xiàng)不可接觸。而在TurboCdebuger時(shí)用于檢查堆棧情況。Findfunction在運(yùn)行TurboCdebugger時(shí)用于顯示規(guī)定的函數(shù)。Refreshdisplay如果編輯窗口偶然被用戶(hù)窗口重寫(xiě)了可用此恢復(fù)編輯窗口的內(nèi)容六、注意事項(xiàng)所調(diào)用的函數(shù)在調(diào)用語(yǔ)句之后定義,但在調(diào)用之前沒(méi)有說(shuō)明誤認(rèn)為形參值的改變會(huì)影響實(shí)參的值函數(shù)的實(shí)參和形參類(lèi)型不致。實(shí)驗(yàn)六指針一、實(shí)驗(yàn)?zāi)康募耙笸ㄓ脤?shí)驗(yàn)進(jìn)一步掌握指針的概念,會(huì)定義和使用指針變量;能正確使用數(shù)組的指針和指向數(shù)組的指針變量;能正確使用字符串的指針和指向字符串的指針變量;能正確使用指向函數(shù)的指針變量;了解指向指針的指針的概念及其使用方法。二、實(shí)驗(yàn)學(xué)時(shí)4學(xué)時(shí)三、實(shí)驗(yàn)任務(wù)編程序并上機(jī)調(diào)試運(yùn)行程序(都要求用指針處理)。1.上機(jī)驗(yàn)證以下c70101.c程序的運(yùn)行結(jié)果#include<stdio.h>voidmain(){inti,j,*pi,*pj;pi=&i;pj=&j;i=5;j=7;printf("\n%d\t%d\t%d\t%d",i,j,pi,pj);printf("\n%d\t%d\t%d\t%d",&i,*&i,&j,*&j);}運(yùn)行結(jié)果:5 7 -34 -32-345-327相關(guān)知識(shí):指針的值與指針指向的變量值的區(qū)別。在VC環(huán)境下,以上運(yùn)行結(jié)果中的負(fù)數(shù)是另一個(gè)值。2.上機(jī)驗(yàn)證以下c70102.c程序的運(yùn)行結(jié)果#include<stdio.h>voidmain(){inti,a[]={1,2,3},*p;p=a;/*將數(shù)組a首地址賦給指針p*/for(i=0;i<3;i++)printf("%d,%d,%d,%d\n",a[i],p[i],*(p+i),*(a+i));}運(yùn)行結(jié)果:1,1,1,12,2,2,23,3,3,3相關(guān)知識(shí):①指針指向數(shù)組的方法;②指針表示數(shù)組元素的方法。③數(shù)組元素的多種表示方法。3.調(diào)試下列c70103.c程序,使之具有如下功能:用指針?lè)ㄝ斎?2個(gè)數(shù),然后按每行4個(gè)數(shù)輸出。寫(xiě)出調(diào)試過(guò)程。#include<stdio.h>voidmain(){intj,a[12],*p=a;for(j=0;j<12;j++)scanf("%d",p++); p=a;for(j=1;j<=12;j++){printf("%4d",*p++);if(j%4==0)printf("\n");}}

相關(guān)知識(shí):①調(diào)試時(shí)指針變量指向哪個(gè)目標(biāo)變量;②區(qū)分指針的值和指針指向變量的值;③通過(guò)指針操作數(shù)組元素。4.調(diào)試下列c70104.c程序,使之具有如下功能:任意輸入2個(gè)數(shù),調(diào)用兩個(gè)函數(shù)分別求:

⑴2個(gè)數(shù)的和,

⑵2個(gè)數(shù)交換值。#include<stdio.h>voidmain(){inta,b,c,*p=&c;voidsum(int,int,int*);voidswap(int*,int*);scanf("%d,%d",&a,&b);sum(a,b,p);swap(&a,&b);printf("sum=%d\n",c);printf("a=%d,b=%d\n",a,b);}voidsum(inta,intb,int*c){*c=a+b;}voidswap(int*a,int*b){int*t;t=a;a=b;b=t;}相關(guān)知識(shí):①調(diào)試程序時(shí)注意參數(shù)傳遞的是數(shù)值還是地址。②指針作為參數(shù);③利用指針得到多個(gè)返回值。5.下面的c70105.c程序是用來(lái)從鍵盤(pán)輸入是個(gè)整數(shù),然后求出其中的最小值。填寫(xiě)空缺部分。#include<stdio.h>inttable[10];voidlookup(int*t,int*a,intn){intk;*a=t[0];for(k=1;k<n;k++)if()*a=t[k];}voidmain(){intk,min,*p=&min;for(k=0;k<10;k++)scanf("%d",table+k);lookup(,,10);printf("min=%d\n",min);}相關(guān)知識(shí):①用數(shù)組名加地址偏移量表示數(shù)組元素地址的方法;②數(shù)組名作為函數(shù)參數(shù);③指針變量作為函數(shù)參數(shù)。6.以下c70106.c程序建立一個(gè)如下所示的二維數(shù)組,并按以下格式輸出。請(qǐng)從對(duì)應(yīng)的一組選擇項(xiàng)中,選擇正確的填入。1000101010001000101010001#include<stdio.h>voidmain(){inta[5][5]={0},*p[5],i,j;for(i=0;i<5;i++)p[i]=(1);for(i=0;i<5;i++){*(p[i]+(2))=1;*(p[i]+5-(3))=1;}for(i=0;i<5;i++){for(j

溫馨提示

  • 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)論