




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
等中科技火孚課程實驗報告課程名稱: C語言程序設計實驗專業(yè)班級: 學號: 姓名: 指導教師: 報告日期: 計算機科學與技術學院1流程控制實驗TOC\o"1-5"\h\z\o"CurrentDocument"1.1程序改錯 12程序修改替換 錯誤!未定義書簽。\o"CurrentDocument"1.3程序設計 31.4小結 18\o"CurrentDocument"2數(shù)組程序設計實驗 19\o"CurrentDocument"1程序改錯與跟蹤調試 19\o"CurrentDocument"2程序完善與修改替換 22\o"CurrentDocument"3程序設計 274小結 52\o"CurrentDocument"3結構與聯(lián)合實驗 54\o"CurrentDocument"1表達式求值的程序驗證 54\o"CurrentDocument"2源程序修改替換 56\o"CurrentDocument"3.3程序設計 593.4小結 95\o"CurrentDocument"參考文獻 961流程控制實驗1.1程序改錯/*合數(shù)判斷器*/#include<stdio.h>intmain(void)(inti,x,k,flag=0;printf("本程序判斷合數(shù),請輸入大于1的整數(shù),以ctrl+Z結束\n");while(scanf&x)!=EOF)for(i=2,k=x?l;i<=k;i++){if(!x%i) ※※此處應改為if(!(x%i))或改為if(x%i==0)(flag=l;break;)}if(flag=l) ※※此處應改為flag==l,一個“=”表示賦值printf(*%d是合數(shù)、n”,x);elseprintf(*%d不是合數(shù)\n”,x);※※此處應添加語句flag=0,否則無論是否是合數(shù)flag的值始終是1return0;33不是合數(shù)44是合數(shù)5不是合數(shù)66是合數(shù)7不是合數(shù)88是合數(shù)99站合數(shù)ZProcessexitedafter12.26secondswithreturnvalue0請接任點健繼續(xù)...■1.2程序修改替換(1)修改方案:將原實驗程序中if語句的break改為k=i;保證了if語句執(zhí)行后退出循環(huán)。(2)修改方案:將for循環(huán)改為如下代碼:inti=2,k;k=x?l;do{if(!(x%i)){flag=l;break;}i++;}while(i<=k);3C:\U$ef$\20140\Desktop\Operate\_t?l20201104\6/WfS(2.exe - □X33不足合數(shù)7878是合數(shù)79不是合數(shù)103103不是合數(shù)234234是合數(shù)1414是合數(shù)1717不足合數(shù)*ZProcessexitedafter28.22secondswithreturnvalue0請按任意健繼續(xù)...(3)修改方案:定義兩個函數(shù),一個函數(shù)判斷為合數(shù),另一個判斷是純粹合數(shù),并在main函數(shù)中調用判斷純粹合數(shù)的函數(shù),輸出所有的3位純粹合數(shù)。程序代碼如下:#include<stdio.h>intNotPrime(intx)〃判斷是合數(shù)iinti,k,flag=0;for(i=2,k=x?l;i<=k;i++){if(x%i==0){flag=l;break;))returnflag;}〃判斷是純粹合數(shù)intpure(intx){intflag=0,count=0;for(intj=0;j<3;++j){if(NotPrime(x))count++;x/=10;
if(count==3)flag=l;returnflag;}intmain(void){intnum=0;printf(〃純粹合數(shù)有\(zhòng)n");for(intx=100;x<=999;++x){if(pure(x)){printf(,z%d\t/z,x);num++;if(num%10==0)printf("\n");}Ireturn0;}4224424.-)4468489602623634646658680692802SM8268488618728859069189309429549649869984204414534664224424.-)4468489602623634646658680692802SM826848861872885906918930942954964986998420441453466488600622633669690801813S258478608718849059179289409529639859968025681246890246802467912450456892345680124578012356894444446666W6888888899999999791457000^578900^56903568012402568923456891245680123568944441446666666888888999999990628506284960929>405466J87980820M55687902142536496081934444446666666888888999999990527L4860839508283952)65>86970719J43546778K)l132435485980?92444444666666688888899999999467924678145668226602346890oo~45890235689014567010^34569444444666666688888899999999356813567034557115590235789o245099023568901456781234568444444666666688888889999999245602456922446004489124668■J02^-5890234689014567802345687444444666666688&88889999999五-F0345903458013358923680135579-hu0245690234689012467802345689-9444444666666688888889999999gProcessexitedafter0.02486secondswithreturnvalue請按任意鍵繼續(xù)...1.3程序設計1.計算稅金1)解題思路:2)程序源代碼:①利用switch語句:#include<stdio.h>intmain(void){intwage,tax,flag=l;while(flag){printf(〃\n請輸入工資:\n〃);〃提示輸入工資scanf(〃%d〃,&wage);tax=(int)((wage)/1000);//用于計算不同的工資范圍switch(tax){case0:printf("您不用交稅金!”);break;case1:printf(〃您應交稅金:%.3f”,(float)wage*。.05);break;case2:printf(“您應交稅金:%.3fz,,(float)wage*0.1);break;case3:printf(〃您應交稅金:%.3f/z,(float)wage*0.15);break;case4:printf(“您應交稅金:%.3f”,(float)wage*0.2);break;default:printf("您應交稅金:%.3f/z,(float)wage*O.25);break;} 〃強制類型轉換,輸出較為精確的浮點數(shù)printf("\n是否需要繼續(xù)計算?(0orl)\n\n");scanf &flag);〃用于決定是否繼續(xù)循環(huán)的語句}return0;)②利用if語句:#include<stdio.h>intmain(void){intx,y,flag=l;while(flag){printf("\n請輸入工資:\n");〃提示輸入工資scanf&x);if(x<0)printf("請輸入正整數(shù)!”);if(x<1000)printf("您不用交稅金!”);if(x<2000&&x>=1000)printf("您應交稅金:%.3f/z,(float)x*0.05);if(x<3000&&x>=2000)printf("您應交稅金:%.3r,(float)x*0.1);if(x<4000&&x>=3000)printf("您應交稅金:%.3f,z,(float)x*0.15);if(x<5000&&x>=4000)printf("您應交稅金:%.3f(float)x*0.2);if(x>5000)printf("您應交稅金:%.3r,(float)x*0.25);
〃強制類型轉換,輸出較為精確的浮點數(shù)printf("\n是否需要繼續(xù)計算?(0or1)\n\n*);scanf(飛d”,&flag); 〃用于決定是否繼續(xù)循環(huán)的語句return0;3)測試:X[0,1000)[10000,2000)[2000,3000)[3000,4000)[4000,5000)[5000,+8)輸入值99911002400345643125679結果不用交稅金55.000240.000518.400862.4001419.750圖1-1程序設計題1的運行結果.輸出滿足條件的三位數(shù)1)解題思路:2)程序源代碼:#include<stdio.h>intmain(void){for(inti=100;i<=999;i++){〃for循環(huán)語句確定是三位數(shù)intt;t=i*i;if(t%1000==i)〃if判斷該數(shù)平方末三位是否是該數(shù)本身
printf(*%d\nw,i);〃若結果為真,輸出該值。return0;3)測試:[1C:\Users\20140\Desktop\Operate\±ei20201104\2.exe376625Processexitedafter0.01501secondsvithreturnvalue0請按任意鍵繼續(xù)...圖1-2程序設計題2的運行結果.股票收盤價格波動值1)解題思路:2)程序源代碼:#include<stdio.h>doubleabs(doublea){if(a<0)a=-a;returna;"/定義絕對值函數(shù)intmain(void){doublea,b,max;intday;printf(”請輸入天數(shù):\n");scanf(〃%d〃,&day);printf(〃請輸入這些天的收盤價格:\n〃);scanf(z,%ir,&b);〃提示輸入收盤天數(shù)與每天收盤價格for(inti=l;i<day;++i){a=b;scanfC%ir,&b);if(abs(a-b)>max)//if語句將每次的最大波動值賦給maxmax=abs(a-b);)printf(,z%.21f\n",max);〃輸出最大波動值return0;3)測試:項目測試輸入輸出115396.0021.231.782.571.590.983200267.45345.8978.443CAUter$\20l40U)etktop\OperateVt9l2020H04\3.exe — □X這4天最大波動值為6.00是否需要繼續(xù)計算?(0or1)1清輸入天數(shù):-1濟城入這些大的收&價格:231.782.571.59這4天最大波動值為0.98是否需要維續(xù)計算?(0or1)1謂輸入天數(shù):3詁輸入這些天的收盤價格:200267.45345.89這3天最大波動值為78.44是否需要繼續(xù)計尊?(0or1)0(Processexitedafter36.77secondsvithreturnvalue0 圖1-3程序設計題3的運行結果.將正文的多個空格用一個代替1)解題思路:2)程序源代碼:#include<stdio.h>intmain(void){chara,b;printf(〃請輸入一段正文,并以Ctrl+Z結束:\n〃);while((b=getchar())!=EOF){if(!(a=32&&b=32))〃如果前后兩個字符均為空格,則只輸出一個putchar(b);a二b;〃將后一個字符賦給前一個字符return0;
3)測試:項目測試輸入輸出1Hust1037Hust10372I love hustIlovehust3XuruidaisahusterXuruidaisahuster3C:\Users\20140\De$ktop\Operate\±9U0201104\4.exe - □XMust1037Hust1037IlovehustIlovehustXuruidaisahusterXuruidaisahusterProcessexitedafter38.27secondswithreturnvalue0請按任意陵繼續(xù)..?圖1-4程序設計題4的運行結果.輸出10行楊輝三角1)解題思路:2)程序源代碼:Sinclude<stdio.h>intmain(){inti,j,a[100][100];〃定義一個二維數(shù)組,代表行和列for(i=0;i<10;++i)a[i][0]=l;〃通過遍歷,將第一列的值賦為1for(i=0;i<10;++i)for(j=l;j<10;++j)a[i][j]=(a[i][jT])*(i-j+l)/j;〃應用公式將值存入二維數(shù)組中for(i=0;i<10;++i)for(j=i;j<10;++j)printfC");〃打印空格,形成三角格式for(j=0;j<10;++j)if(a[i][j]!=0)printf("4d”,a[i][j]);〃按一個數(shù)字占四個字符的域寬輸出printf("\n");〃確保換行輸出return0;3)輸出結果:圖1-5程序設計題5的運行結果.輸出梅森素數(shù)1)解題思路:2)程序源代碼:#include<stdio.h>#include<math.h>longisprime(longn)〃定義一個函數(shù)判斷是素數(shù){intflag=l;for(inti=2;i<=sqrt(n);i++)(if(n%i==0){flag=0;break;)}returnflag;}longisMasonNumber(1ongnum)〃定義一個函數(shù)判斷是梅森數(shù)(intflag=0;if(((num+1)&(num))==0)flag=l;returnflag;}intcount(longx)〃定義一個求某數(shù)是2的幾次方的函數(shù)(intcount=0;inttotal=l;while(total<x)(total=total*2;++count;)if(total==x)returncount;)intmain(void)(longi=2,m;printf("請輸入一個長度大于三的長整數(shù):\n");scanf("%d",&m);for(;i<=m;++i)(if(isMasonNumber(i))〃if循環(huán)的嵌套,先判斷是梅森數(shù),再判斷是否為梅森素數(shù)if(isprime(i))printf(Z,M(%d)=%ld\n/z,count(i+1),i);〃按示例輸出return0;)3)測試:輸入一個較大的m可得到結果如圖3C:\Users\2O140\Desktop\OperateVttfU0201104\6.exe 一口X12345678W2)=3W3)=7■(5)=31*(7)=127*(13)=819111(17)=13107111(19)=524287Processexitedafter2.18secondswithreturnvalue0力按任。鍵維續(xù)???■圖1-6程序設計題6的運行結果7.篩法構造素數(shù)表1)解題思路:2)程序源代碼:#include<stdio.h>ttdefinescale100000〃可改變素數(shù)表輸出范圍intmain(){longlongi,j,a[scale],prime[scale];for(a[0]=a[l]=0,i=2;i<scale;i++)
a[i]=l;for(i=2;i<scale;i++){if(a[i]){for(j=i*2;jCscale;j+=i)a[_j]=0;〃篩掉素數(shù)的倍數(shù)longlongn=0;for(i=2;i<scale;++i)if(a[i]){prime[n]=iif(a[i]){prime[n]=i;++n;〃將表中的下標(素數(shù))存入素數(shù)表中l(wèi)onglongm;scanf&m);longlongq=0;for(;prime[q+lkm;q++)〃查找素數(shù)表輸出李生素數(shù)if(prime[q+1]-prime[q]==2)printf(zz(%lld,%lld)\n<z,prime[q],prime[q+1]);return0;}3)測試輸出:分別輸入m的值為50,150,500可得如圖結果:□IC:\Users\20140\Desktop\Operate\_t^L20201104\10.exe50(3,5)(5,7)□IC:\Users\20140\Desktop\Operate\_t^L20201104\10.exe50(3,5)(5,7)(11,13)(17,19)(29,31)(41,43)(3C:\Users\2O140\Desktop\Operate\_ttfl20201104\10.exe15^^(3.5)(5,7)(11.13)(17.19)(29,31)(41,43)(59,61)(71,73)(101,103)(107,109)(137,139)Processexitedafter1.198secondswithreturnvalue0請按任意鍵繼續(xù)...■Processexitedafter1.765secondswithreturnvalue0,「急鍵繼續(xù)...■BC:\UsefS\20140\Desktop\Operate\JtVl20201104\10.exe?苑困在[4.1000000]之間的值:500(11,13)(17,19)(29.31)(41,43)(59,61)(71,73)(101,103)(107,109)(137,139)(149,151)(179,181)(191,193)(197,199)(227,229)(239,241)(269,271)(281,283)(311,313)(347,349)(419,421)(431,433)(461,463)Processexitedafter1.953secondswithreturnvalue0生拉仃也選?。?_圖1-7 程序設計題7的運行結果8.輸出符合形式的表達式1)解題思路:2)程序源代碼:#include<stdio.h>intmain(){intp,i=0,j=O,k=0,A[10],x;longm=0,n=0;scanf&p);for(;n<=98765;n++){x=0;m=n;for(i=4;i>=0;i—){ 〃將被除數(shù)各位存在數(shù)組中A[i]=m%10;m=m/10;}if((n%p)!=0)continue;else{ 〃當被除數(shù)可整除輸入的數(shù)時,將除數(shù)的各位存在數(shù)組中m=n/p;for(i=9;i>=5;i-){A[i]=m%10;m=m/10;})for(k=0;k<=8;k++){ 〃嵌套循環(huán),當有重復數(shù)字時退出循環(huán)for(j=k+l;j<=9;j++){if(A[k]==A[j]){X=1;break;})if(x==l)break;}if(x==O){ 〃循環(huán)得到保存在數(shù)組中的數(shù)字,并按格式輸出for(i=0;i<=4;i++)printfA[i]);printf("/");for(i=5;i<=9;i++)printf(V,A[i]);printf(*=%d\n*,p);return0;)3)測試:項目測試輸入輸出13275168/02349=3222439528/01647=2446872/01953=2436898736/01452=68C1C:\Users\2O140\Desktop誄=1.exe-□X13275168/02349=32Processexitedafter1.401secondswithreturnvalue0請按任怠鍵維續(xù)...13C:\User5\20140\Desktop誄?名1.exe□1C:\Users\20140\Desktop\^^€1.exe2439528/01647=244687201953=246S98736/01452=68Processexitedafter1.777secondswithreturnvalue0請按任意鍵繼續(xù)...Processexitedafter請按任意鍵繼接.??,1.322secondsvithreturnvalue0圖1-8程序設計題8的運行結果1.4小結通過本節(jié)有關程序設計中流程控制的程序設計題目,我進一步地練習了如何運用嵌套循環(huán),掌握了用篩法求素數(shù)表,但是在按照格式輸出結果,算法的實現(xiàn)上尚還欠缺能力。叵t=Ox62feOO-Programming"&=0x62fe10Muage叵t=Ox62feOO-Programming"&=0x62fe10Muageagi=12回j=。[atl^OAOOO'2數(shù)組程序設計實驗2.1程序改錯與跟蹤調試(1)單步執(zhí)行源程序的跟蹤調試Qt=Ox62feOO"Programming"@s=0x62fe10"Language"Qis12Qj=o◎姆]=0、000'由調試結果可知,當其進入strcate函數(shù)時,字符數(shù)組t和s的內容都是正確的。當處在第二個while語句時i=12,但是由于“Programming"的字符個數(shù)是11,因此此時應該是在t[l1]的位置,所以i應該減去1;才能順利完成后續(xù)的拼接操作。而當執(zhí)行到花括號時,發(fā)現(xiàn)按預料的一樣并未執(zhí)行正確。因為t[ll]的值也為,\0',所以此時字符數(shù)組t的結果就像是沒有拼接一樣,其實是從W2]開始進行了復制操作。我們添加代碼i=i-l;后得到如下結果:我們發(fā)現(xiàn)此時s的值輸出并不正確。t=0x62fe00"ProgrammingLanguage1s:0x62fe10uage,,is11血j=0@中]=0、000'3voidstrdeIc(char(](char);4intmain(void)5E316chara[]?MLanguage".b[]?7printf(*%?%s\n".b.a);?8?9B str■ str陲10return0;11L)1213voidstrcate(chart(].char(14E15inti■0,j■0;16whiIe(t(i*?]);17i■i-1;18whiIe((t[i+?]■s[j+?])I?9■ I2021void$trdelc(chars[].char(22E3(23intj.k;24for(j-k-O;s(jJ!-*\O':j25if(s[j]I?c)s【kp=s[j];26L)#incIude<stdio.h>2voidstrcate(char[ ],char[(2)跟蹤進入strdelc函數(shù)s=0x62fe00^ProgrammingLanguage"回k=026L)我們看到,初始進入函數(shù)時值是正確的,然而最終得到的結果卻是ProgrmmingLngugeage,正確結果是ProgrmmingLnguge,可見數(shù)組末尾多了"age”三個字符。這是由于數(shù)組本該在s[k]處終止,因此,要將其值賦為'\0'。最后得到結果如圖:13C:\Users\20140\Desktop\Operate\C語音上機客賽\第五次上機20201119\程序改播與跟蹤調試.exe - □ProgrammingLanguageProgrammingLanguageLanguageProgmnningLnguge最終代碼修改方案如下:#include<stdio.h>voidstrcate(char[],char[]);voidstrdelc(char[],char);intmain(void)(chara口=“Language”,b口="Programming”;printf(〃%s%s\n,z,b,a);strcate(b,a);printf(z,%s%s\nz,,b,a);strdelc(b,'a');printf(〃%s\n〃,b);return0;voidstrcate(chart[],chars[])(inti=0,j=0;while(t[i++]);此處添加代碼i=i-l;while((t[i++]=s[j++])!='\0');}voidstrdelc(chars[],charc)intj,k;for(j=k=0;s[j]!=\0";j++)if(s[j]!=c)s[k++]=s[j];此處添加代碼s[k]=,\0';)2程序完善與修改替換(1)文本去重①完善后代碼:include<stdio.h>include<string.h>voidRemoveDuplicate(char*s);intmain(){charstr[200];printf("Inputstrings,endofCtrl+z\n〃);while(fgets(str,200,stdin)!=NULL){RemoveDuplicate(str);printfstr);)return0;)voidRemoveDuplicate(char*s){intr,w,i,len;len=strlen(s);for(r=w=0;r<1en;r++){if(s[r]) {s[w++]=s[r];for(i=r+l;i<len;i++){if(s[i]==s[r])s[i]='\0';s[w]-\0*;運行結果如下:BC:\Users\20140\Desktop\Operate\C語音上機回8\?五次上機20201119展序亢普和修改*1J.exe - □XInputstrings,endofCtrl+z12eerer12erhusthust666!!hust6!*ZProcessexitedafter28.54secondsvithreturnvalue0請按任應椎納撅...■②空間換時間提高效率:include<stdio.h>include<string.h>voidRemoveDuplicate(char*s);intmain(){charstr[200];printf("Inputstrings,endofCtrl+z\n〃);while(fgets(str,200,stdin)!=NULL){RemoveDuplicate(str);printfstr);)return0;)voidRemoveDuplicate(char*s){inti,j,len,remainder;intcheck[8]={0};len=strlen(s);for(i=j=0;i<len;i++) {remainder=s[i]%32;if((check[s[i]?5]&(1<<remainder))==0)s[j++]=s[i];check[s[i]?5]|=(1?remainder);s[j]=>\0';)運行后截圖:□IC:\Users\20140\Desktop\Operate\CS8±m(xù)^tt\B£^Lt9U0201112.exe 一口XInputstrings,endofCtrl+z12eerer12erhusthust888!!!hust8!prosr&iHDingprogaainZProcessexitedafter33.19secondsvithreturnvalue0請按任意鍵繼續(xù)...(2)約瑟夫問題①完善代碼:include<stdio.h>include<string.h>intmain(void)(intM,N;scanf(%d%d”,&M,&N);inta[M],b[M];inti,j,k;for(i=0;i<M;i++)a[i]=i+l;for(i=M,j=0;i>l;i-)(for(k=l;k<=N;k++)if(++j>i-l)j=0;b[M-i]=(j?a[j-l]:a[i-l]);if(j)for(k=-j;k<i;k++)a[k]=a[k+l];)for(i=0;i<M-l;i++)printf(*%d\n*,b[i]);printf(*%d*,a[0]);return0;I運行截圖如下BC:\Users\20140\Desktop\OperateVt;ffl^\Sfi;>Ltyi20201119\的完善和修改共2.1.exe00J49Processexitedafter2.229secondswithreturnvalue0請按任意鍵繼續(xù)...EC:\Users\20140\Desktop\OperateVt販圓便五牡912020111和修改費奐2.1.exe135759Processexitedafter7.162secondswithreturnvalue0請按任意鍵繼續(xù)...②提高效率:#include<stdio.h>intmain()(intj,m,i=0;scanf(',%d%d,,,&j,&m);intchecklj];for(;i<j;i++)check[i]=0;intk=0,count=l,n=j;for(i=0;n>=1;)(if(m==count)k=i%j;check[k]=l;n-Scount=0;〃此時遍歷下標還在出列元素,而下一個元素才是從1開始報數(shù),〃故此處將count置為0,當下標i遍歷至下一個未出列元素時count再加1)i++;if(check[i%j]!=l)count++;)printf("%d\n",k+l);)運行截圖如下2000004147451Processexitedafter3.576secondswithreturnvalue0請按任意鍵繼續(xù).?.100434Processexitedafter3.826secondswithreturnvalue0請按任意鍵繼續(xù)...3程序設計.輸出二進制1)解題思路:2)源代碼:#include<stdio.h>#include<math.h>#include<string.h>intmain(void){intm,n,flag,count=0;scanf("%d〃,&m);inta[50];if(m>=0)n=m;〃判斷正負,如果是正數(shù)不變,如果是負數(shù)則根據(jù)二進制原理加上相應值Elsen=m+(int)pow(2,32)+1;for(intj=0;j<32;j++){〃采用除二取余法依次將二進制從低位到高位存入數(shù)組flag=n%2;n=(int)(n/2);count++;a[j]=flag;}if(m<0)a[31]=l;〃如果小于零,則把符號位置為1for(intj=count-l;j>=0;j—){ 〃從高位到低位輸出二進制if(j!=0&&(j+l)%4==0&&(j+l)!=32)printf("");〃實現(xiàn)按格式輸出printfa[j]);Jprintf("\n");return0;3)測試:項目測試輸入輸出10000000000000000000000000000000002-111111111111111111111111111111111312300000000000000000000000001111011000000000000000000000000000000000Processexitedafter0.8367secondswithreturnvalue0清按任意鍵繼續(xù)...-1mimimimimi111111111111Processexitedafter1.809secondswithreturnvalue0請按任意鍵繼續(xù)...
\T2200000000000000000000000001111011Processexitedafter0.8412secondswithreturnvalue0請按任意鍵繼續(xù)???圖2-1程序設計題1的運行結果2.將成績與對應姓名進行排序1)解題思路:2)源代碼:#include<stdio.h>〃聲明冒泡排序函數(shù)voidbubble_sort(chara[][10],intb[],ints);intmain(void){intflag=l;intscore[1000];intnumber;charname[1000][10];while(flag!=0) {〃使用while函數(shù)實現(xiàn)多次輸入指令scanf(,z%dz,,&flag);if(flag==l){scanf,&number);for(inti=0;i<number;i++){〃當flag的值為1時,提示輸入姓名與成績scanf(z/%s,z,&name[i]);scanf&score[i]);1:lif(flag==2)〃值為2時,進行排序但并不輸出bubble_sort(name,score,number);if(flag=3){〃值為3時,進行輸出for(inti=0;i<number;i++){printfC%szz,name[i]);printf(〃%d\n”,score[i]);}})return0;)voidbubble_sort(chara[][10],intb[],ints){inti,j,t;charm[1000][10];for(i=0;i<s-l;i++) {for(j=0;j<s-i-l;j++){if(b[j]<b[j+l]){t=b[j],b[j]=b[j+l],b[j+l]=t;for(intk=0;k<10;k++){〃在冒泡排序成績時,同時對成績對應的姓名進行交換操作m[j][k]=a[j][k];a[j][k]=a[j+l][k];a[j+l][k]=m[j][k]:}.)if(b[j]==b[j+l]){〃如果成績相等,那么就比較姓名首字母,若仍相同比較下一個字母,以此類推進行排序for(inti=0;i<4;i++){if(a[j][i]>a[j+l][i]){for(intk=0;k<10;k++){m[j][k]=a[j][k]:a[j][k]=a[j+l][k];a[j+l][k]=m[j][k];)break;)if(a[j][i]==a[j+l][i])continue;〃當首字母相同時,繼續(xù)下一個循環(huán)elsebreak;
3)測試:項目測試輸入輸出(換行符在輸出截圖中展示)113a90b70c8530a90b70c85214ming80jerry89hong80angel87230jerry89angel87hong80ming80314xhong80jerry89xming80angel87230jerry89angel87xhong80xming8013a90b70c853a90b70c850Processexitedafter22.75secondswithreturnvalue0請按任意鍵繼續(xù)...■8089808797978800v?IXressr8nnenoiProcessexitedafter5.139secondswithreturnvalue0請按任意鍵繼續(xù).?.14xhong80jerry89xming80angel8723jerry89angel87xhong80xming800Processexitedafter0.7989secondswithreturnvalue0請按任意鍵繼續(xù).??■圖2-2程序設計題2的運行結果3.對第2題增加查找功能1)解題思路:只需在第二題的基礎上添加功能按鍵4,,查找功能的流程圖如下2)源代碼:以下只在功能按鍵4處添加注釋#include<stdio.h>#include<string.h>voidbubble_sort(chara[][10],intb[],ints);intsearch(intscored,intcheck,intnumber);intmain(void)(intflag=l;intscore[1000];intnumber;charname[1000][10];while(flag!=0){scanf(〃%d”,&flag);if(flag=l)(scanf&number);for(inti=0;i<number;i++)(scanf(zz%s,z,&name[i]);scanf(zz%d,z,&score[i]);I}if(flag==2)bubble_sort(name,score,number);if(flag=3)(for(inti=0;i<number;i++)printf(〃犧”,name[i]);printf("%d\n",score[i]);if(flag=4)intcheck;scanf("%d”,&check);inti=0,j=number-1,flag=0,k,result[10],p,q;while(i<=j){〃二分查找k=(i+j)/2;if(check>score[k])j=k-l;elseif(check<score[k])i=k+l;else{〃當找到第一個滿足的值時,向前向后繼續(xù)尋找滿足條件的值q=P=k;while(score[-p]==check);while(score[++q]==check);flag=l;break;if(flag==0)printf(z,notfound");//flag==0,也即沒有找到該成績elsefor(intj=p+l;j<q;j++){〃下面比較名字的字母順序,并將字母順序靠前的姓名通過交換數(shù)組來移動for(inti=0;i<4&&j<q-l;i++)if(name[j][i]>name[j+l][i])(printf("enter!\n〃);charm[20];strcpy(m,name[j]);strcpy(name[j],name[j+1]);strcpy(name[j+1],m);break;)elsebreak;I〃輸出符合條件的成績和姓名printf(z,%s%d\n〃,name[j],score[j]);II))return0;)voidbubble_sort(chara[][10],intb[],ints)(inti,j,t;charm[1000][10];for(i=0;i<s-l;i++)(for(j=0;j<s-i-l;j++)t=b[j],b[j]=b[j+l],b[j+l]=t;for(intk=0;k<10;k++){m[j][k]=a[j][k];a[j][k]=a[j+l][k];a[j+l][k]=m[j][k]:}.}if(b[j]==b[j+l])(for(inti=0;i<4;i++)(if(a[j][i]>a[j+l][i])(for(intk=0;k<10;k++)(m[j][k]=a[j][k];a[j][k]=a[j+l][k];a[j+l][k]=m[j][k];)break;)elseif(a[j][i]==a[j+l][i])continue;elsebreak;3)測試:項目測試輸入輸出113a90b70c8524850c85214ming80jerry89hong80angel8724800hong80ming80314xhong80jerry89xming80angel8724800xhong80xming80S3C:\Users\20140\Desktop\Operate\±tn^S\85Z;X±^l20201119\3.exea90b70c8585 MMMMc85 HHMHMClC:\Users\20140\Desktop\OperateVt^l^\S5;X±^l20201119\3.exe14ming80jerry89hong80angel8780hong80ming800□IC:\Users\20140\Desktop\OperateVtVl^\a5fi;X±^l20201119\3.exe14xhong80jerry89xming80angel87p80xhong80xming800圖2-3程序設計題3的運行結果
5,編寫插入字符串函數(shù)1)解題思路:2)代碼:#include<stdio.h>〃聲明函數(shù)voidcodel(chart[],charmid[],intn);voidstrcate(chartL],chars[]);voidstrains(chart[],chars[],intn);intmain(void){chart[100],s[100];intn;scanf("%s%s%d〃,t,s,&n);strnins(t,s,n);voidcodel(chart[],charmid[],intn){〃將數(shù)組t自第n個字符后的字符復制到中間數(shù)組中,并將數(shù)組t的后半部分刪除inti=0,k=n;for(;t[k]!=,\0';i++,k++)mid[i]=t[k];mid[i]=,\0';t[n]=\0,;)voidstrcate(chart[],chars[]){〃將一個字符串拼接到另一個字符串后inti=0,j=0,k=-l;while(t[i++]); i―;while((t[i++]=s[j++])!='\0');}voidstrnins(chart[],chars[],intn){〃調用以上兩個函數(shù),實現(xiàn)插入字符串功能,charmid[100];codel(t,mid,n);strcate(t,s);strcate(t,mid);}3)測試項目測試輸入(依次為t,s,n)輸出1iyoulove1iloveyou2lifewonderful_0wonderful_life3xudarui2xuruidalyoulove1iloveyouProcessexitedafter8.217secondswithreturnvalue0請按任意鍵繼續(xù)??? lifewonderful_0wonderful」ifeProcessexitedafter10.18secondswithreturnvalue0請按任意鍵繼續(xù)...xudarui2xuruidaProcessexitedafter6.52secondswithreturnvalue0請按任意鍵繼續(xù)..?圖2-4程序設計題5的運行結果6.消除類游戲1)解題思路2)代碼:#include<stdio.h>intmain(void){intline,raw,count=l,flag=0;scanf("%d%d”,&line,&raw);intchess[100][100];intcheck[100][100]={0};〃定義一個檢查數(shù)組check,初始化為0,以實現(xiàn)當出現(xiàn)可消除的數(shù)字時將對應check數(shù)組的值置為1,從而得以消除intj=0,k=0;〃將棋盤存入數(shù)組中for(inti=0;i<line;i++){for(intj=0;j<raw;j++)scanf("%d〃,&chess[i][j]);I〃行遍歷,當出現(xiàn)三個以上連續(xù)相同的數(shù)字時用循環(huán)將check數(shù)組對應的值置為1for(inti=0;i<line;i++){count=l;flag=chess[i][0];for(j=l;j<=raw;j++){if(flag==chess[i][j])count++;else{if(count>=3){while(count){check[i][j-count]=l;count―;))count=l;flag=chess[i][j];〃列遍歷,當出現(xiàn)三個以上連續(xù)相同的數(shù)字時用循環(huán)將check數(shù)組對應的值置為1for(inti=0;i<raw;i++){flag=chess[0][i];count=l;for(j=l;j<=line;j++){if(flag==chess[j][i])count++;else{if(count>=3){while(count){check[j-count][i]=l;count―;}count=1;flag=chess[j][i];printf('\n\n");〃格式化輸出一一當check的值為1時輸出0,否則輸出棋盤中數(shù)字for(inti=0;i<line;i++){for(intj=0;j<raw;j++){if(check[i][j]==D{printf("0");if(j<raw-l)printf("");else{printfchess[i][j]);
if(j<raw-l)printfC*");printf(〃\n");return0;3)測試項目測試輸入輸出1443144430431111300004341243402442224400022333999200000041115524000552334566634000023566723060718596818090848577708000043527803020845437805430843143111143412442220000Processexitedafter3.631secondswithreturnvalue0請按任意鍵繼續(xù)...
2723339994111552Processexitedafter9.225secondswithreturnvalue0請按任意鍵繼續(xù)..?63214443210006321444321000Processexitedafter4.851secondswithreturnvalue0請按任意鍵繼續(xù)...圖2-5程序設計題6的運行結果10.n階順轉方陣1)解題思路分析如何存入效組:當向右輸出時e不變列增加;向下輸出時^增加列不兗;向左臉出時行不變列3;當向上輸出時行題少列增加;并且當做完這四個動作后方陣變小,對應循環(huán)終止值要減小按咯式輸出敕組,開決定何時換行結束2)代碼#include<stdio.h>intmain(){inti,j,m,base=l,n;inta[10]E1O]={1};scanf&n);for(m=0;m<n/2;m++){〃當做完這四個動作后方陣變小,對應循環(huán)終止值要減小for(i=m;i<=n-l-m;i++)〃當向右輸出時行不變列增加a[m][i]=base++;for(j=m+l;j++)〃向下輸出時行增加列不變a[j][n-l-m]=base++;for(i=n-l-m;i>m;i-)〃向左輸出時行不變列減少a[n-l-m][i]=base++;for(j=n-l-m;j>m;j-)〃當向上輸出時行減少列增加a[j][m]=base++;if(n%2==l)〃到最后一個值時若行數(shù)為奇數(shù)要單獨輸出a[(n-l)/2][(n-l)/2]=base;Ifor(i=0;i<n;i++){for(j=0;j<n;j++){printf(〃%2d〃,a[i][j]);if(j!=(n-l))printf(z,");
return0;3)測試(為方便檢驗,按對齊格式輸出)456745673458236911oProcessexitedafter0.4249secondswithreturnvalue0請按任意鍵繼續(xù)Processexitedafter0.4249secondswithreturnvalue0請按任意鍵繼續(xù)...123416171819152425201423222113121110Processexitedafter0.5162Processexitedafter0.5162請按任意鍵繼續(xù)..?secondswithreturnvalue0612 3 4 5612 3 4 5 62021 22 23 24 71932 33 34 25 81831 36 35 26 91730 29 28 27 101615 14 13 12 11Processexitedafter0.4998secondswithreturnvalue0請按任意鍵繼續(xù)...圖2-6程序設計題10的運行結果11.迷宮問題1)解題思路:開始2)代碼:#include<stdio.h>definephix+moveX[i]>=0ttdefineph2x+moveX[i]<position_xdefineph3y+moveY[i]>=0defineph4y+moveY[i]<position_ydefineph5road[x+moveX[i]][y+moveY[i]]==0defineph6map[x+moveX[i]][y+moveY[i]]==lttdefineph7road[x+moveX[i]][y+moveY[i]]=ldefineph8search(x+moveX[i],y+moveY[i])defineph9road[x+moveX[i]][y+moveY[i]]=0〃宏定義運算表達式intmap[20][20]={};introad[20][20]={};voidsearch(int,int);intmoveX[4]={l,0,0,-1};intmoveY[4]={0,1,-1,0);〃定義在x和y方向的移動動作,即二者結合可以進行四個方向的移動,從而可以搜尋四個方向的路徑intposition_x,position_y,num=0;〃定義當前的位置和路徑序號intmain(){scanf(z,%d%d,z,&position_x,&position_y);inti,j;for(i=0;i<position_x;i++){for(j=0;j<position_y;j++)scanf&map[i][j]);"/將迷宮圖存入數(shù)組中search(0,0);〃調用迷宮進行查找路徑return0;)voidsearch(intx,inty){inti,j;if(x==position_x-1&&y==position_y-1){〃當已經(jīng)查找到迷宮右下角時,輸出已經(jīng)查找到的路徑num++;〃標記已經(jīng)找到的路徑序號printf(級d\n”,num);for(i=0;i<position_x;i++){for(j=0;j<position_y;j++){//輸出已經(jīng)存儲在road中的路徑printf("%d”,road[i][j]);if(j<position_y-l)printfC");}printf("\n");}return;〃輸出完成后進行下一次查找路徑}else{road[0][0]=1;for(i=0;i<4;i++){if(phl&&ph2&&ph3&&ph4&&ph5&&ph6){〃當迷宮地圖上下一步是1,即可以走并滿足不與己找到的路徑重復時時繼續(xù)執(zhí)行ph7;〃標記自己已經(jīng)走過的迷宮格為1ph8;〃遞歸進行下一步查找ph9;3)測試:(直接在截圖中展示,為方便觀測,添加了分隔符)10000000001011011110111001101010011100101111011110000000001111000000000100000000010000000001001110000111101111000000000111000000000TOC\o"1-5"\h\z1 0 0 0 0 0 1 1 1 01 0 0 0 0 1 1 0 1 01 0 0 1 1 1 0 0 1 01 1 1 1 0 0 0 0 1 00000000011310000000001 0 0 0 0 1 1 1 1 01 0 0 0 0 1 0 0 1 01 0 0 1 1 1 0 0 1 01 1 1 1 0 0 0 0 1 00000000011Processexitedafter2.896secondswithreturnvalue0請按任意鍵繼續(xù).?.?00000011001011001110001110001000100011Processexitedafter6.095secondswithreturnvalue0請按任意鍵繼續(xù)....圖2-7程序設計題11的運行結果4小結通過本節(jié)對數(shù)組的問題的解決,我意識到了自己對于算法改進方面的不足。在程序調試中,我一直對數(shù)組s的內容明明沒有被改變,但是在調試時卻一直有數(shù)組內容被修改的問題感到困惑不解,在對觀察變量的下標范圍進行改變后,才意識到問題所在。在程序修改替換一題中,標記數(shù)組法是降低算法時間復雜度的重要方法。盡管在處理文本去重的改進中較為順利,但是在約瑟夫問題中卻遇到了困難,由于一開始對約瑟夫問題的算法沒有理解透徹,以致于我在標記數(shù)組后的下一步循環(huán)報數(shù)過程中處理得不順利。在程序設計中,我在位運算方面掌握能力的欠缺導致處理二進制輸出這一題時的處理方法不夠高級。而針對成績輸入與查找方面,我認為在把相同成績的人的名字按順序輸出這方面耗費了大量的編程時間。最終,通過添加了一行代碼才解決了始終無法交換成績相同的人的名字的代碼中的漏洞。消除類游戲讓我建立了利用標記數(shù)組法解決問題的觀念。在最初寫代碼時,由于需要進行行遍歷和列遍歷來進行消除,導致在進行行遍歷后列遍歷無法正常進行。因為此時原來的游戲棋盤已經(jīng)被改變。而解決這一問題的有效手段便是另外定義一個檢查數(shù)組,通過標記對應元素的方法實現(xiàn)消除功能。N階順轉方陣在掌握算法后并不難以解決。而在最后一題一一迷宮問題中,在開始時我已經(jīng)有了向各個方向查找,存儲路徑的想法,但是卻忽略了當路走不通時回溯和路徑重復的問題,導致寫代碼時總是無法正確輸出結果。最后在查找相關的迷宮問題算法后才得到了解決,同時又借鑒了其將查找功能封裝為函數(shù)和遞歸的算法??傊谶@次實踐中,我掌握了標記數(shù)組法,空間換時間等方法,但在遞歸,封裝函數(shù),調試查找漏洞,確定算法上還尚待提高。3結構與聯(lián)合實驗1表達式求值的程序驗證1)分析表達式求值過程:首先,和優(yōu)先級最高,左結合,“一”優(yōu)先級次之,右結合。同時,先計算括號中表達式。第一問,指針自增后指向結構數(shù)組中的第二個元素,故(++p)->x=100;第二問,指針自增后指向結構數(shù)組中的第二個元素,故p->c='B';第三問,指針自增后指向結構數(shù)組中的第二個元素也即數(shù)組v,而p-〉t是指向了數(shù)組V的第一個元素,故*p-〉t為X;第四問,指針自增后指向結構數(shù)組中的第二個元素,而p->t是指向了數(shù)組V的第一個元素,故*p->t為X;第五問,指針指向了第一個元素的數(shù)組U的第一個元素,接著自增指向數(shù)組U中的第二個元素也就是字符'V';第六問,指針指向第一個元素中的數(shù)組U的第一個元素,*p->t的結果是U,然后自增得到V。2)編程代碼:#include<stdio.h>charu□="UVWXYZ",v口="xyz";structTIintx;charc;char*t;}a[]={{ll,'A',u},{100,'B',v}},*p=a;intmain(void)intflag=0;scanf &flag);if(flag=l)printf (++p)->x);elseif(flag=2)printf(p++,p->c));elseif(flag==3)printf("%c〃,(*p++->t,*p->t));elseif(flag==4)printf(zz%c,,?*(++p)->t);elseif(flag=5)printf*++p->t);elseif(flag==6)printf(,z%cz/,++(*p->t));return0;)3)截圖驗證□IC:\Users\2O140\Desktop\Operate\±蜘驗\7第七牡振0201222\期期正.exe1100Processexitedafter0.5224secondswithreturnvalue0請按任意鍵繼續(xù)...[3C:\Users\20140\Desktop\Operate\±tn^驗\7第七①^120201222\的蜀正.exe3rocessexitedafter0.3654secondswithreturnvalue0請按任意鍵繼續(xù)...□iC:\Users\20140\Desktop\Operate\Jt^l^^\7§5±;;X±Vl20201222\gJy^iiE.exeJKProcessexitedafter0.4984secondswithreturnvalue0請按任意鍵繼續(xù)...[1C:\Users\20140\Desktop\Operate\Jz■驗\7第七5ct股0201222\助^ffi.exe4xProcessexitedafter1.08secondswithreturnvalue0請按任意鍵繼續(xù)...dC:\Users\20140\Desktop\OperateVt^j£^\7S5-t^±fl20201222\影蟋正.exe5Processexitedafter0.5008secondswithreturnvalue0請按任意鍵繼續(xù)...3C:\Users\20140\Desktop\OperateUzyU^\7^-b^LtVl20201222\g^^iiE.exe3roeessexitedafter1.336secondswithreturnvalue0請按任意鍵繼續(xù)...2源程序修改替換1)代碼修改與截圖驗證:#include<stdio.h>#include<stdlib.h>structs_listIintdata;structs_list*next;);voidcreate_list(structs_list*headp,int*p);〃此處改為voidcreate_list(structs_list**headp,int*p);intmain(void)(structs_list*head=NULL,*p;ints[100];for(inti=0;;i++)(scanf &s[i]);〃此處根據(jù)測試需求改為輸入數(shù)據(jù)if(s[i]==0)break;)create_list(head,s);〃此處改為createlist(Ahead,s);p=head;while(p)printfp->data);p=p->next;)printf('\n");return0;)voidcreate_list(structs_listCC:\Users\20140\De$lrtop\Operate\±ei5E4ft\7fl|-t;XJteU020136920CC:\Users\20140\De$lrtop\Operate\±ei5E4ft\7fl|-t;XJteU0201369203 6 9 2rocessexitedafter5.564secondsvithreturnvalue0育按任意鍵繼續(xù)...{ 〃此處改為structs_list2)代碼替換(后進先出)2)代碼替換(后進先出)#include<stdio.h>structs_list*loc_head=NULL,*tail;if(p[0]==0);else{loc_head=(structs_list*)malloc(sizeof(structs_list));loc_head->data=*p++;tail=loc_head;while(*p){tail->next=(structs_list*)malloc(sizeof(structs_list));tail=tail->next;tail->data=*p++;}tail->next=NULL;)*headp=1oc_head;#include<stdlib.h>structs_listtintdata;structs_list*next;);voidcreate_list(structs_list**headp,int*p);intmain(void)(structs_list*head=NULL,*p;ints[100];for(inti=0;;i++){scanf&s[i]);if(s[i]==0)break;)create_list(&
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 【正版授權】 ISO 23698:2024 EN Cosmetics - Measurement of the sunscreen efficacy by diffuse reflectance spectroscopy
- 【正版授權】 ISO/IEC TR 24722:2024 EN Information technology - Biometrics - Multimodal and other multibiometric fusion
- 【正版授權】 ISO 16173:2025 EN Ships and marine technology - Jacking system appliances on self-elevating unit - Rack pinion leg fixation system
- 【正版授權】 ISO 1171:2024 EN Coal and coke - Determination of ash
- 2025年度玻璃隔斷安裝與品牌授權合同
- 2025年度金融科技企業(yè)員工試工合作協(xié)議
- 2025年度高速公路服務區(qū)草坪綠化與旅客服務合同
- 2025年度草種研發(fā)與市場推廣合作協(xié)議
- 2025年度社會組織勞動合同范本解讀與應用4篇
- 個人財務規(guī)劃的重要階段計劃
- 2025年1月浙江省高考政治試卷(含答案)
- 2025年上半年重慶三峽融資擔保集團股份限公司招聘6人高頻重點提升(共500題)附帶答案詳解
- 大模型關鍵技術與應用
- DZ∕T 0227-2010 地質巖心鉆探規(guī)程(正式版)
- 2024年 江蘇鳳凰新華書店集團有限公司招聘筆試參考題庫含答案解析
- 20以內加減法口算題(10000道)(A4直接打印-每頁100題)
- 文獻檢索教案
- 五線譜打印用(共4頁)
- 10kV環(huán)網(wǎng)柜改造工程施工組織設計方案
- 機加工質量控制計劃范例-HT
- 通信工程概預算培訓教材(共68頁).ppt
評論
0/150
提交評論