譚浩強-C語言程序設計(第二版)習題答案_第1頁
譚浩強-C語言程序設計(第二版)習題答案_第2頁
譚浩強-C語言程序設計(第二版)習題答案_第3頁
譚浩強-C語言程序設計(第二版)習題答案_第4頁
譚浩強-C語言程序設計(第二版)習題答案_第5頁
已閱讀5頁,還剩56頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

譚浩強--C語言程序設計(第二版)習題答案譚浩強--C語言程序設計(第二版)習題答案譚浩強--C語言程序設計(第二版)習題答案xxx公司譚浩強--C語言程序設計(第二版)習題答案文件編號:文件日期:修訂次數:第1.0次更改批準審核制定方案設計,管理制度C語言程序設計(第2版)課后習題答案第一章1.請參照本章例題,編寫一個C程序,輸出以下信息:**************************Verygood!**************************解:#include<>voidmain(){printf("**************************");printf("\n");printf("Verygood!\n");printf("\n");printf("**************************");}2.編寫一個C程序,輸入a、b、c三個值,輸出其中最大值。解:#include<>voidmain(){inta,b,c,max;printf("請輸入三個數a,b,c:\n");scanf("%d,%d,%d",&a,&b,&c);max=a;if(max<b)max=b;if(max<c)max=c;printf("最大數為:%d",max);}第二章1.假如我國國民生產總值的年增長率為10%,計算10年后我國國民生產總值與現在相比增長多少百分比。計算公式為P=(1+r)^n,r為年增長率;n為年數;P為與現在相比的百分比。解:#include<>#include<>voidmain(){doubleP,r=,n=10;P=pow((1+r),n);printf("%lf\n",P);}3.請編程序將"China"譯成密碼,譯碼規律是用原來字母后面的第4個字母代替原來的字母。例如,字母"A"后面第4個字母是"E","E"代替"A"。因此,"China"應譯為"Glmre"。請編一程序,用賦初值的方法使cl、c2、c3、c4、c5五個變量的值分別為'C'、'h'、'i'、'n'、'a',經過運算,使c1、c2、c3、c4、c5分別變為'G'、'l'、'm'、'r'、'e',并輸出。解:#include<>voidmain(){charc1='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);}第三章3.用下面的scanf函數輸入數據,使a=3,b=7,x=,y=,c1='A',c2='a'。問在鍵盤上如何輸入解:#include<>voidmain(){inta,b;floatx,y;charc1,c2;scanf("a=%d,b=%d",&a,&b);scanf("x=%f,y=%e",&x,&y);scanf("c1=%c,c2=%c",&c1,&c2);}a=3,b=7x=,y=c1=A,c2=a5.設圓半徑r=,圓柱高h=3,求圓周長、圓面積、圓球表面積、圓球體積、圓柱體積。用scanf輸入數據,輸出計算結果,輸出時要求文字說明,取小數點后2位數字。請編程序。解:#include<>voidmain(){floatr,h,C1,Sa,Sb,Va,Vb;scanf("%f,%f",&r,&h);C1=2**r;Sa=*r*r;Sb=4*Sa;Va=4**r*r*r/3;Vb=Sa*h;printf("C1=%.2f\n",C1);printf("Sa=%.2f\nSb=%.2f\nVa=%.2f\nVb=%.2f\n",Sa,Sb,Va,Vb);}6.輸入一個華氏溫度,要求輸出攝氏溫度。公式為c=5(F-32)/9,輸出要求有文字說明,取位2小數。解:#include<>voidmain(){floatF,c;scanf("%f",&F);c=5*(F-32)/9;printf("c=%.2f",c);}7.編程序,用getchar函數讀入兩個字符給c1、c2,然后分別用putchar函數和printf函數輸出這兩個字符。思考以下問題:(1)變量c1、c2應定義為字符型或整形或二者皆可(2)要求輸出c1和c2值的ASCII碼,應如何處理用putchar函數還是printf函數(3)整形變量與字符變量是否在任何情況下都可以互相代替如:charc1,c2;與intc1,c2;是否無條件地等價解:#include<>voidmain(){charc1,c2;c1=getchar();c2=getchar();putchar(c1);putchar(‘\n');putchar(c2);putchar(‘\n');}#include<>voidmain(){charc1,c2;c1=getchar();c2=getchar();printf("c1=%dc2=%d\n",c1,c2);printf("c1=%cc2=%c\n",c1,c2);}第四章3.寫出下面各邏輯表達式的值。設a=3,b=4,c=5。(1)a+b>c&&b==c(2)a||b+c&&b-c(3)!(a>b)&&!c||1(4)!(x=a)&&(y=b)&&0(5)!(a+b)+c-1&&b+c/2解:(1)0(2)1(3)1(4)0(5)15.有3個整數a、b、c,由鍵盤輸入,輸出其中最大的數,請編程序。解:#include<>voidmain(){inta,b,c,temp,max;printf("請輸入3個整數:");scanf("%d,%d,%d",&a,&b,&c);temp=(a>b)a:b;max=(temp>c)temp:c;printf("3個整數的最大數是%d\n",max);}6.給一個百分制成績,要求輸出等級'A'、'B'、'C'、'D'、'E'。90分以上為'A',80~90分為'B',70~79分為'C',60分以下為'D'。解:#include<>voidmain(){floatscore;chargrade;printf("請輸入學生成績:");scanf("%f",&score);while(score>100||score<0){printf("\n輸入有誤,請重新輸入:");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';break;}printf("成績是%,相應的等級是%c.\n",score,grade);}7.給定一個不多于5位的正整數,要求:(1)求出它是幾位數;(2)分別輸出每一位數字;(3)按逆序輸出各位數字。例如原數為321,應輸出123。解:#include<>voidmain(){longintnum;intindiv,ten,hundred,thousand,ten_thousand,place;/*分別代表個位、十位、百位、千位、萬位和位數*/printf("請輸入一個整數(0~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=1;printf("place=%d\n",place);ten_thousand=num/10000;thousand=num/1000%10;hundred=num/100%10;ten=num%100/10;indiv=num%10;switch(place){case5:printf("%d,%d,%d,%d,%d",ten_thousand,thousand,hundred,ten,indiv);printf("\n反序數字為:");printf("%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反序數字為:");printf("%d%d%d%d\n",indiv,ten,hundred,thousand);break;case3:printf("%d,%d,%d",hundred,ten,indiv);printf("\n反序數字為:");printf("%d%d%d\n",indiv,ten,hundred);break;case2:printf("%d,%d",ten,indiv);printf("\n反序數字為:");printf("%d%d\n",indiv,ten);break;case1:printf("%d",indiv);printf("\n反序數字為:");printf("%d\n",indiv);break;}}8.企業發放的獎金根據企業的當年利潤決定。當利潤I低于或等于100000元時,獎金可提成10%;利潤大于100000元,小于200000元(100000<I≤200000)時,低于100000元的部分按10%提成,高于100000元的部分,可提成%;利潤大于200000元,小于400000元(200000<I≤400000)時,低于200000元的部分仍按上述辦法提成(下同),高于200000元的部分按5%提成。利潤大于400000元,小于600000元(400000<I≤600000)時,高于400000元的部分按3%提成。利潤大于600000元,小于1000000元(600000<I≤1000000)時,高于600000的部分按%提成;利潤大于1000000元(I>1000000)時,超過1000000元的部分按1%提成。從鍵盤輸入當年利潤I,求應發放獎金總數。要求:(1)用if語句編程序;(2)用switch語句編程序。解:(1)用if語句編程序。#include<>voidmain(){longi;floatbonus,bon1,bon2,bon4,bon6,bon10;bon1=100000*;/*利潤為10萬元時的獎金*/bon2=bon1+100000*;/*利潤為20萬元時的獎金*/bon4=bon2+200000*;/*利潤為40萬元時的獎金*/bon6=bon4+200000*;/*利潤為60萬元時的獎金*/bon10=bon6+400000*;/*利潤為100萬元時的獎金*/printf("請輸入利潤i:");scanf("%ld",&i);if(i<=100000)bonus=i*;/*利潤在10萬元以內按提成獎金*/elseif(i<=200000)bonus=bon1+(i-100000)*;/*利潤在10萬至20萬元時的獎金*/elseif(i<=400000)bonus=bon2+(i-200000)*;/*利潤在20萬至40萬元時的獎金*/elseif(i<=600000)bonus=bon4+(i-400000)*;/*利潤在40萬至60萬元時的獎金*/elseif(i<=1000000)bonus=bon6+(i-600000)*;/*利潤在60萬至100萬元時的獎金*/elsebonus=bon10+(i-1000000)*;/*利潤在100萬元以上時的獎金*/printf("獎金是%\n",bonus);}(2)用switch語句編程序。#include<>voidmain(){longi;floatbonus,bon1,bon2,bon4,bon6,bon10;intc;bon1=100000*;bon2=bon1+100000*;bon4=bon2+200000*;bon6=bon4+200000*;bon10=bon6+400000*;printf("請輸入利潤i:");scanf("%ld",&i);c=i/100000;if(c>10)c=10;switch(c){case0:bonus=1*;break;case1:bonus=bon1+(i-100000)*;break;case2:case3:bonus=bon2+(i-200000)*;break;case4:case5:bonus=bon4+(i-400000)*;break;case6:case7:case8:case9:bonus=bon6+(i-600000)*;break;case10:bonus=bon10+(i-1000000)*;}printf("獎金是%",bonus);}9.輸入4個整數,要求按由小到大的順序輸出。解:#include<>voidmain(){intt,a,b,c,d;printf("請輸入4個整數:");scanf("%d,%d,%d,%d",&a,&b,&c,&d);printf("\na=%d,b=%d,c=%d,d=%d\n",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=a;b=c;c=t;}if(b>d){t=b;b=d;d=t;}if(c>d){t=c;c=d;d=t;}printf("排序結果如下:\n");printf("%d,%d,%d,%d\n",a,b,c,d);}10.有4個圓塔,圓心分別為(2,2)、(-2,2)、(-2,-2)、(2,-2),圓半徑為1。這4個塔的高度分別為10m。塔以外無建筑物。今輸入任一點的坐標,求該點的建筑高度(塔外的高度為零)。解:#include<>voidmain(){inth=10;floatx1=2,y1=2,x2=-2,y2=2,x3=-2,y3=-2,x4=-2,y4=-2,x,y,d1,d2,d3,d4;printf("請輸入一個點(x,y):");scanf("%f,%f",&x,&y);d1=(x-x1)*(x-x1)+(y-y1)*(y-y1);/*求該點到各中心點的距離*/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(d1>1&&d2>1&&d3>1&&d4>1)h=0;/*判斷該點是否在塔外*/printf("該點高度為%d\n",h);}11.求方程的解。根據代數知識,應該有以下幾種可能:(1)a=0,不是二次方程,而是一次方程。(2),有兩個相等的實根。(3),有兩個不等的實根。(4),有兩個共軛復根。編寫程序,運行時,分別給出不同的a,b,c值,相應于上面4種情況,分析輸出結果。解:#include<>#include<>#include<>voidmain(){floata,b,c,disc,x1,x2,realpart,imagpart;scanf("%f,%f,%f",&a,&b,&c);printf("Theequation");if(fabs(a)<=1e-6)printf("isnotaquadratic\n");else{disc=b*b-4*a*c;if(fabs(disc)<=1e-6)printf("hastoweualroots:%\n",-b/(2*a));elseif(fabs(disc)>1e-6){x1=(-b+sqrt(disc))/(2*a);x2=(-b-sqrt(disc))/(2*a);printf("hasdistinctrealroots:%and%\n",x1,x2);}else{realpart=-b/(2*a);imagpart=sqrt(-disc)/(2*a);printf("hascomplexroots:\n");printf("%+%\n",realpart,imagpart);printf("%%\n",realpart,imagpart);}}}第五章1.求100~200間的全部素數。解:#include<>#include<>voidmain(){intm,i,n=0;doublek;for(m=101;m<=200;m=m+2){k=sqrt(m);for(i=2;i<=k;i++)if(m%i==0)break;if(i>=k+1){printf("%d",m);n=n+1;}if(n%10==0)printf("\n");}printf("\n");}2.輸入一行字符,分別統計出其中英文字母、空格、數字和其他字符的個數。解:#include<>voidmain(){charc;inti=0,j=0,k=0,l=0;while((c=getchar())!='\n'){if(c>='A'&&c<='Z'||c>='a'&&c<='z')i++;elseif(c>='0'&&c<='9')j++;elseif(c=='')k++;elsel++;}printf("i=%d,j=%d,k=%d,l=%d\n",i,j,k,l);}3.輸出所有"水仙花數",所謂"水仙花數"是指一個三位數,其各位數字立方和等于該本身。例如:153是一個水仙花數,因為153=1^3+5^3+3^3。解:#include<>#include<>voidmain(){inti,j,k,n;printf(""水仙花"數是:");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");}4.猴子吃桃問題。猴子第一天摘下若干個桃子,當即吃了一半,還不過癮,又多吃了一個。第二天早上又將剩下的桃子吃掉一半,又多吃一個。以后每天早上都吃了前一天剩下的一半零一個。到第10天早上想再吃時,見只剩下一個桃子了。求第一天共摘多少桃子。解:#include<>voidmain(){intday,x1,x2;day=9;x2=1;while(day>0){x1=(x2+1)*2;x2=x1;day--;}printf("total=%d\n",x1);}5.一球從100米高度自由下落,每次落地后返回原高度的一半,再落下。求它在第10次落地時,共經過了多少米第10次反彈多高解:#include<>voidmain(){inti,n;doubleh=100,s=100;scanf("%d",&n);for(i=1;i<=n;i++){h*=;if(i==1)continue;s=2*h+s;}printf("h=%f,s=%f\n",h,s);}6.打印以下圖案*************************解:#include<>#include<>voidmain(){inti,j,k;for(i=0;i<=3;i++){for(j=0;j<=2-i;j++)printf("");for(k=0;k<=2*i;k++)printf("*");printf("\n");}for(i=0;i<=2;i++){for(j=0;j<=i;j++)printf("");for(k=0;k<=4-2*i;k++)printf("*");printf("\n");}}7.兩個乒乓球隊進行比賽,各出3人。甲隊為A、B、C3人,乙隊為X、Y、Z3人。已抽簽決定比賽名單。有人向隊員打聽比賽的名單,A說他不和X比,C說他不和X、Y比,請編程序找出3三隊選手的對陣名單。解:#include<>voidmain(){chari,j,k;/*i是A的對手,j是B的對手,k是C的對手*/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("orderisA--%c\tB--%c\tC--%c\n",i,j,k);}}}}第六章1.已知一個班10個學生的成績,要求輸入這10個學生的成績,然后求出它們的平均成績。解:#include<>main(){floata[10],sum,avg;inti;sum=;printf("Pleaseinputthestudentsscore:");for(i=0;i<10;i++){scanf("%f",&a[i]);sum=sum+a[i];}avg=sum/10;printf("Theaverageis:%f\n",avg);}2.已知一個班10個學生的成績,存放在一個一維數組中,要求找出其中成績最高的學生的成績和該生的序號。解:#include<>voidmain(){intch[10];inti,max=0,xh;printf("請輸入10個學生的成績:\n");for(i=0;i<10;i++){scanf("%d",&ch[i]);if(ch[i]>max){max=ch[i];xh=i;}}printf("成績最高為:%d\n",max);printf("該生的序號為:%d\n",xh);}3.有3個學生,上4門課,要求輸入全部學生的各門課成績,并分別求出每門課的平均成績。解:#include<>#include<>#defineRENSHU3#defineKECHENG4voidmain(){floatchengji[4][4];inti,j;printf("\n請按人輸入(一次輸入一個人所有課程的成績)成績(%d人,%d門課程):",RENSHU,KECHENG);for(i=0;i<RENSHU;i++){printf("\n第%d人:",i+1);for(j=0;j<KECHENG;j++)scanf("%f",&chengji[i][j]);}for(j=0;j<KECHENG;j++){chengji[RENSHU][j]=0;for(i=0;i<RENSHU;i++)chengji[RENSHU][j]+=chengji[i][j];chengji[RENSHU][j]=chengji[RENSHU][j]/RENSHU;}for(i=0;i<=RENSHU;i++){for(j=0;j<KECHENG;j++)printf("%",chengji[i][j]);printf("\n");}printf("\n");}4.已知5個學生的4門課的成績,要求求出每個學生的平均成績,然后對平均成績從高到低將各學生的成績記錄排序。解:#include<>voidmain(){inti,j,k;floata[5][5]={{78,79,90,67},{60,76,89,63},{86,75,96,56},{54,63,86,96},{63,96,98,97}};floatsum,t;for(i=0;i<5;i++){for(j=0;j<5;j++)printf("%12f",a[i][j]);printf("\n");}for(i=0;i<5;i++){sum=0;for(j=0;j<4;j++)sum=sum+a[i][j];a[i][4]=sum/4;}for(k=0;k<4;k++)for(i=0;i<4-k;i++)if(a[i][4]<a[i+1][4]) for(j=0;j<5;j++){t=a[i][j];a[i][j]=a[i+1][j];a[i+1][j]=t;}for(i=0;i<5;i++){for(j=0;j<5;j++)printf("%12f",a[i][j]);printf("\n");}}5.將一個數組的值按逆序重新存放,例如,原來順序為:8,6,5,4,1。要求改為:1,4,5,6,8。解:#include<>voidmain(){inti,a[10],temp;for(i=0;i<10;i++)scanf("%d",&a[i]);for(i=0;i<10;i++)printf("%4d",a[i]);for(i=0;i<5;i++){temp=a[i];a[i]=a[9-i];a[9-i]=temp;}for(i=0;i<10;i++)printf("%4d",a[i]);printf("\n");}6.有個15數按由小到大順序存放在一個數組中,輸入一個數,要求用折半查找法找出該數組中第幾個元素的值。如果該數不在數組中,則輸出"無此數"。解:#include<>

