C語言程序設(shè)計課后習(xí)題答案_第1頁
C語言程序設(shè)計課后習(xí)題答案_第2頁
C語言程序設(shè)計課后習(xí)題答案_第3頁
C語言程序設(shè)計課后習(xí)題答案_第4頁
C語言程序設(shè)計課后習(xí)題答案_第5頁
已閱讀5頁,還剩26頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

習(xí)題1和參考解答

1.什么是程序?

【答案】在計算機中,程序是指導(dǎo)計算機執(zhí)行某個功能或功能組合的一組指令。每一條

指令都讓計算機執(zhí)行完成一個具體的操作,一個程序所規(guī)定的操作全部執(zhí)行完畢后,就能產(chǎn)

生計算結(jié)果。

2.計算機語言經(jīng)歷了哪幾個階段?

【答案】計算機語言按其發(fā)展的先后順序,經(jīng)歷了機器語言、匯編語言和高級語言三個

階段。

3.程序的翻譯方式有哪幾種?

【答案】按翻譯方式的不同,程序的翻譯方式有解釋和編譯兩種,其中C語言采用的是

編譯的方式。

4.編寫一個簡單的C程序,使得在屏幕上顯示下列信息:

Cisveryfun.

【參考源程序】

#include<stdio.h>

intmain()

{

printff'Cisveryfun.\rT);

return0;

}

5.編寫一個簡單的C程序,使得在屏幕上顯示下列信息:

***

【參考源程序】

#include<stdio.h>

intmain()

(

printff*");

printfT****);

printf(u*****”);

***‘').

return0;

習(xí)題2和參考解答

1.求下列表達式的值。

(1)3.5+1/2

(2)設(shè)intx=18,k=14;,表達式為x%=k-k%5

(3)(int)((double)(5/2)+2.5)

(4)設(shè)x=2.5,a=7,y=4.7,表達式為x+a%3*(int)(x+y)%2/4

(5)設(shè)a=2,b=3,x=3.5,y=2.5,表達式為(float)(a+b)/2+(inl)x%(inl)y

(6)設(shè)a=2,b=5,表達式為a++,b++,a+b

(7)a為int類型,且其值為3,表達式為a+=a-=a*a

(8)x=y=6,x+y,x+l

(9)x=(y=6,y*2,y+l)

【答案】

(1)3.5

(2)8

(3)4

(4)2.5

(5)3.5

(6)9

(7)-12

(8)7

(9)7

2.編寫程序:輸入一個矩形的長和寬,計算該矩形的面積。

【參考源程序】

#include<stdio.h>

intmain()

{

floatlength,width,area;

scanf(<<%f%f,,&length,&width);

area=length*width;

printf(tuarea=%fAn,,,area);

return0;

)

3.編寫程序:輸入半徑的值,計算并輸出球的體積。

【參考源程序】

#include<stdio.h>

intmain()

(

floatr,v;

scanfC%f;&r);

v=4*3.1415*r*r*r/3;

printfCtv=%f\n,,,v);

return0;

4.編寫程序:輸入一個三位整數(shù),求其百位、十位、個位上的數(shù)字,并求出各位數(shù)字之和

以及各位數(shù)字之積。

【參考源程序】

#include<stdio.h>

intmain()

(

intn,g,s,b;

scanf(tt%d,\&n);

b=n/100;

s=n/10%10;

g=n%10;

printfCtsum=%d,product=%d\n,,,b+s+g,b*s*g);

return0;

)

習(xí)題3和參考解答

i.從鍵盤輸入任意一個整數(shù),判斷其是否為偶數(shù)。

【參考源程序】

#include<stdio.h>

intmain()

(

intn;

printf(€tpleaseinputanumber:\n^^);

scanfT%d”,&n);

if(n%2==0)

printfCYes!”);

else

printfTNo!");

return0;

)

2.有如下函數(shù):

-x(x<1)

y=?2x-l(l<x<10)

.3x-l(x210)

編寫程序,使輸入x時,輸出相應(yīng)的y值。

【參考源程序】

#include<stdio.h>

intmain()

(

intx,y;

printff'pleaseinputthex:\n");

scanfC%d”,&x);

if(x<l)

y=x;

elseif(x>=l&&x<10)

y=2*x-l;

elseif(x>=10)

y=3*x-l;

printfCyis%d”,y);

return0;

)

