C語言程序設(shè)計答案(第三版)杜友福版_第1頁
C語言程序設(shè)計答案(第三版)杜友福版_第2頁
C語言程序設(shè)計答案(第三版)杜友福版_第3頁
C語言程序設(shè)計答案(第三版)杜友福版_第4頁
C語言程序設(shè)計答案(第三版)杜友福版_第5頁
已閱讀5頁,還剩44頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

C語言程序設(shè)計答案(第三版)杜友福版C語言程序設(shè)計答案(第三版)杜友福版C語言程序設(shè)計答案(第三版)杜友福版xxx公司C語言程序設(shè)計答案(第三版)杜友福版文件編號:文件日期:修訂次數(shù):第1.0次更改批準(zhǔn)審核制定方案設(shè)計,管理制度C語言程序設(shè)計(第三版)習(xí)題答案習(xí)題一一、名詞解釋(1)程序P1(2)程序設(shè)計P1(3)機(jī)器語言P1(4)高級語言P2(5)匯編程序P3(6)編譯程序P4(7)算法P5(8)結(jié)構(gòu)化程序設(shè)計方法P10二、簡答題1.設(shè)計程序時應(yīng)遵循哪些基本原則P4答:正確性、可靠性、簡明性、有效性、可維護(hù)性、可移植性。2.算法具有哪些特點答:有窮性、確定性、有效性、有零個或多個輸入、有一個或多個輸出。3.算法的表示形式有哪幾種答:自然語言、偽代碼、傳統(tǒng)流程圖、N-S流程圖、計算機(jī)語言。4.結(jié)構(gòu)化程序設(shè)計方法的三種基本結(jié)構(gòu)是什么答:順序結(jié)構(gòu)、選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)。5.傳統(tǒng)流程圖與N-S流程圖最大的區(qū)別是什么答:N-S流程圖去掉了在傳統(tǒng)流程圖中常用的流程線,使得程序的結(jié)構(gòu)顯得更加清晰、簡單。三、用傳統(tǒng)流程圖或N-S流程圖表示求解以下問題的算法。1.從鍵盤輸入10個整數(shù),求出其中的最小數(shù)并輸出。2.求1+2+3+…+100的值。3.求10~50的所有素數(shù)之和。4.求下列分段函數(shù)的值。四、請參照本章例題,編寫一個簡單的C程序,輸出以下三行信息。**************************YangtzeUniversity**************************#include<>voidmain(){printf("**************************\n");printf("YangtzeUniversity\n");printf("**************************\n");}習(xí)題二一、選擇題1~10:BCDCDDBCAA11~20:DACDBDBACD二、填空題1.字母L或字母l2.%c(或字符)、%d(或整數(shù))3.在程序運行過程中,其值可以在一定的范圍內(nèi)變化的量4.'\0'5.小數(shù)形式、指數(shù)形式6.關(guān)鍵字、預(yù)定義標(biāo)識符、用戶標(biāo)識符7.字母、數(shù)字、下劃線、數(shù)字8.189.2、1、3010.雙精度實數(shù)或double11.賦值、逗號、20、20、20、412.4、4習(xí)題三一、選擇題1~10:BCCBCCCDCC注:第4題答案D為:1022↙33↙二、填空題1. printf、scanf2. h3. "%5d"4. '\0'5. e、E6. 67. s、c8. *9. -、+10. i三、編程題1.編寫程序,從鍵盤輸入一個以秒為單位的時間數(shù),將其換算成幾小時幾分幾秒,然后進(jìn)行輸出。例如輸入的時間為4258秒,則輸出結(jié)果為:1小時10分58秒。#include<>voidmain(){intx,h,m,s;scanf("%d",&x);h=x/3600;m=x%3600/60;s=x%60;printf("%ds=%d:%d:%d!\n",x,h,m,s);}2.編寫程序,讀入三個整數(shù)給變量a、b、c,然后交換它們中的數(shù),把a(bǔ)中原來的值給b,把b中原來的值給c,把c中原來的值給a。#include<>voidmain(){inta,b,c,t;printf("inputabc:");scanf("%d%d%d",&a,&b,&c);printf("a=%d,b=%d,c=%d\n",a,b,c);t=a;a=c;c=b;b=t;printf("a=%d,b=%d,c=%d\n",a,b,c);}習(xí)題四一、填空題1. 1、02. ?。ィ?lt;=!=&&||=3. x==04. 0、25. 20、0、0二、選擇題1~7:DDCADDC三、程序閱讀題1.5959592.3. 14.25.66. a=2,b=17. passwarn8.1四、編程題1.設(shè)a為整型變量且其值大于零,請將以下if語句改寫成switch語句。if(a<60)m=1;elseif(a<70)m=2;elseif(a<80)m=3;elseif(a<90)m=4;elsem=5;方法1#include<>voidmain(){inta,m;scanf("%d",&a);switch(a/10){case0:case1:case2:case3:case4:case5:m=1;break;case6:m=2;break;case7:m=3;break;case8:m=4;break;default:m=5;break;}printf("m=%d\n",m);}方法2#include<>voidmain(){inta,m;scanf("%d",&a);m=0;switch(a/10){default:m++;case8:m++;case7:m++;case6:m++;case5:case4:case3:case2:case1:case0:m++;}printf("m=%d\n",m);}2.編寫程序,從鍵盤輸入一個整數(shù),打印出它是奇數(shù)還是偶數(shù)。#include<>voidmain(){inta;scanf("%d",&a);if(a%2==1)printf("%disaoddnumber!\n",a);elseprintf("%disaevennumber!\n",a);}3.編寫程序,從鍵盤輸入一個字符,判別它是否是小寫字母,如果是,將它轉(zhuǎn)換為大寫字母;如果不是,不轉(zhuǎn)換。然后輸出最后得到的字符。#include<>voidmain(){charch;scanf("%c",&ch);if(ch>='a'&&ch<='z')ch=ch-32;printf("%c\n",ch);}4.編寫程序,從鍵盤輸入一個不多于4位的正整數(shù),打印出它是幾位數(shù)。#include<>voidmain(){intx,n;scanf("%d",&x);if(x>1000)n=4;elseif(x>100)n=3;elseif(x>10)n=2;elsen=1;printf("%d\n",n);}5.當(dāng)一個人的月收入在3500元以下時免稅;月收入在3500元到5000元之間時,超過3500的部分納稅3%;月收入在5000元以上時,3500至5000之間的部分納稅3%,超過5000的部分納稅10%。編寫程序從鍵盤輸入月收入income,計算并輸出應(yīng)交稅款tax。#include<>voidmain(){intincome;floattax;scanf("%d",&income);if(income<=3500)tax=0;elseif(income<=5000)tax=*(income-3500);elsetax=*(5000-3500)+*(income-5000);printf("tax=%f\n",tax);}6.回文是指正讀和反讀都一樣的數(shù)或字符串。例如:12321、55455、35553等都是回文。請編寫一個程序,從鍵盤上讀取一個包含五位數(shù)字的長整數(shù),并判斷它是否是回文。(提示:用除法運算和求余運算把一個數(shù)的個位、十位、百位、千位等分別分離出來。)#include<>voidmain(){longx;inta,b,d,e;scanf("%ld",&x);a=x/10000;b=x%10000/1000;d=x%100/10;e=x%10;if(a==e&&b==d)printf("%ldishuiwen!\n",x);elseprintf("%ldisnothuiwen!\n",x);}習(xí)題五一、閱讀題1.82.43213.X4.-15.236.527.58.3二、填空題1. 182. 23. b=i+14. 175. i<=9、j%3!=06. d=、k=k+1、k<=10三、選擇題1~8:ADDABDDA四、編程題1.編寫程序,打印出所有的“水仙花數(shù)”,所謂“水仙花數(shù)”是指一個三位數(shù),其各位數(shù)字的立方之和等于該數(shù)本身。例如,407是一個“水仙花數(shù)”,因為407=43+03+73。(注:若將題意改為打印出最大的或最小的“水仙花數(shù)”,則應(yīng)將循環(huán)語句作如何調(diào)整)。#include<>voidmain(){inta,b,c,k;for(k=100;k<=999;k++)編寫程序,輸出1980~2880年所有閏年的年號。每輸出5個年號換一行。#include<>voidmain(){intk,flag,n=0;for(k=1980;k<=2880;k++) {flag=(k%4==0)&&(k%100!=0)||(k%400==0); if(flag) {printf("%5d",k); n++; if(n%10==0) printf("\n"); } }printf("\n");}3.編寫程序,求1-3+5-7+…-99+101的值。#include<>voidmain(){intn,t=1,s=1;for(n=3;n<=101;n+=2) {t=-t;s=s+t*n;}printf("s=%d\n",s);}4.編寫程序,計算并輸出下列級數(shù)的前n項之和Sn。n的值從鍵盤輸入。#include<>voidmain(){intfz,fm,n,i;floats,t;fz=2;fm=1;s=0;scanf("%d",&n);for(i=1;i<=n;i++) {t=*fz)/fm;s=s+t; fz=fz+fm; fm=fz-fm;}printf("s=%f\n",s);}5.編寫程序,求e的值e=1+1/1!+1/2!+1/3!+1/4!+…+1/n!#include<>voidmain(){intn,i;floatt,fm=1,e=1;scanf("%d",&n);for(i=1;i<=n;i++) {fm=fm*i;t=fm; e=e+t; }printf("n=%d,e=%f\n",n,e);}6.已知某球從80米高度自由落下,落地后反復(fù)彈起,每次彈起的高度都是上次高度的一半。求此球8次落地所經(jīng)過的總路程。#include<>voidmain(){intn;floats=80,h=s/2;for(n=2;n<=8;n++) {s=s+2*h; h=h/2; }printf("s=%f\n",s);}7.用牛頓迭代法求高次方程f(x)=2x3-4x2+5x-18=0的根(約為)。注:牛頓迭代公式為:x2=x1-f(x1)/f’(x1),其中f’(x1)為導(dǎo)函數(shù)在點x1的值。#include<>#include<>voidmain(){floatx,f,f1;x=8;有這樣一些真分?jǐn)?shù):其分子和分母都是兩位正整數(shù),且分子的個位數(shù)與分母的十位數(shù)相同,如果把該分?jǐn)?shù)的分子的個位數(shù)與分母的十位數(shù)同時去掉,所得到的新的分?jǐn)?shù)正好與原分?jǐn)?shù)的值相等,如26/65=2/5。試編程求出所有滿足上述條件的真分?jǐn)?shù)。#include<>voidmain(){inta,b,c;編寫程序,求數(shù)列:1,(1+1/2),(1+1/2+1/3),(1+1/2+1/3+1/4),(1+1/2+1/3+1/4+1/5),…的前10項之和。#include<>voidmain(){floats,t;inti;s=0,t=0;for(i=1;i<=10;i++) {t=t+i;s=s+t;}printf("s=%f\n",s);}10.編寫程序,求3到100之間的所有素數(shù)之和。#include<>voidmain(){ints,i,k,flag;s=0;for(i=3;i<=100;i++) {flag=1;for(k=2;k<i;k++) if(i%k==0) {flag=0;break;} if(flag) {s=s+i;printf("%4d",i);} }printf("\nsum=%d\n",s);}11.編寫程序,求Fibonacci數(shù)列中大于800的最小的一個數(shù)(結(jié)果為987)。#include<>voidmain(){intf1=1,f2=1,f3;while(f3<=800){f3=f1+f2;f1=f2;f2=f3;}printf("Fibonacci數(shù)列中大于800的最小數(shù)是%5d\n",f3);}習(xí)題六一、選擇題1~10:DDCBABCDCD11~20:ABBCCDCABB21~30:BBDDDDCDCA注:第16題答案C為:字符串"SHORT"與"SHORT"相等第19題題目為:已知:charstr1[10],str2[10]={"books"};則在程序中能夠?qū)⒆址?books"賦給數(shù)組str1的正確語句是。第21題題目為:設(shè)有:charstr1[20]="abcde",str2[20]="xyz";則執(zhí)行語句:printf("%d",strlen(strcpy(str1,str2));的結(jié)果是。第28題答案D為:aaaabbbbccccdddd二、填空題1.9、02.先行后列3.字符數(shù)組4.QuickC5.(c=getchar())、'A'+i或65+i6.'\0'、str1[i]-str2[i]7. CDABC8. 69. 100000100000100000100000110.60011.AzyD12.4somestring*test三、編程題1.定義一個有20個元素的整型數(shù)組,分別求出下標(biāo)為奇數(shù)和偶數(shù)的元素的平均值。#include<>#include<>voidmain(){inti,s0=0,s1=0,a[20];for(i=0;i<20;i++) a[i]=rand()%100;for(i=0;i<20;i+=2) {printf("%3d",a[i]); s0=s0+a[i]; }printf("sumis:%dave=%f\n",s0,s0/;for(i=1;i<20;i+=2) {printf("%3d",a[i]); s1=s1+a[i]; }printf("sumis:%dave=%f\n",s1,s1/;}2.設(shè)有一個整型數(shù)組,另輸入一個整數(shù),編程查找這個整數(shù)是否在數(shù)組中出現(xiàn)過,若出現(xiàn),則輸出第一次出現(xiàn)的位置,否則,輸出nofound。#include<>#include<>voidmain(){inti,s,a[20];for(i=0;i<20;i++) a[i]=rand()%100;scanf("%d",&s);for(i=0;i<20;i++) if(a[i]==s) {printf("found:a[%d]=%d\n",i,a[i]); break; }if(i==20) printf("nofound\n");for(i=0;i<20;i++) printf("%3d",a[i]);printf("\n");}3.設(shè)有一個已排好序的數(shù)組,今輸入一個數(shù),要求按原來排序的規(guī)律將它插入到數(shù)組中。#include<>#defineN10voidmain(){inti,j,s;編一程序,從一個已排好序的數(shù)組中刪去某個位置上的元素。#include<>#defineN10voidmain(){inti,j;inta[N]={1,3,5,7,9,11,13,15,17,19};for(i=0;i<N;i++) printf("%3d",a[i]);printf("\n");scanf("%d",&i);for(j=i;j<N-1;j++) a[j]=a[j+1];for(i=0;i<N-1;i++) printf("%3d",a[i]);printf("\n");}5.將一個二維數(shù)組的行、列互換后存到另一個二維數(shù)組中并輸出結(jié)果。#include<>voidmain(){inti,j;inta[3][4]={1,3,5,7,9,11,13,15,17,19,21,23},b[4][3];for(i=0;i<4;i++) for(j=0;j<3;j++) b[i][j]=a[j][i];printf("arraya:\n");for(i=0;i<3;i++) {for(j=0;j<4;j++) printf("%5d",a[i][j]);printf("\n"); }printf("arrayb:\n");for(i=0;i<4;i++) {for(j=0;j<3;j++) printf("%5d",b[i][j]);printf("\n"); }}6.編一程序,在一個二維數(shù)組中,查找第一次出現(xiàn)的負(fù)數(shù),并輸出該數(shù)及其所在的行、列號。#include<>voidmain(){inti,j,flag;inta[3][4]={1,3,5,7,9,11,13,-15,17,19,-21,23};flag=0;for(i=0;i<3;i++)for(j=0;j<4;j++) if(a[i][j]<0) {flag=1; printf("found:a[%d][%d]=%d\n",i,j,a[i][j]); i=j=100;編程將一個字符數(shù)組中的字母,按由大到小的順序進(jìn)行排序。#include<>#include<>voidmain(){chart,s[]="ABCDIVBHFBVCNLKFDB";inti,j,n;puts(s);n=strlen(s);for(i=0;i<n-1;i++)for(j=i+1;j<n;j++) if(s[i]<s[j]) {t=s[i];s[i]=s[j];s[j]=t;}puts(s);}8.輸入一行字符,統(tǒng)計其中有多少個英語單詞,單詞之間用空格隔開。#include<>#include<>voidmain(){chars[81];intw,i,n;gets(s);i=0;n=0;w=0;while(s[i]!='\0'){if(s[i]=='') w=0;/*endofaword*/else if(w==0) {w=1;n++;}/*beginofaword*/i++;}printf("numberofword:%d\n",n);}9.編程將兩個一維數(shù)組中的對應(yīng)元素的值相減后進(jìn)行輸出。#include<>#include<>voidmain(){inti,a[10],b[10];for(i=0;i<10;i++) {a[i]=rand()%100;printf("%4d",a[i]);}printf("\n");for(i=0;i<10;i++) {b[i]=rand()%100;printf("%4d",b[i]);}printf("\n");for(i=0;i<10;i++) printf("%4d",a[i]-b[i]);printf("\n");}10.有n個無序的數(shù)放在數(shù)組a中,請將相同的那些數(shù)刪得只剩得一個,輸出經(jīng)過刪除后的數(shù)據(jù)。#include<>voidmain(){inti,j,k,a[10]={90,20,40,30,50,50,50,50,20,80};for(i=0;i<10;i++) printf("%4d",a[i]);printf("\n");for(i=0;i<9;i++)for(j=i+1;j<10;j++) if(a[j]==a[i]) {a[j]=-888;}k=0;for(i=0;i<10;i++)if(a[i]!=-888) {printf("%4d",a[i]); a[k++]=a[i]; }求二維數(shù)組中這樣一個元素的位置:它在行上最小,在列上也最小。如果沒有這樣的元素則輸出相應(yīng)的信息。#include<>#include<>voidmain(){intj,i,k,flag,fz=0,a[4][5];for(i=0;i<4;i++) {for(j=0;j<5;j++) {a[i][j]=rand()%100; printf("%4d",a[i][j]); }printf("\n"); }for(i=0;i<4;i++) {for(j=0;j<5;j++) {flag=1; for(k=0;k<5;k++) if(a[i][k]<a[i][j]) {flag=0;break;}for(k=0;k<4&&flag;k++) if(a[k][j]<a[i][j]) {flag=0;break;} if(flag) {fz++;printf("mina[%d][%d]=%d\n",i,j,a[i][j]);} } }if(fz==0) printf("nofound!");}12.在一個二維數(shù)組中形成并輸出如下矩陣:1111121111A=321114321154321#include<>#defineN5voidmain(){intj,i,a[N][N];for(i=0;i<N;i++) for(j=0;j<N;j++) {if(i<=j) a[i][j]=1; elseif(j==0) a[i][j]=i+1; else a[i][j]=a[i-1][j-1]; } for(i=0;i<N;i++) {for(j=0;j<N;j++) printf("%4d",a[i][j]);printf("\n"); }}13.已知A是一個3╳4的矩陣,B是一個4╳5的矩陣,編程求A╳B得到的新矩陣C,并輸出C矩陣。#include<>voidmain(){intj,i,k,a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};intb[4][5]={3,2,1,5,4,4,3,2,5,1,2,3,5,4,1,7,8,5,6,9},c[3][5];printf("arrayA(3*4):\n");for(i=0;i<3;i++) {for(j=0;j<4;j++) printf("%4d",a[i][j]);printf("\n"); }printf("arrayB(4*5):\n");for(i=0;i<4;i++) {for(j=0;j<5;j++) printf("%4d",b[i][j]);printf("\n"); }for(i=0;i<3;i++) for(j=0;j<5;j++) {c[i][j]=0;for(k=0;k<4;k++) c[i][j]+=a[i][k]*b[k][j]; }printf("arrayC(3*5)=A*B:\n");for(i=0;i<3;i++) {for(j=0;j<5;j++) printf("%4d",c[i][j]);printf("\n"); }}14.編程輸出兩個字符串中對應(yīng)位置上相同的字符。#include<>voidmain(){inti;chara[81]="acbsbdvhfejbvewvkbewljbv";charb[81]="anbdxwdbviuerkjvbfidbvuiebik";printf("string1:%s\n",a);printf("string2:%s\n",b);printf("string3:");i=0;while(a[i]!='\0'&&b[i]!='\0') {if(a[i]==b[i]) printf("%c",a[i]); i++; }printf("\n");}15.設(shè)有一字符串已按升序排列在字符數(shù)組a中,請將另一字符串b中的字符按升序的規(guī)律插到數(shù)組a中。#include<>#include""voidmain(){inti,j,k;chara[81]="acdfhjklmopxz";charb[81]="anbdx";printf("string1:%s\n",a);printf("string2:%s\n",b);i=0;while(b[i]!='\0') {j=0;while(a[j]<b[i]&&a[j]!='\0') j++; k=strlen(a); while(k>=j) {a[k+1]=a[k];k--;} a[j]=b[i]; i++; }printf("string3:%s\n",a);}16.將已按升序排列的兩個字符串a(chǎn)和b中的字符按升序歸并到字符數(shù)組c中。#include<>#include""voidmain(){inti,j,k;chara[81]="acdfhjklmopxz";charb[81]="abdnx";charc[81];printf("string1:%s\n",a);printf("string2:%s\n",b);i=0;j=0;k=0;while(a[i]!='\0'&&b[j]!='\0') {if(a[i]<b[j]) c[k++]=a[i++];else c[k++]=b[j++]; }while(a[i])c[k++]=a[i++];while(b[j])c[k++]=b[j++];c[k]='\0';printf("string3:%s\n",c);}習(xí)題七一、選擇題1~10:DCDBDBCAAB11~19:BBABADABA二、填空題1. 聲明2. 自動將其轉(zhuǎn)換為函數(shù)定義時的類型3. 104. i<=n、s、0、f(k)5. Itis6. 27217. 02468. k、-19. 2、210. p=j、x[i][p]、LineMax(x)11. 512. 2413. age(n-1)+2、age(n)14. m%10、m/10、m或m!=0、r(m)三、編程題1.編一函數(shù),判斷某年是否為閏年,若是返回1,否則返回0。#include<>intfun(intm){return(m%4==0)&&(m%100!=0)||(m%400==0);}voidmain(){intn;scanf("%d",&n);if(fun(n))printf("year:%disaleap!\n",n);}2.編寫計算三角形面積的程序,將計算面積定義成函數(shù)。三角形面積公式為:A=式中s=(a+b+c)/2其中A為三角形面積,a、b、c為三角形的三條邊的長度。#include<>#include<>floatfun(floata,floatb,floatc){floatf,s;s=(a+b+c)/2;if((s<=a)||(s<=b)||(s<=c))編寫兩個函數(shù),分別求出兩個整數(shù)的最大公約數(shù)和最小公倍數(shù),用主函數(shù)調(diào)用這兩個函數(shù),并輸出結(jié)果,兩個整數(shù)由鍵盤輸入。#include<>#include<>intfmax(intm,intn){intr;r=m%n;while(r!=0){m=n;n=r;r=m%n;}returnn;}intfmin(intm,intn){returnm*n/fmax(m,n);}voidmain(){inta,b;scanf("%d%d",&a,&b);printf("fmaxis:%d\n",fmax(a,b));printf("fminis:%d\n",fmin(a,b));}4.編寫函數(shù),根據(jù)整型形參m的值,計算公式t=1---…-的值。例如,若m=5,則應(yīng)輸出。#include<>floatfun(intm){floatt=;inti;for(i=2;i<=m;i++)t=i/i;returnt;}voidmain(){intm;scanf("%d",&m);printf("t(%d)=%f\n",m,fun(m));}5.計算s=1+++…+。n由終端輸入,將計算n!定義成函數(shù)。#include<>floatfun(intm){inti;floats=,t=;for(i=1;i<=m;i++){t=t/i;s=s+t;}returns;}voidmain(){intn;scanf("%d",&n);printf("s(%d)=%f\n",n,fun(n));}6.編寫函數(shù),利用公式:計算π的近似值,當(dāng)某一項的值小于10-5時,認(rèn)為達(dá)到精度要求。#include<>doublefun(){intn;doublepi=1,t=1;n=1;do{t=t*n/(2*n+1);pi=pi+t;n++;}while(t>1e-5);return2*pi;}voidmain(){printf("pi=%f\n",fun());}7.編一函數(shù),判斷某一整數(shù)是否為回文數(shù),若是返回1,否則返回0。所謂回文數(shù)就是該數(shù)正讀與反讀是一樣的。例如12321就是一個回文數(shù)。#include<>#include<>inthuiwen(intm){intt,n=0;t=m;while(t){n++;t=t/10;}編寫一個求水仙花數(shù)的函數(shù),然后通過主函數(shù)調(diào)用該函數(shù)求100到999之間的全部水仙花數(shù)。所謂水仙花數(shù)是指一個三位數(shù),其各位數(shù)字的立方和等于該數(shù)本身。例如:153就是一個水仙花數(shù):153=1*1*1+5*5*5+3*3*3#include<>#include<>intfun8(intm){inta,b,c;a=m/100;b=m/10%10;c=m%10;if(m==a*a*a+b*b*b+c*c*c)return1;elsereturn0;}voidmain(){inti;for(i=100;i<=999;i++) if(fun8(i))printf("%5d",i);printf("\n");}9.編一函數(shù)primedec(m),求整數(shù)m的所有因子并輸出。例如:120的因子為:2,2,2,3,5。#include<>#include<>voidprimedec(intm){intn=2;while(m>1){while(m%n==0) {printf("%d",n);m=m/n;}n++;}printf("\n");}voidmain(){intx;scanf("%d",&x);primedec(x);}10.求100~200之間的所有素數(shù),按每行6個輸出。#include<>#include<>intprime(intm){intn,f=1;for(n=2;n<m;n++) if(m%n==0) {f=0;break;}returnf;}voidmain(){intx,n=0;for(x=100;x<=200;x++) if(prime(x)) {n++; printf("%5d",x); if(n%6==0) printf("\n"); }printf("\n");}11.編一函數(shù),求末尾數(shù)非0的正整數(shù)的逆序數(shù),如:reverse(3407)=7043。#include<>#include<>intreverse(intm){intx=0;while(m) {x=x*10+m%10; m=m/10; }returnx;}voidmain(){intw;scanf("%d",&w);printf("%d==>%d\n",w,reverse(w));}12.編一函數(shù),將一個字符數(shù)組中的數(shù)字字符存于另一個字符數(shù)組中。#include<>#include<>voidfun12(chara[],charb[]){inti=0,j;for(j=0;j<strlen(b);j++) if(b[j]>='0'&&b[j]<='9') a[i++]=b[j];a[i]='\0';}voidmain(){chars1[81],s2[81];gets(s2);fun12(s1,s2);puts(s2);puts(s1);}13.編一函數(shù),統(tǒng)計一個字符串中字母、數(shù)字、空格和其它字符的個數(shù)。#include<>#include<>voidfun13(chars[]){inti,num=0,ch=0,sp=0,oh=0;charc;for(i=0;(c=s[i])!='\0';i++)if(c=='')sp++;elseif(c>='0'&&c<='9')num++;elseif(toupper(c)>='A'&&toupper(c)<='Z')ch++;elseoh++;printf("char:%d,number:%d,space:%d,other:%d\n",ch,num,sp,oh);}voidmain(){chars1[81];gets(s1);fun13(s1);}14.用遞歸的方法實現(xiàn)求1+2+3+…+n。#include<>#include<>intfun14(intm){intw;if(m==1)w=1;elsew=fun14(m-1)+m;returnw;}voidmain(){intx,i;scanf("%d",&x);printf("1+2+...+%d=%d\n",x,fun14(x));}15.用遞歸的方法將一個整數(shù)轉(zhuǎn)換成字符串。例如:輸入345,應(yīng)輸出字符串“345”。#include<>#include<>voidfun15(intm){if(m!=0){fun15(m/10);printf("%c",'0'+m%10);}}voidmain(){intx;scanf("%d",&x);printf("%d==>",x);fun15(x);printf("\n");}16.采用遞歸的方法計算x的n次方。#include<>#include<>floatp(floatx,intn){floatf;if(n==0)f=1;elsef=p(x,n-1)*x;returnf;}voidmain(){floatx;intn;scanf("%f%d",&x,&n);printf("p(%f,%d)=%f",x,n,p(x,n));}習(xí)題八一、選擇題1~10:ADBCCABDBA11~14:BCCD二、填空題1.從定義點到函數(shù)體(或復(fù)合語句)結(jié)束2.auto3.①局部、②全局4.①外部、②內(nèi)部5.2,5,1,2,3,-26.a=5a*a=25a*a*a=87.add:y=25;sub:y=5;main:x=25;main:y=10習(xí)題九一、選擇題1~8:DCBCABBB二、填空題1.1000102.113.011三、編程題1.定義一個帶參的宏,求兩個整數(shù)的余數(shù)。通過宏調(diào)用,輸出求得的結(jié)果。#defineR(m,n)(m)%(n)#include<>voidmain(){ intm,n; printf("entertwointegers:\n"); scanf("%d%d",&m,&n); printf("remainder=%d\n",R(m,n));}2.分別用函數(shù)和帶參的宏,從3個數(shù)中找出最大者。#include<>#defineMAX(a,b)((a)>(b)(a):(b))MACROmax=%d\n",MAX(MAX(m,n),k)); printf("2.functionmax=%d\n",max3(m,n,k));}3.輸入一個整數(shù)m,判斷它能否被3整除。要求利用帶參的宏實現(xiàn)。#include<>#defineDIVIDEDBY3(m)(m)%3==0voidmain(){ intm; printf("enterainteger:\n"); scanf("%d",&m); if(DIVIDEDBY3(m)) printf("%disdividedby3\n",m); else printf("%disnotdividedby3\n",m);}習(xí)題十一、填空題1.首地址2.03.1) int*p=&k;2) *p=6;3) int**pp;4) pp=&p;5) (**pp)*=2;4.整型數(shù)組名、指向整型數(shù)據(jù)的指針值5.*(++p)二、選擇題1~10:BCADCAAABB11~15:CBCDC16:①B②B③C17:①B②D18:①B②A③C19~21:BAC三、編程題1.編寫函數(shù),對傳遞進(jìn)來的兩個整型量計算它們的和與積之后,通過參數(shù)返回。#include<>voidcompute(intm,intn,int*sum,int*p){*sum=m+n; *p=m*n;}voidmain(){ intx,y,sum,product; printf("enter2integers:\n"); scanf("%d%d",&x,&y); compute(x,y,&sum,&product); printf("x=%dy=%dsum=%dproduct=%d\n",x,y,sum,product);}2.編寫一個程序,將用戶輸入的字符串中的所有數(shù)字提取出來。#include<>#include<>voidmain(){ charstring[81],digit[81]; char*ps; inti=0; printf("enterastring:\n"); gets(string); ps=string; while(*ps!='\0') {if(*ps>='0'&&*ps<='9') { digit[i]=*ps; i++; } ps++; } digit[i]='\0'; printf("string=%sdigit=%s\n",string,digit);}3.編寫函數(shù)實現(xiàn),計算字符串的串長。#include<>#include<>intStringLength(char*s){ intk; for(k=0;*s++;k++); returnk;}voidmain(){ charstring[81]; printf("enterastring:\n"); gets(string); printf("lengthofthestring=%d\n",StringLength(string));}4.編寫函數(shù)實現(xiàn),將一個字符串中的字母全部轉(zhuǎn)換為大寫。#include<>#include<>char*Upper(char*s){char*ps; ps=s; while(*ps) {if(*ps>='a'&&*ps<='z') *ps=*ps-32; ps++; } returns;}voidmain(){charstring[81]; printf("enterastring:\n"); gets(string); printf("beforeconvert:string=%s\n",string); printf("afterconvert:string=%s\n",Upper(string));}5.編寫函數(shù)實現(xiàn),計算一個字符在一個字符串中出現(xiàn)的次數(shù)。#include<>#include<>intOccur(char*s,charc){ intk=0; while(*s) {if(*s==c) k++; s++; } returnk;}voidmain(){ charstring[81],c; printf("enterastring:\n"); gets(string); printf("enteracharacter:\n"); c=getchar();printf("character%coccurs%dtimesinstring%s\n",c,Occur(string,c),string);}6.編寫函數(shù)實現(xiàn),判斷一個子字符串是否在某個給定的字符串中出現(xiàn)。#include<>#include<>intIsSubstring(char*str,char*substr){ inti,j,k,num=0; for(i=0;str[i]!='\0'&&num==0;i++) { for(j=i,k=0;substr[k]==str[j];k++,j++) if(substr[k+1]=='\0') { num=1; break; } } returnnum;}voidmain(){ charstring[81],sub[81]; printf("enterfirststring:\n"); gets(string); printf("entersecondstring:\n"); gets(sub); printf("string'%s'is",sub); if(!IsSubstring(string,sub)) printf("not"); printf("substringof'%s'\n",string);}7.有n個人圍成一圈,順序排號。由用戶從鍵盤輸入報數(shù)的起始位置,從該人開始報數(shù)(計數(shù)從0開始),凡報數(shù)為3的倍數(shù)出圈。問最后剩下的是幾號見導(dǎo)學(xué)例8.由一個整型二維數(shù)組,大小為m×n,要求找出其中最大值所在的行和列,以及該最大值。請編一個函數(shù)max,數(shù)組元素在main函數(shù)中輸入,結(jié)果在函數(shù)max中輸出。見導(dǎo)學(xué)例9.由n個學(xué)生,每個學(xué)生考m門課程,要求編一函數(shù),能檢查n個學(xué)生有無不及格的課程,如果由某一學(xué)生有一門或一門以上課程不及格,就輸出該學(xué)生的號碼(學(xué)號從0開始)和其全部課程成績。見導(dǎo)學(xué)例習(xí)題十一一、選擇題1~10:AABDDBDDDC11~20:CBBCC二、填空題1.___2___、___3__2.structnode*next3.structlink*head、p->data、p->next4.__A_三、編程題1.編寫程序,進(jìn)行兩個復(fù)數(shù)的相減。#include<>structComplex{ doublem_r,m_i;};structComplexsub(structComplexc1,structComplexc2){ structComplexc; = = returnc;}voidmain(){structComplexc1={,},c2={,};structComplexc;c=sub(c1,c2);printf(“c=%g+i%g\n”,,;}2.定義一個包括年、月、日的結(jié)構(gòu)體。輸入一個日期,計算該日在本年中是第幾天注意閏年問題。#include<>structymd{ intday;intmonth; intyear;};intdayof[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};intdays(structymd*p){ inti,d; if(p->year%4==0&&p->year%100!=0||p->year%400==0) dayof[2]=29; d=p->day; for(i=1;i<p->month;i++) d=d+dayof[i]; return(d);}voidmain(){ structymddate; intd; for(;;) { printf("date(yyyy/mm/dd)=(yyyy=0--Exit)\n\n"); scanf("%d/%d/%d",&,&,&; if==0) break; d=days(&date); printf("\nThedayoftheyearis%d!\n\n",d); }}3.有10個學(xué)生,每個學(xué)生的數(shù)據(jù)包括學(xué)號、姓名、3門課程的成績。從鍵盤輸入10個學(xué)生的數(shù)據(jù),要求輸出3門課程的總平均成績,以及最高分的學(xué)生的學(xué)號、姓名、3門課程成績、平均分?jǐn)?shù)。#include<>#defineN10structstudent{charnum[6];charname[8];floatscore[3];floatavr;}stu[N];voidmain(){inti,j,maxi; floatsum,max,average; for(i=0;i<N;i++){printf("inputscoresofstudent%d:\n",i+1);printf("No.:");scanf("%s",stu[i].num);printf("name:");scanf("%s",stu[i].name);for(j=0;j<3;j++){printf("score%d:",j+1);scanf("%f",&stu[i].score[j]);} } average=0; max=0; maxi=0; for(i=0;i<N;i++){sum=0; for(j=0;j<3;j++) sum+=stu[i].score[j]; stu[i].avr=sum/; average+=stu[i].avr; if(sum>max) { max=sum; maxi=i; }} average/=N; printf("Nscorelscore2score3average\n"); for(i=0;i<N;i++) { printf("%5s%10s",stu[i].num,stu[i].name); for(j=0;j<3;j++) printf("%",stu[i].score[j]); printf("%\n",stu[i].avr); } printf("average=%\n",average); printf("Thehighestscoreis:student%s,%s.\n",stu[maxi].num,stu[maxi].name); printf("Hisscoresare:%,%,%,average:%.\n",stu[maxi].score[0],stu[maxi].score[1],stu[maxi].score[2],stu[maxi].avr);}4.設(shè)單向鏈表head1和head2已建立。編寫將單向鏈表head2連接到單向鏈表head1之后的函數(shù),以head1返回,如圖所示。/*結(jié)點結(jié)構(gòu)Node*/structNode{intdata;structNode*next;};提示:函數(shù)原型為:structNode*link(structNode*head1,structNode*head2);structNode*link(structNode*head1,structNode*head2){structNode*p,*head0;p=head1; head0=head1; while(p->next!=NULL) p=p->next; p->next=head2; returnhead0;}5.有兩個鏈表a和b。設(shè)結(jié)點中包括學(xué)號、姓名。從a鏈表中刪除去與b鏈表中有相同學(xué)號的那些結(jié)點。#include<>#include<>#defineLA4#defineLB5structstudent{intnum;charname[8];structstudent*next;}a[LA],b[LB];voidmain(){structstudenta[LA]={{101,"Wang"},{102,"Li"},{105,"Zhang"},{106,"Wei"}};structstudentb[LB]={{103,"Zhang"},{104,"Ma"},{105,"Chen"},{107,"Guo"},{108,"lui"}};inti;structstudent*p,*p1,*p2,*head1,*head2;head1=a;head2=b;printf("listA:\n");for(p1=head1,i=1;i<=LA;i++){if(i<LA)p1->next=a+i;elsep1->next=NULL;printf("%4d%8s\n",p1->num,p1->name);if(i<LA)p1=p1->next;}printf("\nlistB:\n");for(p2=head2,i=1;i<=LB;i++){if(i<LB)p2->next=b+i;elsep2->next=NULL;printf("%4d%8s\n",p2->num,p2->name);if(i<LB)p2=p2->next;}p1=head1;

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論