二級C語言課本課后習(xí)題參考答案_第1頁
二級C語言課本課后習(xí)題參考答案_第2頁
二級C語言課本課后習(xí)題參考答案_第3頁
二級C語言課本課后習(xí)題參考答案_第4頁
二級C語言課本課后習(xí)題參考答案_第5頁
已閱讀5頁,還剩37頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

二級C語言課本課后習(xí)題參考答案

第?章程序設(shè)計基本概念

(1)exe

(2)C,obj,exe

(3)順序,選擇,循環(huán)

***************EndofChapter1*******************

第二章C程序設(shè)計的初步知識

一、選擇題

(1)B(2)D(3)B(4)A(5)C

(6^7)B(8)I^9)A(10)C

(11)B(12)B(13)A

二、填空題

(14)11,12

(15)4.2,4.2

(16){,}說明,執(zhí)行

(17)關(guān)鍵字,用戶標識符

(18)int,float,double

(19)floatal=ka2=l;

(20)存儲單元

(21)3.5

(22)a*b/ca/c*ba*(b/c)

(23)10賦給變量s

(24)位,0或1

(25)8,255,11111111,0,0(X)00000

(26)32767,-32768,1000000000000000

(27)+,八,十六

三、上機改錯題

(28)清指出以下C程序的錯誤所在

#includestdio.h;

main();/*mainfunction*/

floatr,s;/*/*risradius*/,/*sisareaofcircular*/*/

r=5.0;

s=3.14159*r*r;

printf("%f\n",s);

※正確應(yīng)為:

#include或#include"stdio.h"

main()/*mainfunction*/