3.輸入一個整數(shù),若該數(shù)能夠被3和7整除,則輸出2;若只能被3和7中的任意一個

整除,則輸出1;若不能被3和7中的任意一個整除,則輸出0。

【參考源程序】

#include<sldio.h>

intmain()

{

intn,m;

printfi^pleaseinputn:\n,^);

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

if(n%3==0&&n%7==0)

m=2;

elseif(n%3==0||n%7==0)

m=l;

else

m=0;

printfC'theresultis%d”,m);

return0;

)

4.愛因斯坦的階梯問題。愛因斯坦曾提出過這樣一道有趣的數(shù)學(xué)題:有一個長階梯,

若每步上2階,最后剩1階;若每步上3階,最后剩2階;若每步上5階,最后剩4階;若

每步上6階,最后剩5階;只有每步上7階,最后剛好一階不剩。問該階梯至少有多少階?

編寫程序解決這個問題。

【參考源程序】

#include<stdio.h>

intmain()

{

inti,n=l,m=l;

while(m)

(

if(n%2==l)

if(n%3==2)

if(n%5==4)

if(n%6==5)

if(n%7==0)

printfT%d”,n);

m=0;

n++;

)

return0;

)

5.輸出所有的水仙花數(shù)。所謂水仙花數(shù)是一個3位整數(shù),它的各位數(shù)字的立方和等于

該數(shù)本身。

【參考源程序】

#include<stdio.h>

intmain()

(

inti,a,b,c;

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

(

a=i%10;

b=i/10%10;

c=i/100;

if(a*a*a+b*b*b+c*c*c==i)

printed”,i);

)

return0;

)

6.編寫程序,打印九九乘法表。

【參考源程序】

#include<sldio.h>

intmain()

(

inti,j;

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

(

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

printfT%3d'',i*j);

printf("\n”);

)

return0;

}

7.編寫程序,打印如下圖形。

***

*******

***

【參考源程序】

#include<stdio.h>

intmain()

inti,j;

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

(

for(j=1;j<=4-i;j++)

printfT");

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

printfT*");

prints%”);

)

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

(

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

printf("");

for(j=1;j<=7-2*i;j++)

printf("*”);

printfC'n");

)

return0;

}

8.用/4=1-1/3+1/5?1/7+…求兀的近似值,直到最后一項的絕對值小于IO"6為止。

【參考源程序】

#include<stdio.h>

intmain()

