C語言程序設(shè)計(jì)習(xí)題參考答案第二版杜友福_第1頁
C語言程序設(shè)計(jì)習(xí)題參考答案第二版杜友福_第2頁
C語言程序設(shè)計(jì)習(xí)題參考答案第二版杜友福_第3頁
C語言程序設(shè)計(jì)習(xí)題參考答案第二版杜友福_第4頁
C語言程序設(shè)計(jì)習(xí)題參考答案第二版杜友福_第5頁
已閱讀5頁,還剩194頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

一、名詞解釋(1)程序P1(2)程序設(shè)計(jì)P1(3)機(jī)器語言P1(4)匯編程(5)高級(jí)語言P2(6)編譯程序P3(7)解釋程序P3(8)算法P4(9)結(jié)構(gòu)化的程序設(shè)計(jì)P9二、簡(jiǎn)述題1.設(shè)計(jì)程序時(shí)應(yīng)遵循哪些基本原則P4答:正確性、可靠性、簡(jiǎn)明性、有效性、可維護(hù)性、可移植性。2.算法的要素是什么算法具有哪些特點(diǎn)答:算法的要素是:操作與控制結(jié)構(gòu);算法的特點(diǎn)有:有窮性、確定性、有效性、有零個(gè)或多個(gè)輸入、有一個(gè)或多個(gè)輸出。3.算法的表示形式有哪幾種答:算法的表示形式有:自然語言、傳統(tǒng)流程圖、偽代碼、結(jié)構(gòu)化的流程圖(N_S流程圖,盒圖)。4.有哪三種基本結(jié)構(gòu)YY答:三種基本結(jié)構(gòu)是:順序結(jié)構(gòu)、選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)。NS流程圖最大的區(qū)別是什么答:N-S流程圖去掉了在傳統(tǒng)流程圖中常用的流程線,使得程序的結(jié)構(gòu)顯得晰、簡(jiǎn)單。1.有3個(gè)數(shù)a,b,c,要求按由大到小的順序把它們輸出。三個(gè)數(shù)給a,b,c輸入一個(gè)數(shù)給xno3.求1+2+3+…+100的值。輸入下一個(gè)數(shù)給xsisimax<x當(dāng)i小于等于100當(dāng)i小于等于10時(shí)5.求下列分段函數(shù)的值。3X(X<1)輸入一個(gè)數(shù)給xi=100Yesmain(){inta,k,m;a=10;k=2;m=1;a=(k+m)*k/(k-m);printf("%d\n",a);}/*主函數(shù)*//*程序開始*//*定義三個(gè)用來存放整數(shù)的變量*//*在屏幕上打印出變量a的值*//*程序結(jié)束*/數(shù)據(jù)類型、運(yùn)算符與表達(dá)式1~10:BCDCB11~20:ADDAADDBCADBADC21~28:DABADCDD二、填空題1.字母L或字母l 3.在程序運(yùn)行過程中,其值可以在一定的范圍內(nèi)變化的量。 習(xí)題三順序程序設(shè)計(jì)1~10:BCCBCCCDCC1.printf()、scanf() 3.域?qū)挘丛诟袷阶址凹右粋€(gè)整數(shù),如%5d 4.‘\0’ 5.e、g 6.6 8.* 9.-、+ 10.i 然后進(jìn)答:程序參見文件Cprogram\#include""main()scanf("%d",&x);h=x/3600;m=x%3600/60;s=x%60;printf("%ds=%d:%d:%d!\n",x,h,m,s);}2.編寫程序,讀入三個(gè)整數(shù)給變量a、b、c,然后交換它們中的數(shù),把a(bǔ)中原來答:程序參見文件Cprogram\#include""main()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í)題四選擇結(jié)構(gòu)程序設(shè)計(jì) 1~7:DDCADDC1.595959 4.2 5.66.a(chǎn)=2,b=17.passwarn 8.1 if(a<60)m=1;elseif(a<70)m=2;elseif(a<80)m=3;elseif(a<90)m=4;elsem=5;CprogramCprogram\#include""main()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);}Cprogram\#include""main()scanf("%d",&a);m=0;switch(a/10)case8:m++;case7:m++;case6:m++;case5:case4:case3:case2:case1:case0:m++;}printf("m=%d\n",m);}2.編寫程序,從鍵盤輸入一個(gè)整數(shù),打印出它是奇數(shù)還是偶數(shù)。答:程序參見文件Cprogram\#include""main()scanf("%d",&a);if(a%2==1)printf("%disaoddnumber!\n",a);printf("%disaevennumber!\n",a);}3.編寫程序,從鍵盤輸入一個(gè)字符,判別它是否是小寫字母,如果是,將它轉(zhuǎn)換為大寫字母;如果不是,不轉(zhuǎn)換。然后輸出最后得到的字符。答:程序參見文件Cprogram\#include""main()scanf("%c",&ch);if(ch>='a'&&ch<='z')ch=ch-32;printf("%c\n",ch);}4.編寫程序,從鍵盤輸入一個(gè)不多于4位的正整數(shù),打印出它是幾位數(shù)。答:程序參見文件Cprogram\#include""main()scanf("%d",&x);if(x>1000)n=4;elseif(x>100)n=3;elseif(x>10)n=2;elsen=1;printf("%d\n",n);}答:程序參見文件Cprogram\#include""main()floattax;scanf("%d",&income);if(income<=2000)tax=0;elseif(income<=5000)tax=*(income-2000);tax=*(5000-2000)+*(income-5000);printf("tax=%f\n",tax);}6.回文是指正讀和反讀都一樣的數(shù)或字符串。例如:12321、55455、35553等都是回文。請(qǐng)編寫一個(gè)程序,從鍵盤上讀取一個(gè)包含五位數(shù)字的長(zhǎng)整數(shù),并判斷它是否是回文。(提示:用除法運(yùn)算和求余運(yùn)算把一個(gè)數(shù)的個(gè)位、十位、百位、千位等分別分離出來。)答:程序參見文件Cprogram\#include""main()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);printf("%ldisnothuiwen!\n",x);}習(xí)題五循環(huán)結(jié)構(gòu)程序設(shè)計(jì) 1.8 2.4321 3.X 4.-15.236.52 7.5 8.3 1~8:ADDABDDA1.編寫程序,打印出所有的“水仙花數(shù)”,所謂“水仙花數(shù)”是指一個(gè)三位數(shù),其各位數(shù)字的立方之和等于該數(shù)本身。例如,407是一個(gè)“水仙花數(shù)”,因?yàn)椋?07=43+03+73。(注:若將題意改為打印出最大的或最小的“水仙花數(shù)”,則應(yīng)將循環(huán)語句作如何調(diào)整)。答:程序參見文件Cprogram\#include""main()for(k=100;k<=999;k++)答:程序參見文件Cprogram\#include""main()intkflagn;for(k=1980;k<=2880;k++)fflag{printf("%5d",k);n++;if(n%10==0)printf("\n");}}printf("\n");}答:程序參見文件Cprogram\#include""main()ntntsfor(n=3;n<=101;n+=2)printf("s=%d\n",s);}n答:程序參見文件Cprogram\#include""main()zfmnifloats,t;fz=2;fm=1;s=0;scanf("%d",&n);for(i=1;i<=n;i++)stfz=fz+fm;fm=fz-fm;}printf("s=%f\n",s);}答:程序參見文件Cprogram\#include""voidmain()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);}答:程序參見文件Cprogram\#include""voidmain()floats=80,h=s/2;for(n=2;n<=8;n++)h=h/2;}printf("s=%f\n",s);}7.用牛頓迭代法求高次方程f(X)=23x-4x2+5x-18=0的根。牛頓迭代公式為:X=X-f(X)/f’(X),其中f’(X)為導(dǎo)函數(shù)在點(diǎn)X的值。nn-1n-1n-1n-1n-1答:程序參見文件Cprogram\#include""#include""main()x=8;x=8;答:程序參見文件Cprogram\#include""#include""main(){floata,b,c,fa,fb,fc;{printf("Entera,b:");scanf("%f,%f",&a,&b);fa=2*a*a*a-3*a*a+7*a-13;fb=2*b*b*b-3*b*b+7*b-13;}while(fa*fb>0);{c=(a*fb-b*fa)/(fb-fa);fc=2*c*c*c-3*c*c+7*c-13;if(fa*fc>0)}while(fabs(fc)>;printf("x=%f,y=%f\n",c,fc);}9.有這樣一些真分?jǐn)?shù):其分子和分母都是兩位正整數(shù),且分子的個(gè)位數(shù)與分母的十位數(shù)相同,如果把該分?jǐn)?shù)的分子的個(gè)位數(shù)與分母的十位數(shù)同時(shí)去掉,所得到的新的分?jǐn)?shù)正好與原分?jǐn)?shù)的值相等,如26/65=2/5。試編程求出所有滿足上述條件的真答:程序參見文件Cprogram\#include""main(){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項(xiàng)之和。答:程序參見文件Cprogram\#include""main()inti;s=0,t=0;for(i=1;i<=10;i++){t=t+i;s=s+t;}printf("s=%f\n",s);}答:程序參見文件Cprogram\#include""main()intsikflagfor(i=3;i<=100;i++)for(k=2;k<i;k++)if(i%k==0)gbreakfflag{s=s+i;printf("%4d",i);}}printf("\nsum=%d\n",s);}答:程序參見文件Cprogram\#include""voidmain(){intf1=1,f2=1,f3;while(f3<=800)f1=f2;f2=f3;}onaccidnf}習(xí)題六數(shù)組1~10:BDBCDCDBAB11~20:BCDCCDABBC21~30:CCADCABBCB31~41:BDDDDCDCCBA i 01000001000001000001 134somestring*test1.定義一個(gè)有20個(gè)元素的整型數(shù)組,分別求出下標(biāo)為奇數(shù)和偶數(shù)的元素的平均答:程序參見文件Cprogram\#include""#include""main(){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/;},若出現(xiàn),則輸出第一次出現(xiàn)的位置,否則,輸出nofound。答:程序參見文件Cprogram\#include""#include""main()ntisafor(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;#defineN10}if(i==20)printf("nofound\n");for(i=0;i<20;i++)printf("%3d",a[i]);printf("\n");}3.設(shè)有一個(gè)已排好序的數(shù)組,今輸入一個(gè)數(shù),要求按原來排序的規(guī)律將它插入到答:程序參見文件Cprogram\#include""#defineN10main()編一程序,從一個(gè)已排好序的數(shù)組中刪去某個(gè)位置上的元素。答:程序參見文件Cprogram\#include""main()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];a[j]=0;for(i=0;i<N;i++)printf("%3d",a[i]);printf("\n");}5.將一個(gè)二維數(shù)組的行、列互換后存到另一個(gè)二維數(shù)組中并輸出結(jié)果。答:程序參見文件Cprogram\#include""main()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.編一程序,在一個(gè)二維數(shù)組中,查找第一次出現(xiàn)的負(fù)數(shù),并輸出該數(shù)及其所在puts(s);答:程序參見文件Cprogram\#include""main()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;編程將一個(gè)字符數(shù)組中的字母,按由大到小的順序進(jìn)行排序。答:程序參見文件Cprogram\#include""#include""main(){chart,s[]="ABCDIVBHFBVCNLKFDB";inti,j,n;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)計(jì)其中有多少個(gè)英語單詞,單詞之間用空格隔開。答:程序參見文件Cprogram\#include""#include""main()intw,i,n;gets(s);i=0;n=0;w=0;while(s[i]!='\0')ifsi)w=0;/*endofaword*/if(w==0)/*beginofaword*/}printf("numberofword:%d\n",n);}9.編程將兩個(gè)一維數(shù)組中的對(duì)應(yīng)元素的值相減后進(jìn)行輸出。答:程序參見文件Cprogram\#include""#include""main(){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");}答:程序參見文件Cprogram\#include""main(){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])k=0;for(i=0;i<10;i++)if(a[i]!=-888){printf("%4d",a[i]);a[k++]=a[i];}求二維數(shù)組中這樣一個(gè)元素的位置:它在行上最小,在列上也最小。如果沒有這樣的元素則輸出相應(yīng)的信息。答:程序參見文件Cprogram\#include""#include""main(){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++)43211for(k=0;k<5;k++)if(a[i][k]<a[i][j])agbreakfor(k=0;k<4&&flag;k++)if(a[k][j]<a[i][j])agbreakfflag{fz++;printf("mina[%d][%d]=%d\n",i,j,a[i][j]);}}}if(fz==0)printf("nofound!");}12.在一個(gè)二維數(shù)組中形成并輸出如下矩陣:1121111A=3211154321答:程序參見文件Cprogram\#include""#defineN5main()intj,i,a[N][N];for(i=0;i<N;i++)for(j=0;j<N;j++)a[i][j]=1;elseif(j==0)a[i][j]=i+1;elsea[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");}}答:程序參見文件Cprogram\#include""main(){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++)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.編程輸出兩個(gè)字符串中對(duì)應(yīng)位置上相同的字符。答:程序參見文件Cprogram\#include""main()chara[81]="acbsbdvhfejbvewvkbewljbv";charb[81]="anbdxwdbviuerkjvbfidbvuiebik";printf("string1:%s\n",a);printf("string2:%s\n",b);printf("string3:");while(a[i]!='\0'&&b[i]!='\0'){if(a[i]==b[i])printf("%c",a[i]);}printf("\n");}答:程序參見文件Cprogram\#include""#include""main()chara[81]="acdfhjklmopxz";charb[81]="anbdx";printf("string1:%s\n",a);printf("string2:%s\n",b);while(b[i]!='\0')while(a[j]<b[i]&&a[j]!='\0')j++;k=strlen(a);while(k>=j)a[j]=b[i];}printf("string3:%s\n",a);}答:程序參見文件Cprogram\#include""#include""main()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++];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);}1~10:BDCDD11~20:AABBB21~31:CDAACBDBACABAACDDABB習(xí)題七函數(shù)A 1.編一函數(shù),判斷某年是否為閏年,若是返回1,否則返回0。答:程序參見文件Cprogram\#include<>fun(intm)main()for(n=1987;n<2009;n++)if(fun(n))printf("year:%disaleap!\n",n);}2.編寫計(jì)算三角形面積的程序,將計(jì)算面積定義成函數(shù)。三角形面積公式為:A=答:程序參見文件Cprogram\#include<>#include<>floatfun(floata,floatb,floatc)s=(a+b+c)/2;最小公倍數(shù),用主函數(shù)調(diào)用這兩個(gè)函數(shù),并輸出結(jié)果,兩個(gè)整數(shù)由鍵盤輸入。答:程序參見文件Cprogram\#include<>#include<>intfmax(intm,intn)r=m%n;while(r!=0)mnnr;r=m%n;}returnn;}intfmin(intm,intn){returnm*n/fmax(m,n);}main()scanf("%d%d",&a,&b);printf("fmaxis:%d\n",fmax(a,b));printf("fminis:%d\n",fmin(a,b));}4.編寫函數(shù),根據(jù)整型形參m的值,計(jì)算公式t=1-1-1-…-1的值。例如,若m=5,則應(yīng)輸出。3*3m*m答:程序參見文件Cprogram\#include<>floatfun(intm)inti;for(i=2;i<=m;i++)t=i/i;returnt;}main(){printf("t(5)=%f\n",fun(5));}答:程序參見文件Cprogram\#include<>floatfun(intm)floats=0,t=1;for(i=1;i<=m;i++){t=t/i;s=s+t;}returns;}main(){printf("s(5)=%f\n",fun(5));}6.編寫函數(shù),利用公式:計(jì)算π的近似值,當(dāng)某一項(xiàng)的值小于10-5時(shí),認(rèn)為達(dá)到精度要求。答:程序參見文件Cprogram\#include<>doublefun(){intn;doublepi=1,t=1;n=1;ttnn);pi=pi+t;n++;}while(t>1e-5);return2*pi;}main(){printf("pi=%f\n",fun());}7.編一函數(shù),判斷某一整數(shù)是否為回文數(shù),若是返回1,否則返回0。所謂回文數(shù)是該數(shù)正讀與反讀是一樣的。例如12321就是一個(gè)回文數(shù)。答:程序參見文件Cprogram\#include<>#include<>inthuiwen(intm)while(t){n++;t=t/10;}編寫一個(gè)求水仙花數(shù)的函數(shù),然后通過主函數(shù)調(diào)用該函數(shù)求100到999之間的全部水仙花數(shù)。所謂水仙花數(shù)是指一個(gè)三位數(shù),其各位數(shù)字立方和等于該數(shù)本身。答:程序參見文件Cprogram\#include<>#include<>intfun8(intm)a=m/100;b=m/10%10;c=m%10;if(m==a*a*a+b*b*b+c*c*c)return1;return0;}main()for(i=100;i<=999;i++)if(fun8(i))printf("%5d",i);printf("\n");}2,2,3,5答:程序參見文件Cprogram\#include<>#include<>voidprimedec(intm)while(m>1){printf("%d",n);m=m/n;}n++;}printf("\n");}main(){intx;scanf("%d",&x);primedec(x);}答:程序參見文件Cprogram\#include<>#include<>intprime(intm)for(n=2;n<m;n++)if(m%n==0)breakreturnf;}main()for(x=100;x<=200;x++)if(prime(x))printf("%5d",x);if(n%6==0)printf("\n");}printf("\n");}答:程序參見文件Cprogram\#include<>#include<>intreverse(intm)while(m){x=x*10+m%10;m=m/10;}returnx;}main()scanf("%d",&w);printf("%d==>%d\n",w,reverse(w));}12.編一函數(shù),將一個(gè)字符數(shù)組中的數(shù)字字符存于另一個(gè)字符數(shù)組中。答:程序參見文件Cprogram\#include<>#include<>voidfun12(chara[],charb[])for(j=0;j<strlen(b);j++)if(b[j]>='0'&&b[j]<='9')a[i++]=b[j];a[i]='\0';}main(){chars1[81],s2[81];gets(s2);fun12(s1,s2);puts(s2);puts(s1);}13.編一函數(shù),統(tǒng)計(jì)一個(gè)字符串中字母、數(shù)字、空格和其它字符的個(gè)數(shù)。答:程序參見文件Cprogram\#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);}main()charsgets(s1);fun13(s1);}14.用遞歸的方法實(shí)現(xiàn)求1+2+3+…+n。答:程序參見文件Cprogram\#include<>#include<>intfun14(intm)ifm1)w=1;w=fun14(m-1)+m;returnw;}main()scanf("%d",&x);printf("1+2+...+%d=%d\n",x,fun14(x));}答:程序參見文件Cprogram\#include<>#include<>voidfun15(intm)printf("%c",'0'+m%10);}}main()scanf("%d",&x);printf("%d==>",x);fun15(x);printf("\n");}16.用遞歸的方法計(jì)算下列函數(shù)的值:n>0p(x,n)=x-x2+x3-x4+……(-1)n-1xn>0答:程序參見文件Cprogram\#include""#include""floatp(floatx,intn)ifn0)f;f=p(x,n-1)+pow(-1,n-1)*pow(x,n);returnf;}main(){printf("p(2,3)=%f",p(2,3));}答:程序參見文件Cprogram\#include""#include""floatp(floatx,intn)ifn0)f;f=p(x,n-1)*x;returnf;}main(){printf("p(2,8)=%f",p(2,8));}18.根據(jù)勒讓德多項(xiàng)式的定義計(jì)算Pn(x)。n和x為任意正整數(shù),把計(jì)算Pn(x)定1n=0nx((2n-1)P(x)-(n-1)P(x))/n)n-1n-2n=1n>1答:程序參見文件Cprogram\#include""floatp(floatx,intn)ifn0)f;elseif(n==1)f=x;elsefnpxnnpxn-2))/n;returnf;}main(){printf("p(2,8)=%f",p(2,8));}習(xí)題八用戶標(biāo)識(shí)符的作用域和存儲(chǔ)類一.選擇題1—10:ADBBCCABDB11-20:DBABCCCDAC二.填空題1.靜態(tài)局部變量的作用域是從定義點(diǎn)到函數(shù)體(或復(fù)合語句)結(jié)束。 2.凡在函數(shù)中未指定存儲(chǔ)類別的變量,其隱含的存儲(chǔ)類別為auto。 3.變量的作用域是指變量的有效范圍,在作用域內(nèi)可以引用該變量。按作用域來說,變量可分為①局部變量和②全局變量。4.根據(jù)函數(shù)能否被其它源文件調(diào)用,函數(shù)可分為①外部函數(shù)和②靜態(tài)(或內(nèi)部) 5.下列程序的輸出結(jié)果是2468。 #include<>#defineMAX_COUNT4voidfun();main(){intcount;for(count=1;count<=MAX_COUNT;count++)fun();}voidfun(){staticinti;i+=2;printf("%d",i);} 6.下列程序的輸出結(jié)果是2,5,1,2,3,-2。 main(){inta=3,b=2,c=1;c-=++b;b*=a+c;main(){intb=5,c=12;c/=b*2;a-=c;printf(“%d,%d,%d,”,a,b,c);a+=--c;}printf(“%d,%d,%d\n”,a,b,c);}7.下列程序的輸出結(jié)果是。#include<>a=5staticinta=5;main(){printf(“a=%d\n”,a);p1();p2();}p1(){printf(“a*a=%d\n”,a*a);a=2;}p2(){printf(“a*a*a=%d\n”,a*a*a);} 8.下列程序的輸出結(jié)果是20,10。 #include<>{intx=20;printf(“%d,”,x);}printf(“%d\n”,x);} 9.下列程序由兩個(gè)文件組成,其運(yùn)行結(jié)果是x=2。 x}staticintx=2;main(){sub();printf(“x=%d\n”,x);} 10.下列程序由兩個(gè)文件組成,其運(yùn)行結(jié)果是x=25,y=25。 voidadd(void)#include<>intx=10;inty=10;voidadd(void){y=x+10;x*=2;}main(){externvoidsub();x+=5;add();sub();printf(“x=%d,y=%d\n”,x,y);}voidsub(void){externintx;x-=5;} 11.下列程序由兩個(gè)文件組成,其運(yùn)行結(jié)果是。 #include<>intx=10;inty=10;add:y=25;sub:y=5;main:x=25;externvoidsub();{inty=5;y=x+10;x*=2;printf(“add:y=%d;”,y);}main(){x+=5;add();sub();printf(“main:x=%d;main:y=%d\n”,x,y);}externintx;voidsub(void){inty=5;x-=y;printf(“sub:y=%d;”,y);}12.下列程序由兩個(gè)文件組成,其運(yùn)行結(jié)果是。#include<>staticintx=2;inty=3;externvoidadd2();voidadd1();main()y=8x=4y=6inadd2x=20{add1();add2();add1();add2();printf(“inmainx=%dy=%d\n”,x,y);}voidadd1(void){x+=2;y+=3;printf(“inadd1x=%dy=%d”,x,y);}staticintx=10;voidadd2(void){externinty;x+=10;y+=2;printf(“inadd2x=%dy=%d\n”,x,y);}1—10:DDCBCCABBB習(xí)題九編譯預(yù)處理11-20:BBCBB 1.下列程序的輸出結(jié)果是100010。 #defineN10#defines(x)x*x#definef(x)(x*x)main(){inti1,i2;i1=1000/s(N);i2=1000/f(N);printf(“%d%d\n”,i1,i2);}#defineMYSWAP(z,x,y){z=x;x=y;y=z;}abfloata=5,b=16,c;MYSWAP(c,a,b); 3.下列程序的輸出結(jié)果是11。 #defineNX2+3#defineNYNX*NXmain(){inti=0,m=0;for(;i<NY;i++)m++;printf(“%d\n”,m);} 4.下列程序的輸出結(jié)果是7。 #defineMAX(x,y)(x)>(y)(x):(y)main(){inta=5,b=2,c=3,d=3,t;t=MAX(a+b,c+d)*10;printf(“%d\n”,t);} 5.下列程序的輸出結(jié)果是MIN。 #defineMAX(a,b)a>b#defineEQU(a,b)a==b#defineMIN(a,b)a<bmain(){inta=5,b=6;if(MAX(a,b))printf(“MAX\n”);if(EQU(a,b))printf(“EQU\n”);if(MIN(a,b))printf(“MIN\n”);} 6.下列程序的輸出結(jié)果是011。 #defineTESTmain(){intx=0,y=1,z;z=2*x+y;#ifdefTESTprintf(“%d%d”,x,y);#endifprintf(“%d\n”,z);}1.定義一個(gè)帶參的宏,求兩個(gè)整數(shù)的余數(shù)。通過宏調(diào)用,輸出求得的結(jié)果。#defineR(m,n)(m)%(n)#include<>voidmain()printf("entertwointegers:\n");scanf("%d%d",&m,&n);printf("remainder=%d\n",R(m,n));}#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));}m現(xiàn)。#include<>#defineDIVIDEDBY3(m)(m)%3==0voidmain()printf("enterainteger:\n");scanf("%d",&m);if(DIVIDEDBY3(m))printf("%disdividedby3\n",m);elseprintf("%disnotdividedby3\n",m);}習(xí)題十指針一.填空題 1.指針變量是把內(nèi)存中另一個(gè)數(shù)據(jù)的首地址作為其值的變量。 2.能夠直接賦值給指針變量的整數(shù)是0。 2)通過指針變量,將數(shù)值6賦值給k的語句是*p=6;。 (**pp)*=2;。4.當(dāng)定義某函數(shù)時(shí),有一個(gè)形參被說明成int*類型,那么可以與之結(jié)合的實(shí)參類型可以是整型數(shù)組名、指向整型數(shù)據(jù)的指針值等。5.以下程序的功能是:將無符號(hào)八進(jìn)制數(shù)字構(gòu)成的字符串轉(zhuǎn)換為十進(jìn)制整數(shù)。例如,#include<>main(){char*p,s[6];intn;p=s;gets(p);n=*p-'0'; while(*(p++)!='\0')n=n*8+*p-'0';printf("%d\n",n);} 二.選擇題1—10:BCADCAAABB11-15:CBCDCintcount(char*str,char*substr){inti,j,k,num=0;for(i=0;①;i++){for(②,k=0;substr[k]==str[j];k++,j++)if(substr[③]==’\0’)}returnnum;}①A)str[i]==substr[i]C)str[i]==‘\0’B)j=i②A)B)j=iB)str[i]!=‘\0’D)str[i]>substr[i]D)j=1C)D)j=1③A)kB)k++C)k+1D)++kDelblank除字符串s中的所有空格(包括Tab、回車符和換行符)。voidDelblank(char*s)charc[80];for(i=0,t=0;①;i++) if(!isspace(②))c[t++]=s[i]; c[t]=‘\0’;strcpy(s,c);}①A)s[i]B)!s[i]C)s[i]=‘\0’D)s[i]==‘\0’②A)s+iB)*c[i]C)*(s+i)=‘\0’D)*(s+i)char*conj(char*s,char*t)harpswhile(*s)①;while(*t) {*s=②;s++;t++;} *s=‘\0’;③;}①A)s--B)s++C)sD)*s②A)*tB)tC)t--D)*t++③A)returnsB)returntC)returnpD)returnp-t 19.下列程序的輸出結(jié)果是。 #include<>main(){int**k,*a,b=100;a=&b;k=&a;printf(“%d\n”,**k);}A)運(yùn)行出錯(cuò)B)100C)a的地址D)b的地址 20.下列程序的輸出結(jié)果是。 #include<>fun(int*a,int*b){int*w;*a=*a+*a;*w=*a;*a=*b;*b=*w;}main(){intx=9,y=5,*px=&x,*py=&y;fun(px,py);printf(“%d,%d\n”,x,y);}A)出錯(cuò)B)18,5C)5,9D)5,18義了以下函數(shù):voidf(……)p=(double*)malloc(10*sizeof(double));}p是該函數(shù)的形參,要求通過p把動(dòng)態(tài)分配存儲(chǔ)單元的地址傳回主調(diào)函數(shù),則 A)double*pB)float**pC)double**pD)float三.編程題1.編寫函數(shù),對(duì)傳遞進(jìn)來的兩個(gè)整型量計(jì)算它們的和與積之后,通過參數(shù)返回。#include<>voidcompute(intm,intn,int*sum,int*p);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.編寫一個(gè)程序,將用戶輸入的字符串中的所有數(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;}ps++;}digit[i]='\0';printf("string=%sdigit=%s\n",string,digit);}3.編寫函數(shù)實(shí)現(xiàn),計(jì)算字符串的串長(zhǎng)。#include<>#include<>ps=s;intStringLength(char*s);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ù)實(shí)現(xiàn),將一個(gè)字符串中的字母全部轉(zhuǎn)換為大寫。#include<>#include<>char*Upper(char*s);char*Upper(char*s){char*ps;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ù)實(shí)現(xiàn),計(jì)算一個(gè)字符在一個(gè)字符串中出現(xiàn)的次數(shù)。#include<>#include<>intOccur(char*s,charc);intOccur(char*s,charc)#include<>{intk=0;while(*s)k++;}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ù)實(shí)現(xiàn),判斷一個(gè)子字符串是否在某個(gè)給定的字符串中出現(xiàn)。#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')}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個(gè)人圍成一圈,順序排號(hào)。由用戶從鍵盤輸入報(bào)數(shù)的起始位置,從該人開始報(bào)數(shù)(計(jì)數(shù)從0開始),凡報(bào)數(shù)為3的倍數(shù)出圈。問最后剩下的是幾號(hào)見導(dǎo)學(xué)例8.由一個(gè)整型二維數(shù)組,大小為m×n,要求找出其中最大值所在的行和列,以及見導(dǎo)學(xué)例號(hào)從0開始)和其全部課程成績(jī)。見導(dǎo)學(xué)例習(xí)題十一結(jié)構(gòu)體、共用體和用戶定義類型一、選擇題1—10:AABDDBDDDC11-20:CBBCC二、填空題s=sum(head);struct{intx;inty;}s[2]={{1,2},{3,4}},*p=s;px_;表達(dá)式(++p)->x的值為____3_____。2.為了建立如圖所示的鏈表,結(jié)點(diǎn)的正確描述形式是:圖鏈表的結(jié)點(diǎn)structnode{intdata;structnode*next;};3.已知head指向一個(gè)帶頭結(jié)點(diǎn)的單向鏈表,鏈表中每個(gè)結(jié)點(diǎn)包含數(shù)據(jù)域(data)和指針域(next),數(shù)據(jù)域?yàn)檎?。下面的sum函數(shù)是求出鏈表中所有結(jié)點(diǎn)數(shù)據(jù)域值的和,作為函數(shù)值返回。請(qǐng)?zhí)羁胀晟瞥绦?。structlink{intdata;structlink*next;}main(){structlink*head;ints;┆三、編程題┆}intsum(structlink*head){structlink*p;ints=0;p=head->next;while(p){s+=p->data;p=p->next;}return(s);}4.設(shè)有共用體類型和共用體變量定義如下:unionUtype{charch;intn;longm;floatx;doubley;};unionUtypeun;printfcnA(進(jìn)一步提示:01000001B=65D,char與int的比特位分布關(guān)系參見課本P30。)1.編寫程序,進(jìn)行兩個(gè)復(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.定義一個(gè)包括年、月、日的結(jié)構(gòu)體。輸入一個(gè)日期,計(jì)算該日在本年中是第幾天#include<>structymd{ntdayintmonth;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;for(;;){printf("date(yyyy/mm/dd)=(yyyy=0--Exit)\n\n");scanf("%d/%d/%d",&,&,&;break;d=days(&date);printf("\nThedayoftheyearis%d!\n\n",d);}}3.有10個(gè)學(xué)生,每個(gè)學(xué)生的數(shù)據(jù)包括學(xué)號(hào)、姓名、3門課程的成績(jī)。從鍵盤輸入10個(gè)學(xué)生的數(shù)據(jù),要求輸出3門課程的總平均成績(jī),以及最高分的學(xué)生的學(xué)號(hào)、姓#include<>#defineN10structstudentcharname[8];floatscore[3];floatavr;}stu[N];voidmain()jmaxifloatsum,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++)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("No.namescorelscore2score3average\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);}/*結(jié)點(diǎn)結(jié)構(gòu)Node*/structNodestructNode*next;head1連接前連接后head1連接前連接后5997head15圖鏈表的連接提示:函數(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.有兩個(gè)鏈表a和b。設(shè)結(jié)點(diǎn)中包括學(xué)號(hào)、姓名。從a鏈表中刪除去與b鏈表中有相同學(xué)號(hào)的那些結(jié)點(diǎn)。#include<>#include<>#defineLA4#defineLB5structstudentcharname[8];structstudent*next;}a[L

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論