{

floatr,s;/*risradius,sisareaofcircular*/

r=5.0;

s=3.14159*r*r;

printf("%f\n',,s);

(29)請指出以下C程序的錯誤所在

#includestdio.h

main/*mainfunction*/

(

floata,b,c,v;/*a,b,caresides,visvolumeofcube*/

a=2.0;b=3.0;c=4.0

v=a*b*c;

printf("%f\n”,v);

I

※正確應(yīng)為:

#include'*stdio.h"

main()/*mainfunction*/

(

floata,b,c,v;/*a,b,caresides,visvolumeofcube*/

a=2.0;b=3.0;c=4.0;

v=a*b*c;

printf(M%f\n';v);

)

***************EndofChapter2*******************

第三章順序結(jié)構(gòu)

**************************************************

一、選擇題

⑴C⑵C⑶D(4)C⑸D

(6)B(7)C(8)D(9)A(10)B

(11)C(12)D(13)D(14)A(15)C

(16)C(17)C(18)均不對,應(yīng)為scanf("%6f”,&c)(18)C(20)B

二、填空題

(21)?-200,2500②i=-200,j=2500③i=-200,j=2500

(22)12,0,0

(23)語句塊,{:}

(24);

(25)100V空格>25.81〈空格>1.89234/*可用一個或幾個空格作為輸入時的間隔符*/

10025.811.89234/*Tab(制表符)也可以作為輸入時的間隔符*/

10025.811.89234/*CR(回車符)也可以作為輸入時的間隔符*/

(26)x=127,x=uuu127,x=uuu177,x=uuuu7f,x=uuu127。

(27)x=127,x=127uuu,x=177uuu,x=7fuuuu,x=127u口u。

(28)a=513.789215,a=uu513.79,a=uu513.78921500,a=uu513.78921500

三、上機改錯題

3.30編寫程序,把560分鐘換算成用小時和分鐘表示,然后進行輸出。

※程序如下※

#include<stdio.h>

main()

{

inthour,minute;

hour=560/60;

minute=560%60;

printf(',hour=%d,minute=%d'\hour,minute);

}

3.31編寫程序,輸入兩個整數(shù):1500和35(),求出它們的商數(shù)和余數(shù)并進行輸出。

※程序如下※

#include<stdio.h>

main()

(

intnuml,num2,ij;/*定義變量i一商,j—余數(shù)*/

printf("inputnum1andnum2:\n");

scanf("%d%du,&numl,&num2);

i=numl/num2;

j=numl%num2;

primf("商=%d\n余數(shù)=%d”,i,j);

)

3.32編寫程序,讀入三個雙精度數(shù),求它們的平均值并保留此平均值小數(shù)點后一位數(shù),對小數(shù)點后第二位

數(shù)進行四舍五入,最后輸出結(jié)果。

※程序如下※

#include<stdio.h>

niain()

(

doublea,b,c,average=0;

printf("inputa,b,c(double):\n'*);

',

scanf(%lf%lf%lf",&a,&b,&c);

average=(a+b+c)/3;

averagc=average*10;

average=average+0.5;

average=(int)avcrage;

average=average/10;

printf("average=%lf",average);

3.33編寫程序,讀入三個整數(shù)給a,b,c,然后交換它們中的數(shù),把a中原來的值給b,把b中原來的值給

c,把c中的值給a。

※程序如下※

#includc<stdio.h>

main()

inta,b,c,t=O;

printf("inputabc:\n");

scanf("%d%d%dn,&a,&b,&c);

t=c;c=b;b=a;a=t;

printf("a=%db=%dc=%d",a,b,c);

}

***************EndofChapter3*******************

第四章選擇結(jié)構(gòu)

一、選擇題

(1)A(2)A(3)A(4)D(5)C

(6)A(7)B(8)均錯(9)D(1())A

二、填空題

(II)非零,零

(12)<或<=、>或>=、==、!=

(13)邏輯非、邏輯與、邏輯或

(14)!、<或<=、>或>=、==、!=、&&、II

(15)!

(16)a==bIIa4或x>4IIx<-4

(17)1

(18)x>0?0:1,1

(19)a=3,b=2,c=2

(20)*#

三、編程題

4.21當(dāng)a>0時,請將以卜語句改寫成switch語句。

if(a<30)m=l;

elseif(a<40)m=2;

elseif(a<50)m=3;

elseif(a<60)m=4;

elsem=5;

※程序如下※

#includc<stdio.h>

main()

{

inta;

printf("Entera:\n");

scanf("%d",&a);

switch(a/10)

(

case0:

case1:

case2:printf("in=lu);break;

case3:printf("m=2n);break;

case4:printf("m=3n);break;

case5:printf("m=4n);break;

default:printf("m=5");

}

1

4.22編寫程序,輸入一位學(xué)生的生日(年:yO、月:mO、日:dO);并輸入當(dāng)前的日期(年:yl、月:ml、

日:(11);輸出該生的實足年齡。

※程序如下※

#include<stdio.h>

main()

(

intyO,yl,mO,m1,dO,d1,age=O;

printf("YourBirthday(yyyy-mm-dd):\n");

scanf(n%d-%d-%d",&yO,&mO,&dO);

printf("CuiTentDate(yyyy-mm-dd):\n");

scanf("%d-%d-%d”,&y1,&m1,&d1);

if(d1BR>if(m1BR>age=y1-yO;

printf("\nAge=%d",age);

}

4.23編寫程序,輸入一個整數(shù),打印出它是奇數(shù)還是偶數(shù)。

※程序如下※

#include<stdio.h>

niain()

(

inti;

printf("inputainteger:\n");

scanf("%dn,&i);

if(i%2=0)/*條件判斷*/

printf("%disaeven",i);

else

printf("%disaoddn,i);

4.24編寫程序,輸入a、b、c三個數(shù),打印出最大者。

※程序如下※

#include<stdio.h>

main()

(

inta,b,c,max=0;

prinlf("input(int)abandc:\n'*);

scanf(',%d%d%d",&a,&b,&c);

max=a;

if(maxBRmax=,"b;">if(maxBRmax="c;n>printf("max=%d",max);

}

4.25有?函數(shù):

編寫一程序,要求輸入x的值,輸出y的值。分別

(1)不嵌套的if語句(2)嵌套的if語句

(3)if_else語句(4)switch語句

※程序如下※

源程序一:(1)不嵌套的if語句

#include<stdio.h>

main()

(

floatx;

printfC4nputx:\n");

scanf('r%f',&x);

if(x>-5&&x<0)

printf(,,y=%f,,x);

if(x==0)

printf(',y=%f',x-l);

if(x>O&&x<IO)

pnntf("y=%f',x+l);

if(x<=-5llx>=10)

printf("inputerror");

}

源程序二:(2)嵌套的if語句

#includc<stdio.h>

main()

(

floatx;

printf("inputx:\n");

scanf(n%r,&x);

if(x>-5&&x<10)

(

if(x==0)printfC'y=%r,x-l);

if(x<0)printf(Hy=%r,x);

if(x>0)printf("y=%f',x+l);

)

if(x<=-5llx>=10)

prinlf("inpu【error");

)

源程序三:(3)if_else語句

#include<stdio.h>

main()

(

floatx;

printf(r,inputx:\n");

scanf(H%f,,&x);

if(x>-5&&x<10)

if(x<0)

printf(Hy=%r,x-l);

elseif(x==0)

printf(',y=%f,,x);

else

printf(My=%f',x+1);

else

printf("inputerror1');

)

源程序四:(4)switch語句

#include<stdio.h>

main()

(

intflag;

floatx;

printfC'Enterx:\n");

scanf(H%f,,&x);

if(x>-5&&x<0)flag=-l;

if(x==0)flag=0;

if(x>0&&x<10)flag=l;

switch(flag)

(

case-1:printf(ny=%f',x);break;

case0:printf("y=%f\x-l);break;

case1:printf("y=%f',x+l);break;

)

}

***************EndofChapter4*******************

第五章循環(huán)結(jié)構(gòu)

一、選擇題

(1)D(2)C(3)B(4)C(5)C

(6)B(7)D(8)A(9)D(10)D

二、填空題

(11)5,4,6

(12)有錯

(13)-1

(14)11

(15)d=1.0,k++.k<=n

(16)x>=0,x

三、編程題

5.17編寫程序,求1—3+5—7+...-99+101的值。

※程序如下※

#include<stdio.h>

main()

{

inti,sum=0,s=l;

for(i=l;i<=101;i+=2)

(

sum=suin+i*s;

s=-s;/*控制符號交替變換*/

)

printf(',sum=%d,,,sum);

5.18編寫程序,求e的值,e=1+1/1!+l/2!+l/3!+l/4!+...+l/n!

(1)用for循環(huán),計算前50項

(2)用while循環(huán),要求直至最后一項的值小于le-4?

※程序如下※

源程序一:(1)用for循環(huán)實現(xiàn)

#includc<stdio.h>

main()

{

inti,n;

doublesum=l,t=l;

prinlf("inputn:\n");

scanf("%d",&n);

for(i=l;i<=n;i++)

(

t=t*i;/*實現(xiàn)階乘*/

sum=sum+l/t;

}

printf("e=%lf",sum);

)

源程序二:(2)用while循環(huán)實現(xiàn)

#includc<stdio.h>

main()

inti;

doubelsum=l,t=l;

while(fabs(1.0/t)>le-4)/*****fabs求浮點型數(shù)據(jù)的絕對值*/

(

t=t*i;

sum=sum+l/t;

i++;

}

prinlf("e=%lf',sum);

)

5.19編寫程序,輸出從公元1000年至2000年所有閏年的年號每輸出3個年號換一行。判斷公元年是否

閏年的條件是:

(1)公元年數(shù)如能被4整除,而不能被100整除,則是閏年。

(2)公元年數(shù)能被400整除也是閏年。

※程序如下※

#include<stdio.h>

main()

(

inti,j=0;

for(i=1000;i<=2000;i++)

(

if((i%4==0)&&(i%100!=0)ll(i%400==0))/*判斷是否是閏年的條件*/

{

printf(H&dn,i);

j++;

if(j%3=0)/*控制換行*/

printf("\n");

5.20編寫程序,打印以卜.圖形:

*

***

*****

*******

*****

***

*

※程序如下※

#include<stdio.h>

#include<math.h>

main()

{

inti,j;

for(i=l;i<=7;i++)/*控制行數(shù)*/

(

for(j=l;jv=7;j++)/*控制星數(shù)*/

(

if((j<=abs(4-i))ll(j>7-abs(4-i)))

printf("n);

else

1

printfCAn");

)

)***************EndofChapter5*

第六章字符型數(shù)據(jù)

**************************************************

一、選擇題

(1)B(2)D(3)A(4)A(5)B

(6)D(7)D(8)B(9)A(10)A

(ll)B(c)

二、填空題

(12)-1

(13)1

(14)ctype.h

(15)0

(16)10A20B30C40D

(17)7.29101.298/ABZ(7.29/101.298/AB/)

(18)A7.29BI01.298/

(19)AUUUZBUHUZCZ

三、編程題

6.19請編寫程序,輸入一行字符(用何車結(jié)束),輸出每個字符以及與之對應(yīng)的ASCII代碼值,每行輸出

三隊.

※程序如下※

#include<stdio.h>

main()

(

inti=0;

charch;

while((ch=gelchar())!='\n')

pnnlf(H%4c%4d",ch,ch);

i++;

if(i%3=0)

printfCXn'1);

}

)

6.20請編寫程序,輸入一行數(shù)字字符(用EOF結(jié)束),每個數(shù)字字符的前后都有空格。請編程,把這一行

中的數(shù)字轉(zhuǎn)換成?個整數(shù)。例如,若輸入:

2483(代表Enter鍵)

則輸出整數(shù):2483

※程序如下※

#include<stdio.h>

main()

(

charch;

while((ch=getchar())!=EOF)

{

if(ch=='*)

continue;

else

printf(,,%c,',ch);

}

)

6.21清編寫程序統(tǒng)計輸入的行數(shù),輸入用EOF結(jié)束輸入。

※程序如下※

#includc<stdio.h>

main()

|

charch;

inti=0;

while((ch=getchar())!=EOF)

(

if(ch=='\n')i++;

)

6.22請編寫程序統(tǒng)計輸入的一行中小寫字母的個數(shù)。

※程序如下※

#includc<stdio.h>

main()

inti=0;

charch;

while((ch=getchar())!='\n')

(

if((ch>='a')&&(ch<=,z,))

i++;

}

printf("%d”,i);

I

6.23請編寫輸出以卜.圖案的程序,圖案的行數(shù)由輸入的值確定。

A

BBB

CCCCC

DDDDDDD

EEEEEEEEEEE

※程序如卜※

#include<stdio.h>

main()

inti,j,k,n;

printf("Entern(integer):\n");

scanf(n%d",&n);

for(i=l;i<=n;i++)

for(j=n;j>i;j-)

prinlf(u*');

for(k=1;k<=2*i-l;k++)

printfC%cH,64+i);

printf("\n");

1

***************EndofChapter6*******************

第七章函數(shù)

一、選擇題

(1)C(2)C(3)B(4)C(5)A

(6)Df7)A

二、填空題

(8)12

(9)9.000000

(10)4

(ll)n=l,s

(12)z=l;i<=y,z=z*x

(13)l,s*i,0,f(k)

三、程序設(shè)計和編程題

7.14以下fun函數(shù)用以判斷n是否是索數(shù),fun函數(shù)中有邏輯錯,請調(diào)試改正。

fun(intn)

(

intk,yes;

for(k=2;k<=n/2;k++)

if(n%k==O)yes=O;

yes=l;

I

※正確答案是:

fun(intn)

(

intk,yes=l;

for(k=2;k<=n/2;k++)

if(n%k==O)returnyes=O;

returnyes;

}

main()

(

intn,yes;

printf("Entern(int):\n");

scanf("%du,&n);

yes=fun(n);

if(yes==1)printf("%disaprime",n);

elseprintf('*%disnotaprime",n);

7.15編寫函數(shù)immymod(inta,intb)用以求a被b除之后的余數(shù)。

※程序如下※

#includc<stdio.h>

intmymod(inta,intb)

(

intremainder;

remaindcr=a%b;

returnremainder;

(

main()

{

inta,b;

printf("Enterab(int):\n");

scanf(,,%d%d\&a,&b);

prinlf("余數(shù)二%d",mymod(a,b));

7.16編寫程序求:1-1/2+1/3-1/4+1/5-1/6+1Z7-...1/n

※程序如下※

#include<stdio.h>

main()

(

intn:

floata;

floatsum(intn);

scanf("%dn,&n);

a=sum(n);

printf("%10.53a);

)

floatsum(intn)

(

floats=0;

int

for(i=l;i<=n;i++)

{s=s+l/i*t;

t=-t;

)

returns;

7.17編寫函數(shù),根據(jù)整型形參m的值,計算如下公式的值。

t=1—1/(2x2)-1/(3xxm)

例如:若m=5,則應(yīng)輸出0.536389。

X程序如下※

#include<stdio.h>

main()

(

floatt=1;

floatf2(int);

inti,m;

scanf("%d",&m);

for(i=2;i<=m;i++)

t=t-f2(i);

pnntf("t=%f',t);

floatf2(in(m)

floats;

s=1.0/(m*m);

returns;

)

7.18編寫函數(shù)用以求表達式x2-5x+4,x作為參數(shù)傳給函數(shù),調(diào)用此函數(shù)求:

y1=22-5*2+4

y2=(x+15)2-5*(x+l5)+4

y3=sin2x-5*sinx+4

※程序如下※

#include<stdio.h>

#include<math.h>

floatfun(floatx)

(

floaty;

y=pow(x,2)-5*x+4;

returny;

1

main()

(

floatx,yl,y2,y3;

clrscr();

printfC'Enterx:\n");

scanf(H%f,,&x);

yl=fun(2);

y2=fun((x+15));

y3=fun(sin(x));

printf("y1=%f\ny2=%f\ny3=%f\n",y1,y2,y3);

***************EndofChapter7*******************

第八章指針

**************************************************

一、選擇題

⑴A⑵B(3)B(4)C(5)B

(6)B(7)C(8)D+(9)B(10)C

(11)C(12)C

二、填空題

(13)110

(14)7,+1

(15)char*p,p=&ch,scanf("%c”,p),*p='a

printf("%o”,*p)

(16)s=p+4,s=s-2,50,*(s+1),2,10,20,30,40,50

三、編程題

8.17請編寫函數(shù),其功能是對傳送過來的兩個浮點數(shù)求出和值與差值,并通過形參傳送回調(diào)用函數(shù)。

※程序如下※

fun(*x,*y)

{floatzl,z2;

zl=*x+*y;

z2=*x-*y;

*x=zl;*y=z2;

)

inain()

{float*a,*b,A,B;

a=&A;b=&B;

printf("inputtworealnumbers:");

scanf("%f%f',a,b);

printf("a,b=%f,%f\n",*a,*b);

printf("beforccallfunction:\n");

printf(na=%fb=%f\n",*a,*b);

fun(a,b);

printf("aftercallfunction:\n");

printf("a=%fb=%f\nM,*a,*b);

getch();

(

8.18請編寫函數(shù),對傳送過來的三個數(shù)選出最大和最小數(shù),并通過形參傳回調(diào)用函數(shù)。

※程序如下※

fun(int*a,int*b,int*c)

{inimax,min;

max=*a;min=*a;

if(*b>*a)max=*b;

if(*b<*a)min=*b;

if(*c>max)max=*c;

if(*c<min)min=*c;

*a=max;*c=min;

main()

{inta,b,c;

printf("Inputa,b,c:");

scanf("%d%d%d",&a,&b,&c);

printf("beforecallfunction:\n");

printf(na=%db=%dc=%d\nH,a,b,c);

fun(&a,&b,&c);

printf(Haftercallfunction:\n");

printf("max=%dmin=%d\nn,a,c);

getch();

}***************EndofChapter8*******************

第九章數(shù)組

**************************************************

一、選擇題

(1)D(2)A(3)A(4)A(5)C

(6)A(7)B(8)D(9)C(10)C

(11)C(12)D(13)D(14)A(15)A

(16)A(17)C(18)C

二、填空題

(19)9,0

(20)6

(21)12

(22)3

(23)2721

(24)-850,2,0

(25)k=p,k

(26)(c=getchar()),'c'-65

三、編程題

9.27輸入一行數(shù)字字符,請用數(shù)組元素作為計數(shù)器來統(tǒng)計每個數(shù)字字符的個數(shù).用下標為0元素統(tǒng)計字符“1”

的個數(shù),卜標為1的元素統(tǒng)計字符”2”的個數(shù),…

※程序如下※

#include<ctype.h>

main()

{char*s,a[100];

inti,k=0,num|l0]={0};

s=a;

printf(nInputannumberstring:'*);

scanf(H%sM,s);

while(*s!=,\0')

{if(isdigit(*s)&&(*s>=(0,))

num[*s-48]++;

s++;

)

for(i=0;i<9;i++)

printf(',%2d->%3d\n",i,num[i]);

printf("0—>%3d\n,',num[9]);

9.28編寫函數(shù),對具有10個整數(shù)的數(shù)組進行如下操作:從第n個元素開始直到最后?個元素,依次向前移動

個位置.輸出移動后的結(jié)果.

※程序如下※

move(inta|l()],intn)

{inti;

for(i=n;i<10;i++)

a[i-l]=a[i];

a[9]=0;

}

main()

{intx[10],i,n;

printf("input10number:");

for(i=0;i<10;i++)

scanf(H%d",&x[i]);

printf("\ninputtheN:");

scanf(H%d",&n);

move(x,n);

printf(n\nAftermovetnememberlistis:\n");

for(i=0;i<10;i++)

printf("%dH,x[i]);

getch();

9.29編寫函數(shù)把數(shù)組中所有奇數(shù)放在另一個數(shù)組中返回.

※程序如下※

main()

{inta[100]={0),b[100]={0),i,j;

printf(M\nInputthenumberlist(endwith32767):\n");

for(i=0;i<100;i++)

{scanf(n%d",&a[i]);

if(a[i]==32767)break;

)

i-;

odd(a,b,i);

printf("\narrayB:\n");

for(i=0;i<100;i++)

if(b|i]!=O)printf(n%d",b[i]);

elsebreak;

getch();

)

odd(inta[100],intb[100],intn)

{intij=0;

for(i=0;i<=n:i++)

if(a[i]%2!=0)b[j++]=a[i];

)-------------------------------------------------------------------------------------------------------

9.30編寫函數(shù)對字符數(shù)組中的輸入字母,按由大到小的字母順序進行排序。

※程序如下※

#include<string.h>

sort(chars|]jntn)

{int

for(j=0;j<(n-l);j++)

{p=j;

for(i=j+l;i<n;i++)

if(s[p]<s[i])p=i;

{t=s[j];s[j]=s[p];s[p]=t;}

)

}

main()

{char*s;

intn;

printf(M\nInputs:");

scanf("%s'\s);

n=strlen(s);

sort(s,n);

printf("\nthesortedstringis%s\n'*,s);

getch();

9.31輸入若干有序數(shù)放在數(shù)組中。然后輸入一個數(shù),插入到此有序數(shù)列中,插入后,數(shù)組中的數(shù)仍然有

序。請對以下三種情況運行你的程序,以便驗證你的程序是否正確。

(I)插在最前(2)插在最后(3)插在中間

※程序如下※

main()

{inti[100],n,*p,i=l;

a[0]=-32768;p=a+l;

printf("\nlnputannumberlist(endwith32767):\nu);

do

{scanf("%d”,&a[i|);

if(a[i]>=a[i-l])i++;

)

while(a[i-l]!=32767);

printfC'Xnlnputinsertednumber:");

scanf("%d",&n);

P=a;

insert(p,n);

p=a+1;

printf(n\nOutputarraya:\n");

do

if(*p!=32767)printf("%dH,*p++);

while(*p!=32767);

getch();

insert(int*q,intn)

{int*k;

k=q;

while(*q!=32767)q++;

*(q+l)=*q;

while(q>k)

{if(n>*(q-l)){*q=n;break;}

else{q—;*(q+l)=*q;)

9.32編寫函數(shù)把任意十進制整數(shù)轉(zhuǎn)換成二進制數(shù).提示:把十進制數(shù)不斷除2除,余數(shù)放在一個一維數(shù)組中,

直到商數(shù)為零.在主函數(shù)中進行輸出,要求不得按逆序輸出.

※程序如下※

main()

{intn,a[16]={0},*p;

printf("\nlnputannumber:");

scanf("%d'\&n);

p=a;

change(a,n,p);

printf("n=%d\n",n);

while(p<=a+15)

printf(',%d,,,*p++);

change(x,n,p)

intx[16],n,*p;

(

p=x+15;*p=0;

if(n==O)return(O);

while(n!=O)

{*p=n%2;

P-;

n/=2;

)

)

9.33編寫函數(shù)調(diào)用隨機函數(shù)產(chǎn)生。到19之間的隨機數(shù),在數(shù)組中存入15個互不重復(fù)的整數(shù)。要求在主函

數(shù)中輸出結(jié)果。若已定義x為血類型,調(diào)用隨機函數(shù)步驟如卜:

#include<stdio.h>

niain()

{inta[15],*p,i;

p=a;

frandni(a);

printf("\nThcarrayais:");

for(i=0;i<15;i++)

printf("%d”產(chǎn)p++);

frandm(a[]);

{intk=O,i,x,*q;

for(i=0;i<15;i++)a[i]=20;

while(k<15)

{x=rand()%20;

for(i=0;i<15;i++)

if(a[i]=x)continue;

elsea[k++]=x;

9.34求任意方陣每行、每列、兩對角線上元素之和。

※程序如下※

#defineN20

main()

{inta[N][N],x[N]={0},y[N]={0},i,j,m,sum=0;

printf(n\nInputN(<20)

scanf("%d",&m);

printf("\nInputarraya[%d][%d]:\n",m,m);

for(i=0;i<m;i++)

for(j=0;j<m;j++)

{scanf("%dn,&a[i][j]);

x[i]+=a[i]U];yU]+=a[i][jl;

if(i==^j)sum+=a[i][i|;

)

printf("\nAftercompute:\n");

for(i=0;ivm;i++)

{for(j=0;jvm;j++)

printf("%5d”,a[i皿);

printf(n%5d\n",x[i]);

)

for(i=0;ivm;i++)

printf(n%5dn,y[i]);

printf(H\n\nSum=%d\n,,,sum);

getch();

)

9.35求兩個矩陣的和

#defineN20

main()

{inta[N][N],b[N][N],c[N][N],m,n,i,j;

printf("\nInputm,n(<20)

scanf("%d%d",&m,&n);

printf("\nInputarrayA[%d][%d]:\n",m,n);

for(i=0;i<m;i++)

for(j=0;j<n;j++)

{scanf(H%dn,&a[i][j]);

)

printf("\nInputarrayB[%d][%d]:\n",m,n);

for(i=0;i<m;i++)

for(j=0;j<n;j++)

{scanf('*%d",&b[i][jl);c[i]U]=a[i]U]+b[i][j];

)

printf("\nAftercomputearrayC:\n");

for(i=0;i<m;i++)

{for(j=O;j<n;j++)

printf("%5d”,cmUD;

printf("\n");

)

getch();

9.36編寫函數(shù)打印出以卜.形式的乘法九九表。

**AMULTIPLICATIONTABLE**

(1)(2)(3)(4)(5)(6)(7)(8)(9)

(1)123456789

(2)24681012141618

(3)369121518212427

(4)4812162024283236

(5)51015202530354045

(6)61218243036424854

(7)71421283542495663

(8)81624325048566472

(9)91827364554637281

※程序如下※

inain()

{inti,j,k;

printf(H\n**AMULTIPLICATIONTABLE**\n");

printfC");

for(i=l;i<10;i++)printf("(%3d),,,i);

printf(H\n----------------------------------------\n'*);

for(i=l;i<10;i++)

{for(j=0;j<10;j++)

if(j==O)printf("(%d)",i);

elseprintf(u%5d",i*j);

printf("\n");

)

printf("\n----------------------------------------\nH);

getch();

)---------------------------------------------------------------------------------------------------------

9.37調(diào)用隨機函數(shù)為5x4的矩陣置100以內(nèi)的整數(shù),輸出該矩陣,求出每行元素之和并把和值最大的那

一行與第一行上的元素對調(diào)。若己定義x為int類型,調(diào)用隨機

函數(shù)步驟如F:

#inciude"stdio.h"

include"stdlib.h"

main()

{staticintm[5][5]={0},i,j;

intk=0;

printf(u\nBcfore:\nu);

for(i=0;iv5;i++)

for(j=0;j<5;j++)

{m[i][j]=rand()%100;

printf(u%4d,',m[i]|j]);

if((++k)%5==0)printf(n\n");)

printf("\nAfter:\nn);

for(i=0;i<5;i++)

for(j=0;j<i;j++)

{k=m[i][j];m[i]|j]=m[j][i];m[j][i]=k;}

k=0;

for(i=0;i<5;i++)

for(j=0;j<5;j++)

{printf("%4d",m[i][j]);

if((++k)%5==0)printf(,'\nn);)

printf("\nProgramend!\n");

9.38調(diào)用隨機函數(shù)為5x5的矩陣置100以內(nèi)的整數(shù),輸出該矩陣,然后逆置該矩陣。即將第一列的元素

放在第一行上、第二列的元素放在第二行上、其它依次類推。

※程序如下※

#include"stdio.h"

main()

{intm[5][5]={0),ij;

intk=0;

printf("\nBefore:\nn);

for(i=0;i<5;i++)

for(j=0;j<5;j++)

{m[i]|j]=rand()%100;

printfC%4d",m|il[j]);

if((++k)%5=0)printf(n\n");}

printf("\nAfter:\nn);

for(i=0;i<5;i++)

for(j=0;j<i;j++)

{k=m[i][j];m[i][j]=m|j][i];m[j][i]=k;

printf(,'%4d,',m[i][j]);

if((++k)%5==0)printf(u\nH);}

k=0;

for(i=0;i<5;i++)

for(j=0;j<5;j++)

{printf(,'%4d",m[i][j]);

if((++k)%5==0)printf("\nH);}

printf("\nProgramend!\n");

getch();

)

***************EndofChapter9*******************

第十章字符串

一、選擇題

(1)B2)B3)C4)B5)C

(6)A7)C8)A9)C10)C

二、填空題

(ll)GFEDCB

(12)YXZA

(13)SO

(14)10

(15)11iss!

(16)strlen(str),j

(17)3

(18)goodgood!

三、編程題

10.19請編寫函數(shù)mygets和myputs,其功能分別與gets和puts相同,函數(shù)中用getchar和putchar讀入和輸

出字符。

※程序如卜※

#include

voidmygets(char*p)

{

charch;

while((ch=getchar())!='\n')

*(P++)=ch;

*p=0;

(

voidmyputs(char*p)

(

charch;

while(*p!=W)

putchar(*(p++));

)

main()

(

char*s;

clrscr();

mygets(s);

myputs(s);

(

10.20請編寫函數(shù),判斷一字符串是否是回文。若是回文函數(shù)返回值為1:否則返回值為0?;匚氖琼樧x和

倒讀都一樣的字符串。

※程序如下※

#include

inain()

chara[200],*p;

inti,j,flag=l;

clrscr();

scanf(,'%s,,,a);

p=a;

j=strlen(a);

for(i=0;i<=j/2;i++,j-)

if(*(p+i)!=*(p+j-l))

(

flag=O;

break;

}

if(flag)

prinlf(“Yes");

else

printfCNo1');

10.21請編寫函數(shù),刪除字符串中指定位置上的字符。刪除成功函數(shù)返回被刪字符:否則返回空值。

※程序如下※

#include

#include

del(char*p,intn)

(

inti;

charch;

if(n<=strlen(p))

ch=*(p+n-l);

else

ch='O';

for(i=n-l;*(p+i)!=AO,;i++)

*(p+i)=*(p+i+l);

returnch;

}

main()

(

intn;

char*s;

clrscr();

printf(M****Thestringis****\nH);

gets(s);

printf("Entern(0-%d)\nM,strlen(s));

scanf("%d",&n);

printf(H****Thedeletedcharis****\nH);

printf(M%c",del(s,n));

getch();

}

**************jofChapter[0*******************

第十?章對函數(shù)的進一步討論

一、選擇題

(1)D(2)B(3)A(4)C

二、填空題

(5)IJKLEFGHABCD

(6)7

⑺8

(8)*(S+J),i+l,i

⑼17

(10)(*fun)(),(*fun)(a+i*h),mypoly

三、編程題

11.11編寫程序outch,程序讀入一行字符,根據(jù)命令行中的參數(shù)進行不同的輸出。若有以下命令行:

outch-2程序?qū)ψx入的一行字符輸出最后兩個字符。若有以卜.命令行:outch+6程序?qū)λx入的一行字符

輸出開頭6個字符。若命令行中沒有參數(shù),則隱含規(guī)定輸出最后10個字符。為簡單起見,命令行中的參數(shù)

中只包含一位數(shù)字。

※程序如下※

#include<string.h>

main(intargc,char*argv[])

{char*str,*p;

inti,k;

str=(char*)malloc(50);

printf("\nlnputatextline(>10letters):\n'*);

scanf("%s'\str);

p=argv[l];

k=strlen(str);

if(argc==2)

{if(*p==v)

for(i=0;i<(*(p+1)-'0');i++)printf(n%c",*(str+i));

elseif(*p=--')

for(i=k-*(p+l)+'O';i<=k;i++)

printf("%c'\*(str+i));}

elsefor(i=k-10;i<k;i++)printf("%cn,*(str+i));

getch();

}

11.12請寫遞歸函數(shù),把輸入的一個整數(shù)轉(zhuǎn)換成二進制數(shù)輸出。

※程序如下※

#include

dec_bin(intn,inta[])

(

staticinti=0;

if(n==0lln==l)

{

a[i]=n;

returni;

)

else

(

a[i++]=n%2;

returndec_bin(n/2,a);

main()

{

inti,j,n,a[64];

printf("Entern(integer)\n");

scanf(n%d",&n);

j=dec_bin(n,a);

fbr(i=j;i>=O;i—)

printf("%d';a[i]);

11.13請用遞歸算法,求l+2+3+...n,n由鍵盤輸入。

※程序如下※

fun(intn)

(

intsum;

if(n==l)

return1;

else

(

sum=n+fun(n-l);

returnsum;

1

}

main()

(

intn,sum;

clrscr();

printf(MEntern(1+2+3+...+n):\nn);

scanf(n%d",&n);

sum=fun(n);

printf("sum=%d",suni);

11.14請用遞歸函數(shù),求裴波拉契級數(shù),求n階裴波拉契級數(shù)的公式如卜。

※程序如下※

#include

fac(intn)

(

longt;

if(n==Olln==l)

return1;

else

(

t=fac(n-1)+fac(n-2);

returnt;

)

)

main()

{

intn;

printf("Entern:\n");

scanf(H%dn,&n);

printf(M%ld-,fac(n));

I

***************EndofChapter]]*******************

第十二章C語言中用戶標識符的作用域和存儲類

?、選擇題

(1)C(2)B(3)A(4)C(5)D

(6^7—8)C

二、選擇題

⑼2,5,13,2,-2

(10)2468

***************EndofChapter[2*******************

第十三章編譯預(yù)處理和動態(tài)存儲分配

一、選擇題

(1)A(2)C(3)B(4)C(5)D

(6)DC7)D

二、選擇題

(8)ar=9ar=9ar=l1

(9)int*,s,*b

三、選擇題

13.10編寫出一個宏定義MYALPHA(C),用以判斷C是否是字母字符,若是得1,否則得0。

※程序如下※

#include

#include

#dcfincMYALPHA(C)isalpha(C)?l:0

main()

{

charch;

clrscr();

ch=getchar();

if(MYALPHA(ch))

printf(H%cisaalpha",ch);

else

printf(M%cisnotaalpha",ch);

13.11清寫出一個宏定義swap。,x,y)用以交換t類型的兩個參數(shù)。提示:用復(fù)合語句的形式。

※程序如下※

#include

#defineswap(t,x,y){t=x;x=y;y=t;}

main()

inta,b,t;

clrscr();

printf("Enteraandb:\n");

scanf("%d%dn,&a,&b);

swap(t,a,b);

printf("a=%d\nb=%d",a,b);

}

13.12請編寫程序,利用malloc函數(shù)開辟動態(tài)存儲單元,存放輸入的三個整數(shù)。然后按從小到大的順序輸

出這三個數(shù)。

※程序如下※

#include

#include

voidmain()

(

int*pData=(int*)malloc(sizeof(int)*3);

intt;

printf("Pleaseinputthreeintegralnumber\n");

scanf("%d%d%dn,pData,pData+1,pData+2);

for(inti=0;i<2;i++)

for(intj=i+1;j<3;j++)

if(*(pData+i)>*(pData+j))

(

t=*(pData+j);

*(pData+j)=*(pData+i);

*(pData+i)=t;

prinlf("%d\t%d\t%d\n',,*pData,*(pData+l),*(pData+2));

)

***************EndofChapter[3*******************

第十四章結(jié)構(gòu)體、共用體和用戶定義類型

一、選擇題

(1)D(2)D(3)D(4)A(5)C

(6)C(7)C(8)B

二、填空題

(9)structlink*next

(10)p->next,p->data<m

(11)structlist*,list,structlist*,list,returnh

三、編程題

14.12設(shè)有以下結(jié)構(gòu)類型說明:

structstud

(

charnum[5],name[10];

ints|4|;

doubleave;

);

請編寫:

(1)函數(shù)readrec把30名學(xué)生的學(xué)號、姓名、四項成績以及平均分放在一個結(jié)構(gòu)體數(shù)組中,學(xué)生的學(xué)號、

姓名和四項成績由鍵盤輸入,然后計算平均分放在結(jié)構(gòu)體對應(yīng)的域中。

(2)函數(shù)writerec輸出30名學(xué)生的記錄。

(3)main函數(shù)調(diào)用readrec函數(shù)和writerec函數(shù),實現(xiàn)全部程序功能(注:不允許使用全局變量,函數(shù)之

間的數(shù)據(jù)全部使用參數(shù)傳遞)。

※程序如下※

#include

#defineSTUDNUM30

structstud

{

charnum|5|,name[10];

ints[4]:

doubleave;

};

voidreadrec(structstud*pStud,intnum)

(

inti;

printf("\tNum\tName\tSl\tS2\lS3\tS4\n");

for(i=0;i<=29;i++)

(

prinlf("%d:\t",i);

scanf("%s%s%d%d%d%d,,,pStud->nuni,pStud->name,&(pStud->s[O]),

&(pStud->s[1J),&(pStud->s[2]),&(pStud->s[3]));

pStud->ave=(pStud->s[0]+pStud->s[l]+pStud->s[2]+pStud->s[3])/4.0;

pStud++;

)

)

voidwritercc(structstud*pStud,intnum)

(

inti;

printf("\tNum\tName\tSl\tS2\lS3\tS4\n");

for(i=0;i<=29;i+

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論