




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
請參照本章例題,編寫一個C程序,輸出以下信息:VeryGood!解:mian(){pn*************************”)?printfC'VeryGood!\n^^);printf**************************")?編寫一個程序,輸入a、b、c三個值,輸出其中最大值。解:mian(){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);}第二章寫出以下程序運行的結果。main(){charcl='a',c2='b',c3='c',c4='\101',c5='\l16';printf(<4a%cb%c\tc%c\tabc\n,,,cI,c2,c3);printfC4\t\b%c%c,,,c4,c5);}解:aaMbbMLILJCCMMMMMMabcAUN要將"China"譯成密碼,譯碼規律是:用原來字母后面的第4個字母代替原來的字母.例如,字母"A"后面第4個字母是"E"."E"代替"A"。因此,"China"應譯為"Glmre”。請編一程序,用賦初值的方法使cl、c2、c3、c4、c5五個變量的值分別為,‘C'、'h'、'i'、'n'、'a',經過運算,使cl、c2、c3、c4、c5分別變為‘G'、'1'、'm'、'e',并輸出。解:#include<stdio.h>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",cI,c2,c3,c4,c5);)運行結果:密碼是Glmre2.8求下面算術表達式的值。x+a%3*(int)(x+y)%2/4設x=2.5,a=7,y=4.7(float)(a+b)/2+(int)x%(int)y設a=2,b=3,x=3.5,y=2.9寫出程序運行的結果。main(){inti,j,m,n;i=8;j=10;m=++i;n=j++;printfft%d,%d,%d,%d,,,i,j,m,n);}解:9,11,9,10第三章3.4用scanf下面的函數輸入數據,使a=3,b=7,x=8.5,y=71.82,cl='A',c2='a',問在鍵盤上如何輸入?main()(inta,b;floatx,y;charclc2;scanf("a=%d_b=%d",&a,&b);scanf("_x=%f_y=%e",&x,&y);scanf("_c1=%c_c2=%c",&cl,&c2);a=3_b=7_x=8.5_y=71.82_cl=A_c2=a3.6設圓半徑r=1.5,圓柱高h=3,求圓周長、圓面積、圓球表面積、圓球體積、圓柱體積。用scanf輸入數據,輸出計算結果,輸出時要求文字說明,取小數點后兩位數字。請編程序。main(){floatr,h,Cl,Sa,Sb,Va,Vb;scanf("%f,%f",&r,&h);Cl=2*3.14*r;Sa=3.14*r*r;Sb=4*Sa;Va=4*3.14*r*r*r/3;Vb=Sa*h;printf("Cl=%.2f\n",Cl);printf("Sa=%.2f\nSb=%.2f\nVa=%.2f\nVb=%.2f\n",Sa,Sb,Va,Vb);)3.7輸入一個華氏溫度,要求輸出攝氏溫度。公式為c=5(F-32)/9輸出要求有文字說明,取位2小數。main(){floatF,c;scanf("%f',&F);c=5*(F-32)/9;printf("c=%.2f",c);)3.8編程序,用getchar函數讀入兩個字符給cl、c2,然后分別用函數和函數輸出這兩個字符。并思考以下問題:(1)變量cl、c2應定義為字符型或整形?抑二者皆可?(2)要求輸出cl和c2值的ASCII碼,應如何處理?用putchar函數還是printf函數?(3)整形變量與字符變量是否在任何情況下都可以互相代替?如:charcl,c2;與intcl,c2;是否無條件的等價?#include"stdio.h"main(){charcl,c2;cl=getchar();c2=getchar();putchar(cl);putchar(,\n,);putchar(c2);putchar(,\n,);#include"stdio.h"main(){charcl,c2;c1=getchar();c2=getchar();printf("cl=%dc2=%d\n",cl,c2);printf("cl=%cc2=%c\n",cl,c2);}第四章什么是算術運算?什么是關系運算?什么是邏輯運算?解:略。C語言中如何表示“真”和“假”?系統如何判斷一個量的“真”和“假”?解:設有一個邏輯表達式,若其結果為“真”,則以1表示;若其結果為“假”,則以0表示。但是判斷一個邏輯量的值時,以0代表“真”,以非。代表“假二例如3&&5的值為“真”,系統給出3&&5的值為1。寫出下面各邏輯表達式的值。設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&&b+c/2解:011014.4有3個整數a、b、c,由鍵盤輸入,輸出其中最大的數。解:方法一#include<stdio.h>main(){inta,b,c;printf("請輸入3個整數:");scanf("%d,%d,%d",&a,&b,&c);if(a<b)if(b<c)printf("max=%d\n",c);elseprintf("max=%d\n",b);elseif(a<c)printf("max=%d\n",c);elseprintf("max=%d\n",a);方法二:使用條件表達式,可以使程序更加簡明、清晰。程序如下:#include<stdio.h>main(){inta,b,c,temp,max;printf("請輸入3個整數:");scanf("%d,%d,%d",&a,&b,&c);temp=(a>b)?a:b; /*將a和b中的大者存人temp中*/max=(temp>c)?temp:c;/*將a和b中的大者與c比較,取最大者*/printf("3個整數的最大數是%d\n",max);4.5有一函數:寫一程序,輸入x值,輸出y值。解:#include<stdio.h>main(){intx,y;printf("輸入x:");scanf("%d",&x);if(x<l) /*x<l*/{y=x;printf("x=%3d,y=x=%d\n",x,y);)elseif(x<10) /*l^x-10*/{y=2*x-l;printf("x=%3d,y=2*x-1=%d\n",x,y);else/*x210*/else{y=3*x-l1;printf("x=%3d,y=3*x-11=%d\n",x,y);4.6給一個百分制成績,要求輸出等級'A'、'B'、'C'、'D,、'E'。90分以上為'A',80?90分為'B',70?79分為'C',60分以下為‘D"解:程序如下:#include<stdio.h>main(){floatscore;chargrade;printf("請輸入學生成績:");scanf("%f',&score);while(score>100ll(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:case0:grade=,E,;)printf("成績是%5.1f,相應的等級是%c。\n",score,grade);)說明:對輸入的數據進行檢查,如小于0或大于100,要求重新輸入。(int)(score/10)的作用是將(score/10)的值進行強制類型轉換,得到一個整型值。4.7給定一個不多于5位的正整數,要求:①求它是幾位數;②分別打印出每一位數字;③按逆序打印出各位數字。例如原數為321,應輸出123o解:#include<stdio.h>main(){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=l;printf("place=%d\n",place);ten_thousand=num/10000;thousand=num/l000%10;hundred=num/100%10;ten=num%100/10;indiv=num%10;switch(place){ case 5: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;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;4.8企業發放的獎金根據利潤提成。利潤【低于或等于10萬元時,獎金可提成10%;利潤高于10萬元,低于20萬元(100000<1<200000)時,其中10萬元按10%提成,高于10萬元的部分,可提成7.5%;200000<lW400000時,其中20萬元仍按上述辦法提成(下同),高于20萬元的部分按5%提成;400000<IW600000時,高于40萬元的部分按3%提成;600000〈IW1000000時,高于60萬的部分按1.5%提成;1>1000000時,超過100萬元的部分按1%提成。從鍵盤輸入當月利潤I,求應發放獎金總數。要求:(1)用if語句編程序;(2)用switch語句編程序。解:計算利潤時,要特別注意不同利潤的不同提成比例。例如,利潤為15萬元,其中有10萬元按10%的比例提成,另外5萬元則按7.5%提成。(1)用if語句編程序。#include<stdio.h>main()
{longi;floatbonus,bon1,bon2,bon4,bon6,bon10;bon1=100000*0.1;bon2=bon1+100000*0.075;bon4=bon2+200000*0.05;bon1=100000*0.1;bon2=bon1+100000*0.075;bon4=bon2+200000*0.05;bon6=bon4+200000*0.03;bon10=bon6+400000*0.015;printf("請輸入利潤i:");scanf("%ld",&i);if(i<=100000)bonus=i*0.1;金*/elseif(i<=200000)bonus=bonl+(i-l00000)*0.075;*/elseif(i<=400000)bonus=bon2+(i-200000)*0.05;*/elseif(i<=600000)bonus=bon4+(i-400000)*0.03;*//*利潤為10萬元時的獎金*//*利潤為20萬元時的獎金*//*利潤為40萬元時的獎金*//*利潤為60萬元時的獎金*//*利潤為100萬元時的獎金*//*利潤在10萬元以內按0.1提成獎/*利潤在10萬至20萬元時的獎金/*利潤在20萬至40萬元時的獎金/*利潤在40萬至60萬元時的獎金elseif(i<=1000000)bonus=bon6+(i-600000)*0.015; /*利潤在60萬至100萬元時的獎金*/elsebonus=bon10+(i-1000000)*0.01; /*利潤在100萬元以上時的獎金*/printf(w獎金是%10.2f\n",bonus);此題的關鍵在于正確寫出每一區間的獎金計算公式。例如利潤在10萬元至20萬時,獎金應由兩部分組成:①利潤為10萬元時應得的獎金。即100000x0.1;②10萬元以上部分應得的獎金。即(num-100000)x0.075o同理,20萬?40萬這個區間的獎金也應由兩部分組成:①利潤為20萬元時應得的獎金,即100000x0.1x10萬x0.075;②20萬元以上部分應得的獎金,即(num-200000)x0.05。程序中先把10萬、20萬、40萬、60萬、100萬各關鍵點的獎金計算出來,即bonl、bon2、bon4^bon6、honlO;然后再加上各區間附加部分的獎金。(2)用switch語句編程序。輸入利潤i,確定相應的提成等級branch根據branch確定獎金值0獎金=i*0.11獎金=bonl+(i-105)*0.0752 獎金=bon2+(i-2*105)*0.0534 獎金=bon4+(i-4*105)*0.0356 獎金=bon6+(i-6*105)*0.01578910獎金=bonl0+(i-106)*0.01輸出獎金#include<stdio.h>main(){longi;floatbonus,bonl,bon2,bon4,bon6,bon10;intc;bon1=100000*0.1;bon2=bon1+100000*0.075;bon4=bon2+200000*0.05;bon6=bon4+200000*0.03;bon10=bon6+400000*0.015;printf("請輸入利潤i:");scanf("%ld",&i);c=i/100000;if(c>10)c=10;switch(c){case0:bonus=1*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("獎金是%10.2f",bonus);}4.9輸入4個整數,要求按由大到小的順序輸出。解:此題采用依次比較的方法排出其大小順序。在學習了循環和數組以后,可以有更多的排序方法。#include<stdio.h>main(){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);5.10有4個圓塔,圓心分別為(2,2)、(-2,2)、(2,-2)、(-2,-2),圓半徑為lo這4個塔的高度分別為10m。塔以外無建筑物。今輸入任一點的坐標,求該點的建筑高度(塔外的高度為零)。程序如下:#include<stdio.h>main(){inth=10;floatxl=2,y1=2,x2=-2,y2=2,x3=-2,y3=-2,x4=-2,y4=-2,x,y,dI,d2,d3,d4;printf("請輸入一個點(x,y):");scanf("%f,%f",&x,&y);dl=(x-xl)*(x-xl)+(y-yl)*(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);}第五章循環控制輸入兩個正整數m和n,求其最大公約數和最小公倍數。main(){longm,n,i=l,j,s;scanf("%ld,%ld",&m,&n);for(;i<=m&&i<=n;i++){if(m%i==0&&n%i==0)s=i;}if(m>=n)j=m;elsej=n;for(;!(j%m==0&&j%n==0);j++);printf("s=%ld,j=%ld\n",s,j);輸入一行字符,分別統計出其中英文字母、空格、數字和其他字符的個數。#include"stdio.h"main(){charc;inti=O,j=O,k=O,l=O;while((c=getchar())!=,\n,){if(c>=65&&c<=90llc>=97&&c<=122)i++;elseif(c>=48&&c<=57)j++;elseif(c==32)k++;else!++;}printf(,'i=%d,j=%d,k=%d,l=%d\n",i,j,k,l);)求Sn=a+aa+aaa+…+aa…aaa(有n個a)之值,其中a是一個數字。例如:2+22+222+2222+22222(n=5),n由鍵盤輸入。#include"math.h"main(){intn,sum=0,i=l,s=2;scanf("%d",&n);while(i<=n){sum=sum+s;s=s+2*pow(10,i);i++;)printf("sum=%d\n",sum);)求,(即求l!+2!+3!+4!+5!+~+20!)main(){intn,i=l;longsum=O,s=l;scanf("%d",&n);while(i<=n){s=s*i;sum=sum+s;i++;}printf("sum=%ld\n",sum);)求main(){doublei=1,j=1,k=1,s1=0,s2=0,s3=0,sum;for(;i<=100;i++)sl=sl+i;for(;j<=50;j++)s2=s2+j*j;for(;k<=10;k++)s3=s3+l/k;sum=sl+s2+s3;printf("sum=%f\n",sum);打印出所有"水仙花數",所謂”水仙花數"是指一個三位數,其各位數字立方和等于該本身。例如:153是一個水仙花數,因為153=lA3+5A3+3A3o#include"math.h"main(){intx=100,a,b,c;while(x>=100&&x<1000){a=0.01*x;b=10*(0.01*x-a);c=x-l00*a-l0*b;if(x==(pow(a,3)+pow(b,3)+pow(c,3)))printf("%5d",x);x++;})一個數如果恰好等于它的因子之和,這個數就稱為"完數"。例如,6的因子為1、2、3,而6=1+2+3,因此6是"完數"。編程序找出1000之內的所有完數,并按下面格式輸出其因子:itsfactorsare1、2、3main(){intm,i,j,s;for(m=6;m<l0000;m++){s=l;for(i=2;i<m;i++)if(m%i==0)s=s+i;if(m-s==0){printf("%5ditsfastorsare1",m);for(j=2;j<m;j++)if(m%j==0)printf("%d",j);printf("\n");}或main(){intm,i,j,s;for(m=6;m<1000;m++){s=m-l;for(i=2;i<m;i++)if(m%i==O)s=s-i;if(s==O){printf("%5ditsfastorsare1",m);for(j=2;j<m;j++)if(m%j==0)printf("%d",j);printf("\n");}有一分數序列:求出這個數列的前20項之和。main(){inti=l,n;doublet,x=1,y=2,s,sum=0;scanf("%ld",&n);while(i<=n){s=y/x;sum=sum4-s;t=y;y=y+x;x=t;i++;}printf("%f\n",sum);}一球從100米高度自由下落,每次落地后返回原高度的一半,再落下。求它在第10次落地時共經過多少米?第10次反彈多高?main(){inti,n;doubleh=100,s=100;scanf("%d",&n);for(i=l;i<=n;i++){h*=0.5;if(i==1)continue;s=2*h+s;}printf("h=%f,s=%f\n",h,s);)猴子吃桃問題。猴子第一天摘下若干個桃子,當即吃了一半,還不過癮,又多吃了一個。第二天早上又將剩下的桃子吃掉一半,又多吃一個。以后每天早上都吃了前一天剩下的一半零一個。到第10天早上想再吃時,見只剩下一個桃子了。求第一天共摘多少桃子。main(){inti=l,sum=0;for(;i<=l0;sum=2*suirn-l,i++);printf("sum=%d\n",sum);用迭代法求。求平方根的迭代公式為:要求前后兩次求出的得差的絕對值少于0.000010#include"math.h"main(){floatx0,xl,a;scanf("%f',&a);xl=a/2;do{x0=x1;xl=(x0+a/x0)/2;}while(fabs(xO-xl)>=0.00001);printf("%.3f\n",x1);)用牛頓迭代法求方程在1.5附近的根。main(){doublex,y;x=1.5;do{y=2*x*x*x-4*x*x+3*x-6;x=x-y/(6*x*x-8*x+3);}while(y!=O);printf("x=%.3f\n",x);用二分法求方程在(-10,10)之間的根main(){doublexl,x2,yl,y2;x1=-10;x2=10;do{yl=2*xl*xl*xl-4*xl*xl+3*xl-6;xl=xl-yl/(6*xl*xl-8*xl+3);}while(y1!=0);do{y2=2*x2*x2*x2-4*x2*x2+3*x2-6;x2=x2-y2/(6*x2*x2-8*x2+3);}while(y2!=0);printf("xl=%.3f,x2=%.3f\n",xl,x2);打印以下圖案#include"math.h"main(){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");第六章數組用篩法求之內的素數。main(){inti,j,a[100];for(i=2;i<100;i++){a[i]=i;for(j=2;j<=i;j++){ifg)if(a[i]%j==O)break;或#include"math.h"main(){staticinti,j,k,a[98];for(i=2;i<100;i++){a[i]=i;k=sqrt(i);for(j=2;j<=a[i];j++)if(a[i]%j==O)break;if(j>=k+l)printf("%5d",a[i]);)printf("\n");)用選擇法對10個整數從小到大排序。main(){inti,j,a[10],t;for(i=0;i<10;i++)scanf("%d",&a[i]);for(j=l;j<10;j++)for(i=0;i<=9-j;i++)if(a[i]>a[i+l]){t=a[i+l];a[i+1]=a[i];a[i]=t;}for(i=0;i<10;i++)printf("%5d",a[i]);}或main(){staticinta[10],i,j,k,t;for(i=l;i<ll;i++)scanf("%d",&a[i]);for(j=l;j<10;j++)for(i=l;i<=10-j;j++)if(a[i]>a[i+l]){t=a[i+l];a[i+l]=a[i];a[i]=t;}for(i=l;i<ll;i++)printf("%d",a[i]);printf("\n");main(){inti=0,j=0,a[3][3],s1,s2;for(i=0;i<3;i++)for(j=0;j<3;j++)scanf("%d",&a[i][j]);sl=a[0][0]+a[l][l]+a[2][2];s2=a[0][2]+a[l][l]+a[2][0];printf("sl=%d,s2=%d\n",sl,s2);)或main(){staticinti,j,sl,s2,a[3][3];for(i=l;i<=3;i++)for(j=l;j<=3;j++)scanf("%d",&a[i][j]);sl=a[l][l]+a[2][2]+a[3][3];s2=a[l][3]+a[2][2]+a[3][l];printf("%d,%d\n",sl,s2);已有一個已排好的數組今輸入一個數要求按原來排序的規律將它插入數組中。main(){staticinta[10]={1,7,8,17,23,24,59,62,101};intscanf("%d",&a[9]);for(i=9;i>0;i—)if(a[i]<a[i-l]){t=a[i-1];a[i-1]=a[i];a[i]=t;}for(i=0;i<10;i++)printf("%5d",a[i]);printf("\n");)或main(){staticinta[5]={1,4,5,6,7};inti,t,b;scanf("%d",&b);for(i=0;i<5;i++){if(b<=a[i]){t=a[i];a[i]=b;b=t;}printf("%d",a[i]);}printf("%d",b);將一個數組的值按逆序重新存放,例如,原來順序為:8,6,5,4,lo要求改為:1,4,5,6,80main(){inti,b[10];for(i=0;i<10;i++)scanf("%d",&b[i]);for(i=9;i>-l;i—)printf("%5d",b[i]);printf("\n");}6.6打印出以下楊輝三角形(要求打印出10行)。1TOC\o"1-5"\h\z1 11 2 13 16 4 11 5 10 105 1main(){staticintm,n,k,b[15][15];b[O][l]=l;for(m=1;m<15;m++){for(n=1;n<=m;n++){b[m][n]=b[m-l][n-l]+b[m-l][n];printf("%-5d",b[m][n]);}printf("\n");或main(){inti,j,n,k,a[10][10];statica[l][l]=l;for(k=2,k<11;k++)for(i=2;i<=k;i++)for(j=2;j<=i;j++)a[i]U]=a[i-l][j-l]+a[i-l][j];for(k=1;k<11;k++)for(i=l;i<=k;i++)for(j=l;j<=i;j++)printf("%d",a[i][j]);
6.7打印“魔方陣”,所謂魔方陣是指這樣的方陣,它的每一行、每一列和對角線之和均相等。例如,三階魔方陣為TOC\o"1-5"\h\z8 1 65 79 2要求打印出由1?n2的自然數構成的魔方陣。解:#include<stdio.h>main(){inta[16][16],i,i,k,p,m,n;P=l;while(p==l)的商數*/{printf("Entern(n=1~15):");scanf("%d",&n);if((n!=O)&&(n<=15)&&(n%2!=0)))for(i=l;i<=n;i++)for(j=l;j<=n;j++)a[i][j]=O;j=n/2+l;a[l]lj]=l;/*要求階數為/*要求階數為1~15p=0;/*初始化*//*建立魔方陣*/j=j+l;if((i<l)&&(j>n)){i=i+2;j=j-l;)else{if(i<l)i=n;if(j>n)j=l;}if(a[i][j]==O)a[i][j]=k;else{i=i+2;j=j-l;a[i]Ul=k;})/*輸出魔方陣*//*輸出魔方陣*/{for(j=l;j<=n;j++)printf("%4d",a[i][j]);找出一個二位數組中的鞍點,即該位置上的元素在該行上最大,在該列上最小,也可能沒有鞍點。main(){inta[5][5],b[5],c[5],d[5][5],k=0,l=0;inti,j;for(i=0;i<5;i++)for(j=0;j<5;j++)scanf("%d",&d[i][j]);for(i=0;i<5;i++)for(j=0;j<5;j++,a[i][j]=d[i][j]);for(i=0,k=0;i<5;i++,k++)for(j=0;j<4;j++){if(a[i][j]>=a[i][j+l])b[k]=a[i][j+l]=a[i]U];elseb[k]=a[i][j+l];}for(j=0,l=0;j<5;j++,l++)for(i=0;i<4;i++){if(a[i][j]<=a[i+l]U])c[l]=a[i+l][j]=a[i]|j];elsec[l]=a[i+l][j];)for(i=0,k=0;i<5;i++,k++)for(j=0,l=0;j<5;j++,l++)if(d[i][j]-b[k]==O){if(d[i][j]-c[l]==O)printf("d[%d][%d]=%d\n",i,j,d[i][j]);elseprintf("d[%d][%d]=%disnotandi\n",i,j,d[i][j]);有個15數按由小到大順序存放在一個數組中,輸入一個數,要求用折半查找法找出該數組中第幾個元素的值。如果該數不在數組中,則打印出“無此數”#include"math.h"main(){static inti,j,m,a[15]={l,4,9,l3,21,34,55,89,144,233,377,570,671,703,812);scanf("%d",&m);for(j=0;j<15;j++)printf("%4d",a[j]);printf("\n");i=7;while(fabs(i-7)<8){if(m<a[7]){if(a[i]-m==O){printf("itisat(%d)\n",i+1);break;}i—;)elseif(m>a[7]){if(a[i]-m==O){printf("itisat(%d)\n",i+1);break;}i++;}elseprintf("8\n");)if(fabs(i-7)-8==0)printf("Thereisnot\n");)有一篇文章,共有3行文字,每行有個80字符。要求分別統計出其中英文大寫字母、小寫字母、空格以及其它字符的個數。main(){inti,j=0,k=0,l=0,m=0,n=0;charstr0[301],strl[100],str2[l00],str3[l00];gets(strl);gets(str2);gets(str3);strcat(strO,str1);strcat(strO,str2);strcat(strO,str3);for(i=0;str0[i]!=,\0,;i++){if(str0[i]>=65&&str0[i]<=90)j++;elseif(str0[i]>=97&&str0[i]<=122)k++;elseif(strO[i]>=48&&strO[i]<=57)1++;elseif(strO[i]==32)m++;elsen++;}printf("DaxieXiaoxieShuziKonggeQita\n");printf("%5d%7d%5d%6d%4d\n",j,k,l,m,n);)7.11打印以下圖案*************************main(){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皿);}printf("\n");for(k=1;k<=i+1;k++)printf("\40");}printf("\n");}7.12有一行電文譯文下面規律譯成密碼:A->Za->zB->Yb->yC->Xc->x???即第一個字母變成第26個字母,第i個字母變成第(26-i+l)個字母。非字母字符不變,要求編程序將密碼回原文,并打印出密碼和原文。main(){inti;charstrl[100],str2[100];gets(strl);for(i=0;strl[i]!=,\0,;i++)if(strl[i]>=65&&strl[i]<=90)str2[i]=155-strl[i];elseif(strl[i]>=97&&strl[i]<=122)str2[i]=219-strl[i];elsestr2[i]=strl[i];printf("%s\n%s\n",strl,str2);}編一程序,將兩個字符串連接起來,不要strcat函數。main(){inti,j;charstr1[100],str2[100],str3[201];gets(strl);gets(str2);for(i=0;strl[i]!=,\0,;i++)str3[i]=strl[i];for(j=0;str2[j]!=,\0,;j++)str3[j+i]=str2[j];printf("%s\n%s\n%s\n",str1,str2,str3);}編一個程序,將兩個字符串SI和S2比較,如果S1>S2,輸出一個正數;S1=S2,輸出0;SKS2,輸出一個負數。不要用strcpy函數。兩個字符串用gets函數讀入。輸出的正數或負數的絕對值應是相比較的兩個字符串相對應字符的ASCII碼的差值。例如,'A'與'C'相比,由于‘A'<'C',應輸出負數,由于‘A'與'C'的碼差值為2,因此應輸出"-2"。同理:"And"和"Aid"比較,根據第2個字符比較結果,'n比,「大5,因此應輸出"5"。#include<stdio.h>#include<string.h>main(){inti,resu;charsl[100],s2[100];printf("\ninputstring1:");gets(sl);printf("\nInputstring2:");gets(s2);i=0;while(s1[i]==s2[i]&&sl[i]!=,\0,)i++;if(sl[i]==,\0,&&s2[i]==,0,)resu=O;elseresu=sl[i]-s2[i];printf("\nresult:%d\n",resu);)編寫一個程序,將字符數組s2中的全部字符拷貝到字符數組si中,不用strcpy函數。拷貝時,'\0'也要拷貝過去,'\0'后面的字符不拷貝。解:#include"stdio.h"main(){charsi[80],s2[80];inti;printf("Inputs2:");scanf("%s",s2);for(i=0;i<strlen(s2);i++)sl[i]=s2[i];printf("sl:%s\n",sl);第七章函數寫兩個函數,分別求兩個整數的最大公約數和最小公倍數,用主函數調用這兩個函數,并輸出結果兩個整數由鍵盤輸入。maxyueshu(m,n)intm,n;{inti=l,t;for(;i<=m&&i<=n;i++){if(m%i==0&&n%i==0)t=i;return(t);minbeishu(m,n)intm,n;{intj;if(m>=n)j=m;elsej=n;for(;!(j%m==0&&j%n==0);j++);returnj;)main(){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);求方程的根,用三個函數分別求當b2-4ac大于0、等于0、和小于。時的根,并輸出結果。從主函數輸入a、b、c的值。#include"math.h"floatyishigen(m,n,k)floatm,n,k;{floatxl,x2;x1=(-n+sqrt(k))/(2*m);x2=(-n-sqrt(k))/(2*m);printf("twoshigenisxl=%.3fandx2=%.3f\n",xl,x2);}floatdenggen(m,n)floatm,n;{floatx;x=-n/(2*m);printf("denggenisx=%.3f\n",x);)floatxugen(m,n,k)floatm,n,k;{floatx,y;x=-n/(2*m);y=sqrt(-k)/(2*m);printf("twoxugenisxl=%.3f+%.3fiandx2=%.3f-%.3fi\n",x,y,x,y);{floata,b,c,q;printf("inputabcis");scanf("%f,%f,%f,,&a,&b,&c);printf("\n");q=b*b-4*a*c;if(q>0)yishigen(a,b,q);elseif(q-0)denggen(a,b);elsexugen(a,b,q);)寫一個判斷素數的函數,在主函數輸入一個整數,輸出是否是素數的消息。psushu(m)intm;{inti=2,t;for(;i<=m;i++)if(m%i-0&&i<m)break;if(m-i==0)t=l;elset=0;returnm;{inta,s;printf("entersushuis\n");scanf("%d",&a);s=psushu(a);if(s==l)printf("aissushu\n");elseprintf("sisnotsushu\n");}寫一個函數,使給定的一個二維數組(3*3)轉置,即行列互換。intzhuangzhi(b)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];bU][i]=t;})main(){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");})寫一函數,使輸入的一個字符串按反序存放,在主函數中輸入輸出字符串。main(){charstr0[100];gets(strO);fanxu(strO);puts(strO);)fanxu(strl)charstrl[100];{intcharstr2[l00];strcpy(str2,strl);t=strlen(strl);for(i=0,j=t-1;j>-l;i++,j—)strl[i]=str2[j];}寫一函數,將兩個字符串連接。lianjie(a,b)chara[100],b[100];{strcat(a,b);}main(){charstrl[100],str2[100];gets(str1);gets(str2);lianjie(strl,str2);puts(strl);)寫一函數,將兩個字符串中的元音字母復制到另一個字符串,然后輸出。fuzhi(a,b)chara[100],b[100];{inti,j=O;for(i=0;a[i]!=,\0,;i++)if(a[i]==97lla[i]==101lla[i]==105lla[i]==llllla[i]==117lla[i]==65lla[i]==69lla[i]==73lla[i]==85){b[j]=a[i];j++;}}main(){charstrl[100],str2[100];gets(strl);fuzhi(strl,str2);puts(str2);}寫一函數,輸入一個四位數字,要求輸出這四個數字字符,但每兩個數字間空格。如輸入1990,應輸出“1_9_9_0"。charf(b)charb[4];{inti=0;for(;i<4;i++){printf("");printf("%c",b[i]);}printf("\n");main(){inta,u,v,w,t;charc[4];scanf("%4d",&a);u=a*0.001;v=0.01*(a-lOOO*u);w=(a-l000*u-100*v)*0.1;t=a-l000*u-l00*v-10*w;c[0]=u+48;c[l]=v+48;c[2]=w+48;c[3]=t+48;f(c);}編寫一函數,由實參傳來一個字符串,統計此字符串中字母、數字、空格和其它字符的個數,在主函數中輸入字符串以及輸出上述結果。chartongji(strO,b)charstr0[100];intb[4];{inti;for(i=0;str0[i]!=,\0,;i++){if(strO[i]>=65&&strO[i]<=9OllstrO[i]>=97&&strO[i]<=122)b[0]++;elseif(str0[i]>=48&&str0[i]<=57)b[l]++;elseif(strO[i]==32)b[2]++;elseb[3]++;}}main(){charstrl[100];staticinti,a[4];gets(strl);tongji(strl,a);printf("zimuShuziKonggeQita\n");for(i=0;i<4;i++)printf("%-8d",a[i]);printf("\n");}寫一函數,輸入一行字符,將此字符串中最長的單詞輸出。cechang(strl,word0)charstrl[100],word0[15];{inti=O,j=O,t=O;staticcharword1[15];for(;strl[i]!=,\0,;i++){if(!(strl[i]>=97&&strl[i]<=122llstrl[i]>=65&&strl[i]<=90)){t=j;j=0;continue;}word1[j]=strl[i];j++;if(j>=t)strcpy(wordO,word1);}main(){charstrO[100],longword[15];gets(strO);cechang(strO,longword);puts(longword);}寫一函數用起泡法對輸入的個字符按由小到大的順序排列。intpaixu(x)intx[];{inti,j,t;for(j=l;j<10;j++)for(i=0;i<=9-j;i++)if(x[i]>x[i+1]){t=x[i+l];x[i+l]=x[i];x[i]=t;})main(){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");}用牛頓迭代法求根。方程為:,系數a,b,c,d由主函數輸入。求X在1附近的一個實根。求出后由主函數輸出。doubleqigen(s,t,u,v)ints,t,u,v;{doublex,y;x=l;do{y=s*x*x*x+t*x*x+u*x+v;x=x-y/(3*s*x*x+2*t*x+u);}while(y!=0);returnx;)main(){inta,b,c,d;doublex;scanf("%d,%d,%d,%d",&a,&b,&c,&d);x=qigen(a,b,c,d);printf("x=%.3f\n",x);用遞歸方法求n階勒讓德多項式的值遞歸公式為floatp(xO,n)intn;floatxO;{floaty;if(n==0lln==l)if(n==l)y=xO;elsey=l;elsey=((2*n-1)*xO*p(xO,n-1)-(n-1)*p(x0,n-2))/n;return(y);)main(){floatx,yO;inta,i;scanf("%f,%d",&x,&a);yO=p(x,a);printf("y0=%.3f\n",y0);輸入10個學生5門課的成績,分別用函數求:①每個學生平均分;②每門課的平均分;③找出最高分所對應的學生和課程;④求平均分方差;8=[SXiA2]/n-(SXi/n)A2,為一學生的平均分floatxl[10],x2[5];floatpp(),cc(),find(),xx();main(){charname[10][20],class[5][20];float score[10][5],o,k=0,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);o=xx(k);for(i=0;i<10;i++){puts(name[i]);printf("%.3f\n",xl[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]);}printf("o=%.3f\n",o);floatpp(f)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];xl[i]=sum/5;})floatcc(y)floaty[10][5];{floatsum=0;inti,j;for(j=0;j<5;j++){for(i=0;i<10;i++)sum=sum+y[i][j];xl[j]=sum/10;})floatfind(z,s,t)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;}}floatxx(q)floatq;{floatf=0,e=0;inti;for(i=0;i<10;i++){e=xl[i]*xl[i]+e;f=f+xl[i];}q=e/10-(f/10)*(f/10);retum(q);)寫幾個函數:①輸個職工的姓名和職工號;②按職工號由小到大順序排序,姓名順序也隨之調整;③要求輸入一個職工號,用折半法找出該職工的姓名,從主函數輸入要查找的職工號,輸出該職工姓名0#defineN10find(a,b)inta[],b[];{int ⑵;for(i=0;i<N;i++){c[i][l]=a[i];c[i][l]=i;)for(i=0;i<N;i++)for(j=0;j<N-i-l;j++)if(c[i][O]>c[i+l][O]){t=c[i][O];c[i][O]=c[i+l][O];c[i+l][O]=t;s=c[i][l];c[i][l]=c[i+l][l];c[i+l][l]=s;}for(i=0;i<N;i++)b[i]=c[i][l];return;)lookfor(h,k)inth[],k;{inti,j;for(i=0;i<N;i++)if(h[i]-k==O)j=i;returnj;)main(){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]]);}寫一函數,輸入一個十六進制數,輸出相應的十進制數。#include"math.h"intx;ff(shu)charshu[];{inti=strlen(shu)-1,sum=O;for(;i>-l;i++){if{if(48<=shu[i]<=57)sum=sum+(shu[i]-48)*pow(16,(i-1));elseif(65<=shu[i]<=90)sum=sum+(shu[i]-55)*pow(16,(i-1));elseif(97<=shu[i]<=102)sum=sum+(shu[i]-87)*pow(16,(i-1));x=l;}elsex=0;returnx;main(){charshufu[100];ints;gets(shufu);s=ff(shufu);if(x)printf("s(D)=%d\n",s);elseprintf("Thenumberisnotox\n");)用遞歸法將一個整數n轉換成字符串。例如,輸入486,應輸出字符串“486"。n的位數不確定,可以是任意位數的整數。#include"math.h"intx[10];pf(m,n)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;}retum(y);}main(){unsignedlonga,b;inti,j,k;charc[l1];scanf("%ld",&a);for(j=0,b=a;b>0.1;j++,b/=10);pf(a,j-l);for(i=0,k=j-l;i<j;i++,k—)c[i]=x[k]+48;c[10]=,\0,;puts(c);}或#include"math.h"charx[ll];pf(m,o)unsignedlongm;into;{intj,i;for(i=o-l,j=0;i>-l;i—,j++)x[i]=(int)((unsignedlong)(m/pow(10,j))%10)+48;return;)main(){unsignedlonga,b;intj,i;scanf("%ld",&a);for(j=0,b=a;b>0.1;j++,b/=10);pf(a,j);puts(x);printf("%d\n",j);}或#include"math.h"intx[10];unsignedlongm;pf(n)intn;{inty;if(n==0){y=m%10;x[0]=y;}else{y=(unsignedlong)((m-pf(n-1))/pow(10,n))%10;x[n]=y;}return(y);}main(){unsignedlonga;inti,j,k;charc[l1];scanf("%ld",&m);for(j=0,a=m;a>0.1;j++,a/=10);pf(H);for(i=0,k=j-1;i<j;i++,k—)c[i]=x[k]+48;c[10]=,\0,;puts(c);}給出年、月、日,計算該日是該年的第幾天。intfind(x,y,z)intx,y,z;{inti,t,s,days=O;if(x%4==0)t=l;elset=0;for(i=l;i<y;i++){if(i==2)s=2-t;elses=0;days=days+30+i%2-s;)days=days+z;return(days);)main(){intyear,month,date,day;scanf("%d%d%d",&year,&month,&date);day=find(year,month,date);printf("THEDATEISTHE%dthDAYS\n",day);第八章指針輸入三個整數,按由小到大的順序輸出。main(){inta,b,c,*pl,*p2,*p3,t;scanf("%d,%d,%d",&a,&b,&c);p1=&a;p2=&b;p3=&c;if(*pl>*p2){t=pl;pl=p2;p2=t;}if(*pl>*p3){t=pl;pl=p3;p3=t;}if(*p2>*p3){t=p2;p2=p3;p3=t;}printf("%d,%d,%d\n",*pI,*p2,*p3);)或main(){inta,b,c,*pl,*p2,*p3,t;scanf("%d,%d,%d",&a,&b,&c);p1=&a;p2=&b;p3=&c;if(a>b){t=*p1;*pl=*p2;*p2=t;}if(a>c){t=*pI;*pl=*p3;*p3=t;}{t=*p2;*p2=*p3;*p3=t;}printf("%d,%d,%d\n",a,b,c);)輸入三個字符串,按由小到大的順序輸出#defineN3#defineM20main(){charstrO[N][M],strl[M],*p,*q;inti,l,m,n;q=str0;for(;p<q+N;p++)gets(p);l=strcmp(q,q+l);if(l>0){strcpy(strl,q);strcpy(q,q+1);strcpy(q+l,strl);}m=strcmp(q,q+2);if(m>0){strcpy(strl,q);strcpy(q,q+2);strcpy(q+2,strl);}n=strcmp(q+l,q+2);if(n>0){strcpy(strl,q);strcpy(q+1,q+2);strcpy(q+2,q+1);}for(p=q;p<q+N;p++)puts(p);}輸入10個整數,將其中最小的數與第一個數對換,把最大的數與最后一個數對換。寫三個函數;①輸入10個數;②進行處理;③輸出10個數。f(x,n)intx[],n;{int*p0,*pl,i,j,t,y;i=j=x[0];p0=pl=x;for(y=0;y<n;y++){if(x[y]>i){i=x[y];p0=&x[y];}elseif(x[y]<j){j=x[y];pl=&x[y];}}t=*p0;*p0=x[n-1];x[n-1]=t;t=*p1;*p1=x[0];x[0]=t;return;)main(){inta[10],u,*r;for(u=0;u<10;u++)scanf("%d",&a[u]);f(a,10);for(u=0,r=a;u<10;u++,r++)printf("%d",a[u]);printf("\n");}有n個整數,使前面各數順序向后移m個位置,最后m個數變成前面m個數,見圖。寫一函數:實現以上功能,在主函數中輸入n個數和輸出調整后的n個數。#defineN10voidshift(p,x)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;}main(){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");)8.5有n人圍成一圈,順序排號。從第1個人開始報數(從1到3報數),凡報到3的人退出圈子,問最后留下的是原來的第幾號的那位。#defineN5main(){inti,j,k,a[N+l],*p;for(i=0,p=a;p<=a+N;i++,p++)*p=i;p=a+l;k=N;for(i=0,j=l;k!=l;j++){if(p>(a+N))p=a+1;if(*p!=O)i++;if((i-3)==0){*p=O;i=O;k—;}P++;}for(i=l;i<=N;i++)if(a[i]!=O)printf("Thelastnumberis%d\n",a[i]);}8.7有一字符串,包含n個字符。寫一函數,將此字符串中從第m個字符開始的全部字符復制成為另一個字符串。#include"stdio.h"#defineN10main(){chara[N+1],b[N+1],*p,*q;intm;gets(a);scanf("%d",&m);p=a+m;q=b;strcpy(q,p);puts(q);}第九章1定義一個結構體變量(包括年、月、日)。計算該日在本年中是第幾天,注意閏年問題。解:Struct{intyear;intmonth;intday;}date;main(){intdays;printfC'Inputyear,month,day:,5);scanf("%d,%D,%cT,&date.year,&date.month,&date.day);switch(date.month){case1:days=date.day; break;days=date.day+31; break;days=date.day+59; break;break;days=date.day+90;break;days=date.day+120;break;days=date.day+31;break;days=date.day+181; break;days=date.day+212; break;days=date.day+243;break;days=date.day+273; break;days=date.day+304; break;days=date.day+334; break;)if((date.year%4==0&&date.year%100!=0lldate.year%400==0)&&date.month>=3)days+=l;printf(4t\n%d/%d is the %dth dayin%d.M,date.month,data.day,days,date,year);}寫一個函數days,實現上面的計算。由主函數將年、月、日傳遞給days函數,計算后將日數傳回主函數輸出。解:structy_m_d{intyear:intmonth;intday;}date;
intdays(structy_m_ddate1){intsum;switch(data.month){casel:sum=datel.day;break;case2:sum=date1.day+31;break;case3:sum=date1.day+59;break;case4:sum=date1.day+90;break;case5:sum=date1.day+120;break;case6:sum=date1.day+151;break;case7:sum=date1.day+181;break;case8:sum=date1.day+212;break;case9:sum=date1.day+243;breakcase10:sum=datel.day+243;breakcase11:sum=datel.day+243;breakcase12:sum=date1.day+243;break);編寫一個函數print,打印一個學生的成績數,該數組中有5個學生的數據記錄,每個記錄包括num、name^sore[3],用主函數輸入這些記錄,用print函數輸出這些記錄。解:#defineN5structstudent{charnum[6];charname[8];intscore[
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
評論
0/150
提交評論