



版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
C程序設(shè)計(jì)(第三版)課后習(xí)題參考解答第1章C語(yǔ)言概述參照本章例題,編寫(xiě)ー個(gè)C程序,輸出以下信息:VeryGood!解:main(){printf(''******************************VeryGood!\n“);printf(u\nM);printf(uprintf(66\n");VeryGood!\n“);ntf(“******************************\n'')?}寫(xiě)ー個(gè)程序,輸入a,b,c三個(gè)值,輸出其中最大者°解:main(){inta,b,c,max;printf(“請(qǐng)輸入三個(gè)數(shù)a,b,c:\nM);scanf("%d,%d,%d”,&a,&b,&c);max=a;if(max<b)max=b;if(max<c)max=c;printf(M最大數(shù)為:%d”,max);)第2章程序的靈魂——算法2.1什么叫結(jié)構(gòu)化的算法?為什么要提倡結(jié)構(gòu)化的算法?解:由一些基本結(jié)構(gòu)順序組成的算法稱(chēng)為結(jié)構(gòu)化的算法。由于在基本結(jié)構(gòu)之間不存在非順序的跳轉(zhuǎn),流程的轉(zhuǎn)移只存在于一個(gè)基本結(jié)構(gòu)范圍之內(nèi),因而提高了算法的質(zhì)量。2.7什么叫結(jié)構(gòu)化程序設(shè)計(jì)?它的主要內(nèi)容是什么?解:結(jié)構(gòu)化程序就是用高級(jí)語(yǔ)言表示的結(jié)構(gòu)化算法。它的主要內(nèi)容包括“自頂向下,逐步細(xì)化”的分析方法和“模塊化設(shè)計(jì)”的解決方法,以及“結(jié)構(gòu)化編碼”的實(shí)現(xiàn)方法。第3章數(shù)據(jù)類(lèi)型、運(yùn)算符與表達(dá)式3.3請(qǐng)將下面各數(shù)用八進(jìn)制和十六進(jìn)制數(shù)表示:10 (2)32 (3)75 (4)-617(5)-111 (6)2483 (7)-28654 (8)21003解:⑴(10)1O=(12)8=(A)w(32)io=(4O)8=(2O)|6(75)1(f(113)8=(4B)16(-617)|產(chǎn)(176627)8=(FD97)時(shí)此題可以這樣考慮:帶符號(hào)數(shù)在計(jì)算機(jī)中采用補(bǔ)碼表示,正數(shù)的補(bǔ)碼與原碼相同,負(fù)數(shù)的補(bǔ)碼=模+真值。若使用16位存儲(chǔ),模為2錐=65536。一617的補(bǔ)碼為65536+(167)=64919=(176627)8=(FD97)|6(-lll)10=(177621)8=(FF91)?(2483)io=(4663)8=(9B3)I6(-28654)l0=(11OO22)8=(9O12)16(21OO3)1o=(51O13)8=(52OB)I63.4將以下三各整數(shù)分別賦給不同類(lèi)型的變量,請(qǐng)畫(huà)出賦值后數(shù)據(jù)在內(nèi)存中的存儲(chǔ)形式。變量的類(lèi)型25-232769int型long型
sort型signedchar(8位)unsignedint型unsignedlong型unsignedshort型unsignedchar型注:如果沒(méi)有學(xué)過(guò)二進(jìn)制和補(bǔ)碼,此題可以不做。解:各數(shù)據(jù)在內(nèi)存中的存儲(chǔ)形式如下表所示:變量的類(lèi)型25-232769int型00-0000110018位111111111111111015100…001(溢出)14long型〇〇…0000110012411 … 111031〇〇…0100…00116 14short型100…0000110018111111111111111015100…001(溢出)14signedchar(8位)1000110011111111000000001(溢出)unsignedint型〇〇…000011001811 … 110100—0011514unsignedlong型〇〇…0000110012411 … 110〇〇…0100…00116 1431unsignedshort型〇〇…000011001811 - 110100—001158unsignedchar型000110011111111000000001其中int和short類(lèi)型,其取值范圍是ー32768?32767。32769在這兩種類(lèi)型中實(shí)際表示負(fù)數(shù),它是ー個(gè)負(fù)數(shù)的補(bǔ)碼,對(duì)其再求一次補(bǔ)碼可得其真值,即ー(65536-32769)=-32767〇char和unsignedchar為8位,若將int或!ong類(lèi)型數(shù)據(jù)賦給這種類(lèi)型,則截取數(shù)據(jù)低8位。同理,若將long賦給int,則截取低16位。3.5字符常量和字符串常量有什么區(qū)別?解:字符常量是ー個(gè)字符,用單引號(hào)括起來(lái)。字符串常量是由。個(gè)或若干個(gè)字符組合而成,用雙引號(hào)括起來(lái),存儲(chǔ)時(shí)自動(dòng)在字符串最后加一個(gè)結(jié)束符號(hào)‘、〇’。3.6寫(xiě)出以下程序運(yùn)行的結(jié)果:main(){charcl='a',c2='b\c3='c',c4='\101\c5='\116';printf(<4a%cb%c\tc%c\tabc\n",cl,c2,c3);printf('ヘt\b%c%c”,c4,c5);解:程序運(yùn)行的結(jié)果為:解:程序運(yùn)行的結(jié)果為:aabbccabc3.7要將“China”譯成密碼,密碼規(guī)律是:用原來(lái)的字母后面第4個(gè)字母代替原來(lái)的字母。例如,字母“A”后面第4個(gè)字母是“E”,用“E”代替“A”。例,“China”應(yīng)譯為“G第4”。請(qǐng)編ー程序,用賦初值的方法使c1,c2,c3,c4,c5這5個(gè)變量的值分別為C,'h',T,'n',匕’,經(jīng)過(guò)運(yùn)算,使c1,c2,c3,c4,c5的值分別變?yōu)椤瓽',T,'m','乙并輸出。解:main(){charcl二'C',c2='h',c3=,i,,c4='n',c5='a\cl+=4;c2+=4;c3+=4;c4+=4;c5+=4;prinlf(“密碼是%c%c%c%c%c\n,cl,c2,c3,c4,c5);}運(yùn)行結(jié)果:密碼是Glmre3.8例2.6能否改成如下:main(){intcl,c2; (原為charcl,c2)cl=97;c2=98;printf(t4%c%c\n",cl,c2);printf(<4%d%d\n",cl,c2);)解:可以。因?yàn)樵诳奢敵龅淖址秶鷥?nèi),用整型和用字符型作用相同。9求下面算術(shù)表達(dá)式的值。x+a%3*(int)(x+y)%2/4設(shè)x=2.5,a=7,y=4..7(float)(a+b)/2+(int)x%(int)y設(shè)a=2?b=3,x=3.5?y=2.5解:0寫(xiě)出程序運(yùn)行的結(jié)果。main(){inti,j,m,n;i=8;j=10;m=++i;n=j++;printf(44%d,%d,%d,%d”,i,j,m,n);)解:運(yùn)行結(jié)果為:9,11,9,103.11寫(xiě)出下面賦值的結(jié)果。格中寫(xiě)了數(shù)值的是要將它賦給其他類(lèi)型的變量,將所有空格填上賦值后的數(shù)值。int9942char,d'Xunsignedint7665535float53.65longint68解:int9910076536842-1char,d'L5'D',*,Xunsignedint991007653684265535float99.000000100.00000076.00000053.6568.00000042.00000065535.000000longint9910076536842655353.12出下面表達(dá)式運(yùn)算后a的值,設(shè)原來(lái)a=12。設(shè)a和n都已定義為整型變量。(1)a+=a (2) a-=2(3)a*=2+3 (4) a/=a+a(5)a%=(n%=2), n的值等于5 (6) a+=a-=a*=aTOC\o"1-5"\h\z解:(1)24 (2) 10(3)60 (4) 0(5)0 (6) 0第4章最簡(jiǎn)單的C程序設(shè)計(jì)——順序程序設(shè)計(jì)4.4若a=3,b=4,c=5,x=1.2,y=2.4,z=-3.6,u=51247,n=128765,c1='a',c2='b',想得到以下的輸出格式和結(jié)果,請(qǐng)寫(xiě)出程序(包括定義變量類(lèi)型和設(shè)計(jì)輸出)。要求輸出的結(jié)果如下:a=D3Dnb=D4ndじ=ロ5x=1.200000,y=2.400000,z=-3.600000x+y=□3.60ロロy+z=?1.20□□z+x=-2.40u=ロ51247ロロ!!=□□□128765cl='a'EJorE]97(ASCII)c2=,b,DorQ98(ASCII)解:main()(inta,b,c;longintu,n;floatx,y,z;charcl,c2;a=3;b=4;c=5;x=1.2;y=2.4;z=-3.6;u=51247;n=128765;cl='a';c2='b';printf('へn’‘);printf("a=%2dロロb=%2dロロc=%2d\n”,a,b,c);printf("x=%.6f,y=%.6f,z=%.6Rn”,x,y,z);printf(4tx+y=n%.2fD□y+z=%.2fD□z+x=%.2f\n”,x+y,y+z,z+x);printf(44u=%61dC□n=%91d\n,,,u,n);printf("c1=%c9or%d(ASCII)\n”,cl,cl);printf(“c2='%c'or%d(ASCII)\n",c2,c2);5請(qǐng)寫(xiě)出下面程序的輸出結(jié)果:main(){inta=5,b=7;floatx=67.8564,y=-789.124;charc='A';longn=1234567;unsignedu=65535;printf(44%d%d\n,\a,b);printf("%3d%3d\n”,a,b);prinlf("%f,%f\n”,x,y);printf(“%?10f,%?10f\n”,x,y);printf("%8.2f,%8.2f,%4f,%4f,%3f,%3AnM,x,y,x,y,x,y);printf(44%e,%10.2e\nM,x,y);printf("%c,%d,%o,%x\n”,c,c,c,c);printf("%ld,%lo,%x\n",n,n,n);printf("%u,%〇,%x,%d\n”,u,u,u,u);printf("%s,%5.3s\n","COMPUTER","COMPUTER");}運(yùn)行結(jié)果:5ロ7ロロ5ロロ767.856400,-789.12402367.8564000,-789.124023ロロロ67.86,ロロ-789.12,67.8564,-789.1240,67.856400,-789.1240236.785640e+01,ロロ-7.9e+02A,65,101,411234567,4553207,d68765535,177777,ffff,-lCOMPUTER,ロロCOM可以發(fā)現(xiàn),輸出數(shù)據(jù)中若有負(fù)號(hào)、e和小數(shù)點(diǎn),這些字符也占位。用下面的scanf函數(shù)輸入數(shù)據(jù),使a=3,b=7,x=8.5,y=71.82,c1='A',c2=宣。問(wèn)在鍵盤(pán)上如何輸入?#include<stdio.h>voidmain()(inta,b;floatx,y;charc1,c2;scanf(4ta=%db=%d",&a,&b);scanf(44%f%e",&x,&y);scanf(4*%c%cM,&cl,&c2);解:a=3Db=7□8.5D71.82□AQa下面的scanf函數(shù)輸入數(shù)據(jù),使a=10,b=20,c1='A',c2='a',x=1.5,y=-3.75,z=67.8,請(qǐng)問(wèn)在鍵盤(pán)上如何輸入數(shù)據(jù)?scanf(ll%5d%5d%c%c%f%f%*f,%f\&a,&b,&cl,&c2,&x,&y,&z);解:main()(inta,b;floatx,y,z;charcl,c2;scanf(4t%5d%5d%c%c%f%f%*f,%r,&a,&b,&cl,&c2,&x,&y,&z);printf(4<a=%d,b=%d,cl=5c,c2=%c,x=%6.2f,y=6.2f,z=6.2f\nM),a,b,cl,c2,x,y,z);)運(yùn)行情況如下:□□□10D□□20Aa1.5-3.75□1.5,67.8 (此行為輸入的數(shù)據(jù),其中口為空格)a=10,b=20,cl=A,c2=a,x=1.50,y=-3.75,z=67.80 (此行為輸出)說(shuō)明:按%5d格式的要求輸入a和b時(shí),要先鍵入三個(gè)空格,然后再鍵入10與20。%*f是用來(lái)禁止賦值的。在輸入時(shí),對(duì)應(yīng)于%*f的地方,隨意打入了一個(gè)數(shù)1.5,該值不會(huì)賦給任何變量。圓半徑r=1.5,圓柱高h(yuǎn)=3,求圓周長(zhǎng),圓面積,圓球表面積,圓球體積,圓柱體積。用scanf輸入數(shù)據(jù),輸出計(jì)算結(jié)果,輸出時(shí)要求有文字說(shuō)明,取小數(shù)點(diǎn)后2位數(shù)字。請(qǐng)編程序。解:main()(floatpi,h,r,l,s,sq,vq,vz;pi=3.1415926;printf(“請(qǐng)輸入圓半徑r,圓柱高h(yuǎn):\n");l=2*pi*r;s=r*r*pi;
sq=4*pi*r*r;vq=3.0/4.0*pi*r*r*r;vz=pi*r*r*h;l=%6.2f\iTJ);s=%6.2f\n,\s);sq=%6.2f\nM,sq);sv=%6.2f\nM,vq);sz=%6.2f\n,\vz);運(yùn)行結(jié)果:請(qǐng)輸入圓半徑l=%6.2f\iTJ);s=%6.2f\n,\s);sq=%6.2f\nM,sq);sv=%6.2f\nM,vq);sz=%6.2f\n,\vz);運(yùn)行結(jié)果:請(qǐng)輸入圓半徑r,1.5,3/圓周長(zhǎng)為:圓面積為:圓球表面積為:圓球體積為:圓柱體積為:圓柱高h(yuǎn):1=9.42s=7.07sq=28.27sv=7.95sz=21.21輸入ー個(gè)華氏溫度,要求輸出攝氏溫度,公式為C=(5/9)(F-32)輸出要有文字說(shuō)明,取2位小數(shù)0解:main(){floatc,f;printf(“請(qǐng)輸入一個(gè)華氏溫度:\n");scanf(<4%r,&f);c=(5.0/9.0)*(f-32); /?注意5和9要用實(shí)型表示,否則5/9的值為〇?/printf(“攝氏溫度為:%5.2f\n",c););運(yùn)行結(jié)果:請(qǐng)輸入一個(gè)華氏溫度:78/攝氏溫度為:25.56第5章選擇結(jié)構(gòu)程序設(shè)計(jì)語(yǔ)言中如何表示“真”和“假”?系統(tǒng)如何判斷ー個(gè)量的“真”和“假”?解:設(shè)有一個(gè)邏輯表達(dá)式,若其結(jié)果為“真”,則以1表示;若其結(jié)果為“假”,則以〇表示。但是判斷?個(gè)邏輯量的值時(shí),以〇代表“真”,以非〇代表“假”。例如3&&5的值為“真”,系統(tǒng)會(huì)給出3&&5的值為1〇寫(xiě)出下面各邏輯表達(dá)式的值。設(shè)a=3,b=4,c=5。a+b>c&&b=callb+c&&b-c!(a>b)&&!clll!(x=a)&&(y=b)&&0!(a+b)+c-l&&b4-c/2解:01101有3個(gè)整數(shù)a,b,c,由鍵盤(pán)輸入,輸出其中最大的數(shù)。解:方法一:程序如下:main(){inta,b,c;printf(“請(qǐng)輸入3個(gè)整數(shù):'');5じ血長(zhǎng)“%4%4%ボ,&ム&わ&0;if(a<b)if(b<c)printf(44max=%d\n*',c);elseprintf(umax=%d\n'\b);elseif(a<c)printf("max二%d\n”,c);elseprintf(fckmax=%d\n,\a);運(yùn)行結(jié)果:請(qǐng)輸入3個(gè)整數(shù):12,34,9/max=34方法二:使用條件表達(dá)式,可以使程序更簡(jiǎn)明,清晰。main(){inta,b,c,temp,max;printf(“請(qǐng)輸入3個(gè)整數(shù):");scanf("%d,%d,%d”,&&&b,&c);temp=(a>b)?a:b; /?將a和b中的大者存入temp中?/max=(temp>c)?temp:c; /*籽a(bǔ)和b中的大者與c比較,取最大者?/printf("3個(gè)整數(shù)中最大數(shù)是%d\nハ,max);}方法三:a>b?(a>c?a:c):(b>c?b:c)運(yùn)行結(jié)果:請(qǐng)輸入3個(gè)整數(shù):12,34,9/3個(gè)整數(shù)的最大數(shù)是34。有一函數(shù):X X<1y=?2x-1 l<x<103x-l1 x>10寫(xiě)ー程序,輸入x值,輸出y值。解:程序如下main(){intx,y;printf(“輸入x:”);scanf("%d”,&x);if(x<l) /*x<l*/{y=x;printf("x=%d3d,y=x=%d\n,,,x,y);)elseif(x<10) /*Kx<10*/{y=2*x-1;printf(44x=%3d,y=2*x-l=%d\nM,x,y);)else /*x210*/{y=3*x-ll;printf(44x=%3d, y=3*x-ll=%d\nM,x,y);))運(yùn)行結(jié)果:①輸入x:4/x=4, y=2*x-l=7②輸入x:-1/x=-l,y=x=-l③輸入x:20/x=20, y=3*x-ll=49給出ー百分制成績(jī),要求輸出成績(jī)等級(jí)‘A‘、B要C’、’D’、‘E'。90分以上為賓,8〇?89分為B,70?79分為C,6〇?69分為‘D',60分以下為E’。解:程序如下#includeHstdio.hnvoidmain()(floatscore;chargrade;printf(”請(qǐng)輸入學(xué)生成績(jī):”);scanf(M%f,,&score);while(score>100IIscore<0)(printf("ヽn輸入有誤,請(qǐng)重輸ッ;scanf(n%f\&score);)switch((int)(score/10))(e10:case9:grade=A';break;case8:grade二'B';break;case7:grade='C;break;case6:grade=rD';break;case5:case4:case3:case2:e1:case0:grade='E';卩行他ズ'1I成績(jī)是%5.13相應(yīng)的等級(jí)是%c。'n",score,grade);給定一個(gè)不多于5位的正整數(shù),要求:①求它是幾位數(shù);②分別打印出每一位數(shù)字;③按逆序打印出各位數(shù)字。例如原數(shù)為321,應(yīng)輸出123。解:main()(longintnum;intindiv,ten,hundred,thousand,ten_thousand,place;/?分別代表個(gè)位,十位,百位,千位,萬(wàn)位和位數(shù)*/printf(“請(qǐng)輸入ー個(gè)整數(shù)(〇?99999):”);scanf("%ld”,&num);if(num>9999)place=5;elseif(num>999)place=4;elseif(num>99)place=3;elseif(num>9)place=2;elseplace=l;printf("place二%d\n”,place);printf(“每位數(shù)字為:");ten_thousand=num/l0000;thousand=(int)(num-ten_thousand*10000)/1000;hundred=(int)(num-ten_thousand*10000-thousand*1000)/100;ten=(int)(num-ten_thousand*1OOOO-thousand*1000-hundred*100)/10;indiv=(int)(num-ten_thousand*10000-thousand*1000-hundred*100-ten*10);switch(place){case5:printf(44%d,%d,%d,%d,%dM,ten_thousand,thousand,hundred,ten,indiv);printf("\n反序數(shù)字為:");printf(44%d%d%d%d%d\n,,,indiv,ten,hundred,thousand,ten_thousand);break;case4:printf(44%d,%d,%d,%dM,thousand,hundred,ten,indiv);printf(4ヘn反序數(shù)字為:");printf(44%d%d%d%d\n,T,indiv,ten,hundred,thousand);break;case3:printf(44%d,%d,%d”,hundred,ten,indiv);printf(4へn反序數(shù)字為:");printf(44%d%d%d\n”,indiv,ten,hundred);break;
case2:printf(44%d,%d,\ten,indiv);printf(4へn反序數(shù)字為:");printf(44%d%d\nM,indiv,ten);break;casel:printf(44%d,\indiv);printf(4へn反序數(shù)字為:");printf(44%d\n”,indiv);break;})運(yùn)行結(jié)果:請(qǐng)輸入ー個(gè)整數(shù)(0-99999):98765/位數(shù)=5每位數(shù)字為:9,8,7,6,5反序數(shù)字為:56789企業(yè)發(fā)放的獎(jiǎng)金根據(jù)利潤(rùn)提成。利潤(rùn)I低于或等于10萬(wàn)元時(shí),獎(jiǎng)金可提10%:利潤(rùn)高于10萬(wàn)元,低于20萬(wàn)元(100000<K200000)時(shí),其中10萬(wàn)元按10%提成,高于10萬(wàn)元的部分,可提成7.5%;20000040000〇時(shí),其中20萬(wàn)元仍按上述辦法提成(下同),高于20萬(wàn)元的部分按5%提成;400000<1く60000〇時(shí),高于40萬(wàn)元的部分按3%提成;600000<1く100000〇時(shí),高于60萬(wàn)的部分按1.5%提成;l>1000000時(shí),超過(guò)100萬(wàn)的部分按1%提成。從鍵盤(pán)輸入當(dāng)月利潤(rùn)I,求應(yīng)發(fā)放獎(jiǎng)金總數(shù)。要求:(1)用if語(yǔ)句編程序;(2)用switch語(yǔ)句編程序。解:計(jì)算利潤(rùn)時(shí),要特別注意不同利潤(rùn)的不同提成比例。例如,利潤(rùn)為15萬(wàn)元,其中由10萬(wàn)元按10%的比例提成,另外5萬(wàn)元?jiǎng)t按7.5%提成。用if語(yǔ)句編程序,main(){longi;floatbonus,bon1,bon2,bon4,bon6,bon10;bon1=100000*0.1;bon2=bon1+100000*0.075bon4=bon2+100000*0.05bon6=bon4+100000*0.03bonbon1=100000*0.1;bon2=bon1+100000*0.075bon4=bon2+100000*0.05bon6=bon4+100000*0.03bon10=bon6+400000*0.015;printf(“請(qǐng)輸入利潤(rùn)i;”);scanf("%ld”,&i);if(i<=100000)bonus=i*0.1;/?利潤(rùn)為10萬(wàn)元時(shí)的獎(jiǎng)金?//?利潤(rùn)為20萬(wàn)元時(shí)的獎(jiǎng)金?//?利潤(rùn)為40萬(wàn)元時(shí)的獎(jiǎng)金?//?利潤(rùn)為60萬(wàn)元時(shí)的獎(jiǎng)金?//?利潤(rùn)為100萬(wàn)元時(shí)的獎(jiǎng)金?//?利潤(rùn)在10萬(wàn)元以?xún)?nèi)按0.1提成獎(jiǎng)金?/elseif(i<=200000)bonus=bon1+(i-elseif(i<=200000)bonus=bon1+(i-100000)*0.075elseif(i<=400000)bonus=bon2+(i-200000)*0.05elseif(i<=600000)bonus=bon4+(i-400000)*0.03elseif(i<=1000000)bonus=bon6+(i-600000)*0.015elsebonus=bon10+(i-1000000)*0.01printf("獎(jiǎng)金是%10.2f\bonus);/?利潤(rùn)在10萬(wàn)至20萬(wàn)元時(shí)的獎(jiǎng)金?/利潤(rùn)在20萬(wàn)至40萬(wàn)元時(shí)的獎(jiǎng)金?//?利潤(rùn)在40萬(wàn)元至60萬(wàn)元時(shí)的獎(jiǎng)金?/利潤(rùn)在60萬(wàn)元至100萬(wàn)元時(shí)的獎(jiǎng)金?//?利潤(rùn)在100萬(wàn)元以上時(shí)的獎(jiǎng)金?/運(yùn)行結(jié)果:請(qǐng)輸入利潤(rùn)i:23400〇/獎(jiǎng)金是:19200.00用switch語(yǔ)句編程序,main(){longi;floatbonus,bon1,bon2,bon4,bon6,bon10;intc;bon1=100000*0.1bon2=bon1+100000*0.075bon4=bon2+200000*0.05bon6=bon4+200000*0.03bon10=bon6+400000*0.015printf(“請(qǐng)輸入利潤(rùn)i:”);scanf("%d”,&i);c=i/100000;if(c>10)thenc=10;switch(c){case0:bonus=i*0.1;break;bonus=bon1+(i-100000)*0.075;break;bonus=bon2+(i?200000)*0.05;break;bonus=bon4+(i-400000)*0.03;break;bonus=bon6+(i-600000)*0.015;break;bonus=bon10+(i-1000000)*0.01;)printf("獎(jiǎng)金是%10.2ド,bonus);)運(yùn)行結(jié)果:請(qǐng)輸入利潤(rùn)i:23400〇/獎(jiǎng)金是:19200.00輸入4個(gè)整數(shù),要求按由小到大的順序輸出。解:程序如下#include"stdio.h"voidmain()(intt,a,b,c,d;printf(”請(qǐng)輸入4個(gè)整數(shù):ッ;scanf(M%d,%d,%d,%d",&a,&b,&c,&d);printf(Ha=%d,b=%d,c=%d,d=%dH,a,b,c,d);if(a>b){t=a;a=b;b=t;}if(a>c){t=a;a=c;c=t;}if(a>d){t=a;a=d;d=t;}if(b>c){t=b;b=c;c=t;}if(b>d){t=b;b=d;d=t;}if(c>d){t=c;c=d;d=t;}printf("排序結(jié)果如下:'n");printf("%d%d%d%d\n",a,b,c,d);有4個(gè)圓塔,圓心分別為(2,2),G2,2),(2,-2),(-2,-2),圓半徑為1。見(jiàn)圖4.4。這4個(gè)塔的高度分別為10m。塔以外無(wú)建筑物。今輸入任一點(diǎn)的坐標(biāo),求該點(diǎn)的建筑高度(塔外的高度為〇)。解:程序如下main(){inth=10;floatxl=2,yl=2,x2=-2,y2=2,x3=-2,y3=-2,x4=2,y4=-2,x,y,dl,d2,d3,d4;printf(“請(qǐng)輸入ー個(gè)點(diǎn)(x,y):");scanf(44%f,%f\&x,&y); /?求該點(diǎn)到各中心點(diǎn)的距離*/dl=(x-xl)*(x-xl)+(y-yl)*(y-yl);d2=(x-x2)*(x-x2)+(y+y2)*(y+y2;d3=(x+x3)*(x+x3)+(y-y3)*(y-y3);d4=(x+x4)*(x+x4)+(y+y4)*(y+y4);if(dl>l&&d2>l&&d3>l&&d4>l)h=0;/?判斷該點(diǎn)是否在塔外?/printf(“該點(diǎn)高度為%d”,h);)運(yùn)行情況:請(qǐng)輸入ー個(gè)點(diǎn)(x,y):0.5,0.7/該點(diǎn)高度為〇請(qǐng)輸入ー個(gè)點(diǎn)(x,y):2.1,23/該點(diǎn)高度為10第6章循環(huán)控制輸入兩個(gè)正整數(shù)m和n,求其最大公約數(shù)和最小公倍數(shù)。解:用輾轉(zhuǎn)相除法求最大公約數(shù)main(){intp,r,n,m,temp;printf(“請(qǐng)輸入兩個(gè)正整數(shù)n,m:");if(n<m){temp=n;n=m;m=temp; /?把大數(shù)放在n中,小數(shù)放在m中?/)p=n*m; /?先將m和n的乘積保存在p中,以便求最小公倍數(shù)時(shí)用?/while(m!=0) /?求m和n的最大公約數(shù)?/{r=n%m;n=m;m=r;}printf(“它們的最大公約數(shù)為:%d\n”,n);printf(“它們的最小公倍數(shù)為:%d\nM,p/n); /*p是原來(lái)兩個(gè)整數(shù)的乘積リ運(yùn)行情況:請(qǐng)輸入兩個(gè)正整數(shù):12,8/它們的最大公約數(shù)為:4它們的最小公倍數(shù)為:24輸入一行字符,分別統(tǒng)計(jì)出其中英文字母,空格,數(shù)字和其它字符的個(gè)數(shù)。解:#include<stdio.h>main(){charc;intIetter=0,space=0,digit=0,other=0;printf(“請(qǐng)輸入一行字符:\n");while((c=getchar())!=,\n,){if(c>='a'&&c<=,z,IIc>=,A,&&cv=Z)letter++;elseif(c=*')space++;elseif(c>=,0,&&c<=,9,)digit++;elseother++;)primf("字母數(shù)=%d,空格數(shù)=%d,數(shù)字?jǐn)?shù)=%d,其它字符數(shù)二%d\n”,letter,space,digit,other);)運(yùn)行情況:請(qǐng)輸入一行字符:Myteacher'saddressis“#123BeijingRoad,Shanghai".字母數(shù):38,空格數(shù):6,數(shù)字?jǐn)?shù):3,其它字符數(shù):6求Sn=a+aa+aaa+???+aa…a之值,其中a是ー個(gè)數(shù)字。例如:2+22+222+2222+22222n個(gè)a(此時(shí)n=5),n由鍵盤(pán)輸入。解:main(){inta,n,i=l,sn=O,tn=O;printf(4<a,n=:つ;scanf(t4%d,%d",&a,&n);while(i<=n){tn=tn+a; /*賦值后的tn為i個(gè)a組成數(shù)的值?/sn=sn+tn; /*賦值后的sn為多項(xiàng)式前I項(xiàng)之和*/a=a*10;++i;)printf("a+aa+aaa+,,,=%d\n”,sn);}運(yùn)行情況:a,n:2,5/a+aa+aaa+…=24690求En!(即求1+2!+…+20!)。解:main(){floats=O,t=1;intn;for(n=l;n<=20;n++)(t=t*n; /*求n!*/s=s+t; /*將各項(xiàng)累加?/)primf("1!+2!+???+20!=%e\n”,s);運(yùn)行結(jié)果:l!+2!+-??+20!=2.56133e+18注意:s不能定義為int型,因?yàn)閕nt型數(shù)據(jù)的范圍是.32768?32767:也不能定義為long型,因?yàn)?ong型數(shù)據(jù)的范圍為ー21億?21億,無(wú)法容納求得的結(jié)果。求100 50 101が+Z爐+Z:£=1*=! セ=1K解:#includenstdio.h"#include"conio.h"main()intn1=100,n2=50,n3=10,k;floatsl=0,s2=0,s3=0;for(k=1;k<=nI;k++)sl+=k;for(k=l;k<=n2;k++)s2+=k*k;for(k=l;k<=n3;k++)s3+=1.0/k;printf(,'sum=%8.2f\n,,,sl+s2+s3);getch();打印出所有的“水仙花數(shù)”。所謂“水仙花數(shù)”是指一個(gè)3位數(shù),其各位數(shù)字的立方和等于該數(shù)本身。例如,153是ー個(gè)“水仙花數(shù)”,因?yàn)?53=^+53+33。解:main(){inti,j,k,n;printf(““水仙花數(shù)”是:");for(n=100;n<1000;n++){i=n/100;j=n/10-i*10;k=n%10;if(n==i*i*i+j*j*j+k*k*k)printf(44%4d>\n);)printf(ヽn");)運(yùn)行結(jié)果:“水仙花數(shù)”是:153370371407ー個(gè)數(shù)如果恰好等于它的因子之和,這個(gè)數(shù)就稱(chēng)為“完數(shù)”。例如,6的因子為1,2,3,而6=1+2+3,因此6是“完數(shù)”。編程序找出1000以?xún)?nèi)的所有“完數(shù)”,并按下面的格式輸出其因子:6Itsfactorsare1,2,3解:方法一:#defineM1000 /?定義尋找范圍サmain(){intkl,k2,k3,k4,k5,k6,k7,k8,k9,kl0;
inti,a,n,s;for(a=2;a<=M;a++)/*a是2?1000之間的整數(shù),檢查它是否完數(shù)?/{n=0;/*n用來(lái)累計(jì)a的因子的個(gè)數(shù)s=a;/*s用來(lái)存放尚未求出的因子之和,開(kāi)始時(shí)等于a*/for(i=l;i<a;i++)/?檢查i是否a的因子?/if(a%i=0)/?如果i是a的因子?/{n++;/*n加1,表示新找到ー個(gè)因子?/s=s-I;/*s減去已找到的因子,s的新值是尚未求出的因子之和?/switch(n)/?將找到的因子賦給kl…klO*/{case1:kl=i;break;/?找出的第1個(gè)因子賦給內(nèi)*/case2:k2=i;break;/?找出的第2個(gè)因子賦給k2*/case3:k3=i;break;/?找出的第3個(gè)因子賦給k3*Zcase4:k4=i;break;片找出的第4個(gè)因子賦給k4*/case5:k5=i;break;/?找出的第5個(gè)因子賦給k5*/case6:k6=i;break;/?找出的第6個(gè)因子賦給k6*/case7:k7=i;break;/?找出的第フ個(gè)因子賦給k7*/case8:k8=i;break;六找出的第8個(gè)因子賦給k8*Zcase9:k9=i;break;Z?找出的第9個(gè)因子賦給k9*Zcase10:kl0=i;break;Z?找出的第10個(gè)因子賦給klO*Z)}if(s==O)*s=0表示全部因子都已找到*Z{printf("%dItsfactorsare”,a);if(n>l)printf(4<%d,%d",kl,k2); /*n>!表示a至少有2個(gè)因子?/if(n>2)printfC\%d",k3);Z*n>2表示至少有3個(gè)因子,故應(yīng)再輸入ー個(gè)因子?Zif(n>3)printf(",%d”,k4);Z?以下類(lèi)似?Zif(n>4)printfC;%d",k5);if(n>5)printf(i4,%d",k6);if(n>6)printf(4\%d",k7);if(n>7)printf(44,%d",k8);if(n>8)printf(44,%d",k9);if(n>9)printf(44,%d",klO);printf('ヘn’‘);)運(yùn)行結(jié)果:6Itsfactorsare1,2,328Itsfactorsare1,2,4,7,14496Itsfactorsare1,2,4,8,16,31,62,124,248方法二:main(){intm,s,i;for(m=2;m<1000;m++){s=0;for(i=l;i<m;i++)if((m%i)==0)s=s+i;if(s==m){printf("%d是一個(gè)“完數(shù)”。它的因子是“,m):for(i=l;ivm;i++)if(m%I==0)piintf(“%ザ,I);printf(**\n");))}方法三:此題用數(shù)組方法更簡(jiǎn)單。main(){intk[ll];inti,a,n,s;for(a=2;a<=1000;a++){n=0;s=a;for(i=l;i<a;i++)if((a%i)==0){n++;s=s-i;k[n]=i; /*將找到的因子賦給k[l],-,k[10]*/}if(s==0){prindTへn%d是ー個(gè)“完數(shù)”,它的因子是:",a);for(i=l;i<n;i++)printfC4%d,",k[i]);printf(t4%d\n",k[n]);運(yùn)行結(jié)果:6是一個(gè)“完數(shù)”,它的因子是:1,2,328是ー個(gè)“完數(shù)”,它的因子是:1,2,4,7,14496是ー個(gè)“完數(shù)”,它的因子是:1,2,4,8,16,31,62,124,248有一分?jǐn)?shù)序列:2/1,3/2,5/3,8/5,13/8,21/13,…求出這個(gè)數(shù)列的前20項(xiàng)之和。解:main(){inti,t,n=20;floata=2,b=l,s=0;for(i=l;i<=n;i++){s=s+a/b;t=a;a=a+b; /?將前ー項(xiàng)分子與分母之和作為下ー項(xiàng)的分子?/b=t; /?將前ーー項(xiàng)分子作為下ー項(xiàng)的分母?/)printf("sum=%9.6f\n'',s);)運(yùn)行結(jié)果:sum=32.660259一球從100米高度自由落下,每次落地后反跳回原高度的一半,再落下。求它在第10次落地時(shí),共經(jīng)過(guò)多少m?第10次反彈多高?#include"stdio.h"voidmain()(floatsn=100,hn=sn/2;intn;for(n=2;n<=10;n-H-)(sn=sn+2*hn;/?第n次落地時(shí)共經(jīng)過(guò)的米數(shù)?/hn=hn/2; /?第n次反彈髙度?/printf("第10次落地時(shí)共經(jīng)過(guò)%f米。、n",sn);printf("第10次反彈%f米。'n",hn);猴子吃桃問(wèn)題。猴子第一天摘下若干個(gè)桃子,當(dāng)即吃了一半,還不過(guò)癮,又多吃了一個(gè)。第二天早上又將剩下的桃子吃掉一半,又多吃了一個(gè)。以后每天早上都吃了前一天剩下的一半零一個(gè)。到第10天早上再想吃時(shí),見(jiàn)只剩ー個(gè)桃子了。求第一天共摘多少桃子。解:main(){intday,xl,x2;day=9;x2=l;while(day>0){xl=(x2+l)*2; /*第一天的桃子數(shù)是第二天桃子數(shù)加1后的2倍?/x2=xl;day—;)printf(44total=%d\n,\xl);)運(yùn)行結(jié)果:total=1534用迭代法求x=y[a?求平方根的迭代公式為X"產(chǎn)丄(メQ+色2xn要求前后兩次求出的x的差的絕對(duì)值小于10-5。解:用迭代法求平方根的算法如下:設(shè)定一個(gè)X的初值XO;用上述公式求出x的下ー個(gè)值xi;再將X1代入上述公式,求出X的下ー個(gè)值X2;如此繼續(xù)下去,直到前后兩次求出的X值(X"和X"+1)滿(mǎn)足以下關(guān)系:IXn+i—Xnl<10-5為了便于程序處理,今只用變量X。和Xい先令x的初值x0=a/2(也可以是另外的值),求出X1;如果此時(shí)IXn+1—XnI21。7,則使X]fXo,然后用這個(gè)新的Xo求出下一個(gè)X1;如此反復(fù),直到IXhI-X”1<1。7為止。 程序如下:#include<math.h>main(){floata,x0,x1;printf("Enterapositivenumber:");/?輸入a/?輸入a的值?/x0=a/2;xl=(x0+a/x0)/2;do{x0=xl;x1=(x0+a/x0)/2;}while(fabs(x0-x1)>=1e-5);printfCT'hesquarerootof%5.2fis%8.5f\n,,,a,xl);運(yùn)行結(jié)果:Enterapositivenumber:2/Thesquarerootof2.00is1.41421用牛頓迭代法求方程2x3-4x2+3x-6=0在1.5附近的根。解:牛頓迭代法又稱(chēng)牛頓切線(xiàn)法,它采用以下方法求根:先任意設(shè)定一個(gè)與真實(shí)的根接近的值Xo作為第一個(gè)近似根,由河求出f(X()),過(guò)(Xo,f(X()))點(diǎn)做f(X)的切線(xiàn),交X軸于X”把它作為第二次近似根,再由XI求出f(Xi),再!(Xi,f(X。)點(diǎn)做f(X)的切線(xiàn),交X軸于X2,再求Hf(X2),再作切線(xiàn)……如此繼續(xù)下去,宜到足夠接近真正的X?為止。ノは0)x\-xo/Uo)這就是牛頓迭代公式。本題中,f(x)=2x3-4x2+3x-6=((2x-4)x+3)x-6f'(x)=6x2-8x+3=(6x-8)+3#include"stdio.h"#include"math.h"voidmain()(floatxl,xO,f,fl;xl=1.5;dox0=xl;f=((2*x0-4)*x0+3)*x0-6;fl=(6*x0-8)*x0+3;xl=xO-f7fl;}while(fabs(x1-xO)>=1e-5);printf(MTHerootofequationis%5.2f\n”,x1);)用二分法求方程2メ3-4爲(wèi)3*-6=0在(-10,10)之間的根。解:二分法的思路如下:先指定一個(gè)區(qū)間[X],xR,如果函數(shù)f(x)在此區(qū)間是單調(diào)變化,可以根據(jù)f(Xi)和f(X2)是否同符號(hào)來(lái)確定方程f(x)=o在[X1,X21區(qū)間是否有一個(gè)實(shí)根。若f(xi)和f(x2)不同符號(hào),則f(X)=0在[xg]區(qū)間必有一個(gè)(且只有一個(gè))實(shí)根。若f(X|)和f(X2)同符號(hào),說(shuō)明在區(qū),X2]區(qū)間無(wú)實(shí)根,要重新改變X|和X2的值。當(dāng)確定出,X1有一個(gè)實(shí)根,采用二分法將[X|,X2]區(qū)間一分為二,再判斷在哪個(gè)小區(qū)間中有實(shí)根。如此不斷進(jìn)行下去,直到小區(qū)間足夠小為止。算法N-S圖如下:#include"stdio.h"#include"math.h"voidmain()(floatx0,x1,x2,fx0,fx1,fx2;do(printf(nPleaseenterxl,x2:n);scanf(1,%f,%f',,&xl,&x2);fxl=xl*((2*xl-4)*xl+3)-6;fx2=x2*((2*x2-4)*x2+3)-6;
}while(fx1*fx2>0);do(x0=(xl+x2)/2;fx0=x0*((2*x0-4)*x0+3)-6;if(fx0*fxl<0)(x2=x0;fx2=fx0;)else(xl=xO;fxl=fxO;)}while(fabs(fx0)>=le-5);printf(',x=%6.21\n',,x0);打印出以下圖案:解:main解:main(){intl,j,k;for(i=0;i<=3;i++){for(j=0;j<=2-i;j++)printf(s<M);for(k=0;k<=2*i;k++)primf("*”);printf("\n”);}for(i=0;i<=2;i++){for(j=0;j<=i;j-H-)printf(“");for(k=0;k<=4-2*i;k++)printf("ザ);printf('へrT);/*輸出上面4行?號(hào)4信輸出?號(hào)前面的空格?//*輸出?號(hào)?//?輸出完一行?號(hào)后換行?//*輸出下面3行?號(hào)?/產(chǎn)輸出?號(hào)前面的空格?//*輸出?號(hào)?//?輸出完?行?后換行?/運(yùn)行結(jié)果: ****兩個(gè)乒乓球隊(duì)進(jìn)行比賽,各出3人。甲隊(duì)為A、B、C3人,乙隊(duì)為X、Y、Z3人。已抽簽決定比賽名單。有人向隊(duì)員打聽(tīng)比賽名單。A說(shuō)他不和X比,C說(shuō)他不和X、Z比。請(qǐng)編程找出3對(duì)賽手的名單。解:用計(jì)算機(jī)程序處理此問(wèn)題時(shí),必須對(duì)每ー種成對(duì)的組合ーー檢驗(yàn),看他們是否符合條件。開(kāi)始時(shí),并不知道A、B、C與X、Y、Z中哪ー個(gè)比賽,可以假設(shè)A與i比賽,B與j比賽,C與k比賽。#include"stdio.h"voidmain()(chari,j,k;/*i是A的對(duì)手,j是B的對(duì)手,k是C的對(duì)手?/for(i=X';i<='Z';i++)for(j='X';j<='Z';j++)if(i!=j)for(k='X';k<='Z,;k++)if(i!=k&&j!=k)if(i!='X'&&k!='X'&&k!='Z')printf("A-%c\tB-%c\tC-%c\n",i,j,k);第7章數(shù)組用篩法求100之內(nèi)的素?cái)?shù)。解:所謂"篩法"指的是"Eratosthenes篩法〇Eratosthenes是古希臘的著名數(shù)學(xué)家。他采用的方法是:在ー張紙上寫(xiě)下1?1000之間的全部整數(shù),然后逐個(gè)判斷它們是否素?cái)?shù),找出ー個(gè)非素?cái)?shù)就把它挖掠,最后剩下的就是素?cái)?shù)。j]23/5目7k910111回13回1516)17回1982122123風(fēng)2526271爼29M31.3334353@37|38394d41眼43/4546147函49561…具體做法如下:先將1挖掉(因?yàn)?不是素?cái)?shù))。用2去除它后面的各個(gè)數(shù),把能被2整除的數(shù)(如4,6,8-)挖掉,即把2的倍數(shù)挖掉。(3)用3去除它后面各數(shù),把3的倍數(shù)挖掉。(4)分別用4,5…各數(shù)作為除數(shù)去除這些數(shù)以后的各數(shù)。這個(gè)過(guò)程一直進(jìn)行到在除數(shù)后面的數(shù)已全被挖掉為止。例如在上表中1?50范圍內(nèi)的素?cái)?shù),要一直進(jìn)行到除數(shù)為47為止。事實(shí)上,這ー過(guò)程可以簡(jiǎn)化。如果需要找1?n范圍內(nèi)的素?cái)?shù),只需進(jìn)行到除數(shù)為6(取其整數(shù))即可。例如對(duì)1?50,只需進(jìn)行到將7(即病的整數(shù)部分)作為除數(shù)即可。上面的算法可表示為:挖去1;用剛オ被挖去的數(shù)的下一個(gè)數(shù)p去除p后面的各數(shù),把p的倍數(shù)挖掉;檢查p是否小于,r的整數(shù)部分(如果n=1000,則檢查p<31否),如果是,則返回(2)繼續(xù)執(zhí)行,否則就結(jié)束;紙上剩下的就是素?cái)?shù)。解題的基本思路有了,但要變成計(jì)算機(jī)的操作,還要作進(jìn)ー步的分析。如怎樣判斷一個(gè)數(shù)是否已被‘‘挖掉’‘,怎樣找出某ー個(gè)數(shù)p的倍數(shù),怎樣打印出未被挖掉的數(shù)??梢栽O(shè)ー個(gè)數(shù)組a,a[l]到a[100]的值分別是1,2,3,…100。然后用上述方法將非素?cái)?shù)“挖去”。如果ー個(gè)數(shù)被認(rèn)為是非素?cái)?shù),就將它的值變?yōu)榱悖詈髮⒉粸榱愕臄?shù)組元素輸出,就是所求的素?cái)?shù)表。程序如下:#include<math.h>main(){inti,j,n,a[101];for(i=l;i<=100;i++)a[i]=i;for(i=2;i<sqrt(100);i++)for(j=i+l;j<=l00;j++){if(a[i]!=0&&a[j]!=O)if(a[j]%a[i]==0)a[j]=O;} 非素?cái)?shù),賦值為〇,"挖掉”*/printf('へn");for(i=2,n=0;i<=100;i++){if(a[i]!=0){printf(u%5dM,a[i]);n++;}if(n==10) /?此處if語(yǔ)句的作用是在輸出10個(gè)數(shù)后換行?/{printf('ヘn");n=0;}}運(yùn)行結(jié)果:2357 11 13 17 19 23 29 31 37 4143475359 61 67 71 73 79 83 89 97
7.2用選擇法對(duì)10個(gè)整數(shù)排序(從小到大)。解:選擇排序的思路如下:設(shè)有設(shè)個(gè)元素aロ]?a[10],將a[l]與a[2卜a[10]比較,若a[l]比a⑵?a[10嘟小,則不進(jìn)行交換,即無(wú)任何操作。若a⑵?a[10]中有一個(gè)以上比a[l]小,則將其中最小的一個(gè)(假設(shè)為a[i])與a[l]交換,此時(shí)a[l]中存放了10個(gè)中最小的數(shù)。第二輪將a⑵與a[3卜a。〇]比較,將剩下9個(gè)數(shù)中的最小者a[i]與a⑵對(duì)換,此時(shí)a⑵中存放的是10個(gè)中第2小的數(shù)。依此類(lèi)推,共進(jìn)行9輪比較,a[l]到a[10]就已按由小到大的順序存放。程序如下:main(){inti,j,min,a[ll];printf(''Enterdata:\n");for(i=l;i<=10;i++){printf(''a[%d]=,,,i);scanf("%d”,&a[i]);)printf("\n”);for(i=l;i<=10;i++)pritnf("%5d'',a[i]);printf('へn");for(i=l;i<=9;i++){min=i;for(j=i+l;j<=10;j++)if(a[min]>a[j])min=j;a[0]=a[i];a[i]=a[min];a[min]=a[0];)printf(4i\nThesortednumbers:\nM);for(i=l;i<=10;i++)printf("%5d”,a[i]);/?輸入/?輸入10個(gè)數(shù)*//?輸出這10個(gè)數(shù)?//?以下8行是對(duì)10個(gè)數(shù)排序?//?以下3行將?a口〇]中最小者與a[i]對(duì)換リ/?輸出己牌好序的10個(gè)數(shù)?/a[5]=lZa[6]=15Za[7]=44Za[8]=78Za[9]=58Za[10|=101Z6 9045561 15 44 78 58 101Thesortednumber:1 6154445 56 58 78 90 101說(shuō)明:定義a數(shù)組有數(shù)個(gè)元素:a[0]-a[10],但實(shí)際上只對(duì)a[l卜a[10]這10個(gè)元素輸入值并排序,這樣符合人們的習(xí)慣。a[〇]用作兩數(shù)交換時(shí)的中間變量。7.3求一個(gè)3X3矩陣對(duì)角線(xiàn)元素之和。解:main(){inta[3][3],sum=0;inti,j;printf(44Enterdata:\nM);for(i=0;i<3;i++)for(j=0;j<3;j++)scanf("%d”,&a[i][j]);for(i=0;i<3;i++)sum=sum4-a[i](i|;printf(4tsum=%5d\n,,,sum);)運(yùn)行情況如下:Enterdata:123456789/sum=15此程序中用的是整型數(shù)組,運(yùn)行結(jié)果是正確的。如果用的是實(shí)型數(shù)組,程序應(yīng)修改為:main(){floata[3][3],sum=O;intij;printf("Enterdata:\n");for(i=0;i<3;i++)for(j=0;j<3;j++)scanfC%f;&a[i][j]); /*注意:在%f前有一空格,否則無(wú)法輸入數(shù)據(jù)?/for(i=0;iv3;i++)sum=sum+a[i][i];printf("sum=%6.2f\nM,sum);)該程序在TurboC3.0下可正常運(yùn)行,得到結(jié)果:sum=16.50但在TurboC2.0環(huán)境下運(yùn)行此程序時(shí),出現(xiàn)運(yùn)行錯(cuò)誤,在輸入數(shù)據(jù)后系統(tǒng)顯示出錯(cuò)信息:scanf:floatingpointfbmatsnotlinkedAbnormalprogramtermination經(jīng)過(guò)檢查,程序的邏輯和語(yǔ)法都是正確的,而且在其它的C系統(tǒng)中(例如BorlandC++)可以正常運(yùn)行。出現(xiàn)這種情況是所用的C編譯系統(tǒng)不完善,處理的方法有兩個(gè):ー是把程序移到其它C系統(tǒng)上運(yùn)行(但往往不方便);二是遷就所用的C系統(tǒng),修改程序,避開(kāi)其缺陷,這就需要通過(guò)多次試驗(yàn)掌握其規(guī)律。對(duì)以上程序來(lái)說(shuō),可以有多種替代的方案,例如可以把程序中第5?7行改為:for(i=0;i<3;j++)scanfC4%f%f%r,&a[i][0],&[i][l],&a[i][2]);它在效果上應(yīng)與原來(lái)的第5?7行等價(jià),但上機(jī)運(yùn)行時(shí)發(fā)現(xiàn)仍不能正常運(yùn)行,再改為:for(j=O;j<3;j++)scanf(44%f%f%f;&a[O][j],&[l][jL&a[2][j]);它也是與原來(lái)的5?フ行等價(jià)的,上機(jī)運(yùn)行時(shí)發(fā)現(xiàn)可以正常運(yùn)行。程序如下:main(){floata[3][3],sum=0;intij;printf("Enterdata:\n")for(j=O;j<3;j++)scanf(44%f%f%r,&a[0][j],&a[l]|j],&a[2]|j]);for(i=0;i<3;i++)sum=sum+a[i][i];printf(44sum=%6.2f\n,,,sum);)運(yùn)行情況如下:Enterdata:1.12.23.34.45.56.67.78.89.9/應(yīng)注意數(shù)據(jù)與元素的對(duì)應(yīng)關(guān)系:1.1是a[〇][〇]的值,2.2是a[l][〇]的值,3.3是a[2][〇]的值……7.4有一個(gè)已排好序的數(shù)組,今輸入ー個(gè)數(shù),要求按原來(lái)排序的規(guī)律將它插入數(shù)組中。解:程序如下:main(){inta[ll]={1,4,6,9,13,16,19,28,40,100};/?注意數(shù)組a長(zhǎng)度應(yīng)足夠大,以便容納新插入的元素?/inttemp1,temp2,number,end,i,j;printf(44arraya:\n");for(i=0;i<10;i++)printf("%5d'',a[i]);printf('ヘn");printf(44Insertdata:");scanf(''%d"成number);end=a|9];if(number>end)a[10]=number;else{for(i=0;i<10;i++){if(a[i]>number) グ找到合適的插入位置為i*/{templ=a[i];a[i]=number;ford=i+l;j<ll;j++)/?將原來(lái)的第i個(gè)元素移至第i+1位置,其它順序后移?/{temp2=a[j];a[j]=templ;templ=temp2;}break;)}}printf(44Now,arraya:\n’');for(i=0;i<ll;i++)printf("%6d”,a[iD;運(yùn)行情況如下:arraya:1 4 6 9 13 16 19 28 40 100Insertdata:5/Now,arraya:1 4 5 6 9 13 16 19 28 40 100加以改進(jìn)后,可以采用以下方法。voidmain()(inta[ll]={1,4,6,9,13,16,19,28,40,100);inttempi,temp2,number,end,i,j;printf("arraya:\n");for(i=0;i<10;i++)printf("%5d",a[i]);printf("\n");printf("Insertdata:");scanf("%d",&number);for(i=9;i>=0&&a[i]>number;i—) /*從數(shù)組中最后ー個(gè)數(shù)開(kāi)始比較,凡大于number的數(shù)向后移動(dòng)?/a[i+l]=a[i];a[i+l]=number;/?將number插入到合適位置?/for(i=0;i<ll;i4-+)printf(“%5d”血);printf(,t\nu);)7.5將一個(gè)數(shù)組中的值按逆序重新存放。例如原來(lái)順序?yàn)?8,6,5,4,1〇要求改為:1,4,5,6,8。解:程序如下:#defineN5main(){inta[N],i,temp;printf(“Enterarraya:\n’');for(i=O;i<N;i++)scanf(6<%dM,&a[i]);printfC^arraya:\n’');for(i=0;i<N;i++)printf(tt%4d,\a[i]);for(i=0;i<N/2;i++){temp=a[i];a[i]=a[N-i-l];a[N-i-1]=temp;)printf('へnNow,arraya:\if');for(i=0;i<N;i++)printf(tt%4d,\a[i]);printf(44\nM);)運(yùn)行情況如下:Enterarraya:86541/arraya:8 6 5 4 1Now,arraya:1 4 5 6 8程序中第二個(gè)for循環(huán)也可以寫(xiě)成:for(i=0J=N-l;i<j;i++,j—){temp=a[i];a[i]=a|j];a[j]=temp;7.6打印出以下的楊輝三角形(要求打印出10行〇111121133114641解:楊輝三角形是(a+b)11展開(kāi)后各項(xiàng)的系數(shù)。例如:(a+b)°展開(kāi)后為1 系數(shù)為1(a+?展開(kāi)后為a+b 系數(shù)為1,1(a+b)一展開(kāi)后為a~+2ab+b一 系數(shù)為1,2,1(a+b)3展開(kāi)后為a3+3a2b+3ab2+b3 系數(shù)為1,331(a+b)4展開(kāi)后為a4+4a3b+6a2b2+4ab3+b4 系數(shù)為1,4,6,4,1以上就是楊輝三角形的前5行。楊輝三角形各行的系數(shù)有以下規(guī)律:各行第一個(gè)數(shù)都是1。各行最后一個(gè)數(shù)都是1。從第3行起,除上面指出的第一個(gè)數(shù)和最后一個(gè)數(shù)外,其余各數(shù)是上一行同列和前一列2個(gè)數(shù)之和。例如第4行第2個(gè)數(shù)(3)是第3行第2個(gè)數(shù)(2)和第3行第1W(1)之和??梢赃@樣表示:a[i][j]=a[i-l]Ul+a[M][j-l],其中i為行數(shù),j為列數(shù)。#defineN11main(){inti,j,a[N][N];for(i=l;i<N;i++){a[i][i]=l;a[i][l]=l;)for(i=3;i<N;i++)for(j=2;j<=i-l;j++)a[i][j]=a[i-l]|j-l]+a[M]|j];for(i=l;i<N;i++){for(j=l;j<=i;j++)print-%6(r,a[i田]);primf(%”);)printf('へn");)運(yùn)行結(jié)果:1111 2 113 3 1TOC\o"1-5"\h\z1 5 10105 11 6 1520156 11 7 213535217 1285670562889 36841261268436917.7輸出魔方陣。所謂魔方陣是指這樣的方陣(方陣的階數(shù)應(yīng)為奇數(shù)),它的每一行、每ー列和對(duì)角線(xiàn)之和均相等。'816'例如,三階魔方陣為357492要求輸岀由1?ピ之間的自然數(shù)構(gòu)成的魔方陣。解:魔方陣中各數(shù)的排列規(guī)律如下:1)將1放在第一行中間一列。2)從2開(kāi)始直到nXn止各數(shù)依次按下列規(guī)則存放:每ー個(gè)數(shù)存放的行比前一個(gè)數(shù)的行數(shù)減1,列數(shù)加1(例如上面的三階魔方陣,5在4的上一行后一列)。3)如果上一個(gè)數(shù)的行數(shù)為1,則下ー個(gè)數(shù)的行數(shù)為n(指最下一行),列數(shù)同樣加1。例如,1在第1行第2列,則2應(yīng)放在最下一行第3列。4)當(dāng)上一個(gè)數(shù)的列數(shù)為n時(shí),下一個(gè)數(shù)的列數(shù)應(yīng)為1,行數(shù)同樣減1。例如2在第3行最后一列,則3應(yīng)放在第2行第1歹リ。5)如果按上面規(guī)則確定的位置上已經(jīng)有數(shù),或上一個(gè)數(shù)是第1行第n列時(shí),則把下ー個(gè)數(shù)放在上一個(gè)數(shù)的下面。例如,按上面的規(guī)定,4應(yīng)該放在第1行第2列,但該位置已經(jīng)被1占據(jù),所以4就放在3的下面。由于6是第1行第3列(即最后一列),故7放在6的下面。按此方法可以得到任何的魔方陣。voidmain()(inta[16][16],ij,k,p,n;p=l;while(p=l)(printf("Entern(n=lto15):");scanf("%d",&n);if(n!=0&&n<=15&&n%2!=0) /?要求階數(shù)為1至15之間的奇數(shù)?/p=0;/?初始化,第〇行和第。列不用,與魔方陣構(gòu)造規(guī)則一致*/for(i=l;i<=n;i++)for(j=l;jv=n;j++)a[i][j]=O;j=n/2+l;a[l]D]=l;for(k=2;k<=n*n;k++)!i-;j++;if(i<l&&j>n)(i+=2;j-;)else(if(i<l)i=n;if(j>n)j=l;)if(a[i]U]==O)a[i][j]=k;else(i+=2;j-;a[i][j]=k;/?輸出魔方陣?/for(i=l;i<=n;i++){for(j=l;j<=n;j++)printf(u%7d';a[i][j]);printf(',\nu);system("pausen);找出ー個(gè)二維數(shù)組中的鞍點(diǎn),即該位置上的元素在該行上最大,在該列上最小。也可能沒(méi)有鞍點(diǎn)。解:ー個(gè)二維數(shù)組最多有一個(gè)鞍點(diǎn),也可能沒(méi)有。解題思路是:先找出一行中值最大的元素,然后檢查它是否該列中的最小值,如果是,則是鞍點(diǎn)(不需要再找別的鞍點(diǎn)了),輸出該鞍點(diǎn);如果不是,則再找下一行的最大數(shù),……。如果每一行的最大數(shù)都不是鞍點(diǎn),則該數(shù)組無(wú)鞍點(diǎn)。程序如下:defineN10defineM10main(){inti,j,k,m,n,flagl,flag2,a|N][M],max,maxi,maxj;printf(44\n輸入行數(shù)n:M);scanf("%ザ,&n);printfCへ!)輸入列數(shù)m:");scanf(tt%d,,,&m);for(i=0;i<n;i++)(printf("第%d行T\n”,i);for(j=0;jvm;j++)scanf("%d”,&a[i][jD;)for(i=0;i<n;i++){for(j=0;j<m;j++)printf("%5d”,a[i皿);printf('ヘn");)flag2=0;for(i=0;i<n;i++){max=a[i][0];for(j=0;j<m;j++)if(a[i][j]>max){max=a[i][j];maxj=j;)for(k=0,flag1=1;k<n&&flagl;k++)if(max>a[k][maxj])flag=0;if(flagl){printf(4*\n第%d行,第%d列的%d是鞍點(diǎn)、n”,i,maxj,max);flag2=l;if(!flag2)printf("\n矩陣中無(wú)鞍點(diǎn)!'n");運(yùn)行結(jié)果:① 輸入行數(shù)n:3/輸入列數(shù)m:4/第。行?1234/第1行?4556/第2行?3567/TOC\o"1-5"\h\z12 3 44 5 3 63 5 6 7第〇行,第3列的4是鞍點(diǎn)② 輸入行數(shù)n:レ輸入列數(shù)m:4/第〇行?24907/第1行?3458/第2行?9123/TOC\o"1-5"\h\z2 4 90 73 4 5 89 12 3矩陣中無(wú)鞍點(diǎn)!有15個(gè)數(shù)按從小到大的順序存放在ー個(gè)數(shù)組中。輸入一個(gè)數(shù),要求用折半查找法找出該數(shù)是數(shù)組中第幾個(gè)元素的值。如果該數(shù)不在數(shù)組中,輸出“不在表中”。解:折半查找是ー種效率較高的查找方法,但前提是待查找的序列必須有序。其思路是:假定待查找序列按從大到小排列,設(shè)變量low指向待查找區(qū)間的下限(一開(kāi)始時(shí)指向第一個(gè)元素),變量high指向待查找區(qū)間的上限(ー開(kāi)始時(shí)指向最后ー個(gè)元素),令變量mid=3+high,將待查找元素與mid所指元素比較,若相等,則查找成功;若小于,し2J由于待查找序列按從大到小排列,可以斷定待查找元素只可能在mid+1-high區(qū)間,令!ow=mid+l,査找區(qū)間縮小一半,然后繼續(xù)在此區(qū)間進(jìn)行折半查找;類(lèi)似的,若大于,則令high=mid-lo如此反復(fù)進(jìn)行,如果出現(xiàn)low>high,則表示查找失敗,即序列中不存在待査找元素。下面的程序演示了隨機(jī)產(chǎn)生N一1個(gè)〇?99的整數(shù),存放在數(shù)組ロト[N-1]單元中,主要為了與人的習(xí)慣一致,即第1個(gè)元素存放位置是[1]號(hào)單元。然后進(jìn)行冒泡法排序,最后根據(jù)用戶(hù)輸入的數(shù)據(jù)進(jìn)行折半查找(可進(jìn)行多次)。#defineN16voidmain()(intarray[N],i,j,number,low,high,mid;charch;printf(MTheoriginalarrayis:");for(i=l;i<N;i++){array[i]=rand()%100; /?產(chǎn)生并顯示N~1個(gè)〇?99的隨機(jī)整數(shù),存放在數(shù)組[1HN-1]單元中?/printf("%3d",array[i]);)printf(An");/?冒泡法排序?/for(i=l;i<N;i-H-)for(j=l;j<N-i;j++)if(array[j]<array|j+l])(array[O]=array[j];array|j]=array[j+1];array|j+l]=array[O];)/?顯示排序后的數(shù)列?/printf("Thesortedarrayis:");for(i=l;i<N;i++)printf("%3d",array[i]);printf("\n");/?折半查找,可進(jìn)行多次?/while(l)printf("\nPleaseinputthenumberwhichyouwanttolookfor:");scanf("%d",&number);low=l;high=N-l;while(low<=high)(mid=(low+high)/2;if(array[mid]=number){printf(M%dhasbeenfoundatposition%d.\nM,number,
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 洗染兩用機(jī)行業(yè)相關(guān)投資計(jì)劃提議范本
- 工程石材供貨合同
- 酒店前廳收銀組收銀員崗位職責(zé)
- 格林法典中的經(jīng)典故事解讀
- 個(gè)人車(chē)輛質(zhì)押合同
- 境外并購(gòu)與重組服務(wù)協(xié)議
- 企業(yè)內(nèi)部員工績(jī)效考核管理辦法
- 掛靠經(jīng)營(yíng)合同協(xié)議書(shū)
- 工業(yè)廢水處理服務(wù)協(xié)議
- 《經(jīng)濟(jì)學(xué)基礎(chǔ)概念與應(yīng)用:大一經(jīng)濟(jì)學(xué)課程教案》
- 課件:《中華民族共同體概論》第一講 中華民族共同體基礎(chǔ)理論
- 高中《信息技術(shù)》必修1全冊(cè)知識(shí)點(diǎn)復(fù)習(xí)課件
- 2023年上半年教師資格證《高中數(shù)學(xué)》真題及答案
- 【基于PLC智能照明控制系統(tǒng)設(shè)計(jì)10000字(論文)】
- 小紅書(shū)種草營(yíng)銷(xiāo)師認(rèn)證考試題附有答案
- 2024年天津市中考數(shù)學(xué)真題試卷及答案
- 人教版(一年級(jí)起點(diǎn))一年級(jí)至六年級(jí)的英語(yǔ)詞匯
- 2019-2023年真題分類(lèi)匯編(新高考)專(zhuān)題04立體幾何(原卷版+解析)
- 小學(xué)生視力調(diào)查報(bào)告分析總結(jié)
- 2024年社區(qū)工作者考試必背1000題題庫(kù)必背(必刷)
- 《短視頻拍攝與制作》課件-4.短視頻后期制作- 剪輯技巧
評(píng)論
0/150
提交評(píng)論