


版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
--.z..z.C程序設(shè)計(jì)〔第三版〕課后習(xí)題參考解答1章C語(yǔ)言概述參照本章例題,編寫一個(gè)C程序,輸出以下信息:******************************Very Good!******************************解:main(){printf("******************************\n〞);printf("\n〞);printf(" Very Good!\n}寫一個(gè)程序,輸入a,b,c解:main(){inta,b,c,ma*;printf("請(qǐng)輸入三個(gè)數(shù)a,b,c:scanf("%d,%d,%d〞,&a,&b,&c);ma*=a;if (ma*<b)ma*=b;if (ma*<c)ma*=c;printf("最大數(shù)為:%d〞,ma*);}第2章程序的靈魂——算法2.1什么叫構(gòu)造化的算法.為什么要提倡構(gòu)造化的算法.的跳轉(zhuǎn),流程的轉(zhuǎn)移只存在于一個(gè)根本構(gòu)造范圍之內(nèi),因而提高了算法的質(zhì)量。2.7什么叫構(gòu)造化程序設(shè)計(jì).它的主要內(nèi)容是什么.解:構(gòu)造化程序就是用高級(jí)語(yǔ)言表示的構(gòu)造化算法。它的主要內(nèi)容包括"自頂向下,逐步細(xì)化〞的分析方法和"模塊化設(shè)計(jì)〞的解決方法,以及"構(gòu)造化編碼〞的實(shí)現(xiàn)方法。第3章數(shù)據(jù)類型、運(yùn)算符與表達(dá)式請(qǐng)將下面各數(shù)用八進(jìn)制和十六進(jìn)制數(shù)表示:〔1〕10〔2〕32〔3〕75〔4〕-617〔5〕-111〔6〕2483〔7〕-28654〔8〕21003解:(1)
=(12)10
=(A)8 16(2) (32)=(40)=(20)10 8 16(3) (75)=(113)=(4B)10 8 16(4) (-617)=(176627)=(FD97)10 8 16的補(bǔ)碼=16位存儲(chǔ),模為216=65536-617的補(bǔ)碼為167〕=64919=〔176627〕=〔FD97〕(5)
8 16=(177621)=(FF91)10 8 16(6) (2483)=(4663)=(9B3)10 8 16(7) (-28654)=(110022)=(9012)10 8 16(8) (21003)=(51013)=(520B)10 8 16將以下三各整數(shù)分別賦給不同類型的變量,請(qǐng)畫出賦值后數(shù)據(jù)在內(nèi)存中的存儲(chǔ)形式。變量的類型變量的類型int型long型sort型signedchar〔8位〕unsignedint型25-232769unsignedunsignedgunsignedunsignedr注:如果沒(méi)有學(xué)過(guò)二進(jìn)制和補(bǔ)碼,此題可以不做。解:各數(shù)據(jù)在內(nèi)存中的存儲(chǔ)形式如下表所示:變量的類型25-232769int型00…00001100111110100…001〔溢出〕8位1514long型00…00001100111…111000…0100…00124311614short型100…00001100111110100…001〔溢出〕81514signed1000110011111111000000001〔溢出〕unsignednt00…00001100111…110100…00181514unsignedg00…00001100111…11000…0100…00124311614unsignedrt00…00001100111…110100…0018158unsignedr000110011111111000000001其中和32769〕。cha和unsignedchr8in或lon8位。同理,假設(shè)將lon賦給in,則截取低16位。0main(){charl’,c2’b’,c3’,c4’\10’,c5’\11’;printf("a%cb%c\tc%c\tc2,printf("\t\b%cc4,c5);}解:程序運(yùn)行的結(jié)果為:aabbccabcAN要"China〞譯成密碼,密碼規(guī)律是:用原來(lái)的字母后面第4個(gè)字母代替原來(lái)的字母。例如字"A〞后面第4個(gè)字母〞用"E〞代"A〞因此〞應(yīng)譯"Glmre〞請(qǐng)編一程序,用賦初值的方法使 c1,c2,c3,c4,c5 這 5 個(gè)變量的值分別為’C’,’h’,’i’,’n’,’a’,經(jīng)過(guò)運(yùn)算,使 c1,c2,c3,c4,c5 的值分別變?yōu)椤疓’,’l’,’m’,’r’,’e’,并輸出。解:main(){charcl=’C’,c2=’h’,c3=’i’,c4=’n’,c5=’a’;c1+=4;c2+=4;c3+=4;c4+=4;c5+=4;printf("密碼是%c%c%c%c%c\n,c1,c2,c3,c4,c5);}運(yùn)行結(jié)果:密碼是Glmre例2.6main(){intc1,c2; (原為charc1,c1=97;c2=98;printf("%c%c\n〞,c1,c2);printf("%d%d\n〞,c1,c2);}解:可以。因?yàn)樵诳奢敵龅淖址秶鷥?nèi),用整型和用字符型作用一樣。求下面算術(shù)表達(dá)式的值。(1) *+a%3*(int)(*+y)%2/4(2) (float)(a+b)/2+(int)*%(int)y設(shè)a=2,b=3,*=3.5,y=2.5解:〕2.5〕3.5寫出程序運(yùn)行的結(jié)果。main(){inti,j,m,i=8;j=10;m=++i;n=j++;printf("%d,%d,%d,%d〞,i,j,m,n);}解:運(yùn)行結(jié)果為:9,11,9,10上賦值后的數(shù)值。intcharunsignedint99‘d’7642ⅹ65535float53.65longint68解:int9910076536842-1char‘c’‘d’‘L’‘5’‘D’‘*’ⅹunsignedint991007653684265535float99.000100.0000076.00000053.6568.00000042.00000065535.0000000000longint991007653684265535出下面表達(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〕解:〔1〕24 〔〕10〔3〕60 〔〕0〔5〕0 〕0第4章最簡(jiǎn)單的C程序設(shè)計(jì)——順序程序設(shè)計(jì)4.4假設(shè)想得到以下的輸出格式和結(jié)果,請(qǐng)寫出程序〔包括定義變量類型和設(shè)計(jì)輸出要求輸出的結(jié)果如下:a=□3□□b=□4□□c=□5*=1.200000,y=2.400000,z=-3.600000*+y=□3.60□□y+z=-1.20□□z+*=-2.40u=□51247□□n=□□□128765c1=’a’□or□97(ASCII)c2=’b’□or□98(ASCII)解:main(){inta,b,c;longintu,n;float*,y,z;charc1,c2;a=3;b=4;c=5;*=1.2;y=2.4;z=-3.6;u=51247;n=128765;c1=’a’;c2=’b’;printf("\n〞);printf("a=%2d□□b=%2d□□c=%2d\n〞,a,b,c);printf("*=%.6f,y=%.6f,z=%.6f\n〞,*,y,z);printf("*+y=□%.2f□□y+z=%.2f□□z+*=%.2f\n〞,*+y,y+z,z+*);printf("u=%6ld□□n=%9ld\n〞,u,n);printf("c1=’%c’or%d(ASCII)\n〞,c1,c1);printf("c2=’%c’or%d(ASCII)\n〞,c2,c2);}4.5請(qǐng)寫出下面程序的輸出結(jié)果:main(){inta=5,b=7;float*=67.8564,y=-789.124;charc=’A’;longn=1234567;unsignedprintf("%d%d\n〞,a,b);printf("%3d%3d\n〞,a,b);printf("%f,%f\n〞,*,y);printf("%-10f,%-10f\n〞,*,y);printf("%8.2f,%8.2f,%4f,%4f,%3f,%3f\n〞,*,y,*,y,*,y);printf("%e,%10.2e\n〞,*,y);printf("%c,%d,%o,%*\n〞,c,c,c,c);printf("%ld,%lo,%*\n〞,n,n,n);printf("%u,%o,%*,%d\n〞,u,u,u,u);printf("%s,%5.3s\n〞,〞PUTER〞,〞PUTER〞);}運(yùn)行結(jié)果:5□7□□5□□767.856400,-789.12402367.856400□,-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,-1PUTER,□□可以發(fā)現(xiàn),輸出數(shù)據(jù)中假設(shè)有負(fù)號(hào)、e和小數(shù)點(diǎn),這些字符也占位。4.6用下面的scanf函數(shù)輸入數(shù)據(jù),使a=3,b=7,*=8.5,y=71.82,c1=’A’,c2=’a’。問(wèn)在鍵盤上如何輸入.*include<stdio.h>voidmain(){inta,b;float*,y;charc1,c2;scanf("a=%db=%d〞,&a,&b);scanf("%f%e〞,&*,&y);scanf("%c%c〞,&c1,&c2);}解:a=3□b=7□8.5□71.82□A□a4.7下面的scanfscanf("%5d%5d%c%c%f%f%*f,%f〞,&a,&b,&c1,&c2,&*,&y,&z);解:main(){inta,b;float*,y,z;charc1,c2;scanf("%5d%5d%c%c%f%f%*f,%f〞,&a,&b,&c1,&c2,&*,&y,&z);printf("a=%d,b=%d,c1=5c,c2=%c,*=%6.2f,y=6.2f,z=6.2f\n〞),a,b,c1,c2,*,y,z);}運(yùn)行情況如下:□□□10□□□20Aa1.5–3.75□1.5,67.8 〔此行為輸入的數(shù)據(jù),其中□為空格a=10,b=20,c1=A,c2=a,*=1.50,y=-3.75,z=67.80 〔此行為輸出〕說(shuō)明:%5d格式的要求輸入a和b時(shí),要先鍵入三個(gè)空格,然后再鍵入10與20。%*f是%*f的地方,隨意打入了一個(gè)數(shù)1.5,該值不會(huì)賦給任何變量。圓半徑r=1.5,圓柱高h(yuǎn)=3,求圓周長(zhǎng),圓面積,圓球外表積,圓球體積,圓柱體積。用scanf2位數(shù)字。請(qǐng)編程序。解:main(){floatpi,h,r,l,s,sq,vq,vz;pi=3.1415926;printf("請(qǐng)輸入圓半徑r,圓柱高h(yuǎn):\n〞);scanf("%f,%f〞,&r,&h);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;printf("圓周長(zhǎng)為: l=%6.2f\n〞,l);printf("圓面積為: s=%6.2f\n〞,s);printf("圓球外表積為: sq=%6.2f\n〞,sq);printf("圓球體積為: sv=%6.2f\n〞printf("圓柱體積為: sz=%6.2f\n〞,vz);}運(yùn)行結(jié)果:請(qǐng)輸入圓半徑r,圓柱高h(yuǎn):1.5,3↙圓周長(zhǎng)為: l=9.42圓面積為: s=7.07圓球外表積為: sq=28.27圓球體積為: sv=7.95圓柱體積為: sz=21.21輸入一個(gè)華氏溫度,要求輸出攝氏溫度,公式為C=(5/9)(F-32)輸出要有文字說(shuō)明,取2位小數(shù)。解:main(){floatc,f;printf("請(qǐng)輸入一個(gè)華氏溫度:\n〞);scanf("%f〞,&f);c=(5.0/9.0)*(f-32); /*注意5和9要用實(shí)型表示,否則5/9printf(":%5.2f\n〞,c);};運(yùn)行結(jié)果:請(qǐng)輸入一個(gè)華氏溫度:78↙攝氏溫度為:25.56第5章選擇構(gòu)造程序設(shè)計(jì)解:設(shè)有一個(gè)邏輯表達(dá)式,假設(shè)其結(jié)果為"真〞,則以1表示;假設(shè)其結(jié)果為"假〞,則以0表示。但是判斷一個(gè)邏輯量的值時(shí),以0代表"真〞,以非0代表"假〞。例如3&&5的值為"真〞,系統(tǒng)會(huì)給出3&&5的值為1。寫出下面各邏輯表達(dá)式的值。設(shè)a=3,b=4,c=5。〔1〕a+b>c&&b==c〔2〕a||b+c&&b-c〔3〕!(a>b)&&!c||1〔4〕!(*=a)&&(y=b)&&0〔5〕!(a+b)+c-1&&b+c/2解:〕0〕1〕1〕0〕1有3個(gè)整數(shù)a,b,c,解:方法一:程序如下:main(){inta,b,c;printf("請(qǐng)輸入3個(gè)整數(shù):〞);scanf("%d,%d,%d〞,&a,&b,&c);if(a<b)if(b<c)printf("ma*=%d\n〞,c);elseprintf("ma*=%d\n〞,b);elseif(a<c)printf("ma*=%d\n〞,c);else}
printf("ma*=%d\n〞,a);運(yùn)行結(jié)果:請(qǐng)輸入3個(gè)整數(shù):12,34,9↙ma*=34main(){inta,b,c,temp,ma*;printf("請(qǐng)輸入3個(gè)整數(shù):〞);scanf("%d,%d,%d〞,&a,&b,&c);temp=(a>b)"a:b; /*將a和b中的大者存入temp中*/ma*=(temp>c)"temp:c; /*將a和b中的大者與c比較,取最大者printf("3個(gè)整數(shù)中最大數(shù)%d\n〞,ma*);}方法三: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。寫一程序,輸入*值,輸出y值。解:程序如下main(){int*,y;printf("輸入*:〞);scanf("%d〞,&*);if(*<1) /* *<1 */{y=*;printf("*=%d3d, y=*=%d\n〞,*,y);}elseif(*<10) /* 1≤*<10 */{y=2**-1;printf("*=%3d, y=2**-1=%d\n〞,*,y);}else /* *≥10 */{y=3**-11;printf("*=%3d, y=3**-11=%d\n〞,*,y);}}運(yùn)行結(jié)果:① 輸入*:4↙*=4, y=2**-1=7② 輸入*:-1↙*=-1, y=*=-1③ 輸入*:20↙*=20, y=3**-11=4990分以上解:程序如下*include"stdio.h"voidmain(){floatscore;chargrade;printf("請(qǐng)輸入學(xué)生成績(jī):");scanf("%f",&score);while(score>100||score<0){printf("\n輸入有誤,請(qǐng)重輸");scanf("%f",&score);}switch((int)(score/10)){case10:case9:grade='A';break;case8:grade='B';break;case7:grade='C';break;case6:grade='D';break;case5:case4:case3:case2:case1:case0:grade='E';}printf("\n成績(jī)是%5.1f,相應(yīng)的等級(jí)是%c。\n",score,grade);}給定一個(gè)不多于5按逆序打印出各位數(shù)字。例如原數(shù)為321。解:main(){longintnum;intindiv,ten,hundred,thousand,ten_thousand,place;/*printf("請(qǐng)輸入一個(gè)整數(shù)〔0~99999:〞);scanf("%ld〞,&num);if(num>9999)place=5;elseif(num>999)place=4;elseif(num>99)place=3;elseifplace=2;elseplace=1;printf("place=%d\n〞,place);printf("每位數(shù)字為:〞);ten_thousand=num/10000;thousand=(int)(num-ten_thousand*10000)/1000;hundred=(int)(num-ten_thousand*10000-thousand*1000)/100;ten=(int)(num-ten_thousand*10000-thousand*1000-hundred*100)/10;indiv=(int)(num-ten_thousand*10000-thousand*1000-hundred*100-ten*10);switch(place){case5:printf("%d,%d,%d,%d,%d〞,ten_thousand,thousand,hundred,ten,indiv);printf("\nprintf("%d%d%d%d%d\n〞,indiv,ten,hundred,thousand,ten_thousand);break;case4:printf("%d,%d,%d,%d〞,thousand,hundred,ten,indiv);printf("\n反序數(shù)字為:〞);printf("%d%d%d%d\n〞,indiv,ten,hundred,thousand);break;case3:printf("%d,%d,%d〞,hundred,ten,indiv);printf("\n,indiv,ten,hundred);break;case2:printf("%d,%d〞,ten,indiv);printf("\n,indiv,ten);break;case1:printf("%d〞,indiv);printf("\nprintf("%d\n〞,indiv);break;}}運(yùn)行結(jié)果:請(qǐng)輸入一個(gè)整數(shù)〔0~99999位數(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)金可提1010萬(wàn)元,低于20萬(wàn)元〔100000<I≤200000〕時(shí),其中10萬(wàn)元按10%提成,高于10萬(wàn)元的局部,可提成7.5%;200000<I≤400000時(shí),其中20萬(wàn)元仍按上述方法提成〔下同萬(wàn)元的局部按時(shí),高于40萬(wàn)元的局部按≤1000000時(shí),高于60萬(wàn)的局部按1.5%提成;I>1000000時(shí),超過(guò)100萬(wàn)的局部按1%提成。從鍵盤輸入當(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%提成。用ifmain(){longi;floatbonus,bon1,bon2,bon4,bon6,bon10;bon1=100000*0.1; /*利潤(rùn)為10萬(wàn)元時(shí)的獎(jiǎng)*/bon2=bon1+100000*0.075 /*利潤(rùn)為20萬(wàn)元時(shí)的獎(jiǎng)*/bon4=bon2+100000*0.05 /*利潤(rùn)為40萬(wàn)元時(shí)的獎(jiǎng)金bon6=bon4+100000*0.03 /*利潤(rùn)為60萬(wàn)元時(shí)的獎(jiǎng)金*/bon10=bon6+400000*0.015; /*利潤(rùn)為100萬(wàn)元時(shí)的獎(jiǎng)printf("請(qǐng)輸入利潤(rùn)i:);scanf("%ld〞,&i);if(i<=100000)bonus=i*0.1; /*利潤(rùn)在10萬(wàn)元以內(nèi)按0.1提成獎(jiǎng)金elseif(i<=200000)bonus=bon1+(i-100000)*0.075 /*利潤(rùn)在10萬(wàn)至20elseif(i<=400000)bonus=bon2+(i-200000)*0.05 /*利潤(rùn)在20萬(wàn)至40elseif(i<=600000)bonus=bon4+(i-400000)*0.03 /*利潤(rùn)在40萬(wàn)元至60萬(wàn)元時(shí)的獎(jiǎng)金elseif(i<=1000000)bonus=bon6+(i-600000)*0.015/*利潤(rùn)在60萬(wàn)元至100萬(wàn)元時(shí)的獎(jiǎng)金*/elsebonus=bon10+(i-1000000)*0.01 /*利潤(rùn)在100萬(wàn)元以上時(shí)的獎(jiǎng)金printf("獎(jiǎng)金是%10.2f〞,bonus);}運(yùn)行結(jié)果:請(qǐng)輸入利潤(rùn)i:234000↙獎(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;case1:bonus=bon1+(i-100000)*0.075;case2:case3:bonus=bon2+(i-200000)*0.05;case4:case5:bonus=bon4+(i-400000)*0.03;case6:case7:case8:case9:bonus=bon6+(i-600000)*0.015;break;case10:bonus=bon10+(i-1000000)*0.01;}printf("獎(jiǎng)金是%10.2f〞,bonus);}運(yùn)行結(jié)果:請(qǐng)輸入利潤(rùn)i:234000↙獎(jiǎng)金是:19200.00輸入4解:程序如下*include"stdio.h"voidmain(){intt,a,b,c,d;printf("請(qǐng)輸入4個(gè)整數(shù):");scanf("%d,%d,%d,%d",&a,&b,&c,&d);printf("a=%d,b=%d,c=%d,d=%d",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é)果如下printf("%d %d %d }有4。見(jiàn)圖4.4。這4個(gè)塔的高度分別為10m0解:程序如下main(){inth=10;float*1=2,y1=2,*2=-2,y2=2,*3=-2,y3=-2,*4=2,y4=-2,*,y,d1,d2,d3,d4;printf("請(qǐng)輸入一個(gè)點(diǎn)(*,y):〞);scanf("%f,%f〞,&*,&y); /*求該點(diǎn)到各中心點(diǎn)的距d1=(*-*1)*(*-*1)+(y-y1)*(y-y1);d2=(*-*2)*(*-*2)+(y+y2)*(y+y2;d3=(*+*3)*(*+*3)+(y-y3)*(y-y3);d4=(*+*4)*(*+*4)+(y+y4)*(y+y4);if(d1>1&&d2>1&&d3>1&&d4>1)h=0; /*printf("該點(diǎn)高度為〞,h);}運(yùn)行情況:請(qǐng)輸入一個(gè)點(diǎn)該點(diǎn)高度為0請(qǐng)輸入一個(gè)點(diǎn)該點(diǎn)高度為10第6章循環(huán)控制輸入兩個(gè)正整數(shù)m和n解:用輾轉(zhuǎn)相除法求最大公約數(shù)main(){intp,r,n,m,temp;printf("請(qǐng)輸入兩個(gè)正整數(shù)n,m:〞);scanf("%d,%d〞,&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*/{r=n%m;n=m;m=r;}printf("它們的最大公約數(shù)為:%d\n〞,n);printf("它們的最小公倍數(shù)為:%d\n〞,p/n); /*p是原來(lái)兩個(gè)整數(shù)的乘*/}運(yùn)行情況:請(qǐng)輸入兩個(gè)正整數(shù)它們的最大公約數(shù)為:4:24解:*include<stdio.h>main(){charc;intletter=0,space=0,digit=0,other=0;printf("請(qǐng)輸入一行字符:\n〞);while((c=getchar())!=’\n’){if(c>=’a’&&c<=’z’||c>=’A’&&c<=’Z’)letter++;elseifspace++;elseif(c>=’0’&&digit++;else}
other++;printf("字母數(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=5n由鍵盤輸入。解:main(){inta,n,i=1,sn=0,tn=0;printf("a,n=:〞);scanf("%d,%d〞,&a,&n);while(i<=n){tn=tn+a; /*賦值后的tn為i個(gè)a*/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+…=246906.4求∑n!〔即求1+2!+…+20解:main(){floats=0,t=1;intn;for(n=1;n<=20;n++){t=t*n; /*求n!*/s=s+t; /**/}printf("1!+2!+…+20!=%e\n〞,s);}運(yùn)行結(jié)果:1!+2!+…+20!=2.56133e+18注意:s不能定義為int型,因?yàn)閕nt型數(shù)據(jù)的范圍是-32768~32767;也不能定義為long型,因?yàn)閘ong型數(shù)據(jù)的范圍為-21億~21億,無(wú)法容納求得的結(jié)果。解:*include"stdio.h"*include"conio.h"main(){intn1=100,n2=50,n3=10,k;floats1=0,s2=0,s3=0;for(k=1;k<=n1;k++)s1+=k;for(k=1;k<=n2;k++)s2+=k*k;for(k=1;k<=n3;k++)s3+=1.0/k;printf("sum=%8.2f\n",s1+s2+s3);getch();}所謂"水仙花數(shù)〞是指一個(gè)3位數(shù),其各位數(shù)字的立方和等于該數(shù)本身。例如,153是一個(gè)"水仙花數(shù)〞,因?yàn)?53=13+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("%4d〞,n);}printf("\n〞);}運(yùn)行結(jié)果:"水仙花數(shù)"是:1533703714076的因子為1,2,3,而6=1+2+3,因此6是"完數(shù)〞。編程序找出1000出其因子:6Itsfactorsare1,2,3解:方法一:*defineM1000 /*定義尋找范圍*/main(){intk1,k2,k3,k4,k5,k6,k7,k8,k9,k10;inti,a,n,s;for(a=2;a<=M;a++) /*a是2~1000*/{n=0; /*nas=a; /*s用來(lái)存放尚未求出的因子之和,開場(chǎng)時(shí)等于a*/for(i=1;i<a;i++) /*檢查i是否a*/if(a%i==0) /*如果i是a*/{n++; /*n1*/s=s-I; /*s減去已找到的因子,s的新值是尚未求出的因子之和switch(n) /*將找到的因子賦給k1…k10*/{case1:k1=i;break; /*找出的第1個(gè)因子賦給case2:k2=i;break; /*找出的第2個(gè)因子賦給case3:k3=i;break; /*找出的第3個(gè)因子賦給case4:k4=i;break; /*找出的第4個(gè)因子賦給case5:k5=i;break; /*找出的第5個(gè)因子賦給case6:k6=i;break; /*找出的第6個(gè)因子賦給case7:k7=i;break; /*找出的第7個(gè)因子賦給case8:k8=i;break; /*找出的第8個(gè)因子賦給case9:k9=i;break; /*找出的第9個(gè)因子賦給case10:k10=i;break; /*10個(gè)因子賦給k10*/}}if(s==0) *s=0*/{printf("%dItsfactorsare〞,a);if(n>1)printf("%d,%d〞,k1,k2);/*n>1表示a至少有2個(gè)因子*/if(n>2)printf(",%d〞,k3);/*n>2表示至少有3個(gè)因子,故應(yīng)再輸入一個(gè)因子*/if(n>3)printf(",%d〞,k4);/*以下類似*/ifif(n>5)if(n>6)if(n>7)if(n>8)if(n>9)〞,k5);〞,k6);〞,k7);〞,k8);〞,k9);printf(",%d〞,k10);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=1;i<m;i++)if((m%i)==0)s=s+i;if(s==m){printf("%d是一個(gè)"完數(shù)〞。它的因子是〞,m);for(i=1;i<m;i++)if(m%I==0)printf("%d〞,I);printf("\n〞);}}}方法三:此題用數(shù)組方法更簡(jiǎn)單。main(){intk[11];inti,a,n,s;for(a=2;a<=1000;a++){n=0;s=a;for(i=1;i<a;i++)if((a%i)==0){n++;s=s-i;k[n]=i; /*將找到的因子賦給k[1],…,k[10]*/}if(s==0){printf("\n%d是一個(gè)"完數(shù)〞,它的因子是:〞,a);for(i=1;i<n;i++),k[i]);〞,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=1,s=0;for(i=1;i<=n;i++){s=s+a/b;t=a;a=a+b; /**/b=t; /**/}printf("sum=%9.6f\n〞,s);}運(yùn)行結(jié)果:sum=32.660259一球從10010次落地時(shí),共經(jīng)過(guò)多少m10*include"stdio.h"voidmain(){floatsn=100,hn=sn/2;intn;for(n=2;n<=10;n++){sn=sn+2*hn;第n次落地時(shí)共經(jīng)過(guò)的米hn=hn/2; /*第n次反彈高*/}printf("第10次落地時(shí)共經(jīng)過(guò)%f米。\n",sn);printf("第10次反彈%f米。\n",hn);}10天早上再想吃時(shí),見(jiàn)只剩一個(gè)桃子了。求第一天共摘多少桃子。解:main(){intday,*1,*2;day=9;*2=1;while(day>0){*1=(*2+1)*2; /*1后的2倍*/*2=*1;day--;}printf("total=%d\n〞,*1);}運(yùn)行結(jié)果:total=1534用迭代法求a1a*= 。求平方根的迭代公式* =n+1
an(x)+xnn*的差的絕對(duì)值小于10-5解:用迭代法求平方根的算法如下:**;0**;1*1
代入上述公式,求出*的下一個(gè)值*;2nx和*n+1〕滿足以下關(guān)系:n|<10|* ―x n+1 n|<10為了便于程序處理,今只用變量*和*,先令*的初值*=a/2〔也可以是另外的值〕,求0 1 0出*如果此|* ―x則*→*然后用這個(gè)新*求出下一*如此反復(fù),1 n+1 n 1 0 0 1直到|*n+1―xn|<10-5為止。 程序如下:#include<math.h>main(){floata,*0,*1;printf("Enterapositivenumber:〞);scanf("%f〞,&a); /*輸入a的值*/*0=a/2;*1=(*0+a/*0)/2;do{*0=*1;*1=(*0+a/*0)/2;}while(fabs(*0-*1)>=1e-5);printf("Thesquarerootof%5.2fis%8.5f\n〞,a,*1);}運(yùn)行結(jié)果:EnterapositiveThesquarerootof2.00is1.414216.12用牛頓迭代法求方程2*3-4*2+3*-6=0在1.5附近的根。值**求出f(*),過(guò)(*,f(*))點(diǎn)做f(***,把它作為第0 0 0 0 0 1二次近似根,再由*求出f(*),再過(guò)(*,f(*))點(diǎn)做f(*)的切線,交*軸于*,再求出f(*),再作1 1 1 1 2 2切線……如此繼續(xù)下去,直到足夠接近真正的**為止。這就是牛頓迭代公式。此題中,f(*)=2*3-4*2+3*-6=((2*-4)*+3)*-6f’(*)=6*2-8*+3=(6*-8)+3*include"stdio.h"*include"math.h"voidmain(){float*1,*0,f,f1;*1=1.5;do{*0=*1;f=((2**0-4)**0+3)**0-6;f1=(6**0-8)**0+3;*1=*0-f/f1;}while(fabs(*1-*0)>=1e-5);printf("THerootofequationis%5.2f\n",*1);}6.13用二分法求方程2*3-4*2+3*-6=0在〔-10,10〕之間的根。[*,*],如果函數(shù)f(*)在此區(qū)間是單調(diào)變化,可以根1 2據(jù)f(*)和f(*)是否同符號(hào)來(lái)確定方程f(*)=0在[*,*]區(qū)間是否有一個(gè)實(shí)根。假設(shè)f(*)和f(*)不1 2 1 2 1 2同符號(hào),則f(*)=0在[*,*]區(qū)間必有一個(gè)〔且只有一個(gè)〕實(shí)根。假設(shè)f(*)和f(*)同符號(hào),說(shuō)明1 2 1 2在[*,*]區(qū)間無(wú)實(shí)根,要重新改變*和*的值。當(dāng)確定[*,*]有一個(gè)實(shí)根,采用二分法將[*,*]1 2 1 2 1 2 1 2算法N-S輸入輸入*1和*2的值f*1=f(*1),f*2=f(*2)直到f*1和f*2不同符號(hào)*0=(*1+*2)/2f*0=f(*0)Tf*1和f*0不同符號(hào)F*2=*0f*2=f*0*1=*0f*1=f*0直到|f*0|<10-5輸出*0*include"stdio.h"*include"math.h"voidmain(){float*0,*1,*2,f*0,f*1,f*2;do{printf("Pleaseenter*1,*2:");scanf("%f,%f",&*1,&*2);f*1=*1*((2**1-4)**1+3)-6;f*2=*2*((2**2-4)**2+3)-6;}while(f*1*f*2>0);do{*0=(*1+*2)/2;f*0=*0*((2**0-4)**0+3)-6;if(f*0*f*1<0){*1=*0;
}else{}
*2=*0;f*2=f*0;f*1=f*0;}while(fabs(f*0)>=1e-5);printf("*=%6.2f\n",*0);}打印出以以下列圖案:解:main(){intI,j,k;for(i=0;i<=3;i++) /*4*號(hào)*/{for(j=0;j<=2-i;j++)printf("〞); /*輸號(hào)前面的空f(shuō)or(k=0;k<=2*i;k++)printf("*〞); /*輸*/printf("\n〞); /*輸出完一*號(hào)后換*/}for(i=0;i<=2;i++) /*3號(hào)*/{for(j=0;j<=i;j++)printf); 輸*號(hào)前面的空f(shuō)or(k=0;k<=4-2*i;k++)printf("*〞); /*輸**/printf("\n〞); /*輸出完一*后換*/}}運(yùn)行結(jié)果: *************************兩個(gè)乒乓球隊(duì)進(jìn)展比賽,各出3人。甲隊(duì)為A、BC3人,乙隊(duì)為*、Z3人。已抽A說(shuō)他不和*比,C說(shuō)他不和*、Z比。請(qǐng)編程找出3對(duì)賽手的。開場(chǎng)時(shí),并不知道C與Z中哪一個(gè)比賽,可以假設(shè)A與i比賽,與j比賽,C與k*include"stdio.h"voidmain(){chari,j,k;/*i是A的對(duì)手,j是B的對(duì)手,k是C的對(duì)手*/for(i='*';i<='Z';i++)for(j='*';j<='Z';j++)if(i!=j)for(k='*';k<='Z';k++)if(i!=k&&j!=k)if(i!='*'&&k!='*'&&k!='Z')printf("A--%c\tB--%c\tC--%c\n",i,j,k);}第7章數(shù)組100解:所謂"篩法〞指的是"Eratosthenes篩法〞。Eratosthenes是古希臘的著名數(shù)學(xué)家。他采用的方法是:在一*紙上寫下1~1000之間的全部整數(shù),然后逐個(gè)判斷它們是否素?cái)?shù),找出一個(gè)非素?cái)?shù)就把它挖掉,最后剩下的就是素?cái)?shù)。1234567891011121314151617181920212223242526272830323334353629 31 3738394041424344454647484950…28303233343536具體做法如下:先將11用2去除它后面的各個(gè)數(shù),把能被2整除的數(shù)〔如…〕挖掉,即把2的倍數(shù)挖掉。用33的倍數(shù)挖掉。50分別用面的數(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)展50n到除數(shù)為n
〔取其整數(shù)〕即可。例如對(duì)1~50,只需進(jìn)展到將7〔即
的整數(shù)局部〕作為除數(shù)即可。上面的算法可表示為:挖去用剛剛被挖去的數(shù)的下一個(gè)數(shù)p去除p后面的各數(shù),把p的倍數(shù)挖掉;n檢查p是否小于 的整數(shù)局部〔如果n=1000,則檢查p<31否,如果是,則返回n〔2〕繼續(xù)執(zhí)行,否則就完畢;紙上剩下的就是素?cái)?shù)。一個(gè)數(shù)pa[1]到a[100]的值分別是1,2,3,…100認(rèn)為是非素?cái)?shù),就將它的值變?yōu)榱?,最后將不為零的?shù)組元素輸出,就是所求的素?cái)?shù)表。程序如下:*include<math.h>main(){inti,j,n,a[101];for(i=1;i<=100;i++)a[i]=i;for(i=2;i<sqrt(100);i++)for(j=i+1;j<=100;j++){if(a[i]!=0&&a[j]!=0)if(a[j]%a[i]==0)a[j]=0; } /**/printf("\n〞);for(i=2,n=0;i<=100;i++){if(a[i]!=0){printf("%5d〞,a[i]);n++;}if(n==10) /*此處if10*/{printf("\n〞);n=0;}}}運(yùn)行結(jié)果:2 35 71113171923 293137414347 596167717379 838997用選擇法對(duì)10個(gè)整數(shù)排序〔從小到大解:選擇排序的思路如下:設(shè)有10個(gè)元素a[1]~a[10],將a[1]與a[2]~a[10]比較,假設(shè)a[1]比a[2]~a[10]都小,則不進(jìn)展交換,即無(wú)任何操作。假設(shè)a[2]~a[10]中有一個(gè)以上比a[1為a[i]〕與a[1]交換,此時(shí)a[1]中存放了10個(gè)中最小的數(shù)。第二輪將a[2]與a[3]~a[10]比較,將剩下9個(gè)數(shù)中的最小者a[i]與a[2]對(duì)換,此時(shí)a[2]中存放的是10個(gè)中第2小的數(shù)。依此類推,共進(jìn)展9]到a[10]就已按由小到大的順序存放。程序如下:main(){inti,j,min,a[11];printf("Enterdata:\n〞);for(i=1;i<=10;i++){printf("a[%d]=〞,i);scanf("%d〞,&a[i]); /*輸入10個(gè)數(shù)*/}printf("\n〞);for(i=1;i<=10;i++)pritnf("%5d〞,a[i]); /*輸出這10個(gè)數(shù)printf("\n〞);for(i=1;i<=9;i++) /*8行是對(duì)10個(gè)數(shù)排序*/{min=i;for(j=i+1;j<=10;j++)if(a[min]>a[j]) min=j;a[0]=a[i]; /*以下3行將a[i+1]~a[10]中最小者與a[i]對(duì)換a[i]=a[min];a[min]=a[0];}printf("\nThesortednumbers:\n〞);for(i=1;i<=10;i++) /*輸出已牌好序的10個(gè)數(shù)printf("%5d〞,a[i]);}運(yùn)行結(jié)果:Enterdata:a[1]=6↙a[2]=90↙a[3]=45↙a[4]=56↙a[5]=1↙a[6]=15↙a[7]=44↙a[8]=78↙a[9]=58↙a[10]=101↙6 90 45 56 1 15 44 78 58 101Thesortednumber:1 6 15 44 45 56 58 78 90 101說(shuō)明:定義a數(shù)組有11個(gè)元素:a[0]~a[10],但實(shí)際上只對(duì)a[1]~a[10]這10個(gè)元素輸入值并排序,這樣符合人們的習(xí)慣。a[0]用作兩數(shù)交換時(shí)的中間變量。求一個(gè)3×3解:main(){inta[3][3],sum=0;inti,j;printf("Enterdata:\n〞);for(i=0;i<3;i++)for(j=0;j<3;j++)scanf("%d〞,&a[i][j]);for(i=0;i<3;i++)sum=sum+a[i][i];printf("sum=%5d\n〞,sum);}運(yùn)行情況如下:Enterdata:1 2 3 4 5 6 7 8 9↙sum=15此程序中用的是整型數(shù)組,運(yùn)行結(jié)果是正確的。如果用的是實(shí)型數(shù)組,程序應(yīng)修改為:main(){floata[3][3],sum=0;inti,j;printf("Enterdata:\n〞);for(i=0;i<3;i++)for(j=0;j<3;j++)scanf("〞,&a[i][j]); /*注意:在%f前有一空格,否則無(wú)法輸入數(shù)for(i=0;i<3;i++)sum=sum+a[i][i];printf("sum=%6.2f\n〞,sum);}該程序在TurboC3.0下可正常運(yùn)行,得到結(jié)果:sum=16.50但在TurboC2.0scanf:floatingpointfomatsnotlinkedAbnormalprogramtermination經(jīng)過(guò)檢查,程序的邏輯和語(yǔ)法都是正確的,而且在其它的C系統(tǒng)中〔例如Borland以正常運(yùn)行。出現(xiàn)這種情況是所用的C編譯系統(tǒng)不完善,處理的方法有兩個(gè):一是把程序移到其它CC5~7行改為:for(i=0;i<3;j++)scanf(" %f %f 〞,&a[i][0],&[i][1],&a[i][2]);它在效果上應(yīng)與原來(lái)的第5~7行等價(jià),但上機(jī)運(yùn)行時(shí)發(fā)現(xiàn)仍不能正常運(yùn)行,再改為:for(j=0;j<3;j++)scanf(" %f %f 〞,&a[0][j],&[1][j],&a[2][j]);它也是與原來(lái)的5~7行等價(jià)的,上機(jī)運(yùn)行時(shí)發(fā)現(xiàn)可以正常運(yùn)行。程序如下:main(){floata[3][3],sum=0;inti,j;printf("Enterdata:\nfor(j=0;j<3;j++)scanf("%f %f for(i=0;i<3;i++)sum=sum+a[i][i];printf("sum=%6.2f\n〞,sum);}運(yùn)行情況如下:Enterdata:1.1 2.2 3.3 4.4 5.5 6.6 7.7 8.8 9.9↙應(yīng)注意數(shù)據(jù)與元素的對(duì)應(yīng)關(guān)系1.1是a[0][02.2是a[1][03.3是a[2][0解:程序如下:main(){inta[11]={1,4,6,9,13,16,19,28,40,100};注意數(shù)組ainttemp1,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);end=a[9];if(number>end)a[10]=number;else{for(i=0;i<10;i++){if(a[i]>number) /*找到適宜的插入位置為i*/{temp1=a[i];a[i]=number;for(j=i+1;j<11;j++) /*將原來(lái)的第i個(gè)元素移至第i+1*/{temp2=a[j];a[j]=temp1;temp1=temp2;}break;}}}printf("Now,arrayfor(i=0;i<11;i++)printf("%6d〞,a[i]);}運(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[11]={1,4,6,9,13,16,19,28,40,100};inttemp1,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ù)開場(chǎng)比較,凡大于number的數(shù)*/a[i+1]=a[i];a[i+1]=number; /*將number插入到適宜位置for(i=0;i<11;i++)printf("%5d",a[i]);printf("\n");}。要求改為:1,4,5,6,8解:程序如下:*defineN5main(){inta[N],i,temp;printf("Enterarraya:\n〞);for(i=0;i<N;i++)scanf("%d〞,&a[i]);printf("arraya:\n〞);for(i=0;i<N;i++)printf("%4d〞,a[i]);for(i=0;i<N/2;i++){temp=a[i];a[i]=a[N-i-1];a[N-i-1]=temp;}printf("\nNow,arrayfor(i=0;i<N;i++)printf("%4d〞,a[i]);printf("\n〞);}運(yùn)行情況如下:Enterarraya:8 6 5 4 1↙arraya:8 6 5 4 1Now,arraya:1 4 5 6 8程序中第二個(gè)for循環(huán)也可以寫成:for(i=0,j=N-1;i<j;i++,j--){temp=a[i];a[i]=a[j];a[j]=temp;}打印出以下的楊輝三角形〔要求打印出10111121133 1146 41┇┇┇┇解:楊輝三角形是〔a+b〕n展開后各項(xiàng)的系數(shù)。例如:(a+b)0展開后為1 系數(shù)為1(a+b)1展開后為a+b 系數(shù)為1,1(a+b)2展開后為a2+2ab+b2 系數(shù)為1,2,1(a+b)3展開后為a3+3a2b+3ab2+b3 系數(shù)為1,3,3,1(a+b)4展開后為a4+4a3b+6a2b2+4ab3+b4 系數(shù)為1,4,6,4,1以上就是楊輝三角形的前5行。楊輝三角形各行的系數(shù)有以下規(guī)律。1。從第3行起,除上面指出的第一個(gè)數(shù)和最后一個(gè)數(shù)外,其余各數(shù)是上一行同列和前一列24行第2個(gè)數(shù)〔3〕是第3行第2個(gè)數(shù)〔2〕和第3行第1個(gè)數(shù)〔〕之和??梢赃@樣表示:a[i][j]=a[i-1][j]+a[i-1][j-1],其中i為行數(shù),*defineN11main(){inti,j,a[N][N];for{a[i][i]=1;a[i][1]=1;}for(i=3;i<N;i++)for(j=2;j<=i-1;j++)a[i][j]=a[i-1][j-1]+a[i-1][j];for(i=1;i<N;i++){for(j=1;j<=i;j++)printf("%6d〞,a[i][j]);printf("\n〞);}printf("\n〞);}運(yùn)行結(jié)果:11112113311464115101051161520156117213535217118285670562881193684126126843691輸出魔方陣。所謂魔方陣是指這樣的方陣〔方陣的階數(shù)應(yīng)為奇數(shù)和對(duì)角線之和均相等。8 1 6 例如,三階魔方陣為3 5 4 9 2要求輸出由1~n2之間的自然數(shù)構(gòu)成的魔方陣。解:魔方陣中各數(shù)的排列規(guī)律如下:將1放在第一行中間一列。從2開場(chǎng)直到n×n減11在4如果上一個(gè)數(shù)的行數(shù)為,則下一個(gè)數(shù)的行數(shù)為1在第1223列。當(dāng)上一個(gè)數(shù)的列數(shù)為n時(shí),下一個(gè)數(shù)的列數(shù)應(yīng)為,行數(shù)同樣減。例如2在第3行最32行第11行第n應(yīng)該放在第1行第2列,但該位置已經(jīng)被14就放在3的下面。由于6是第1行第37放在6的下面。按此方法可以得到任何的魔方陣。voidmain(){inta[16][16],i,j,k,p,n;p=1;while(p==1){printf("Entern(n=1to15):");scanf("%d",&n);if(n!=0&&n<=15&&n%2!=0) /*要求階數(shù)為1至15之間的奇數(shù)p=0;}/*初始化,第0行和第0列不用,與魔方陣構(gòu)造規(guī)則一致*/for(i=1;i<=n;i++)for(j=1;j<=n;j++)a[i][j]=0;j=n/2+1;a[1][j]=1;for(k=2;k<=n*n;k++){i--;j++;if(i<1&&j>n){j--;}else{}
i+=2;if(i<1)i=n;if(j>n)j=1;if(a[i][j]==0)a[i][j]=k;else{}}
i+=2;j--;a[i][j]=k;/**/for(i=1;i<=n;i++){for(j=1;j<=n;j++)printf("%7d",a[i][j]);printf("\n");}system("pause");}沒(méi)有鞍點(diǎn)。解:程序如下:defineN10defineMmain(){inti,j,k,m,n,flag1,flag2,a[N][M],ma*,ma*i,ma*j;printf("\n輸入行數(shù)n:〞);scanf("%d〞,&n);printf("\n輸入列數(shù)m:〞);scanf("%d〞,&m);for(i=0;i<n;i++){printf("第%d行"\n〞,i);for(j=0;j<m;j++)scanf("%d〞,&a[i][j]);}for(i=0;i<n;i++){for(j=0;j<m;j++)printf("%5d〞,a[i][j]);printf("\n〞);}flag2=0;for(i=0;i<n;i++){ma*=a[i][0];for(j=0;j<m;j++)if(a[i][j]>ma*){ma*=a[i][j];ma*j=j;}for(k=0,flag1=1;k<n&&flag1;k++)if(ma*>a[k][ma*j])flag=0;if(flag1)}if(!flag2)
{printf("\n第%d行,第%d列的%d是鞍點(diǎn)\n〞,i,ma*j,ma*);flag2=1;}printf("\n矩陣中無(wú)鞍點(diǎn)!\n〞);}運(yùn)行結(jié)果:① 輸入行數(shù)輸入列數(shù)m:4↙第0行.1234↙第1行.4556↙第2行.3567↙123445363567第0行,第3列的4是鞍點(diǎn)② 輸入行數(shù)輸入列數(shù)m:4↙第0行.2490第1行.3458↙第2行.9123↙2490734589123矩陣中無(wú)鞍點(diǎn)!有15解:折半查找是一種效率較高的查找方法但前提是待查找的序列必須有序其思路是假定待查找序列按從大到小排列設(shè)變量low指向待查找區(qū)間的下〔一開場(chǎng)時(shí)指向第一個(gè)元素變量 high 指向待查找區(qū)間的上限〔一開場(chǎng)時(shí)指向最后一個(gè)元素,令變量midlowhighmid2 小于,由于待查找序列按從大到小排列,可以斷定待查找元素只可能在mid+1~high區(qū)間,令low=mid+1則令high=mid-1。如此反復(fù)進(jìn)展,如果出現(xiàn)low>high,則表示查找失敗,即序列中不存在待查找元素。下面的程序演示了隨機(jī)產(chǎn)生N-1個(gè)0~99[1]~[N-11個(gè)元素存放位置是[1*defineN16voidmain(){intarray[N],i,j,number,low,high,mid;charch;printf("Theoriginalarrayis:");for(i=1;i<N;i++){array[i]=rand()%100; /*產(chǎn)生并顯示N-1個(gè)0~99[1]~[N-1*/printf("%3d",array[i]);}printf("\n");/*冒泡法排序*/for(i=1;i<N;i++)for(j=1;j<N-i;j++)if(array[j]<array[j+1]){array[0]=array[j];array[j]=array[j+1];array[j+1]=array[0];}/*顯示排序后的數(shù)列*/printf("Thesortedarrayis:");for(i=1;i<N;i++)printf("%3d",array[i]);printf("\n");/*折半查找,可進(jìn)展屢次*/while(1){printf("\nPleaseinputthenumberwhichyouwanttolookfor:");scanf("%d",&number);low=1;high=N-1;while(low<=high){mid=(low+high)/2;if(array[mid]==number){printf("%dhasbeenfoundatposition%d.\n",number,mid);break;}elseif(number<array[mid])low=mid+1;else}
high=mid-1;if(low>high)printf("Cannotfind%d.\n",number);printf("Doyouwanttofindanothernumber"(Y/y):");scanf("%c",&ch); /*注意%c*/if(ch!='Y'&&ch!='y')break;}}有一篇文章,共有3行文字,每行有80小寫字母,數(shù)字,空格以及其它字符的個(gè)數(shù)。解:程序如下:main(){intI,j,upp,low,dig,spa,oth;charte*t[3][80];upp=low=dig=spa=oth=0;for(i=0;i<3;i++){printf("\nPleaseinputline〞,i+1);gets(te*t[i]);for(j=0;j<80&&te*t[i][j]!=’\0’;j++){ifte*t[i][j]>=’A’&&te*t[i][j]<=’Z’}upp++;elseif(te*t[i][j]>=’a’&&te*t[i][j]<=’z’)low++;elseif(te*t[i][j]>=’0’&&te*t[i][j]<=’9’)dig++;elseifspa++;elseoth++;}}for(i=0;i<3;i++)printf("%s\n〞,te*t[i]);printf("uppercase:%d\n〞printf("lowercase:%d\n〞,low);printf("digit:%d\n〞,dig);printf("space:%d\n〞,spa);printf("other:%d\n〞,oth);}運(yùn)行情況如下:Pleaseinputline1:Iamastudent.↙Pleaseinputline123456↙Pleaseinputline3:ASDFG↙uppercase:6lowerdigit:6space:3other:1說(shuō)明:數(shù)組te*t的行號(hào)為0~2,但在提示用戶輸入各行數(shù)據(jù)時(shí),要求用戶輸入第1行,第2行,第3行,而不是第0行,第1行,第2行,這完全是照顧人們的習(xí)慣。為此,在程序第6行輸出行數(shù)時(shí)用i+1,而不用i。這樣并不影響程序?qū)?shù)組的處理,程序其它地方數(shù)組的第1個(gè)下標(biāo)值仍然是0~2。打印以以下列圖案:*************************解:程序如下:main(){chara[5]={‘*’,‘*’,‘*’,‘*’,‘*’};inti,j,k;charspace=’’;for(i=0;i<5;i++) /*5行*/{printf("\n〞); /*輸出每行前先換*/printf("); /*每行前面留4個(gè)空格for(j=1;j<=i;j++)printf("%c〞,space); /*每行再留1個(gè)空格*/for(k=0;k<5;k++)printf("%c〞,a[k]); /*每行輸出5個(gè)*號(hào)*/}}或者是voidmain(){chara[]="*****";inti,j,k;charspace='';for(i=0;i<5;i++)/*輸出5行*/{printf("");/*每行前面留4個(gè)空格*/for(j=1;j<=i;j++)printf("%c",space); /*每行再留1個(gè)空*/puts(a); /*每行輸出5個(gè)號(hào)}}運(yùn)行結(jié)果:*************************有一行電文,已按下面規(guī)律譯成密碼A→Z a→zB→Y b→yC→* c→*┇┇即第1個(gè)字母變成第26個(gè)字母,第i個(gè)字母變成第〔26-i+1〕個(gè)字母。非字母字符不變。要求編程序?qū)⒚艽a譯回原文,并打印出密碼和原文。解:說(shuō)明:字符ch[jch[j]-64〕個(gè)大寫字母。假設(shè)c[j]的值是大寫字母’B’,它的ASCII碼為66〕=226-i+1〕個(gè)大寫字母。而26-i+1=26-(ch[j]-64)+1=26+64-ch[j]+1,即91-ch[j]〔如c[j]等于’B’,91-’B’=91-66=25,C[j]應(yīng)與第25ASCII碼為91-ch[j]+64,即25+64=89,89是’’的ASCII碼??梢员硎緸?55-ch[j]。小寫字母情況的ASCII碼為9726+96-ch[j]+1+96=123-ch[j]+96=219-ch[j]。假設(shè)ch[j]的值為’b’,則其交換對(duì)象為219-‘b’=219-98=121,它是’y’的ASCII碼。二個(gè)字母交換┅┅因此從原文譯為密碼和從密碼譯為原文,都是用同一個(gè)公式。程序如下:*Include<stdio.h>main(){intj,n;charch[80],tran[80];printf("\nInputciphercode:〞);gets(ch);printf("\n\ciper〞j=0;while(ch[j]!=’0’){if((ch[j]>=’A’)&&tran[j]=155-ch[j];elseif((ch[j]>=’a’)&&(ch[j]<=’z’))tran[j]=219-ch[j];elsetran[j]=ch[j];j++;}n=
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 銷售粘土合同范本
- 2025年度生態(tài)環(huán)保型商業(yè)住宅買賣合同4篇
- Module4 Unit 3 Story Time(教學(xué)設(shè)計(jì))-2023-2024學(xué)年牛津上海版(試用本)英語(yǔ)一年級(jí)下冊(cè)
- 市場(chǎng)業(yè)務(wù)拓展合同范本
- 2025年度二手房置換合同規(guī)范文本
- 2025-2030年中國(guó)氧化鋁精密陶瓷行業(yè)深度研究分析報(bào)告
- 2019-2025年中國(guó)植入人體支夾市場(chǎng)供需格局及未來(lái)發(fā)展趨勢(shì)報(bào)告
- 2025年中碳猛鐵行業(yè)深度研究分析報(bào)告
- 測(cè)繪產(chǎn)品質(zhì)量檢查報(bào)告
- 專題17 直線與圓小題綜合(學(xué)生卷)- 2025年高考之近十年真題數(shù)學(xué)分項(xiàng)匯編
- 監(jiān)理表格.監(jiān)理.3.復(fù)工令
- 傳播學(xué)研究方法-第三章
- 可愛(ài)的四川精編版課件
- 蘇教版二年級(jí)數(shù)學(xué)下冊(cè)第一單元第一課時(shí)
- 二年級(jí)下冊(cè)科學(xué)考點(diǎn)歸納
- 債權(quán)法總論課件
- 醫(yī)院先進(jìn)科室、先進(jìn)個(gè)人評(píng)選辦法
- 新部編版四年級(jí)下冊(cè)道德與法治全冊(cè)優(yōu)秀教學(xué)課件(1-12課)
- 港口危險(xiǎn)貨物安全管理人員機(jī)考試題庫(kù)(含答案)
- 門診醫(yī)師出診申請(qǐng)表(2022版)
- 材料進(jìn)場(chǎng)檢驗(yàn)項(xiàng)目清單
評(píng)論
0/150
提交評(píng)論