




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
實(shí)驗(yàn)1簡(jiǎn)單判定性問題求解一、實(shí)驗(yàn)學(xué)時(shí)完成本實(shí)驗(yàn)需4學(xué)時(shí)。二、實(shí)驗(yàn)?zāi)康?、閱讀程序題(1)掌握C語(yǔ)言數(shù)據(jù)類型,熟悉如何定義一個(gè)整型、字符型的變量,以及對(duì)它們賦值的方法;(2)掌握不同的類型數(shù)據(jù)之間賦值的規(guī)律;(3)掌握數(shù)據(jù)在內(nèi)存中的存儲(chǔ)方式;(4)學(xué)會(huì)輸入、輸出函數(shù)的基本格式和使用方法;(5)學(xué)會(huì)使用有關(guān)算術(shù)運(yùn)算符、邏輯運(yùn)算符、關(guān)系運(yùn)算符,以及包含這些運(yùn)算符的表達(dá)式。2、編程題(1)如何運(yùn)用if-else判定性結(jié)構(gòu)進(jìn)行程序設(shè)計(jì);(2)如何運(yùn)用switch判定性結(jié)構(gòu)進(jìn)行程序設(shè)計(jì)。3、調(diào)試題(1)熟悉C程序的編輯、編譯、連接和運(yùn)行的過程。三、實(shí)驗(yàn)指導(dǎo)為了達(dá)到最佳的實(shí)驗(yàn)效果,以下提供幾條適于編程的指導(dǎo)意見,可供參考。1、閱讀程序題應(yīng)先運(yùn)用自己在課堂所學(xué)的知識(shí),推導(dǎo)出結(jié)果,在上機(jī)時(shí)輸入計(jì)算機(jī),印證自己推導(dǎo)的結(jié)果,注意觀察數(shù)據(jù)在內(nèi)存中的存儲(chǔ)方式、含不同種運(yùn)算符表達(dá)式的輸出結(jié)果。2、編程題必須首先畫出流程圖,并反復(fù)思考判斷程序設(shè)計(jì)的正確性,完成程序的設(shè)計(jì)。要注意簡(jiǎn)單判定性問題的結(jié)構(gòu)選擇。3、調(diào)試題應(yīng)明確程序的調(diào)試、測(cè)試是一項(xiàng)非常煩瑣的工作,也是非常重要的工作。對(duì)于初學(xué)者來(lái)說應(yīng)該建立良好的習(xí)慣,在調(diào)試程序的時(shí)候,應(yīng)該盡可能考慮到程序運(yùn)行時(shí)各種可能情況。四、實(shí)驗(yàn)內(nèi)容1、閱讀程序題(1)main(){/*定義字符型變量*/charc1,c2;/*向字符變量賦以整數(shù)*/c1=97;c2=98;printf("%c%c\n",c1,c2);/*以字符形式輸出*/printf("%d%d\n",c1,c2);/*以整數(shù)形式輸出*/}該程序的輸出結(jié)果是ab(換行)9798。思考:可否改成intc1,c2;輸出結(jié)果是?相同(2)main(){inta=7,b=5;printf("%d\n",b=b/a);}該程序的輸出結(jié)果是0。思考:若將printf語(yǔ)句中%d變?yōu)?f,可否輸出分式的值?可以(3)main(){inta=9;a+=a-=a+a;/*包含復(fù)合的賦值運(yùn)算符的賦值表達(dá)式*/printf("%d\n",a);}該程序的輸出結(jié)果是-18。思考:賦值表達(dá)式a+=a-=a+a的求解步驟?第一步:a=a-(a+a)=-9第二步a=a+a=18(4)main(){intk=-1;printf("%d,%u\n",k,k);}該程序的輸出結(jié)果是思考:-1在內(nèi)存中的存儲(chǔ)形式?取反加一11111111111111111111111111111111(32個(gè))(5)main(){unsignedx1;intb=-1;x1=b;/*有符號(hào)數(shù)據(jù)傳送給無(wú)符號(hào)變量*/printf("%u",x1);}該程序的輸出結(jié)果是4294967295。思考:不同類型的整型數(shù)據(jù)相互賦值時(shí),規(guī)則是什么?/happymawolf/article/details/6342937(有符號(hào)賦值給無(wú)符號(hào))(6)main(){inta=3,b=4,c=5;printf("%d\n",(!(a<b))&&(c=c+1));printf("%d",c);}該程序的輸出結(jié)果是0(換行)5。思考:若將第一個(gè)printf語(yǔ)句中&&變?yōu)閨|,結(jié)果將如何?1(換行)6(7)main(){inta=1,b=2,c=3;if(c=a);printf("%d\n",c);elseprintf("%d\n",b);}該程序的輸出結(jié)果是1。2、編程序并上機(jī)調(diào)試運(yùn)行(包括題目及要求、流程圖、程序清單、測(cè)試數(shù)據(jù)及結(jié)果)(1)將一個(gè)百分制成績(jī)轉(zhuǎn)換成等級(jí)制成績(jī),百分制與等級(jí)制的對(duì)應(yīng)關(guān)系如下表:百分制90-10080-8970-7960-69<60等級(jí)制優(yōu)良中差劣具體要求如下:用switch語(yǔ)句實(shí)現(xiàn)該功能;用鍵盤輸入百分制成績(jī),輸入前要有提示信息,對(duì)于不合理的數(shù)據(jù)應(yīng)輸出錯(cuò)誤信息;輸出結(jié)果應(yīng)包含百分制成績(jī)和成績(jī)等級(jí);分別輸入成績(jī)-10,30,60,68,75,83,95,102,查看記錄運(yùn)行結(jié)果。#include<stdio.h>#include<stdlib.h>voidmain(){#include<stdio.h>#include<stdlib.h>voidmain(){ floatscore; intlevel; printf("請(qǐng)輸入成績(jī):\n"); scanf("%f",&score); if(score>100||score<0) printf("成績(jī)輸入錯(cuò)誤!\n"); else { level=(int)((score-50)/10); switch(level) { case5:printf("優(yōu)\n");break; case4:printf("優(yōu)\n");break; case3:printf("良\n");break; case2:printf("中\(zhòng)n");break; case1:printf("差\n");break; default:printf("劣\n");break; } }}程序代碼流程圖見下頁(yè)測(cè)試數(shù)據(jù):100,50,-20輸出結(jié)果:優(yōu),劣,成績(jī)輸入錯(cuò)誤(2)銀行整存整取存款不同期限的月息利率分別為:月息利率=月息利率=程序代碼輸入存款的本金和年限,求到期時(shí)能從銀行得到的利息與本金的合計(jì)。(利息的計(jì)算公式為:利息=本金×月息利率×12×存款年限。 程序代碼#include<stdio.h>#include<stdlib.h>voidmain()#include<stdio.h>#include<stdlib.h>voidmain(){ intnYear; floatfInput; doublefS,fOut; printf("輸入存儲(chǔ)年份:\n"); scanf("%d",&nYear); printf("輸入本金數(shù)額:\n"); scanf("%f",&fInput); if(fInput<0) printf("本金金額不能為負(fù)!\n"); else {switch(nYear) {case1:fS=0.63/100;break; case2:fS=0.66/100;;break; case3:; case4:fS=0.69/100;break; case5:; case6:; case7:fS=0.75/100;break; case8:fS=0.84/100;;break; default:printf("輸入錯(cuò)誤!");return;} fOut=fInput+fInput*12*nYear*fS; printf("合計(jì):%f\n",fOut);}}流程圖見下頁(yè)測(cè)試數(shù)據(jù):4,10004,-10輸出結(jié)果:133.12本金金額不能為負(fù)?。?)調(diào)試下面程序,使之具有如下功能:輸入a、b、c三個(gè)整數(shù),求最小值。main(){inta,b,c;scanf("%d%d%d",a,b,c);if((a>b)&&(a>c))if(b<c)printf("min=%d\n",b);elseprintf("min=%d\n",c);if((a<b)&&(a<c))printf("min=%d\n",a);}程序中包含有一些錯(cuò)誤,按下述步驟進(jìn)行調(diào)試。1)設(shè)置斷點(diǎn)。2)通過單步執(zhí)行,觀測(cè)變量,發(fā)現(xiàn)程序中的錯(cuò)誤。程序調(diào)試記錄1、程序出現(xiàn)的錯(cuò)誤及改正第四行,abc前都加&,在%d%d%d中兩個(gè)%d之間加空格;{}括住六到九行;把第十行if改成elseif;2、程序的改進(jìn)1.每個(gè)<或>后加一個(gè)=;2.在程序末尾添加如下指令 elseif((a<=b)&&(a>=c)||(a>=b)&&(a<=c)) { if(b<=c) printf("min=%d\n",b); else printf("min=%d\n",c); }實(shí)驗(yàn)2循環(huán)結(jié)構(gòu)及其應(yīng)用一、實(shí)驗(yàn)學(xué)時(shí)完成本實(shí)驗(yàn)需4學(xué)時(shí)。二、實(shí)驗(yàn)?zāi)康?、熟練掌握while,do—while,for語(yǔ)句實(shí)現(xiàn)循環(huán)的方法,包括如何正確地設(shè)定循環(huán)條件,如何控制循環(huán)的次數(shù)。2、掌握break語(yǔ)句與continue語(yǔ)句的使用方法。 3、熟悉循環(huán)的嵌套以及從循環(huán)體內(nèi)退出循環(huán)的處理。4、理解什么是循環(huán)程序結(jié)構(gòu)。三、實(shí)驗(yàn)指導(dǎo)為了達(dá)到最佳的實(shí)驗(yàn)效果,以下提供幾條適于模塊化編程的指導(dǎo)意見,可供參考。1、閱讀程序題應(yīng)先運(yùn)用自己在課堂所學(xué)的知識(shí),推導(dǎo)出結(jié)果,在上機(jī)時(shí)輸入計(jì)算機(jī),印證自己推導(dǎo)的結(jié)果,注意循環(huán)語(yǔ)句的一般使用方法,以及復(fù)合運(yùn)算符的使用。2、編程題必須首先畫出流程圖,并反復(fù)思考判斷程序設(shè)計(jì)的正確性,以面向過程的、模塊化設(shè)計(jì)方法完成程序設(shè)計(jì)?!纠}解析】編寫一個(gè)程序,輸出半徑為1到10的圓的面積,若面積在40到90之間則予以輸出,否則,不予輸出。1)解題分析:解決問題的關(guān)鍵算法為求圓的面積并按要求輸出。循環(huán)求圓的面積area,若area<40,則用continue語(yǔ)句提前結(jié)束本次循環(huán)并開始新一輪循環(huán),若area>90,則用break語(yǔ)句跳出循環(huán)。2)算法流程圖如圖2-1:3)綜合分析需要從循環(huán)體中提前跳出循環(huán),或者在滿足某種條件下,不執(zhí)行循環(huán)中剩下的語(yǔ)句而立即從頭開始新的一輪循環(huán),這時(shí)就要用到break和continue語(yǔ)句。開始開始r=1輸出area結(jié)束是ir<11?否否否r=r+1是area=3.14*r*rarea<40.0?是area>90.0?圖2-1輸出半徑為1到10且面積在40到90之間的圓面積的流程圖4)程序代碼 #include<stdio.h>main(void){floatarea=0.0,pi=3.14; intr;for(r=1;r<11;r++){area=pi*r*r;if(area<40) continue; if(area>90) break; printf("area=%5.2f\n",area);}}四、實(shí)驗(yàn)內(nèi)容1、閱讀程序題。#include<stdio.h>main(){intx=-1; do{x=x*x;}while(!x);printf("%x=\n",x);}該程序的輸出結(jié)果是1=。#include<stdio.h>main(){intnum=0;while(num<=2){num++;printf("%d\n",num);}}該程序的輸出結(jié)果是1(換行)2(換行)3。#include<stdio.h>main(){inta,b;for(a=1,b=1;a<=100;a++){if(b>=20)break;if(b%3==1){b+=3;continue;}b-=5;}printf(“%d\n”,a);}該程序的輸出結(jié)果是8。#include<stdio.h>main(){inty=2,a=1;while(y--!=-1)do{a*=y;a++;}while(y--);printf(“%d,%d\n”,a,y);}該程序的輸出結(jié)果是1,-2。#include<stdio.h>#include<stdlib.h>#include<stdio.h>#include<stdlib.h>voidmain(){ inti=1,n,nResult=1; printf("請(qǐng)輸入n(0<n<20):\n"); scanf("%d",&n); if(n<=0||n>=20) printf("輸入錯(cuò)誤\n"); else { while(i<=n) { nResult*=i; i++; } printf("%d\n",nResult); }}輸入整數(shù)n,求n?。?<n<20)。流程圖流程圖程序代碼打印出所有“水仙花數(shù)”。所謂“水仙花數(shù)”是指一個(gè)三位數(shù),其各位數(shù)字的立方之和正好等于該數(shù)本身。例如:153是一個(gè)“水仙花數(shù)”,因?yàn)?53=13+53+33【提示】根據(jù)題目要求只要分別求出一個(gè)三位數(shù)的個(gè)位、十位、百位上的數(shù)字,然后判斷是否滿足(某一三位數(shù)a=a的百位的立方+a的十位的立方+a的個(gè)位的立方)這個(gè)公式,滿足這個(gè)條件的三位數(shù)就是“水仙花數(shù)”。流程圖程序代碼流程圖程序代碼#include<stdio.h>#include<stdio.h>#include<stdlib.h>voidmain(){ intn=100,a,b,c; while(n<1000) { a=n/100; b=(n-a*100)/10; c=n%10; if(n==a*a*a+b*b*b+c*c*c) printf("%d\n",n); n++; }}一個(gè)整數(shù),它加上100后是一個(gè)完全平方數(shù),再加上168又是一個(gè)完全平方數(shù),請(qǐng)問該數(shù)是多少?【提示】在10萬(wàn)以內(nèi)判斷,先將該數(shù)加上100后再開方,再將該數(shù)加上268后再開方,如果開方后的結(jié)果滿足如下條件,即是結(jié)果。流程圖流程圖程序代碼#include<stdio.h>#include<stdlib.h>#include<stdio.h>#include<stdlib.h>#include<math.h>voidmain(){ longintn=0,a,b; inta1,b1; while(n<=100000) { a=n+100; b=n+168; a1=(int)sqrt(a); b1=(int)sqrt(b); if((a1*a1==a)&&(b1*b1==b)) printf("%ld\n",n); n++; }}3、程序選做題猴子吃桃問題。猴子第一天摘下若干個(gè)桃子,當(dāng)即吃掉了一半,還不過癮,又多吃了一個(gè)。第二天早上又將剩下的桃子吃掉一半,又多吃了一個(gè)。以后每天早上都吃了前一天剩下的總數(shù)一半零一個(gè)。到第10天早上想再吃時(shí),見只剩一個(gè)桃子了。求第一天共摘了多少桃子。第二題#include<stdio.h>#include<stdlib.h>voidmain(){ inta=0,b=0,c=0,d; while(a<=15)第二題#include<stdio.h>#include<stdlib.h>voidmain(){ inta=0,b=0,c=0,d; while(a<=15) { for(b=0;b<=25;b++) { d=14*a+8*b; c=100-a-b; if(d==200) printf("%d,%d,%d\n",a,b,c); else continue; } a++; }}“百錢買百雞”問題:公雞每只5元,母雞每只3元,小雞每3只1元;用100元買100只雞,問公雞,母雞,小雞各買多少只?【提示】設(shè)公雞x只,母雞y只,小雞z只;則有1<=x<=18,1<=y<=31,1<=z<=98,且同時(shí)滿足5x+3y+z/3=100,x+y+z=100,z%3=0這三個(gè)條件。通過數(shù)學(xué)運(yùn)算可改變條件,從而可用不同的方法來(lái)解決此問題,請(qǐng)嘗試不同的循環(huán)次數(shù)解決該問題。五、程序調(diào)試記錄要求:寫出題號(hào),并編寫順序號(hào)。如四(1)出現(xiàn)的錯(cuò)誤(1)······(2)······1、程序出現(xiàn)的錯(cuò)誤及改正2、程序的改進(jìn)實(shí)驗(yàn)3模塊化設(shè)計(jì)與應(yīng)用一、實(shí)驗(yàn)學(xué)時(shí)完成本實(shí)驗(yàn)需要4學(xué)時(shí)。二、實(shí)驗(yàn)?zāi)康?、閱讀程序題(1)掌握函數(shù)實(shí)參和形參的對(duì)應(yīng)關(guān)系以及“值傳遞”的方式;(2)理解函數(shù)調(diào)用的過程以及函數(shù)的返回值;(3)弄清楚帶參函數(shù)和帶參的宏之間的異同。2、編程題(1)深刻理解模塊化程序設(shè)計(jì)的思想及如何進(jìn)行模塊劃分;(2)掌握定義函數(shù)的方法以及函數(shù)原型的聲明;(3)靈活運(yùn)用函數(shù)調(diào)用(有參函數(shù)和無(wú)參函數(shù)、有返回值的函數(shù)和無(wú)返回值的函數(shù))。三、實(shí)驗(yàn)指導(dǎo)為了達(dá)到最佳的實(shí)驗(yàn)效果,下面提出幾點(diǎn)指導(dǎo)意見或要求以供參考:1、閱讀程序題應(yīng)先運(yùn)用自己在課堂所學(xué)的知識(shí),推導(dǎo)出結(jié)果。上機(jī)時(shí)輸入計(jì)算機(jī),驗(yàn)證自己推導(dǎo)的結(jié)果是否正確。若不正確,應(yīng)分析原因。2、編程題注意事項(xiàng):(1)一個(gè)模塊(或函數(shù))應(yīng)有一個(gè)入口點(diǎn)和一個(gè)退出點(diǎn)。(2)一般每個(gè)模塊(或函數(shù))只執(zhí)行一個(gè)任務(wù)。不要將無(wú)關(guān)的任務(wù)放于同一模塊中,只將完成同一任務(wù)的語(yǔ)句組合在一起。(3)先畫流程圖,后寫程序代碼;(4)變量和函數(shù)標(biāo)示符盡量“見名知義”;(5)程序中應(yīng)有適當(dāng)注釋。3、應(yīng)記錄調(diào)試程序時(shí)出現(xiàn)的錯(cuò)誤,以便經(jīng)驗(yàn)的積累。四、實(shí)驗(yàn)內(nèi)容1、閱讀程序題(1)下面程序的輸出結(jié)果是5,8。#include<stdio.h>intf(intm){intk=2;k++;returnk+m;}voidmain(){ints;s=f(2);printf("%d,%d\n",s,f(s));}(2)下面程序的輸出結(jié)果是777。#include<stdio.h>intf(inta){intb=0;intc=3;b=b+1;c=c+1;return(a+b+c);}voidmain(){inta=2,i;for(i=0;i<3;i++)printf("%d",f(a));}(3)下面程序的輸出結(jié)果是3(空格)5。#include<stdio.h>voidswap(int*a,int*b){int*t;t=a;a=b;b=t;}voidmain(){intx=3,y=5,*p=&x,*q=&y;swap(p,q);printf("%d%d\n",*p,*q);}(4)下面程序的輸出結(jié)果是12。#include<stdio.h>#defineM(x,y,z)x*y+zvoidmain(){inta=1,b=2,c=3;printf("%d\n",M(a+b,b+c,c+a));}(5)下面程序的輸出結(jié)果是19。#include<stdio.h>intM(intx,inty,intz){intp;p=x*y+z;return(p);}voidmain(){inta=1,b=2,c=3;printf("%d\n",M(a+b,b+c,c+a));}2、編程序并上機(jī)調(diào)試運(yùn)行。(1)請(qǐng)?jiān)O(shè)計(jì)一個(gè)函數(shù)fun(),它的功能是:判斷pm是否是素?cái)?shù)。若pm是素?cái)?shù),返回1;若不是素?cái)?shù),返回0。pm的值由主函數(shù)從鍵盤讀入。函數(shù)fun():程序代碼流程圖程序代碼流程圖intfun(intpm){intfun(intpm){ inti=2; while(i<pm) { if(pm%i==0) { return(0); break; } else { i++; continue; } } return(1);}主函數(shù)main():程序代碼流程圖程序代碼流程圖#include<stdio.h>#include<stdio.h>#include<stdlib.h>voidmain(){ intpm; printf("請(qǐng)輸入要檢測(cè)的數(shù)字:\n"); scanf("%d",&pm); printf("%d\n",fun(pm));}測(cè)試數(shù)據(jù)及輸出結(jié)果:330371(2)請(qǐng)?jiān)O(shè)計(jì)一個(gè)函數(shù)fun(),它的功能是:將兩個(gè)兩位數(shù)的正整數(shù)a、b合并形成一個(gè)整數(shù)放在c中。合并的方式是:將a數(shù)的十位和個(gè)位數(shù)依次放在c數(shù)的千位和十位上,b數(shù)的十位和個(gè)位數(shù)依次放在c數(shù)的百位和個(gè)位上。例如,當(dāng)a=45,b=12。調(diào)用該函數(shù)后,c=4152。函數(shù)fun():程序代碼流程圖 程序代碼流程圖intfun(intx,inty)intfun(intx,inty){ intc; c=x%10*10+x/10*1000+y%10+y/10*100; return(c);}#include<stdio.h>#include<stdlib.h>voidmain(){ inta,b;#include<stdio.h>#include<stdlib.h>voidmain(){ inta,b; printf("請(qǐng)輸入要組合的數(shù)字(都為二位數(shù)):\n"); scanf("%d%d",&a,&b); if((a<10||a>99)||(b<10||b>99)) printf("輸入數(shù)字錯(cuò)誤!\n"); else printf("%d\n",fun(a,b));}流程圖程序代碼流程圖程序代碼測(cè)試數(shù)據(jù)及輸出結(jié)果:921輸入數(shù)字錯(cuò)誤!21232123(3)請(qǐng)?jiān)O(shè)計(jì)兩個(gè)函數(shù)MaxCommonFactor()和MinCommonMultiple(),它們的功能是:前者用于求兩個(gè)正整數(shù)的最大公約數(shù),后者用于求兩個(gè)正整數(shù)的最小公倍數(shù)。函數(shù)MaxCommonFactor():流程圖程序代碼 流程圖程序代碼intMaxCommonFactor(intx,inty)intMaxCommonFactor(intx,inty){ inti=1,c; while(i<=x) { if((x%i==0)&&(y%i==0)) {c=i;} i++; } return(c);}函數(shù)MinCommonMultiple():流程圖流程圖程序代碼intMinCommonMultiple(intx,inty)intMinCommonMultiple(intx,inty){ inti,c; for(i=1;i<=y;i++) { if(i*x%y==0) {c=i*x;break;} } return(c);}函數(shù)main():#include<stdio.h>#include<stdlib.h>voidmain()#include<stdio.h>#include<stdlib.h>voidmain(){ inta,b; printf("請(qǐng)輸入兩個(gè)正整數(shù)\n"); scanf("%d%d",&a,&b); if(a<0||b<0) printf("數(shù)字輸入錯(cuò)誤!\n"); else { printf("%d\n",MaxCommonFactor(a,b)); printf("%d\n",MinCommonMultiple(a,b)); }}流程圖程序代碼測(cè)試數(shù)據(jù)及輸出結(jié)果:242(換行)4351(換行)15-15數(shù)字輸入錯(cuò)誤!五、程序調(diào)試記錄要求記錄以下內(nèi)容:1、程序出現(xiàn)的錯(cuò)誤及改正2、程序的改進(jìn)實(shí)驗(yàn)4相同數(shù)據(jù)類型集合一、實(shí)驗(yàn)學(xué)時(shí)完成本實(shí)驗(yàn)需4學(xué)時(shí)。二、實(shí)驗(yàn)?zāi)康?、閱讀程序題(1)掌握一維和二維數(shù)組的定義、賦值和輸入輸出(2)學(xué)會(huì)使用一維數(shù)組、二維數(shù)組(3)學(xué)會(huì)使用多維數(shù)組、字符數(shù)組(4)學(xué)會(huì)使用字符串處理函數(shù)2、編程題(1)如何運(yùn)用數(shù)組進(jìn)行程序設(shè)計(jì)(2)了解字符串處理函數(shù)三、實(shí)驗(yàn)指導(dǎo)為了達(dá)到最佳的實(shí)驗(yàn)效果,以下提供幾條適于模塊化編程的指導(dǎo)意見,可供參考。1、閱讀程序題應(yīng)先運(yùn)用自己在課堂所學(xué)的知識(shí),推導(dǎo)出結(jié)果,在上機(jī)時(shí)輸入計(jì)算機(jī),印證自己推導(dǎo)的結(jié)果,注意數(shù)組下標(biāo)的使用方法。2、編程題必須首先畫出流程圖,并反復(fù)思考判斷程序設(shè)計(jì)的正確性,注意數(shù)組下標(biāo)不要越界(為了加深認(rèn)識(shí),自己可以嘗試一下下標(biāo)越界的情況)。3、調(diào)試程序要有耐心,反復(fù)的調(diào)試過程,雖然表面看起來(lái)費(fèi)時(shí)費(fèi)力,但是你一定會(huì)受益非淺。四、實(shí)驗(yàn)內(nèi)容1、閱讀程序題(1)main()
{charch[7]={"65ab21"};inti,s=0;
for(i=0;ch[i]>='0'&&ch[i]<='9';i+=2)
s=10*s+ch[i]-'0';
printf("%d\n",s);}該程序的輸出結(jié)果是6。(2)#defineMAX5main(){inta[MAX],i;for(i=0;i<5;i++)a[i]=i;printf("\n*****a*****\n");for(i=0;i<5;i++){printf("a[%d]=",i);printf("%d\n",a[i]);*****a*****a[0]=0a[1]=1a[2]=2*****a*****a[0]=0a[1]=1a[2]=2a[3]=3a[4]=4}該程序的輸出結(jié)果是。(3)#include"stdio.h"#defineN10main(){inti,j,temp;inta[N+1];intcount=0;printf("input%ddata:\n",N);for(i=1;i<=N;i++)scanf("%d",&a[i]);printf("********sortcourse********\n");for(i=1;i<=N;i++){count++;for(j=1;j<=N-i;j++)if(a[j]>a[j+1]){temp=a[j];a[j]=a[j+1]; a[j+1]=temp;}printf("%3d:",count);for(j=1;j<=N;j++)printf("%d",a[j]);printf("\n");}printf("theresultis:\n");for(i=1;i<=N;i++)printf("%d",a[i]);}該程序的輸出結(jié)果是冒泡排序顯示過程,并最終把輸入的十個(gè)數(shù)字由小到大無(wú)空格排列。(4)#include"stdio.h"#defineN20main(){intf[N],i;f[0]=1;f[1]=1;for(i=2;i<N;i++)f[i]=f[i-1]+f[i-2];printf("\n---------Fibonacci---------\n");for(i=0;i<N;i++){if(i%4==0)printf("\n\n");printf("f[%-2d]=%-5d",i,f[i]);---------Fibonacci------------------Fibonacci---------f[0]=1f[1]=1f[2]=2f[3]=3f[4]=5f[5]=8f[6]=13f[7]=21f[8]=34f[9]=55f[10]=89f[11]=144f[12]=233f[13]=377f[14]=610f[15]=987f[16]=1597f[17]=2584f[18]=4181f[19]=6765}該程序的運(yùn)行結(jié)果為。(5)#include"stdio.h"main(){inti,j,temp;inta[3][3]={{11,12,13},{21,22,23},{31,32,33}};printf("---matrixa---\n");for(i=0;i<3;i++){for(j=0;j<3;j++)printf("%3d",a[i][j]);printf("\n\n");}for(i=0;i<3;i++)for(j=0;j<i;j++){temp=a[i][j];a[i][j]=a[j][i];a[j][i]=temp;}printf("---matrixachanged---\n");for(i=0;i<3;i++){for(j=0;j<3;j++)printf("%3d",a[i][j]);---matrixa---111213212223---matrixa---111213212223313233---matrixachanged---112131122232132333}}該程序的輸出結(jié)果是。(6)#include"stdio.h"main(){chars[40];inti;printf("inputstring:");for(i=0;(s[i]=getchar())!='\n';i++);s[i]='\0';printf("\noutputstring:");for(i=0;s[i]!='\0';i++){if(s[i]>='a'&&s[i]<='z')s[i]=s[i]-32;elseif(s[i]>='A'&&s[i]<='Z') s[i]=s[i]+32;printf("%c",s[i]);}#include"stdio.h"main(){ ints[3][4]; inti=0,j=0,nHelp; printf("請(qǐng)按順序輸入12個(gè)數(shù)字,以空格或回車分隔:\n"); while(i<=2)#include"stdio.h"main(){ ints[3][4]; inti=0,j=0,nHelp; printf("請(qǐng)按順序輸入12個(gè)數(shù)字,以空格或回車分隔:\n"); while(i<=2) { for(j=0;j<=3;j++) {scanf("%d",&s[i][j]);} i++;} printf("\n"); for(i=0;i<=2;i++) { for(j=0;j<=3;j++) {printf("%d",s[i][j]);} printf("\n"); } printf("\n\n"); for(i=0;i<3;i++) { for(j=1;j<4;j++) { if(s[i][j]>s[i][0]) { nHelp=s[i][0]; s[i][0]=s[i][j]; s[i][j]=nHelp; }}} for(i=0;i<=2;i++) { for(j=0;j<=3;j++) { printf("%d",s[i][j]); } printf("\n"); }}2、編程序并上機(jī)調(diào)試運(yùn)行(包括題目及要求、流程圖、程序清單、測(cè)試數(shù)據(jù)及結(jié)果)(1)編寫一個(gè)3*4矩陣,找出每行中最大元素并與第一列元素交換。具體要求如下:(a)使用二維數(shù)組存放該3*4矩陣;(b)定義并初始化該二維數(shù)組;(c)輸出原矩陣和變換后的矩陣進(jìn)行比較;(d)有必要的提示信息。程序代碼流程圖程序代碼流程圖見下頁(yè)(2)編程實(shí)現(xiàn)如下功能:將字符數(shù)組str1中的全部字符拷貝到字符數(shù)組str2中,具體要求如下:(a)不能使用字符串拷貝函數(shù)strcpy();(b)必須將str1中的字符串結(jié)束標(biāo)志‘\0’一起拷貝,但其后的字符不拷貝;(c)str1的長(zhǎng)度不超過80,str2的長(zhǎng)度必須足夠大;(d)有必要的提示信息。。程序代碼#include<stdio.h>#include<string.h>voidmain(){程序代碼#include<stdio.h>#include<string.h>voidmain(){ charstr1[80],str2[90]; inti; printf("輸入字符串:\n"); gets(str1); printf("\n"); for(i=0;str1[i]!='\0';i++) { str2[i]=str1[i]; } str2[i]='\0'; puts(str2);}流程圖(3)設(shè)某班共有10名學(xué)生,為了平定某門課程的獎(jiǎng)學(xué)金,按照規(guī)定超過全班平均成績(jī)10%者發(fā)給一等獎(jiǎng),超過全班平均成績(jī)5%者發(fā)給二等獎(jiǎng)。編寫程序,輸出學(xué)生學(xué)號(hào)、成績(jī)和獎(jiǎng)學(xué)金等級(jí)。流程圖流程圖程序代碼 voidOutput(intnArr[][2])voidOutput(intnArr[][2]){ intAverS=0; inti; for(i=0;i<10;i++) AverS+=nArr[i][1]; AverS=AverS/10; printf("學(xué)號(hào)成績(jī)獎(jiǎng)學(xué)金等級(jí)\n"); for(i=0;i<10;i++) {if(nArr[i][1]>AverS*1.1) printf("%d%d一等獎(jiǎng)\n",nArr[i][0],nArr[i][1]); elseif((nArr[i][1]>(AverS*1.05))&&(nArr[i][1]<AverS*1.1)) printf("%d%d二等獎(jiǎng)\n",nArr[i][0],nArr[i][1]); }}見下頁(yè)主函數(shù)中調(diào)用代碼:voidmain(){ intnArr[10][2]; inti,j; printf("請(qǐng)按照學(xué)號(hào)、成績(jī)的順序依次輸入數(shù)據(jù):\n"); for(i=0;i<10;i++) {for(j=0;j<2;j++) {scanf("%d\n",&nArr[i][j]); }} Output(nArr);}五、程序調(diào)試記錄(1)調(diào)試下面程序。#defineN10main(){inti,num,data[]={12,15,23,29,30,31,34,45,56,70};/*num存放被查找的整數(shù),數(shù)組data存放有序數(shù)列*/intlow=0,high=N-1,mid;/*low、high和mid分別標(biāo)記查找區(qū)間的下界和上界及中間位置*/printf("\npleaseinputnum:\n");scanf("%d",&num);/*輸入要查找的整數(shù)*/printf("thesortednumbersare:\n");for(i=1;i<N;i++)printf("%d",data[i]);/*輸出有序數(shù)列*/while(low<=high)/*使用折半法查找數(shù)據(jù)*/{mid=(low+high)/2;if(num==data[mid])printf("\nFind%d,itisdata[%d]!",num,mid);break;/*若num等于數(shù)列中間位置的數(shù)據(jù)則查找成功*/elseif(num>data[mid])low=mid+1;/*若num小于中間位置的數(shù)據(jù),low等于mid-1*/elsehigh=mid-1;/*若num大于中間位置的數(shù)據(jù),low等于mid+1*/}if(low>high)printf("\n%disnotindata[]",num);/*若low大于high,則查找失敗*/}程序中包含有一些錯(cuò)誤,按下述步驟進(jìn)行調(diào)試。程序調(diào)試記錄1、程序出現(xiàn)的錯(cuò)誤及改正1.用{}把十四十五行括起來(lái)2.第十行i=1改成i=0;3.十九到二十三行注釋有問題;2、程序的改進(jìn)1.把七八九三行與十十一兩行換一下位置,方便用戶操作;實(shí)驗(yàn)5深入模塊化設(shè)計(jì)與應(yīng)用一、實(shí)驗(yàn)學(xué)時(shí)完成本實(shí)驗(yàn)需4學(xué)時(shí)。二、實(shí)驗(yàn)?zāi)康?、閱讀程序題(1)學(xué)會(huì)使用函數(shù)嵌套調(diào)用的使用方法(2)學(xué)會(huì)使用一維數(shù)組做為函數(shù)參數(shù)(3)遞歸調(diào)用的設(shè)計(jì)與使用(4)學(xué)會(huì)使用指針做為函數(shù)的參數(shù)2、編程題(1)如何運(yùn)用指針進(jìn)行程序設(shè)計(jì)(2)如何以一維數(shù)組、二維數(shù)組做為函數(shù)參數(shù)進(jìn)行程序設(shè)計(jì)(3)冒泡排序、選擇排序的靈活應(yīng)用三、實(shí)驗(yàn)指導(dǎo)為了達(dá)到最佳的實(shí)驗(yàn)效果,以下提供幾條適于模塊化編程的指導(dǎo)意見,可供參考。1、閱讀程序題應(yīng)先運(yùn)用自己在課堂所學(xué)的知識(shí),推導(dǎo)出結(jié)果,在上機(jī)時(shí)輸入計(jì)算機(jī),印證自己推導(dǎo)的結(jié)果,注意觀察函數(shù)嵌套調(diào)用、一維數(shù)組做為函數(shù)參數(shù)、指針做為函數(shù)的參數(shù)、遞歸調(diào)用的使用方法。2、編程題必須首先畫出流程圖,并反復(fù)思考判斷程序設(shè)計(jì)的正確性,以面向過程的、模塊化設(shè)計(jì)方法完成程序設(shè)計(jì)。要注意變量設(shè)置、函數(shù)參數(shù)及返回值在數(shù)據(jù)傳遞或共享中的重要作用。四、實(shí)驗(yàn)內(nèi)容1、閱讀程序題(1)intfunc(inta,intb) {return(a+b);} voidmain(){intx=2,y=5,z=8,r;r=func(func(x,y),z);printf(“%d\n”,r);}該程序的輸出結(jié)果是15。(2)intf(intb[],intn){inti,r;r=1;for(i=0;i<=n;i++)r=r*b[i];returnr;}voidmain(){intx,a[]={2,3,4,5,6,7,8,9};x=f(a,3);printf(“%d\n”,x);}該程序的輸出結(jié)果是120。(3)longfib(intn){if(n>2)return(fib(n-1)+fib(n-2));elsereturn(2);}voidmain(){printf(“%d\n”,fib(3));}該程序的輸出結(jié)果是4。(4)intf(char*s){intk=0;while(*s)k=k*10+*s++-‘0’;return(k);}以f(“1234”)方式調(diào)用該函數(shù),結(jié)果1234。 (5)voidsort(int*b,intn) { inti,j,k,t; for(i=0;i<n-1;i++){ k=i;for(j=i+1;j<n;j++) if(*(b+j)<*(b+k))k=j;if(k!=i){t=*(b+i);*(b+i)=*(b+k);*(b+k)=t;} }} voidmain() { int*p,i,a[10]; p=a; for(i=0;i<10;i++) scanf(“%d”,p++);p=a; sort(p,10); for(p=a,i=0;i<10;i++,p++) printf(“%d”,*p); printf(“\n”);}該程序的輸出結(jié)果是將輸入數(shù)字按照從小到大順序排列后組成一個(gè)新數(shù)字。2、編程序并上機(jī)調(diào)試運(yùn)行(包括題目及要求、流程圖、程序清單、測(cè)試數(shù)據(jù)及結(jié)果)(1)編寫一個(gè)函數(shù)fun(char*s),函數(shù)的功能是把字符串中的內(nèi)容逆置。例如,字符串中原有的內(nèi)容為abcdefg,則調(diào)用該函數(shù)后,字符串中的內(nèi)容為gfedcba。#include<stdio.h>#include<string.h>main(){ chars[100],nTemp;#include<stdio.h>#include<string.h>main(){ chars[100],nTemp; inti,j; printf("請(qǐng)輸入:\n"); gets(s); j=strlen(s)-1; for(i=0;i/j==0;i++) { nTemp=s[i]; s[i]=s[j]; s[j]=nTemp; j--; } puts(s);}程序代碼(2)構(gòu)造函數(shù)InputName(charStudName[][8]),將8名同學(xué)的姓名存入二維數(shù)組中;構(gòu)造函數(shù)BubbleSort(charStudName[][8]),用冒泡排序算法按學(xué)生的姓名進(jìn)行排序;構(gòu)造函數(shù)OutputName(charStudName[][8]),將排序后的結(jié)果輸出。函數(shù)InputName(charStudName[][8])流程圖voidInputName(charStudName[][8]){ inti; for(i=0;i<8;i++) {流程圖voidInputName(charStudName[][8]){ inti; for(i=0;i<8;i++) { gets(StudName[i]); }}程序代碼函數(shù)OutputName(charStudName[][8])流程圖流程圖程序代碼voidOutputName(charvoidOutputName(charStudName[][8]){ inti; for(i=0;i<8;i++) { puts(StudName[i]); }}函數(shù)BubbleSort(charStudName[][8])voidBubbleSort(charStudName[][8]){ inti,j;voidBubbleSort(charStudName[][8]){ inti,j; charnTemp[8]; for(i=0;i<=7;i++) {for(j=0;j<=7-i;j++) { if((strcmp(StudName[j],StudName[j+1])>0)) {strcpy(nTemp,StudName[j]); strcpy(StudName[j],StudName[j+1]); strcpy(StudName[j+1],nTemp);}}}}流程圖程序代碼主函數(shù)中調(diào)用代碼:#include<stdio.h>#include<stdlib.h>#include<string.h>voidmain(){ charStudName[2][8]; InputName(StudName); BubbleSort(StudName); OutputName(StudName);}測(cè)試數(shù)據(jù):abdgefcs輸出結(jié)果:abcdefgs(3)構(gòu)造函數(shù)Input(charStudNo[][8],floatScore[8]),將8名同學(xué)的姓名存入二維數(shù)組中;構(gòu)造函數(shù)SelectSort(floatScore[8]),用選擇排序算法按學(xué)生的成績(jī)進(jìn)行排序;構(gòu)造函數(shù)Output(charStudNo[][8],floatScore[8]),將排序后的結(jié)果輸出。函數(shù)Input(charStudNo[][8],floatScore[8])流程圖程序代碼 流程圖程序代碼voidInput(charStudNo[][8],floatScore[8])voidInput(charStudNo[][8],floatScore[8]){ inti; for(i=0;i<8;i++) { scanf("%s",&StudNo[i]); scanf("%f",&Score[i]); }}函數(shù)SelectSort(floatScore[8])流程圖流程圖程序代碼voidSelectSort(floatScore[8])voidSelectSort(floatScore[8]){ inti,j,s; floatfTemp; for(i=0;i<7;i++) { s=i; for(j=i+1;j<7;j++) { if(Score[s]<Score[j]) s=j; } if(s!=i) {fTemp=Score[i]; Score[i]=Score[s]; Score[s]=fTemp; }}}函數(shù)Output(charStudNo[][8],floatScore[8])流程圖流程圖程序代碼voidOutput(charStudNo[][8],floatScore[8])voidOutput(charStudNo[][8],floatScore[8]){ inti; for(i=0;i<8;i++) { printf("%s",StudNo[i]); printf("%3.1f",Score[i]); printf("\n"); }}主函數(shù)中調(diào)用代碼:#include<stdio.h>#include<stdlib.h>main(){ charStudNo[2][8]; floatScore[8]; Input(StudNo,Score); SelectSort(Score); Output(StudNo,Score);}測(cè)試數(shù)據(jù):a12b1c23d21e4f34g7h23輸出結(jié)果:a1(換行)b4(換行)c7(換行)d12(換行)e21(換行)f23(換行)g23(換行)h34五、程序調(diào)試記錄要求:寫出題號(hào),并編寫順序號(hào)。如四(1)出現(xiàn)的錯(cuò)誤(1)······(2)······1、程序出現(xiàn)的錯(cuò)誤及改正2、程序的改進(jìn)實(shí)驗(yàn)6構(gòu)造數(shù)據(jù)類型一、實(shí)驗(yàn)學(xué)時(shí)完成本實(shí)驗(yàn)需3學(xué)時(shí)。二、實(shí)驗(yàn)?zāi)康?、閱讀程序題(1)學(xué)會(huì)結(jié)構(gòu)體與共用體存儲(chǔ)空間的計(jì)算(2)學(xué)會(huì)結(jié)構(gòu)體與共用體的嵌套定義2、編程題(1)學(xué)會(huì)結(jié)構(gòu)體變量的定義和引用(2)學(xué)會(huì)結(jié)構(gòu)體數(shù)組的定義和引用(3)學(xué)會(huì)結(jié)構(gòu)體作為函數(shù)返回值及函數(shù)參數(shù)三、實(shí)驗(yàn)指導(dǎo)作為一種用戶自定義數(shù)據(jù)類型,必須首先進(jìn)行結(jié)構(gòu)體和共用體類型的定義(不分配空間),在定義了其類型之后才可以定義該結(jié)構(gòu)體(共用體)類型的變量、數(shù)組或指針(分配空間)。結(jié)構(gòu)體變量定義之后,即可像簡(jiǎn)單數(shù)據(jù)類型變量一樣來(lái)使用。在實(shí)際編程中,要具體體會(huì):結(jié)構(gòu)體變量、共用體變量的成員引用方法。結(jié)構(gòu)體變量、共用體變量的存儲(chǔ)空間計(jì)算方法。3、結(jié)構(gòu)體、共用體與指針、數(shù)組、函數(shù)的關(guān)系。四、實(shí)驗(yàn)內(nèi)容1、閱讀程序題(1)typedefunion{ longi;intk[5];charc;}DATE;structdate{ intcat;DATEcow;doubledog;}too;DATEmax;main(){ printf("%d",sizeof(structdate)+sizeof(max));}該程序的輸出結(jié)果是:52。(2)main(){ unionbt{ intk; charc[2]; }a; a.k=-7; printf("%o,%o\n",a.c[0],a.c[1]);}該程序的輸出結(jié)果是:377777777771,37777777777。(3)main(){ unionexample { struct { intx; inty; }in; inta; intb; }e; e.a=1;e.b=2; e.in.x=e.a*e.b; e.in.y=e.a+e.b; printf("%d,%d",e.in.x,e.in.y);}該程序的輸出結(jié)果是4,8。2、編程序并上機(jī)調(diào)試運(yùn)行(包括題目及要求、流程圖、程序清單、測(cè)試數(shù)據(jù)及結(jié)果)(1)制作一個(gè)簡(jiǎn)單的通訊錄,輸入姓名和電話,將其保存在結(jié)構(gòu)體數(shù)組中,通過輸入姓名,可查詢到某個(gè)人的電話,如果姓名為空則列出所有人的姓名與電話。查詢模塊流程圖錄入模塊流程圖查詢模塊流程圖錄入模塊流程圖主程序流程圖主程序流程圖程序清單程序清單#include<stdio.h>#include<stdlib.h>#include<string.h>#include<stdio.h>#include<stdlib.h>#include<string.h>structdata{ charname[3]; intnumber[7];}*phonebook;voidInput(){ inti,j,s; for(i=0;i<101;i++) { for(j=0;j<7;j++) {phonebook[i].number[j]=0; phonebook[i].name[j]='\0'; }} printf("請(qǐng)輸入通訊錄中記錄數(shù):\n"); scanf("%d",&s); printf("Inputtheinformation(7位number+換行+name+#):\n"); for(i=0;i<s;i++) { for(j=0;j<7;j++) scanf("%d",&phonebook[i].number[j]); for(j=0;j<3;j++) scanf("%c",&phonebook[i].name[j]); }}intSearch(structdata*x,chary[3]){ inti,find=0; for(i=1;i<101;i++) { if(strcmp(x[i].name,y)==0) find=i; } return(find);}voidmain(){ phonebook=(structdata*)malloc(sizeof(structdata*)*101); charSname[3]; intnCount,j; for(j=0;j<7;j++) Sname[j]='\0'; Input(); printf("Inputthenamewhichisexpectedtobefound:\n"); gets(Sname); nCount=Search(phonebook,Sname); if(nCount==0) { for(j=1;j<101;j++) {puts(phonebook[j].name); printf(""); printf("%d\n",phonebook[j].number); }} else { puts(phonebook[nCount].name); printf(""); printf("%d\n",phonebook[nCount].number); } free(phonebook);}測(cè)試數(shù)據(jù)及輸出結(jié)果測(cè)試數(shù)據(jù)及輸出結(jié)果五、程序調(diào)試記錄要求:寫出題號(hào),并編寫順序號(hào)。如四(1)出現(xiàn)的錯(cuò)誤(1)······(2)······1、程序出現(xiàn)的錯(cuò)誤及改正2、程序的改進(jìn)實(shí)驗(yàn)7綜合設(shè)計(jì)與應(yīng)用一、實(shí)驗(yàn)學(xué)時(shí)完成本實(shí)驗(yàn)需4學(xué)時(shí)。二、實(shí)驗(yàn)?zāi)康?、熟悉數(shù)組、指針和函數(shù)的綜合編程方法;2、鏈表的建立和使用;三、實(shí)驗(yàn)指導(dǎo)程序1中,用到了一維數(shù)組作為函數(shù)參數(shù),程序2用到了指向二維數(shù)組的行指針作函數(shù)參數(shù),程序3用到了指向二維數(shù)組的列指針作函數(shù)參數(shù),程序4用到了動(dòng)態(tài)內(nèi)存分配實(shí)現(xiàn)動(dòng)態(tài)數(shù)組。程序5涉及鏈表的建立、輸出及節(jié)點(diǎn)的插入。四、實(shí)驗(yàn)內(nèi)容1、編程序并上機(jī)調(diào)試運(yùn)行(要求給出流程圖、程序清單、測(cè)試數(shù)據(jù)及運(yùn)行結(jié)果)假設(shè)每班人數(shù)最多不超過40人,具體人數(shù)由鍵盤輸入,試編程打印最高分及其學(xué)號(hào)。程序1:用一維數(shù)組和指針變量作函數(shù)參數(shù),編程打印某班一門課成績(jī)的最高分和學(xué)號(hào)。程序2:用二維數(shù)組和指針變量作函數(shù)參數(shù),編程打印3個(gè)班學(xué)生(假設(shè)每班4個(gè)學(xué)生)的某門課成績(jī)的最高分,并指出具有該最高分成績(jī)的學(xué)生是第幾個(gè)班的第幾個(gè)學(xué)生。程序3:用指向二維數(shù)組第0行第0列元素的指針作函數(shù)參數(shù),編寫一個(gè)能計(jì)算任意m行n列的二維數(shù)組中的最大值,并指出其所在的行列下標(biāo)值的函數(shù),利用該函數(shù)計(jì)算3個(gè)班學(xué)生(假設(shè)每班4個(gè)學(xué)生)的某門課成績(jī)的最高分,并指出具有該最高分成績(jī)的學(xué)生是第幾個(gè)班的第幾個(gè)學(xué)生。程序4:編寫一個(gè)能計(jì)算任意m行n列的二維數(shù)組中的最大值,并指出其所在的行列下標(biāo)值的函數(shù),利用該函數(shù)和動(dòng)態(tài)內(nèi)存分配方法,計(jì)算任意m個(gè)班、每班n個(gè)學(xué)生的某門課成績(jī)的最高分,并指出具有該最高分成績(jī)的學(xué)生是第幾個(gè)班的第幾個(gè)學(xué)生。程序5:按如下方法定義一個(gè)時(shí)鐘結(jié)構(gòu)體類型:structline{intnum;structline*next;};然后,請(qǐng)建立一個(gè)有9個(gè)節(jié)點(diǎn)的鏈表,要求鏈表節(jié)點(diǎn)的成員num的值依次分別為1-9的整數(shù),每建立一個(gè)節(jié)點(diǎn)都將之插入到原頭節(jié)點(diǎn)前面,使新節(jié)點(diǎn)變成頭節(jié)點(diǎn),最后輸出num值為偶數(shù)的節(jié)點(diǎn)。程序1程序清單:#include<stdio.h>#include<stdlib.h>#include<stdio.h>#include<stdlib.h>#include<string.h>voidOutputmax(intx[40],longint*a){ int s=0,j; for(j=1;j<40;j++) { if(x[s]<x[j]) s=j; } printf("最高分是:%d\n",x[s]); printf("該生學(xué)號(hào):%d\n",*(a+s));} voidmain(){ longintnumber[40],*pointer; inti,j,Score[40]; printf("輸入班級(jí)人數(shù)(<40)\n"); scanf("%d",&i); pointer=number; printf("輸入學(xué)號(hào)和成績(jī)\n"); for(j=0;j<i;j++) { scanf("%d%d\n",pointer+j,&Score[j]); } Outputmax(Score,pointer);}程序2程序清單:printf("%d班%d號(hào):%d\n",i,*m+1,max);}}printf("%d班%d號(hào):%d\n",i,*m+1,max);}}intfun(inta[],int*m){intj,max;max=a[0];for(j=0;j<4;j++)if(max<a[j]){max=a[j];*m=j;}return(max);}#include<stdio.h>intmain(){inti,j,score[3][4],max,*m,s=0;intfun(inta[],int*m);m=&s;for(i=0;i<3;i++)for(j=0;j<4;j++)scanf("%d",&score[i][j]);for(i=0;i<3;i++){max=fun(score[i],m);程序3程序清單:#include<stdio.h>voidOutputmax(intx[3][4],int*a)#include<stdio.h>voidOutputmax(intx[3][4],int*a){ int j,i,r,s,m,n;r=0;s=0;printf("請(qǐng)輸入要查找的班級(jí)數(shù)和每班人數(shù):\n");scanf("%d%d",&m,&n);for(i=0;i<m;i++){for(j=0;j<n;j++) if(*a<*(a+i*n+j)){a=a+i*n+j;r=i;s=j;}}printf("最高分是:%d\n",*(a+i*4+j));printf("該生是%d班第%d個(gè)學(xué)生",r+1,s+1);}voidmain(){ intnScore[3][4],*pointer,i,j; pointer=nScore[0]; printf("依次輸入成績(jī)\n"); for(i=0;i<3;i++) for(j=0;j<4;j++) scanf("%d\n",*pointer+i*4+j); Outputmax(nScore,pointer);}程序4程序清單:#include<stdio.h>#include<stdlib.h>#include<stdio.h>#include<stdlib.h>#include<string.h>intOutputmax(int*a,intp,intq){ int s=0,r=0,j,i;for(i=0;i<p;i++){ for(j=0;j<q;j++){ if((*(a+r*p+s))<(*(a+i*p+j))){r=i;s=j;}} }return(r+1,s+1,*(a+r*p+s));}voidmain(){ inti,j,m,n,Score[40][40],*pointer; printf("依次輸入成績(jī)\n"); for(i=0;i<3;i++) for(j=0;j<4;j++) scanf("%d%d\n",&Score[i][j]); printf("輸入要查找的班級(jí)及每班人數(shù):\n"); scanf("%d%d",&m,&n); pointer=(int*)malloc(sizeof(int)*m*n); printf("最高分是%d班%d位同學(xué)的分?jǐn)?shù)%d\n",Outputmax(pointer,m,n));}程序5程序清單: pHead->num=j; for(j=8;j>0;j--) pHead->num=j; for(j=8;j>0;j--) { pNew=(structline*)malloc(sizeof(structline*)); pNew->num=j; pNew->next=pHead; pHead=pNew; } pFind=pHead; while(pFind!=NULL) { if((pFind->num)%2==0) printf("%d",pFind->num); }}#include<stdio.h>#include<stdlib.h>#include<string.h>structline{ intnum; structline*next;}*pHead,*pNew,*pFind;voidmain(){ intj; j=9; pHead=NULL; pHead=(structline*)malloc(sizeof(structline*));五、程序調(diào)試記錄1、程序出現(xiàn)的錯(cuò)誤及改正2、程序的改進(jìn)實(shí)驗(yàn)8數(shù)據(jù)永久性存儲(chǔ)用一、實(shí)驗(yàn)學(xué)時(shí)完成本實(shí)驗(yàn)需3學(xué)時(shí)。二、實(shí)驗(yàn)?zāi)康?、閱讀程序題學(xué)習(xí)文件指針的概念,熟悉并掌握各種基本文件操作函數(shù),以及如何進(jìn)行文件基本操作。2、編程題(1)如何運(yùn)用文件指針進(jìn)行文件的打開、關(guān)閉操作;了解常用的文件打開模式;了解文件存儲(chǔ)的相對(duì)路徑和絕對(duì)路徑的區(qū)別(2)了解各種文件打開方式、字符讀寫、字符串讀寫、數(shù)據(jù)塊讀寫等不同函數(shù)之間的區(qū)別以及實(shí)現(xiàn)方式。3、作為全書最后一章,本章的實(shí)驗(yàn)內(nèi)容結(jié)合了前面幾章的知識(shí),培養(yǎng)學(xué)生的綜合編程能力。三、實(shí)驗(yàn)指導(dǎo)本章內(nèi)容相對(duì)固定,沒有給初學(xué)者更多的靈活發(fā)揮空間,因此相對(duì)容易掌握;但同時(shí)本章涉及到的基本文件操作函數(shù)較多,而且要求能夠準(zhǔn)確運(yùn)用。因此本章實(shí)驗(yàn)需要注意以下幾點(diǎn)。1、上機(jī)前要求熟悉各種文件讀寫函數(shù),包括參數(shù)、返回值、調(diào)用方式以及功能,必要的時(shí)候需要一點(diǎn)點(diǎn)“死記硬背”(本課程大部分內(nèi)容沒有這種要求)。在上機(jī)時(shí)通過讀程序和實(shí)際編程,鞏固對(duì)上述函數(shù)的功能和使用方法的了解。2、編程題的測(cè)試數(shù)據(jù)要求學(xué)生自己構(gòu)建,在構(gòu)建文件時(shí)要注意多嘗試各種可能發(fā)生的情況,例如特殊字符;中英文字符混合;空行等等,觀察程序的運(yùn)行結(jié)果。四、實(shí)驗(yàn)內(nèi)容1、閱讀程序題(1)#include<stdio.h>main(){FILE*fp;inti,k=0,n=0;fp=fopen("d1.dat","w");for(i=1;i<4;i++)fprintf(fp,"%d",i);fclose(fp);fp=fopen("d1.dat","r");fscanf(fp,"%d%d",&k,&n);printf("%d%d\n",k,n);fclose(fp);}執(zhí)行后輸出結(jié)果是1230。(2)有以下程序(提示:程序中fseek(fp,-2L*sizeof(int),SEEK_END);語(yǔ)句的作用是使位置指針從文件尾向前移2*sizeof(int)字節(jié))#include<stdio.h>main(){FILE*fp;inti,a[4]={1,2,3,4},b;fp=fopen("data.dat","wb");for(i=0;i<4;i++)fwrite(&a[i],sizeof(int),1,fp);fclose(fp);fp=fopen("data.dat","rb");fseek(fp,-2L*sizeof(int).SEEK_END);fread(&b,sizeof(int),1,fp);fclose(fp);printf("%d\n",b);}執(zhí)行后輸出結(jié)果是3。(3)#include<stdio.h>voidWriteStr(char*fn,char*str){FILE*fp;fp=fopen(fn,"w");fputs(str,fp);fclose(fp);}main(){WriteStr("t1.dat","start");WriteStr("t1.dat","end");}程序運(yùn)行后,文件t1.dat中的內(nèi)容是end。2、編程序并上機(jī)調(diào)試運(yùn)行(包括題目及要求、流程圖、程序清單、測(cè)試數(shù)據(jù)及結(jié)果)(1)某英漢詞典文件包含N個(gè)記錄(N>1),每個(gè)記錄有兩個(gè)字段:一個(gè)是英文單詞,另一個(gè)是相應(yīng)的漢語(yǔ)解釋。各個(gè)記錄按英文單詞的詞典順序排列,各英文單詞并不重復(fù)。要求編寫一個(gè)用于維護(hù)、更
溫馨提示
- 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 全屋定做合同標(biāo)準(zhǔn)文本
- 不利物質(zhì)招標(biāo)合同標(biāo)準(zhǔn)文本
- 公司押金合同樣本
- 代款購(gòu)房合同樣本
- 國(guó)家電網(wǎng)考試通信系統(tǒng)試題及答案
- 光伏項(xiàng)目居間服務(wù)合同樣本
- 屋面換瓦合同范本
- 2025xy技術(shù)許可合同
- 2025至2030年中國(guó)單軌小車行業(yè)投資前景及策略咨詢報(bào)告
- 2025至2030年中國(guó)單組份環(huán)保型聚氨酯防水涂料行業(yè)發(fā)展研究報(bào)告
- 中小學(xué)國(guó)家教育智慧平臺(tái)
- 生產(chǎn)車間5S管理制度
- 2025交管12123學(xué)法減分考試題庫(kù)和答案
- T-JDFA 02-2024 江蘇省轉(zhuǎn)型融資主體認(rèn)定評(píng)價(jià)標(biāo)準(zhǔn)
- 2025年開封大學(xué)單招職業(yè)傾向性測(cè)試題庫(kù)匯編
- 2023學(xué)年杭州市余杭區(qū)七年級(jí)語(yǔ)文下學(xué)期期中考試卷附答案解析
- 貴州省縣中新學(xué)校計(jì)劃項(xiàng)目2025屆高三下學(xué)期開學(xué)聯(lián)考語(yǔ)文試題及答案
- 2023-2024年護(hù)師類之護(hù)師初級(jí)基礎(chǔ)試題庫(kù)和答案要點(diǎn)
- 加快形成農(nóng)業(yè)新質(zhì)生產(chǎn)力
- 演員經(jīng)紀(jì)合同法律風(fēng)險(xiǎn)-洞察分析
- 綜合實(shí)踐項(xiàng)目 制作細(xì)胞模型 教學(xué)實(shí)錄-2024-2025學(xué)年人教版生物七年級(jí)上冊(cè)
評(píng)論
0/150
提交評(píng)論