intmain()

{inta[15]={15,14,13,12,11,10,9,8,7,6,5,4,3,2,1};

intkey,mid,star=0,end=15-1;

printf("enteralookfornumber:\n");

scanf("%d",&key);

if(key>a[0]||key<a[end])

{printf("無此數\n");}

else

{while(star<=end)

{mid=(star+end)/2;

if(key==a[mid]){printf("這個數在第%d\n",mid);break;}

elseif(key>a[mid]){end=mid-1;}

else{star=mid+1;}}

if(star>end)

{printf("無此數\n");}

}

}7.輸出以下圖案:*************************解:#include<>voidmain(){inti,j,k;chara[5][5];for(i=0;i<5;i++){for(j=0;j<5;j++){a[i][j]='*';printf("%c",a[i][j]);}printf("\n");for(k=1;k<=i+1;k++)printf("");}printf("\n");}8.有一篇文章,共有3行文字,每行有個80字符。要求分別統計出其中英文大寫字母、小寫字母、空格以及其它字符的個數。解:#include<>voidmain(){inti,j,upp,low,dig,spa,oth;chartext[3][80];upp=low=dig=spa=oth=0;for(i=0;i<3;i++){printf("\nPleaseinputline%d:\n",i+1);gets(text[i]);for(j=0;j<80&&text[i][j]!='\0';j++){if(text[i][j]>='A'&&text[i][j]<='Z')upp++;elseif(text[i][j]>='a'&&text[i][j]<='z')low++;elseif(text[i][j]>='0'&&text[i][j]<='9')dig++;elseif(text[i][j]=='')spa++;elseoth++;}}for(i=0;i<3;i++)printf("%s\n",text[i]);printf("uppercase:%d\n",upp);printf("lowercase:%d\n",low);printf("digitcase:%d\n",dig);printf("spacecase:%d\n",spa);printf("othercase:%d\n",oth);}9.有一行電文,已按下面規律譯成密碼:A->Za->zB->Yb->yC->Xc->x…即第1個字母變成第26個字母,第i個字母變成第(26-i+1)個字母。非字母字符不變。假如已知道密碼是Umtorhs,要求編程序將密碼譯回原文,并輸出密碼和原文。解:#include<>voidmain(){inti;charstr1[100],str2[100];gets(str1);for(i=0;str1[i]!='\0';i++)if(str1[i]>=65&&str1[i]<=90)str2[i]=155-str1[i];elseif(str1[i]>=97&&str1[i]<=122)str2[i]=219-str1[i];elsestr2[i]=str1[i];printf("%s\n%s\n",str1,str2);}10.編一程序,將兩個字符串連接起來,(1)用strcat函數;(2)不用strcat函數。解:(1)#include<>voidmain(){inti,j;charstr1[100],str2[100],str3[201];gets(str1);gets(str2);str3=strcat(str1,str2);printf("%s\n%s\n%s\n",str1,str2,str3);}(2)#include<>voidmain(){inti,j;charstr1[100],str2[100],str3[201];gets(str1);gets(str2);for(i=0;str1[i]!='\0';i++)str3[i]=str1[i];for(j=0;str2[j]!='\0';j++)str3[j+i]=str2[j];printf("%s\n%s\n%s\n",str1,str2,str3);}第七章1.寫兩個函數,分別求兩個整數的最大公約數和最小公倍數,用主函數調用這兩個函數,并輸出結果兩個整數由鍵盤輸入。解:#include<>intmaxyueshu(intm,intn){inti=1,t;for(;i<=m&&i<=n;i++){if(m%i==0&&n%i==0)t=i;}return(t);}intminbeishu(intm,intn){intj;if(m>=n)j=m;elsej=n;for(;!(j%m==0&&j%n==0);j++);returnj;}voidmain(){inta,b,max,min;printf("entertwonumberis:");scanf("%d,%d",&a,&b);max=maxyueshu(a,b);min=minbeishu(a,b);printf("max=%d,min=%d\n",max,min);}2.寫一個判斷素數的函數,在主函數輸入一個整數,輸出是否是素數的消息。解:#include<>intpsushu(intm){inti,t=1;for(i=2;i<m/2&&t==1;i++)if(m%i==0)t=0;returnt;}voidmain(){inta,s;printf("entersushuis\n");scanf("%d",&a);s=psushu(a);if(s==1)printf("aissushu\n");elseprintf("sisnotsushu\n");}3.寫一個函數,使給定的一個二維數組(3×3)轉置,即行列互換。解:#include<>intzhuangzhi(intb[3][3]){inti,j,t;for(i=0;i<3;i++)for(j=0;j>=i&&j<3-i;j++){t=b[i][j];b[i][j]=b[j][i];b[j][i]=t;}}voidmain(){inta[3][3];inti,j;for(i=0;i<3;i++)for(j=0;j<3;j++)scanf("%d",&a[i][j]);for(i=0;i<3;i++){for(j=0;j<3;j++)printf("%d",a[i][j]);printf("\n");}zhuangzhi(a);for(i=0;i<3;i++){for(j=0;j<3;j++)printf("%d",a[i][j]);printf("\n");}}4.寫一函數,使輸入的一個字符串按反序存放,在主函數中輸入和輸出字符串。解:#include<>voidmain(){charstr0[100];gets(str0);fanxu(str0);puts(str0);}fanxu(charstr1[100]){inti,t,j;charstr2[100];strcpy(str2,str1);t=strlen(str1);for(i=0,j=t-1;j>-1;i++,j--)str1[i]=str2[j];}5.寫一函數,將兩個字符串連接。解:#include<>lianjie(chara[100],b[100]){strcat(a,b);}voidmain(){charstr1[100],str2[100];gets(str1);gets(str2);lianjie(str1,str2);puts(str1);}6.寫一函數,將兩個字符串中的元音字母復制到另一個字符串,然后輸出。解:#include<>fuzhi(chara[100],b[100]){inti,j=0;for(i=0;a[i]!='\0';i++)if(a[i]==97||a[i]==101||a[i]==105||a[i]==111||a[i]==117||a[i]==65||a[i]==69||a[i]==73||a[i]==85){b[j]=a[i];j++;}}voidmain(){charstr1[100],str2[100];gets(str1);fuzhi(str1,str2);puts(str2);}7.寫一函數,輸入一個四位數字,要求輸出這四個數字字符,但每個數字間空一個空格。如輸入2008,應輸出"2_0_0_8"。解:#include<>voidinsert(charstr[]){inti;for(i=strlen(str);i>0;i--){str[2*i]=str[i];str[2*i-1]='';}printf("\noutput:\n%s",str);}voidmain(){charstr[80];printf("\ninputfourdigits:");scanf("%s",str);insert(str);}8.編寫一函數,由實參傳來一個字符串,統計此字符串中字母、數字、空格和其它字符的個數,在主函數中輸入字符串以及輸出上述結果。解:#include<>chartongji(charstr0[100],intb[4){inti;for(i=0;str0[i]!='\0';i++){if(str0[i]>=65&&str0[i]<=90||str0[i]>=97&&str0[i]<=122)b[0]++;elseif(str0[i]>=48&&str0[i]<=57)b[1]++;elseif(str0[i]==32)b[2]++;elseb[3]++;}}voidmain(){charstr1[100];staticinti,a[4];gets(str1);tongji(str1,a);printf("zimuShuziKonggeQita\n");for(i=0;i<4;i++)printf("%-8d",a[i]);printf("\n");}9.寫一函數,輸入一行字符,將此字符串中最長的單詞輸出。解:#include<>cechang(charstr1[100],word0[15]){inti=0,j=0,t=0;staticcharword1[15];for(;str1[i]!='\0';i++){if(!(str1[i]>=97&&str1[i]<=122||str1[i]>=65&&str1[i]<=90)){t=j;j=0;continue;}word1[j]=str1[i];j++;if(j>=t)strcpy(word0,word1);}}voidmain(){charstr0[100],longword[15];gets(str0);cechang(str0,longword);puts(longword);}10.寫一函數用"起泡法"對輸入的10個字符按由小到大的順序排列。解:#include<>intpaixu(intx[]){inti,j,t;for(j=1;j<10;j++)for(i=0;i<=9-j;i++)if(x[i]>x[i+1]){t=x[i+1];x[i+1]=x[i];x[i]=t;}}voidmain(){inty[10];inti;for(i=0;i<10;i++)scanf("%d",&y[i]);paixu(y);for(i=0;i<10;i++)printf("%5d",y[i]);printf("\n");}11.輸入10個學生5門課的成績,分別用函數實現下列功能:①計算每個學生平均分;②計算每門課的平均分;③找出所有50個分數中最高的分數所對應的學生和課程;解:#include<>floatx1[10],x2[5];floatpp(),cc(),find();voidmain(){charname[10][20],class[5][20];floatscore[10][5],max[5];inta[5],i,j;for(i=0;i<10;i++)gets(name[i]);for(j=0;j<5;j++)gets(class[j]);for(i=0;i<10;i++)for(j=0;j<5;j++)scanf("%f",&score[i][j]);pp(score);cc(score);find(score,max,a);for(i=0;i<10;i++){puts(name[i]);printf("%.3f\n",x1[i]);}for(j=0;j<5;j++){puts(class[j]);printf("%.3f\n",x2[j]);}for(j=0;j<5;j++){printf("%.3f\n",max[j]);puts(name[a[j]]);puts(class[j]);}}floatpp(floatf[10][5]){floatsum=0;inti,j;for(i=0,sum=0;i<10;i++){for(j=0;j<5;j++)sum=sum+f[i][j];x1[i]=sum/5;}}floatcc(floaty[10][5]){floatsum=0;inti,j;for(j=0;j<5;j++){for(i=0;i<10;i++)sum=sum+y[i][j];x2[j]=sum/10;}}floatfind(floatz[10][5],s[5];intt[5]){inti,j;for(j=0,s[j]=z[0][j];j<5;j++)for(i=0;i<10;i++)if(s[j]<z[i][j]){s[j]=z[i][j];t[j]=i;}}12.寫幾個函數:①輸入10個職工的姓名和職工號;②按職工號由小到大順序排序,姓名順序也隨之調整;③要求輸入一個職工號,用折半法找出該職工的姓名,從主函數輸入要查找的職工號,輸出該職工姓名。解:#include<>#defineN10find(inta[],b[]){inti,j,s,t,c[N][2];for(i=0;i<N;i++){c[i][1]=a[i];c[i][1]=i;}for(i=0;i<N;i++)for(j=0;j<N-i-1;j++)if(c[i][0]>c[i+1][0]){t=c[i][0];c[i][0]=c[i+1][0];c[i+1][0]=t;s=c[i][1];c[i][1]=c[i+1][1];c[i+1][1]=s;}for(i=0;i<N;i++)b[i]=c[i][1];return;}lookfor(inth[],k){inti,j;for(i=0;i<N;i++)if(h[i]-k==0)j=i;returnj;}voidmain(){intnumber[N],x[N],i,j,u,p;charname[N][20];for(i=0;i<N;i++){gets(name[i]);scanf("%d",&number[i]);}scanf("%d",&p);find(number,x);u=lookfor(number,p);for(i=0;i<N;i++){printf("%d",number[i]);puts(name[x[i]]);}puts(name[x[u]]);}13.輸入4個整數a,b,c,d,找出其中最大的數。用函數的遞歸調用來處理。解:#include<>voidmain(){intmax_4(inta,intb,intc,intd);inta,b,c,d,max;printf("Pleaseenterintergernumbers:");scanf("%d%d%d%d",&a,&b,&c,&d);max=max_4(a,b,c,d);printf("max=%d\n",max);}intmax_4(inta,intb,intc,intd){intmax_2(int,int);intm;m=max_2(a,b);m=max_2(m,c);m=max_2(m,d);return(m);}intmax_2(inta,intb){if(a>b)returna;elsereturnb;}14.用遞歸法將一個整數n轉換成字符串。例如,輸入整數2008,應輸出字符串"2008"。n的位數不確定,可以是任意位數的整數。解:#include<>#include<>intx[10];pf(unsignedlongm,intn){inty;if(n==0){y=(int)(m%10);x[0]=y;}else{y=(unsignedlong)((m-pf(m,n-1))/pow(10,n))%10;x[n]=y;}return(y);}voidmain(){unsignedlonga,b;inti,j,k;charc[11];scanf("%ld",&a);for(j=0,b=a;b>;j++,b/=10);pf(a,j-1);for(i=0,k=j-1;i<j;i++,k--)c[i]=x[k]+48;c[10]='\0';puts(c);}15.給出年、月、日,計算該日是該年的第幾天。解:#include<>intfind(intx,inty,intz){inti,t,s,days=0;if(x%4==0)t=1;elset=0;for(i=1;i<y;i++){if(i==2)s=2-t;elses=0;days=days+30+i%2-s;}days=days+z;return(days);}voidmain(){intyear,month,date,day;scanf("%d%d%d",&year,&month,&date);day=find(year,month,date);printf("THEDATEISTHE%dthDAYS\n",day);}第八章1.輸入三個整數,按由小到大的順序輸出。解:#include<>voidmain(){inta,b,c,*p1,*p2,*p3,t;scanf("%d,%d,%d",&a,&b,&c);p1=&a;p2=&b;p3=&c;if(*p1>*p2){t=p1;p1=p2;p2=t;}if(*p1>*p3){t=p1;p1=p3;p3=t;}if(*p2>*p3){t=p2;p2=p3;p3=t;}printf("%d,%d,%d\n",*p1,*p2,*p3);}2.輸入三個字符串,按由小到大的順序輸出。解:#defineN3#defineM20#include<>voidmain(){charstr0[N][M],str1[M],*p,*q;inti,l,m,n;q=str0;for(;p<q+N;p++)gets(p);l=strcmp(q,q+1);if(l>0){strcpy(str1,q);strcpy(q,q+1);strcpy(q+1,str1);}m=strcmp(q,q+2);if(m>0){strcpy(str1,q);strcpy(q,q+2);strcpy(q+2,str1);}n=strcmp(q+1,q+2);if(n>0){strcpy(str1,q);strcpy(q+1,q+2);strcpy(q+2,q+1);}for(p=q;p<q+N;p++)puts(p);}3.輸入10個整數,將其中最小的數與第一個數對換,把最大的數與最后一個數對換。寫三個函數;①輸入10個數;②進行處理;③輸出10個數。解:#include<>voidmain(){intnumber[10];input(number);max_min_value(number);output(number);}input(intnumber[10]){inti;printf("input10numbers:");for(i=0;i<10;i++)scanf("%d",&number[10]);}max_min_value(intarray[10]){int*max,*min,*p,*array_end;array_end=array+10;max=min=array;for(p=array+1;p<array_end;p++)if(*p>*max)max=p;elseif(*p<*min)min=p;*p=array[0];array[0]=*min;*min=*p;*p=array[9];array[9]=*max;*max=*p;return;}output(intarray[10]){int*p;printf("now,theyare:");for(p=array;p<=array+9;p++)printf("%d",*p);}4.有n個整數,使前面各數順序向后移m個位置,最后m個數變成前面m個數。寫一函數:實現以上功能,在主函數中輸入n個數和輸出調整后的n個數。解:#defineN10#include<>voidshift(float*p,intx){floata[N],*q,*o;inti;o=a;q=p;for(i=0;i<x;i++)*(o+i)=*(q+N-x+i);for(p=p+N-1;p>=q;p--)*p=*(p-x);for(i=0;i<x;i++)*(q+i)=*(o+i);return;}voidmain(){floatshuzhu[N],*u,*v;inth,i;u=v=shuzhu;scanf("%f",&h);for(;u<v+N;u++)scanf("%f",u);shift(v,h);for(u=v;u<v+N;u++)printf("%.2f",*u);printf("\n");}5.有n個學生圍成一圈,順序排號。從第1個學生開始報數(從1到3報數),凡報到3的學生退出圈子,到最后只留下一名學生,問最后留下的是原來的第幾號學生。解:#defineN5#include<>voidmain(){inti,j,k,a[N+1],*p;for(i=0,p=a;p<=a+N;i++,p++)*p=i;p=a+1;k=N;for(i=0,j=1;k!=1;j++){if(p>(a+N))p=a+1;if(*p!=0)i++;if((i-3)==0){*p=0;i=0;k--;}p++;}for(i=1;i<=N;i++)if(a[i]!=0)printf("Thelastnumberis%d\n",a[i]);}6.寫一函數,求一個字符串的長度。在主函數種輸入字符串,并輸出其長度。解:intstrlen(char*s){intn=0;while(*s){n++;s++;}returnn;}#include<>voidmain(){chars[255];gets(s);printf("長度是%d\n",strlen(s));}7.有一字符串a,內容為:"MynameisLijilin.",另有一字符串b,內容為:"Mr.ZhangHaolingisveryhappy."。寫一函數,將字符串b中從第5個到第17個字符復制到字符串a中,取代字符串a中第12個字符以后的字符。輸出新的字符串a。解:#defineN100#include<>#include<>voidmain(){voidchange_name(char*p1,char*p2);chara[N]="MynameisLijilin.",*p1;charb[N]="Mr.ZhangHaolingisveryhappy.",*p2;p1=a,p2=b;change_name(p1,p2);printf("%s\n",p1);}voidchange_name(char*p1,char*p2){strncpy(p1+11,p2+4,13);*(p1+23)='.';*(p1+24)=\0;}8.輸入一行文字,找出其中大寫字母、小寫字母、空格、數字以及其他字符各有多少。解:#include<>voidmain(){intupp=0,low=0,dig=0,spa=0,oth=0,i=0;char*p,s[20];printf("inputstring:");while((s[i]=getchar())!='\n')i++;p=&s[0];while(*p!='\n'){if((*p>='A')&&(*p<='Z'))++upp;elseif((*p>='a')&&(*p<='z'))++low;elseif(*p=='')++spa;elseif((*p>='0')&&(*p<='9'))++dig;else++oth;p++;}printf("uppercase:%d,lowercase:%d,space:%d,digit:%d,other:%d",upp,low,spa,dig,oth);}9.在主函數中輸入10個等長的字符串。用另一函數對它們排序,然后在主函數輸出這10個已排好序的字符串。解:#include<>#include<>voidmain(){inti;char*p[10],str[10][20];for(i=0;i<10;i++)p[i]=str[i];printf("input10strings:\n");for(i=0;i<10;i++)scanf("%s",p[i]);sort(p);printf("now,thesequenceis:\n");for(i=0;i<10;i++)printf("%s\n",p[i]);}sort(char*p[]){inti,j;chartemp;for(i=0;i<9;i++)for(j=0;j<9-i;j++)if(strcmp(*(p+j),*(p+j+1))>0){temp=*(p+j);*(p+j)=*(p+j+1);*(p+j+1)=temp;}}10.將n個數按輸入時順序的逆序排列,用函數實現。解:#include<>voidmain(){inti,n;char*p,num[20];printf("inputn:");scanf("%d",&n);printf("inputthesenumbers:\n");for(i=0;i<n;i++)scanf("%d",&num[i]);p=&num[0];sort(p,n);printf("now,thesequenceis:\n");for(i=0;i<n;i++)printf("%d",num[i]);}sort(char*p,intm){inti;chartemp,*p1,*p2;for(i=0;i<m/2;i++){p1=p+i;p2=p+(m-1-i);temp=*p1;*p1=*p2;*p2=temp;}}11.編一個函數inv,將數組a中n個整數按相反順序存放,用指針變量作為調用該函數時的實參。解:#include<>voidinv(int*a,intn){inttemp,*q,i=0;q=a+n-1;while(a+i<q){temp=*(a+i);*(a+i)=*q;*q=temp;i++;q--;}}voidmain(){inta[10]={3,7,9,11,0,6,7,5,4,2};intk,*p;printf("theoriginalarray:\n");for(p=a,k=0;k<10;k++)printf("%4d",*p++);p=a;inv(p,10);printf("thearrayhasbeeninverted:\n");for(p=a,k=0;k<10;k++)printf("%4d,",*p++);printf("\n");}12.輸入一個字符串,內有數字和非數字字符,例如:a123x45617960302tab5876將其中連續的數字作為一個整數,依次存放到一數組a中。例如,123放在a[0],456放在a[1],統計共有多少個整數,并輸出這些數。解:#include<>voidmain(){charstr[50],*pstr;inti,j,k,m,e10,digit,ndigit,a[10],*pa;printf("inputastring:\n");gets(str);printf("\n");pstr=&str[0];pa=&a[0];ndigit=0;i=0;j=0;while(*(pstr+i)!='\0'){if((*(pstr+i)>='0')&&(*(pstr+i)<='9'))j++;else{if(j>0){digit=*(pstr+i-1)-48;k=1;while(k<j){e10=1;for(m=1;m<=k;m++)e10*=10;digit+=(*(pstr+i-1-k)-48)*e10;k++;}*pa=digit;ndigit++;pa++;j=0;}}i++;}if(j>0){digit=*(pstr+i-1)-48;k=1;while(k<j){e10=1;for(m=1;m<=k;m++)e10*=10;digit+=(*(pstr+i-1-k)-48)*e10;k++;}*pa=digit;ndigit++;pa++;j=0;}printf("Thereare%dnumbersinthisline.Theyare:\n",ndigit);j=0;pa=&a[0];for(j=0;j<ndigit;j++)printf("%d",*(pa+j));printf("\n");}13.寫一函數,將一個3*3的整型二維數組轉置,即行列互換。解:#include<>voidmain(){inta[3][3],*p,i;printf("inputmatrix:\n");for(i=0;i<3;i++)scanf("%d%d%d",&a[i][0],&a[i][1],&a[i][2]);p=&a[0][0];move(p);printf("now,matrix:\n");for(i=0;i<3;i++)printf("%d%d%d\n",a[i][0],a[i][1],a[i][2]);}move(int*pointer){inti,j,t;for(i=0;i<3;i++)for(j=i;j<3;j++){t=*(pointer+3*i+j);*(pointer+3*i+j)=*(pointer+3*j+i);*(pointer+3*j+i)=t;}}}第九章1.定義一個結構體變量(包括年、月、日)。計算該日在本年中是第幾天注意閏年問題。解:struct{intyear;intmonth;intday;}date;voidmain(){intdays;printf("Inputyear,month,day:");scanf("%d,%d,%d",&,&,&;switch{case1:days=;break;case2:days=+31;

溫馨提示

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

評論

0/150

提交評論