(

floatsum=0.0,t=1.0,s=-l;

inti=l;

while(t>le-6)

(

s=s*(-l);

t=t*s;

sum+=t;

t=1.0/(2*i+l);

i++;

)

sum=sum*4;

printf("%r',sum);

return0;

9.一個數(shù)如果恰好等于它的因子之和,就稱其為完數(shù)。例如,6的因子為1、2、3,

而6=1+2+3,因此6是完數(shù)。編寫程序找出1000以內(nèi)的所有完數(shù),并按下面格式輸出

其因子:6itsfactorsare1,2,3°

【參考源程序】

#include<stdio.h>

intmain()

(

inta,i,m;

for(a=l;a<=1000;a++)

(

for(m=0,i=l;i<=a/2;i++)

if(!(a%i))

m+=i;

if(m==a)

(

printf(u%4ditsfactorsaren,a);

for(i=l;i<=a/2;i4-+)

if(!(a%i))

printf(n%d",i);

printf(H\nn);

return0;

)

10.給出任意一個不多于5位的正整數(shù),要求如下:

①求出它是幾位數(shù)。

②分別輸出每一位數(shù)字。

③按逆序輸出各位數(shù)字。例如,原數(shù)為321,應(yīng)輸出123。

【參考源程序】

#include<stdio.h>

intmain()

(

intn,m,i,a,b,c,d,e,j=0;

scanf(u%dn,&n);

m=n;

while(n)

(

j++;

n/=10;

)

printf(n%d\n';j);

a=m/10000;

if(a!=0)

printf(u%d0,a);

b=m%10000/1000;

if(b!=O)

printf(n%d二b);

c=m%1000/100;

if(c!=0)

printf(*'%d”,c);

d=m%100/10;

if(d!=0)

printf(*'%d”,d);

e=m%10;

if(e!=0)

printf("%d\nn,e);

n=m;

while(n)

(

i=n%10;

printf("%d”,i);

n/=10;

)

return0;

習(xí)題4和參考解答

i.有十五個數(shù)按由大到小的順序放在一個數(shù)組中,輸入一個數(shù),要求用折半查找法找

出該數(shù)是數(shù)組中第幾個元素。如果該數(shù)不在數(shù)組中,則輸出“無此數(shù)

【參考源程序】

#include<stdio.h>

intmain()

(

intx[10],i,tJow=0,high=9,mid;

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

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

printf("inputthesearchnumber:");

scanf(n%dn,&t);

while(low<=high)

(

mid=(low+high)/2;

if(x[mid]==t)

(

printf(u%du,mid);

break;

)

if(x[mid]>t)

low=mid+1;

else

high=mid-l;

)

if(low>high)

printf("無此數(shù)!”);

return0;

)

2.編寫程序,將字符數(shù)組s2中的全部字符復(fù)制到字符數(shù)組si中。

【參考源程序】

#include<stdio.h>

intmain()

(

inti=0,j=0;

charsl[20],s2[20];

gets(s2);

while(s2[i])

sl[j++]=s2[i+4-];

slU]=s2[i];

puts(sl);

return0;

)

3.編寫程序,從鍵盤任意輸入20個整數(shù),統(tǒng)計其中非負(fù)數(shù)個數(shù),并計算非負(fù)數(shù)之和。

【參考源程序】

#include<stdio.h>

intmain()

(

inta[5],ij=0,sum=0;

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

(

scanf(H%d';&a[i]);

if(a[i]>=0)

(

j++;

sum+=a[i];

)

)

printf(Hj=%d,sum=%d",j,sum);

return0;

)

4.輸入一字符串,長度小于50,統(tǒng)計其中相鄰字符對出現(xiàn)的頻次,然后輸出統(tǒng)計結(jié)果。

例如,輸入“abcsl23",因為a與b、b與c、1與2、2與3都是相鄰字符對,所以結(jié)果輸出4。

【參考源程序】

#include<stdio.h>

intmain()

chars[50];

inti,n;

gets(s);

i=0;

n=0;

while(s[i+l]!='\O')

(

if(s[i]+l==s[i+l])

n++;

i++;

}

printf(M%d\nn,n);

return0;

)

5.編寫程序,找出一個二維數(shù)組中的鞍點,即該位置上的元素在該行上最大、在該列

上最小。也可能沒有鞍點。

【參考源程序】

#include<stdio.h>

intmain()

(

inti,j,k,flagl,flag2ta[3][4],max,maxj;

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

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

flag2=0;

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

(

max=a[i][0];

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

if(a[i][j]>max)

(

max=a[i][j];

maxj=j;

)

for(k=0,flagl=l;k<3&&flagl;k++)

if(max>a[k][maxj])

flag1=0;

if(flagl)

(

printf(n\n第%(1行,第%d列的%d是鞍點maxj,max);

flag2=l;

if(!flag2)

printf("\n矩陣中無鞍點八n");

return0;

)

6.有十個字符串,編程序在每個字符串中,找出最大字符按一一對應(yīng)的順序存入一維

數(shù)組a中,即第i個字符串中的最大字符放入a[i]中,輸出每個字符串中的最大字符。

【參考源程序】

#include<stdio.h>

intmain()

(

chars[10][20],a[10];

inti,j;

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

gets(s[i]);

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

(

a[i]=s[il[0];

fora=l;s[i]U]!='\0';j++)

if(a[i]<s[i][j])

a[i]=s[i][j];

)

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

printf("%d%c",i,a[i]);

return0;

)

7.編寫程序?qū)⒍S數(shù)組a中每個元素右移一列,最右一列換到最左一列,移后的數(shù)組

存到另一數(shù)組b中,并按矩陣形式輸出b。

【參考源程序】

#include<stdio.h>

intmain()

(

inta[2][3]={l,2,3,4,5,6},b[2][3];

inti,j;

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

for(j=l;j<3;j++)

b[i]U]=a[i][j-l];

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

b[i][0]=a[i][2];

printf("arrayb:\n");

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

{

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

printf("%5d",b[i]|j]);

printf(,'\n,');

)

return0;

)

8.編寫程序為一個5x5的二維數(shù)組a賦1到25的自然數(shù),然后輸出該數(shù)組的左下半三角元

素。

【參考源程序】

#include<stdio.h>

intmain()

(

inta[5][5],i,j,k=l;

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

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

a[i][j]=k++;

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

(

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

printf("%3d",a[i][j]);

printf("\n");

)

return0;

)

9.從鍵盤上接收十個三位的正整數(shù)(各個數(shù)位都不包括0)存入一個數(shù)組當(dāng)中,試將數(shù)

組中的每個數(shù)的百位與個位進行交換(例123交換后成為321),將組合成的新數(shù)仍存入原數(shù)

組中。

【參考源程序】

#include<stdio.h>

intmain()

(

inta[10],i;

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

(

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

a[i]=a[i]%10*100+a[i]/10%10*10+a[i]/100;

)

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

printf("%dM,a[i]);

return0;

習(xí)題5和參考解答

i.編寫程序,調(diào)用函數(shù)求一個圓柱體的表面積和體積。

【參考源程序】

#include<stdio.h>

voidfun(intr,inth)

(

floatarea;

area=2*3.14*r*h;

vol=3.14*r*r*h;

printf(,'area=%.2f,vol=%.2f,area,vol);

)

intmain()

(

intr,h;

scanf("%d%d';&r,&h);

fun(r,h);

return0;

)

2.編寫一個函數(shù),輸出一個整數(shù)的全部素數(shù)因子。例如:01=120時,因子為2,3,5。

【參考源程序】

#include<stdio.h>

intfun(intn)

{

intflag=l,i;

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

if(n%i==0)

flag=0;

returnflag;

)

intmain()

(

intm,i;

scanf("%d",&m);

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

if(m%i==0)

if(fun(i))

printf(n%d”,i);

return0;

)

3.編寫程序,調(diào)用函數(shù)使輸入的一個字符串反序存放并輸出。

【參考源程序】

#include<stdio.h>

#include<string.h>

voidfun(chars[])

(

inti=0,n;

chart;

n=strlen(s)-l;

while(i<=n)

(

t=s[i];s[i]=s[n];s[n]=t;

i++;n-;

)

)

intmain()

(

chars[20];

gets(s);

fun(s);

puts(s);

return0;

)

4.編寫一個函數(shù),輸入一個十六進制數(shù),輸出相應(yīng)的十進制數(shù)。

【參考源程序】

#include<stdio.h>

intfun(chars[J)

{

inti=0,n,m=0;

if(s[i]>=,a,)

n=s[i]Ja'+10;

else

n=s[i]-,0,;

while(s[++i]!='\0,)

(

if(s[i]>='a')

m=s[i]-'a'+10;

else

m=s[iJ-,0';

n=n*16+m;

)

returnn;

voidmain()

(

chars[6J;

intn;

gets(s);

n=fun(s);

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

5.編寫程序完成以下功能:在主函數(shù)中通過鍵盤輸入10個互不相同的整數(shù)并存入在一

維數(shù)組中,調(diào)用函數(shù)找出數(shù)組中的最大值,并從數(shù)組中刪除該值,在主函數(shù)中輸出

刪除后的數(shù)組。

【參考源程序】

#include<stdio.h>

voidfun(inta[10])

(

inti,j=0,max=a[0];

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

(

if(max<a[i])

(

max=a[i];j=i;

)

)

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

a[i]=a[i+l];

)

intmain()

(

inti,a[10];

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

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

fun(a);

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

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

return0;

}

6.編寫程序,調(diào)用函數(shù)輸出如下楊輝三角形:

1

11

121

1331

14641

15101051

【參考源程序】

#include<stdio.h>

voidyhui(inta[7][7])

(

inti,j;

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

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

fbr(i=3;i<7;i++)

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

a[i][j]=a[i-l][j-l]+a[i-l]lj];

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

(

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

printf("%3d",a[i][j]);

printf("\n");

)

)

intmain()

(

inta[7][7];

yhui(a);

return0;

)

7.用遞歸法計算的f+2?+32+……+/值,n的值由鍵盤輸入。

【參考源程序】

#include<stdio.h>

intsum(intn)

(

intr;

if(n<=0)

printf(udataerror\nM);

if(n==l)

r=l;

else

r=sum(n-l)+n*n;

returnr;

)

intmain()

(

intn;

scanf(n%d",&n);

printf(nresult=%d\nn,sum(n));

return0;

)

8.用遞歸法計算1+2+3+……+〃的值,n的值由鍵盤輸入。

【參考源程序】

#include<stdio.h>

intsum(intn)

intr;

if(n<=0)

print-"dataerror\n");

if(n==l)

r=l;

else

r=sum(n-l)+n;

returnr;

)

intmain()

{

intn;

scanf("%d”,&n);

printf(Hsum(%d)=%d\n,',n,sum(n));

return0;

)

x

9.已知e.可以用下面的公式表示:

編寫函數(shù)求",要求最后一項近似到1(尸。利用該函數(shù)求e,『,

【參考源程序】

#include<stdio.h>

floatfun1(intn)

inti;

floatr=l;

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

r=r*i;

returnr;

floatfun2(floatx,intn)

inti;

floatr=l;

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

returnr;

floatfun(floatx)

floatp,s=0;

intn=0;

p=fun2(x,n)/funl(n);

while(p>le-4)

(

s+二p;

n++;

p=fun2(x,n)/funl(n);

)

returns;

}

intmain()

(

printf(1,%f,,fun(l));

printf(n%f,,fun(2));

printf(n%f,,fun(-0.5));

return0;

習(xí)題6和參考解答

1.編寫程序,將一無符號八進制數(shù)字字符串轉(zhuǎn)換為十進制整數(shù)。例如,輸入的字符串

為“556”,則輸出十進制整數(shù)366。

【參考源程序】

#include<stdio.h>

intmain()

(

char*p,s[6J;

intn;

P=s;

gets(p);

n=*p-O;

while(*(++p)!='\01)

n=n*8+*p-'0‘;

printf("%d\nH,n);

return0;

)

2.編寫程序,從鍵盤上接收一個字符串,判斷其是否是回文(順讀和倒讀都一樣的字

符串稱為回文,如“l(fā)evel”)。

【參考源程序】

#include<stdio.h>

#include<string.h>

intmain()

chars[81],*pl,*p2;

intn;

gets(s);

n=strlen(s);

pl=s;

p2=s+n-1;

while(pl<p2)

(

if(*pl!=*p2)

break;

else

(

pl++;

p2-;

)

}

if(pl<p2)

printf(”NO'n");

else

printf(uYES\nn);

return0;

)

3.編寫程序,將一字符串中的內(nèi)容按逆序輸出,但不改變字符串中的內(nèi)容。

【參考源程序】

#include<stdio.h>

intinverp(char*a)

(

if(!*a)

return0;

inverp(a+l);

printf(n%c",*a);

)

voidmain()

{

chars[10];

gets(s);

inverp(s);

)

4.編寫程序,找出二維數(shù)組中的最大元素并輸出。

【參考源程序】

#include<stdio.h>

intmain()

inta[3][4],i,j,max,(*p)[4];

fdr(i=0;i<3;i++)

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

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

max=a[O][O];

for(p=a;p<a+3;p++)

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

if(*(*p+j)>max)

max=*(*p+j);

printf(nmax=%d",max);

return0;

)

5.編寫程序,輸入10個整數(shù),將其中最小的數(shù)與第一個數(shù)對換,將最大的數(shù)與最后一

個數(shù)對換。

【參考源程序】

#include<stdio.h>

intmain()

(

inta[10],*min,*max,i,t;

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

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

min=a;max=a;

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

(

if(*min>a[i])

min=&a[i];

if(*max<a[i])

max=&a[i];

}

t=*min;*min=a[0];a[0]=t;

t=*max;*max=a[9];a[9]=t;

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

printf(u%d-

return0;

)

6.有n個整數(shù),編寫程序使前面各數(shù)順序向后移m個位置,最后m個數(shù)變成最前面m

個數(shù)。

【參考源程序】

#include<stdio.h>

voidexchange(inta[],intn,intm)

(

inti,j,e,t;

for(i=0,e=n-m;e〈n;e++,i++)

t=*(a+e);

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

*(a+j)=*(a+j-l);

*(a+i)=t;

)

)

intmain()

(

inta[100],i,n,m;

printf(npleaseinputn,m:u);

scanf(',%d%d'\&n,&m);

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

scanf(n%dH,&a[i]);

exchange(a,n,m);

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

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

return0;

)

7.編寫程序,輸入月份,輸出該月的英文月名。例如,輸入3,則輸出March,要求

用指針數(shù)組處理。

【參考源程序】

#include<stdio.h>

intmain()

(

char"months口二{“January”,“February”,“March”,“April”,“May”JJune”,“July”,“August”,

"September",,,October',,',November",',December"};

intn;

scanf("%d'\&n);

if(n<=12&&n>=l)

printf(*'%d月的英文名稱是:%s\n”,n,months[n-l]);

else

printf("輸入的月份無效!”);

return0;

)

8.編寫程序,將一字符串正序反序連接,連接后仍存入原數(shù)組中。例如,字符數(shù)組s

中存有字符串“abcde",連接后s中的內(nèi)容為“abcdeedcba

【參考源程序】

#include<stdio.h>

intmain()

(

chars[100],*p,*q;

p=s;q=s;

gets(s);

while(*q)

q++;

p=q-i;

while(p>=s)

(

*q=*p;p-;q++;

)

*q='\0';

puts(s);

return0;

)

9.編寫函數(shù),實現(xiàn)去掉一個字符串前后空格字符的功能,并在主函數(shù)中調(diào)用該函數(shù)。

【參考源程序】

#include<stdio.h>

voiddelnum(char*s)

(

inti,j;

for(i=0j=0;s[i]!='\0';i++)

if(s[i]!=,!)

{

s[j]=s[i];j+4-;

)

s[j尸\(y;

)

voidmain()

(

char*item,s[80];

item=s;

printf(n\ninputastring:\nu);

gets(item);

delnum(item);

printf(,'\n%s,'?item);

)

10.編寫一個函數(shù)insert(sl,s2,n),其功能是在字符串si中的指定位置n處插入字符串s2。

【參考源程序】

#include<stdio.h>

#include<string.h>

voidinsert(char*sl,char*s2,intn)

(

inti,j;

char

t=sl;

i=strlen(sl);

j=strlen(s2);

while(t<sl+n-l)

t++;

for(p=s1+i+j+2;p>t;p—)

*p=*(p-j);

for(;*s2;t++,s2++)

*t=*s2;

)

intmain()

(

charstrl[50],str2[20];

intn;

gets(strl);

gets(str2);

scanf("%d",&n);

insert(strl,str2,n);

puts(strl);

return0;

習(xí)題7和參考解答

i.定義一個結(jié)構(gòu)體變量,其成員包括年、月、日。計算該日在本年中是第幾天。

【參考源程序】

#include<stdio.h>

struct

(

intyear;

intmonth;

intday;

}date;

intmain()

(

inti,days;

intday_tab[l3]={0,31,28,31,30,31,30,31,31,30,31,30,31);

scanf(<4%d%d%d,,,&date.year,&date.month,&date.day);

days=0;

for(i=l;i<date.month;i+4-)

days+=day_tab[ij

days+=date.day;

if((date.year%4==0&&date.year%100!=0||date.year%400==0)&&date.month>=3)

days+=l;

printff'%d/%disthe%dthdayin%d,,,date.month,date.month.day,days,date.year);

return0;

)

2.定義一個結(jié)構(gòu)體變量,其成員包括職工姓名、職工號、性別、工資、婚姻狀況和家

庭地址。

【參考源程序】

structemployee

charname[20];

charnumber[10];

charsex;

floatwage;

charmarry;

charaddress[50];

}zhang;

3.建立一個職工情況統(tǒng)計表,包括職工的工作證號、姓名、年齡、工資等內(nèi)容。輸出

該單位職工的平均年齡、平均工資和各年齡段職工人數(shù)的分布情況。

【參考源程序】

#include<stdio.h>

structemployee

(

charnumber[10J;

charname[20];

intage;

floatwage;

}e[100];

intmain()

(

floatsl=0,s2=0;

inta1=0,a2=0,a3=0,a4=0,i;

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

scanf(u%s%s%d%f,,e[i].number,e[i].name,&e[i].age,&e[i].wage);

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

if(e[i].age<30)al++;

elseif(e[i].age<40)a2++;

elseif(e[i].age<50)a3++;

elseif(e[i].age<60)a4++;

sl+=e[i].age;

s2+=e[i].wage;

)

printfC平均年齡:%.2f,平均工資:%.2f,20歲:%d,30歲:%d,40歲:%d,

50歲:%d”,sl/100,s2/100,al,a2,a3,a4);

return0;

)

4.建立一個鏈表,每個結(jié)點包括職工號、姓名、性別和年齡,輸入一個退休年齡,如

果鏈表中的結(jié)點所包含的年齡等于此年齡,就刪除該結(jié)點。

【參考源程序】

#include<stdio.h>

#include<malloc.h>

structemployee

(

charnumber[10];

charname[20];

charsex[2];

intage;

structemployee*nexl;

}emp[10J;

voidmain()

(

structemployee*p,*pt,*head;

inti,length,iage,flag=1;

intfind=O;

while(flag==l)

(

printfif^inputlengthoflist:^^);

scanf("%d”,&length);

if(length<10)

flag=0;

)

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

(

p=(slructemployee*)malloc(sizeof(structemployee));

if(i==0)

head=pt=p;

else

pt->next=p;

Pt=P;

scanfC6%s%s%s%d,,,p->number,p->name,p->sex,&p->age);

)

p->next=NULL;

p=head;

Pl二P;

printff'inputage:");

scanfT%d”,&iage);

if(pt->age==iage)

(

p=pt->next;

head=pt=p;

find=l;

)

else

pt=pt->next;

while(pt!=NULL)

(

if(pt->age==iage)

(

p->next=pt->next;

find=l;

)

else

P=Pt;

pt=pt->next;

)

if(!find)

printff'notfind%d.M,iage);

p=head;

printf(€t\nNo.Namesexage\nn);

while(p!=NULL)

|

printf(4€%6s%8s,,,p->number,p->name);

printf(u%6s%6d\n,,,p->sex,p->age);

p=p->next;

習(xí)題8和參考解答

1.編寫程序,從鍵盤輸入100個字符,存入名為file.txt的文件中。

【參考源程序】

#include<stdio.h>

intmain()

(

FILE*fp;

charch;

inti;

if((用=fbpen(“行l(wèi)e.txt"JW"))=NULL)

(

printfi(4lcannotopenfile\n^^);

exit(0);

}

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

(

ch=getchar();

fputc(ch,fp);

fclose(fp);

return0;

)

2.編寫程序,從鍵盤輸入一個字符串,將其中的小寫字母全部轉(zhuǎn)換成大寫字母,然后

輸出到文件file.txt中保存,輸入的字符串以#結(jié)束。

【參考源程序】

#include<stdio.h>

#include<stdio.h>

intmain()

(

FILE*fp;

charch;

if((fp=fopen(<€file.txt,,,,,W,,))=NULL)

(

printfV'cannotopenfile\n^^);

exit(O);

)

while((ch=getchar())!='#')

(

if(ch>=,a,&&chv=Z)

ch=ch-32;

fputc(ch,fp);

)

fclose(fp);

return0;

)

3.現(xiàn)有5個學(xué)生,從鍵盤輸入如下數(shù)據(jù):學(xué)號、姓名、語文成績、數(shù)學(xué)成績和英語成

績,計算出每個學(xué)生3門課的平均成績,將原有數(shù)據(jù)和計算出的平均分都存放在文

件score.txt中。

【參考源程序】

#include<stdio.h>

#include<stdio.h>

structstudent

(

charnum[10];

charname[20];

floats[4];

}stu[5];

intmain()

(

FILE*fp;

charch;

inti;

if((fp=fbpenCscore.txt,,,,,W,,))==NULL)

printff'cannotopenfile\rT);

exit(O);

)

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

(

scanf(“%s”,stu[i].num);

scanf(46%s,5,stu[i].name);

scanf(t<%f%f%f,,&stu[i].s[O],&stu[i].s[l],&stu[i].s[2]);

stu[i].s[3]=(stu[i].s[O]+stu[i].s[1]+stu[i].s[2])/3;

fwrite(&stu[i],sizeof(structstudent),!,fp);

)

fclose(fp);

return0;

1

4.編寫程序,將文件filename.dat中的內(nèi)容復(fù)制到文件newfile.dat中。

【參考源程序】

#include<stdio.h>

#include<stdio.h>

intmain()

(

intc;

FILE*fpl,*fp2;

fp1=fbpen("fnename.dat",‘Tb'');

fjp2=fbpen("newfHe.dat'‘,"wb");

c=fgetc(fpl);

while(c!=EOF)

(

fputc(c,fp2);c=fgetc(fpl);

}

fclose(fpl);

fclose(fp2);

return0;

)

5.編寫程序,統(tǒng)計用戶指定文件的長度。

【參考源程序】

#include<stdio.h>

#include<stdio.h>

intmain()

(

FILE*fp;

longfl;

S=fopen("test.dat";Tb");

fseek(fp,0,SEEK_END)_;

fl=ftell(fp);

fclose(fp);

printf(,,%d\n,,;fl);

return0;

溫馨提示

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

評論

0/150

提交評論