C语言课后习题答案第四版谭浩强_第1页
C语言课后习题答案第四版谭浩强_第2页
C语言课后习题答案第四版谭浩强_第3页
C语言课后习题答案第四版谭浩强_第4页
C语言课后习题答案第四版谭浩强_第5页
已阅读5页,还剩49页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

C语言课后习题答案-第四版-谭浩强(8-12)

第八章

l.#include<stdio.h>

intmain()

{voidswap(int*pl,int*p2);

intnl,n2,n3;

int*pl,*p2,*p3;

printf(Minputthreeintegernl,n2,n3:M);

scanf(n%d,%d,%dn,&nl,&n2,&n3);

pl=&nl;

p2=&n2;

p3=&n3;

if(nl>n2)swap(pl,p2);

if(nl>n3)swap(pl,p3);

if(n2>n3)swap(p2,p3);

printf(nNow,theorderis:%d,%d,%d\nn,n1,n2,n3);

return0;

)

voidswap(int*pl,int*p2)

{intp;

p=*pl;*pl=*p2;*p2=p;

)

-2.#include<stdio.h>

#include<string.h>

intmain()

{voidswap(char*,char*);

charstrl[20],str2[20],str3r20];

printf(ninputthreeline:\nH);

gets(strl);

gets(str2);

gets(str3);

if(strcmp(str1,str2)>0)swap(strl,str2);

if(strcmp(str1,str3)>0)swap(strl,str3);

if(strcmp(str2,str3)>0)swap(str2,str3);

printf(nNow,theorderis:\nH);

printf("%s\n%s\n%s\n",strl,str2,str3);

return0;

voidswap(char*pl,char*p2)

{charp[20];

strcpy(p,pl);strcpy(p1,p2);strcpy(p2,p);

)

f3.#include<stdio.h>

intmain()

{voidinput(int*);

voidmax_min_value(int*);

voidoutput(int*);

intnumber[10];

input(number);

max_min_value(number);

output(number);

return0;

)

voidinput(int*number)

{inti;

printf(ninput10numbers:**);

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

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

)

voidmax_min_value(int.number)

{int*max,*min,*p,temp;

max=min=number;

for(p=number+1;p<number+10;p++)

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

elseif(*p<*min)min=p;

temp=number[O];number[O]=*min;*min=temp;

if(max==number)max=min;

temp=number[9];numberf9]=*max;*max=temp;

)

voidoutput(int/number)

{int*p;

printf(nNow,theyare:");

for(p=number;p<number+10;p++)

printf(n%d",*p);

printf(n\nn);

)

4.#include<stdio.h>

intmain()

{voidmove(int[20],int,int);

intnumber[20],n,m,i;

printf(Mhowmanynumbers?11);

scanf(M%dn,&n);

printf(Minput%dnumbers:\nH,n);

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

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

printf(nhowmanyplaceyouwantmove?”);

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

move(number,n,m);

printf(nNow,theyare:\n");

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

printf(n%dn,number[i]);

printf(n\nH);

return0;

)

voidmove(intarray[20],intn,intm)

{int*p,array_end;

array_end=*(array+n-1);

for(p=array+n-1;p>array;p-)

*p=*(p-l);

*array=array_end;

m—;

if(m>0)move(an*ay,n,m);

)

5「#include<stdio.h>

intmain()

{inti,k,ni,n,num[50],*p;

printf(u\ninputnumberofperson:n=n);

scanf(n%dn,&n);

p=num;

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

*(p+i)=i+l;

i=0;

k=0;

m=0;

while(m<n-l)

{if(*(p+i)!=O)k++;

if(k==3)

{*(p+i)=0;

k=0;

m++;

i++;

if(i==n)i=0;

while(*p==O)p++;

printf(nThelastoneisNO.%d\nn,*p);

return0;

)

6.#include<stdio.h>

intmain()

{intlength(char*p);

intlen;

charstr[20];

printf(Hinputstring:");

scanf(n%sn,str);

len=length(str);

printf("Thelengthofstringis%d.\nn,len);

return0;

)

intlength(char*p)

{intn;

n=0;

while(*p!=,\0,)

{n++;

P++;

)

return(n);

)

7.f#include<stdio.h>

#include<string.h>

intmain()

{voidcopystr(char*,char

intm;

charstrl[20],str2[20];

printf("inputstring:n);

gets(strl);

printf(nwhichcharacterthatbegintocopy?11);

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

if(strlen(strl)<m)

printf("inputerror!");

else

{copystr(strl,str2,m);

printf("result:%s\nn,str2);

)

return0;

voidcopystr(char*pl,char*p2,intm)

{intn;

n=0;

while(n<m-1)

{n++;

pl++;

)

while(*pl!=\O*)

{*p2=*pl;

pl++;

p2++;

)

*p2='\0';

)

8.#include<stdio.h>

intmain()

{intupper=0,lower=0,digit=0,space=0,other=0,i=0;

char*p,s[20];

printf("inputstring:");

while((s[i]=getchar())!=\n,)i++;

p=&s⑼;

while(*p!=,\n,)

{if((W<=*p)&&(*p<=,Z,))

++upper;

elseif(('a'v=*p)&&(*pv='z'))

++lower;

elseif(*p==**)

++space;

elseif((*p<=,9,)&&(*p>=,0,))

++digit;

else

++other;

P++;

)

printf("uppercase:%dlowercase:%d",upper,lower);

printf(nspace:%ddigit:%dother:%d\nn,space,digit,other);

return0;

}

9.#include<stdio.h>

intmain()

{voidmove(int*pointer);

inta[3][3]*p,i;

printf("inputmatrix:\n");

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

scanf(n%d%d%dn,&a[i][0],&a[i][l],&a[i][2]);

p=&a[O][O];

move(p);

printf(nNow,matrix:\nn);

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

printf("%d%d%d\n",a[i][0],a[i][l],a[i][2]);

return0;

)

voidmove(int*pointer)

{inti,j,t;

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

forQ=i;jv3;j++)

{t=*(pointer+3*i+j);

*(pointer+3*i-+j)=*(pointer+3*j+i);

*(pointer+3*j+i)=t;

)

)

10.(1)->#include<stdio.h>

intmain()

{voidchange(int*p);

inta[5][5],*p,i,j;

printf(”inputmatrix:\nH);

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

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

p=&a[0][0];

change(p);

printf("Now,matrix:\nM);

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

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

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

printf(n\nn);

)

return0;

)

voidchange(int*p)

{inti,j,temp;

int*pmax,*pmin;

pmax=p;

pmin=p;

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

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

{if(*pmaxv*(p+5*i+j))pmax=p+5*i+j;

if(*pmin>*(p+5*i+j))pmin=p+5*i+j;

temp=*(p+12);

*(p+12)=*pmax;

*pmax=temp;

temp=*p;

*p=*pmin;

*pmin=temp;

pmin=p+l;

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

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

if(((p+5*i+j)!=p)&&(*pmin>*(p+5*i+j)))pmin=p+5*i+j;

temp=*pmin;

*pmin=*(p+4);

*(p+4)=temp;

pmin=p4-l;

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

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

if

(((p+5*i+j)!=(p+4))&&((p+5*i+j)!=p)&&(*pmin>*(p+5*i+j)))pmin=p+5*i+j;

temp=*pmin;

*pmin=*(p+20);

*(p+20)=temp;

pmin=p+l;

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

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

if(((p+5*i+j)!=p)&&((p+5*i+j)!=(p+4))&&((p+5*i+j)!=(p+20))&&

(*pmin>*(p+5*i+j)))

pmin=p+5*i+j;

temp=*pmin;

*pmin=*(p+24);

*(p+24)=temp;

}T

(2).#include<stdio.h>

intmain()

{voidchange(int*p);

inta[5][5],*p,i,j;

printf(ninputmatrix:\n");

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

for0=O;j<5;j++)

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

p=&a[0][0];

change(p);

printf(nNow,matrix:\nn);

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

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

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

printf("\n");

}

return0;

}

voidchange(int*p)//交换函数

{inti,j,temp;

int*pmax,*pmin;

pmax=p;

pmin=p;

for(i=0;i<5;i++)〃找最大值和最小值的地址,并赋给pmax,pmin

forG=i;j<5;j++)

{if(*pmaxv*(p+5*i+j))pmax=p+5*i+j;

if(*pmin>*(p+5*i+j))pmin=p+5*i+j;

}

temp=*(p+12);〃将最大值与中心元素互换

*(p+12)=*pmax;

*pmax=temp;

temp=*p;〃将最小值与左上角元素互换

*p=*pmin;

*pmin=temp;

pmin=p+l;〃将的地址赋给pmin,从该位置开始找最小的元素

for(i=0;i<5;i++)〃找第二最小值的地址赋给pmin

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

{if(i==0&&j==0)continue;

if(*pmin>*(p+5*i+j))pmin=p+5*i+j;

)

temp=*pmin;〃将第二最小值与右上角元素互换

*pmin=*(p+4);

*(p+4)=temp;

pmin=p+l;

for(i=0;i<5;i++)〃找第三最小值的地址赋给pmin

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

{if((i==0&&j==0)ll(i==0&&j==4))continue;

if(*pmin>*(p+5*i+j))pmin=p+5*i4j;

)

temp=*pmin;//将第三最小值与左下角元素互换

*pmin=*(p+20);

*(p+20)=temp;

pmin=p+l;

for(i=0;i<5;i++)//找第四最小值的地址赋给pmin

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

{if((i==0&&j==0)ll(i==0&&j==4)ll(i==4&&j==0))continue;

if(*pmin>*(p+5*i+j))pmin=p+5*i+j;

)

temp=*pmin;〃将第四最小值与右下角元素互换

*pmin=*(p+24);

*(p+24)=temp;

)

11.#include<stdio.h>

#include<string.h>

intmain()

{voidsoit(chars[][6]);

inti;

charstr[10][6];

printf("input10strings:\nn);

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

scanf("%sn,str[i]);

sort(str);

printf(nNow,thesequenceis:\nn);

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

printf(n%s\nH,str[i]);

return0;

)

voidsort(chars[10][6])

{inti,j;

char*p,temp[10];

p=temp;

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

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

if(strcmp(s[j],sfj+l])>0)

{strcpy(p,s[j]);

strcpy(s[j],s[+j+l]);

strcpy(s|j+l],p);

}

}-ll(2)#include<stdio.h>

#include<string.h>

intmain()

{voidsort(char(*p)[6]);

inti;

charstr[10][6];

char(*p)[6];

printf(Hinput10strings:\nn);

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

scanf(n%sn,str[i]);

p=str;

sort(p);

printf(MNow,thesequenceis:\nn);

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

printf(n%s\nH,str[i]);

return0;

)

voidsort(char(*s)[6])

{intij;

chartemp[6],*t=temp;

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

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

if(strcmp(s[j],s|j+l])>0)

{strcpy(t,s[j]);

strcpy(s[j],s[+j+l]);

strcpy(sfj+l],t);

12.#include<stdio.h>

#include<string.h>

intmain()

{voidsort(char*[]);

inti;

char*p[10],str[10][20];

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

p[i]=str[i];

printf("input10strings:\nn);

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

scanf(n%sn,p[i]);

sort(p);

printf(nNow,thesequenceis:\nn);

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

printf(n%s\n",p[i]);

return0;

)

voidsort(char*s[])

{inti,j;

char*temp;

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

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

if(strcmp(*(s+j),*(s+j+l))>0)

{temp=*(s+j);

*(s+j)=*(s+j+l);

*(s+j+l)=temp;

13.#include<stdio.h>

#include<math.h>

intmain()

{floatintegral(float(*)(float),float,float,int);//;ffintegarl函数的声明

floatfsin(float);〃对fsin函数的声明

floatfcos(float);〃对fcos函数的声明

floatfexp(float);〃对fexp函数的声明

floatal,bl,a2,b2,a3,b3,c,(*p)(float);

intn=20;

printf(Hinputal,bl:");

scanf(H%f,%f';&al,&bl);

printf(ninputa2,b2:n);

scanf(u%f,%fn,&a2,&b2);

printf(Minputa3,b3:");

scanf(n%f,%f';&a3,&b3);

p=fsin;

c=integral(p,al,bl,n);

printf("Theintegralofsin(x)is:%f\n",c);

p=fcos;

c=integral(p,a2,b2,n);

printf("Theintegralofcos(x)is:%f\n',,c);

p=fexp;

c=integral(p,a3,b3,n);

printf("Theintegralofexp(x)is:%f\n",c);

return0;

floatintegral(float(*p)(float),floata,floatb,intn)

{inti;

floatx,h,s;

h=(b-a)/n;

x=a;

s=0;

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

{x=x+h;

s=s+(*p)(x)*h;

)

return(s);

)

floatfsin(floatx)

{returnsin(x);}

floatfcos(floatx)

{returncos(x);}

floatfexp(floatx)

{returnexp(x);}

14.#include<stdio.h>

intmain()

{voidsort(char*p,intm);

inti,n;

char*p,num[20];

printf(ninputn:");

scanf(”%d”,&n);

printf(npleaseinputthesenumbers:\nn);

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

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

p=&num[0];

sort(p,n);

printf(HNow,thesequenceis:\nn);

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

printf(n%d",num[i]);

printf(n\nn);

return0;

)

voidsort(char*p,intm)//将n个数逆序排列函数

{inti;

chartemp,*pl,*p2;

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

{pl=p+i;

p2=p+(m-l-i);

temp=*pl;

*p]=*p2;

*p2=temp;

)

)

15.#include<stdio.h>

intmain()

{voidavsco(floatfloat*);

voidavcourl(char(*)[10],float*);

voidfali2(charcourse[5][10],intnum[],float*pscore,floataver[4]);

voidgood(charcourse[5][10],intnum[4],float*pscore,floataver[4]);

inti,j,*pnum,num[4];

floatscore[4][5],aver[4],*pscore,*paver;

charcourse[51[l0],(*pcourse)[101;

printf(ninputcourse:\nn);

pcourse=course;

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

scanf("%sn,course[i]);

printf(MinputNO.andscores:\nn);

printf("NOJ);

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

printf(n,%sn,course[i]);

printf(H\nn);

pscore=&score[0][01;

pnum=&num[0];

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

{scanf("%dn,pnum+i);

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

scanf(,,%f,,,pscore+5*i+j);

)

paver=&aver[0];

printf("\n\nM);

avsco(pscore,paver);//求出每个学生的平均成绩

avcourl(pcourse,pscore);//求出第一门课的平均成绩

printf(n\n\nH);

fali2(pcourse,pnum,pscore,paver);//找出2门课不及格的学生

printf(n\n\nn);

good(pcourse,pnum,pscore,paver);//找出成绩好的学生

return0;

)

voidavsco(float*pscore,float*paver)//求每个学生的平均成绩的函数

floatsum,average;

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

{sum=0.0;

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

sum=sum+(*(pscore+5*i+j));〃累计每个学生的各科成绩

average=sum/5;〃计算平均成绩

*(paver+i)=average;

voidavcourl(char(*pcourse)[10],float*pscore)//求第一课程的平均成绩的

函数

{inti;

floatsum,averagel;

sum=0.0;

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

sum=sum+(*(pscore+5*i));//累计每个学生的得分

averagel=sum/4;〃计算平均成绩

printf(ncoursel:%saveragescore:%7.2f\nn,*pcourse,average1);

voidfali2(charcourse[5][10],intnum[],float*pscore,floataver[4])

//找两门以上课程不及格的学生的函数

{inti,j,k,label;

printf("==========Studentwhoisfailintwocourses=======\nn);

printf("NO.");

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

printf(n%lls",course[i]);

printf(naverage\n");

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

{label=0;

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

if(*(pscore+5*i+j)<60.0)label++;

if(label>=2)

{printf(n%d'\num[i]);

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

printf(n%11.2fM,*(pscore+5*i+k));

printfC%11.2f\nn,aver[i]);

voidgood(charcourse[5][10],intnum[4],float*pscore,floataver[4])

//找成绩优秀学生(各门85以上或平均90分以上)的函数

{inti,j,k,n;

printf(n======Studentswhosescoreisgood======\n");

printf(”NO.”);

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

printf("%lls",course[i]);

printf("average、。");

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

{n=0;

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

if(*(pscore+5*i+j)>85.0)n++;

if((n==5)ll(aver[i]>=90))

{printf("%d",num[i]);

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

printf(n%11.2f",*(pscore+5*i+k));

printf("%11.2f\nK,aver[i]);

16.#include<stdio.h>

intmain()

charstr[50],*pstr;

inti,j,k,m,e10,digit,ndigit,a[l0],*pa;

printf("inputastring:\n");

gets(str);

pstr=&str[0];/*字符指针pstr置于数组str首地址*/

pa=&a[0];/*指针pa置于a数组首地址*/

ndigit=0;/*ndigit代表有多少个整数*/

i=0;/*代表字符串中的第儿个字符*/

j=0;

while(*(pstr+i)!='\0')

{if((*(pstr+i)>='0')&&(*(pstr+i)<='9'))

j++;

else

{if(j>0)

{digit=*(pstr+i-1)-48;/*将个数位赋予digit*/

k=l;

while(k<j)/*将含有两位以上数的其它位的数值累计于digit*/

{el0=l;

for(m=l;m<=k;m++)

el0=el0*10;/*el0代表该位数所应乘的因子*/

digit=digit+(*(pstr+i-l-k)-48)*el0;/*将该位数的数值、累加于

digit*/

k++;/*位数K自增*/

)

*pa=digit;/*将数值赋予数组a*/

ndigit++;

pa++;/*指针pa指向a数组下一元素*/

j=0;

)

)

i++;

}

if(j>0)/*以数字结尾字符串的最后一个数据*/

{digit=*(pstr+i-1)-48;/*将个数位赋予digit*/

k=l;

while(k<j)/*将含有两位以上数的其它位的数值累加于digit*/

{el0=l;

for(m=l;m<=k;m++)

el0=el0*10;/*el0代表位数所应乘的因子*/

digit=digit+(*(pstr+i-1-k)-48)*e10;/*将该位数的数值累加于digit*/

k++;/*位数K自增*/

pa=digit;/*将数值赋予数组a*/

ndigit++;

j=0;

)

printf("Thereare%dnumbersinthisline,theyare:\n",ndigit);

j=0;

pa=&a[O];

for(j=O;j<ndigit;j++)/*打印数据*/

printf(n%d",*(pa+j));

printf(H\n");

return0;

)

17.#include<stdio.h>

intmain()

{intstrcmp(char*pl,char*p2);

intm;

charstrl[20],str2[20],*pl,*p2;

printf(ninputtwostrings:\nH);

scanf("%sn,strl);

scanf("%s”,str2);

pl=&strl[O];

p2=&str2f0];

m=strcmp(pl,p2);

printf(',result:%d,\nn,m);

return0;

)

intstrcmp(char*pl,char*p2)〃两个字符串比较函数

{inti;

i=0;

while(*(p1+i)==*(p2+i))

if(*(pl+i++)==\0)return(O);〃相等时返回结果0

return(*(p1+i)-*(p2+i));〃不等时返回结果为第一个不等字符

ASCII码的差值

)

18.#include<stdio.h>

intmain()

{char*month_name[13]={nillegalmonth0,,,January,V,Februaryn,',Marchn,',Aprir,,

“May”JJune”Jjuly”JAugus「”September”JOctober”,

nNovembern,,,Decembern};

intn;

printf(Minputmonth:\nM);

scanf(H%d",&n);

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

printf(HItis%s.\nn,*(month_name+n));

else

printf("Itiswrong.\nn);

return0;

}#include<stdio.h>

#defineNEWSIZE1000〃指定开辟存区的最大容量

charnewbuf[NEWSIZE];〃定义字符数组newbuf

char*newp=newbuf;〃定义指针变量newp,指向可存区

的始端

char*new(intn)〃定义开辟存区的函数new,开辟存储

区后返回指针

{if(newp+n<=newbuf+NEWSIZE)//开辟区未超过newbuf数组的

大小

{newp+=n;//newp指向存储区的末尾

retum(newp-n);//返回一个指针,它指向存区的开始位

)

else

return(NULL);//当存区不够分配时,返回一个空指

)

19(l).#include<stdio.h>

#defineNEWSIZE1000

charnewbuf[NEWSIZEl;

char*newp=newbuf;

voidfree(char*p)〃释放存区函数

{if(p>=newbuf&&p<newbufNEWSIZE)

newp=p;

2O.#defineLINEMAX20/*定义字符串的最大长度*/

intmain()

{inti;

char**p,*pstr[5],str[5][LINEMAX];

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

pstr[i]=str[i];/*将第i个字符串的首地址赋予指针数组pstr的第i个元素*/

printf("input5strings:\n");

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

scanf("%s",pstr[i]);

p=pstr;

sort(p);

printf("stringssorted:\n");

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

printf(u%s\n,,,pstr[i]);

sort(char**p)/*冒泡法对5个字符串排序函数*/

{inti,j;

char*temp;

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

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

{if(strcmp(*(p+i),*(p+j))>0)/*比较后交换字符串地址*/

{temp=*(p+i);

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

*(p+j)=temp;

return0;

}一

21.#include<stdio.h>

intmain()

{voidsort(intn);

inti,n,data[20],**p,*pstr[20];

printf(ninputn:\rT);

scanf(n%dn,&n);

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

pstr[i]=&data[i];//将第i个整数的地址赋予指针数组pstr的第i个元素

printf(ninput%dintegernumbers:n,n);

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

scanf(n%dn,pstr[i]);

p=pstr;

sort(p,n);

printf(nNow,thesequenceis:\nn);

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

printf(n%dn*pstr[i]);

printf(n\nn);

return0;

)

voidsort(int**p,intn)

{inti,j,*temp;

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

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

{if(**(p+i)>**(p+j))〃比较后交换整数地址

{temp=*(p+i);

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

*(p+j)=temp;

}

第九章

1.#include<stdio.h>

struct

{intyear;

intmonth;

intday;

}date;

intmain()

{intdays;

printf("inputyear,month,day:");

scanf(n%d,%d,%dn,&date.year,&date.month,&date.day);

switch(date.month)

{case1:days=date.day;break;

case2:days=date.day+31;break;

case3:days=date.day+59;break;

case4:days=date.day+90;break;

case5:days=date.day+120;break;

case6:days=date.day+151;break;

case7:days=date.day+181;break;

case8:days=date.day+212;break;

case9:days=date.day+243;break;

case10:days=date.day+273;break;

case11:days=date.day+304;break;

case12:days=date.day+334;break;

)

if((date.year%4==0&&date.year%100!=0

lldate.year%400==0)&&date.month>=3)days+=l;

printf(n%d/%disthe%dthdayin%d.\nn,date.month,date.day,days,date.year);

return0;

)

f1.#include<stdio.h>

struct

{intyear;

intmonth;

intday;

}date;

intmain()

{inti,days;

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

printf(ninputyear,month,day:n);

scanf(n%d,%d,%dn,&date.year,&date.month,&date.day);

days=O;

for(i=1;i<date.month;i++)

days=days+day_tab[i];

days=days+date.day;

if((date.year%4==0&&date.year%100!=0IIdate.year%400==0)&&

date.month>=3)

days=days+l;

printf(M%d/%disthe%dthdayin%d.\n",date.month,date.day,days,date.year);

return0;

)

2.#include<stdio.h>

structy_m_d

{intyear;

intmonth;

intday;

}date;

intmain()

{intdays(structy_m_ddatel);

printf(ninputyear,month,day:1');

scanf(0%d,%d,%d,',&date.year,&date.month,&date.day);

printf(n%d/%disthe%dthdayin%d.\n",date.month,date.day,days(date),date.year);

}

intdays(structy_m_ddate1)

{intsum;

switch(date1.month)

{case1:sum=datel.day;break;

case2:sum=datel.day+31;break;

case3:sum=date1.day+59;break;

case4:sum=datel.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;break;

case10:sum=datel.day+273;break;

case11:sum=date1.day+304;break;

case12:sum=datel.day+334;break;

if((date1.year%4==0&&date1.year%1OO!=OIIdatel.year%400==0)&&

date1.month>=3)

sum+=l;

return(sum);

)

2.#include<stdio.h>

structy_m_d

{intyear;

intmonth;

intday;

}date;

intmain()

{intdays(intyear,intmonth,intday);

intdays(int,int,int);

intday_sum;

printf("inputyear,month,day:");

scanf(n%d,%d,%dn,&date.year,&date.month,&date.day);

day_sum=days(date.year,date.month,date.day);

printf(n%d/%disthe%dthdayin%d.\nH,date.month,date.day,day_sum,date.year);

)

intdays(intyear,intmonth,intday)

{intday_sum,i;

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

day_sum=0;

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

day_sum+=day_tab[i];

day_sum+=day;

if((year%4==0&&year%100!=0IIyear%4==0)&&month>=3)

day_sum+=l;

retum(day_sum);

)

3.f#include<stdio.h>

#defineN5

structstudent

{charnum[6];

charname[8];

intscore[4];

}stu[N];

intmain()

{voidprint(structstudentstu[6]);

inti,j;

for(i=0;i<N;i+4-)

{printf("\ninputscoreofstudent%d:\nH,i+l);

printf("NO.:");

scanf(H%sn,stu[i].num);

printf("name:”);

scanf(n%s",stu[i].name);

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

{printf(Hscore%d:n,j+l);

scanf("%dn,&stu[i].scorerj]);

)

printf("\n");

}

print(stu);

return0;

}

voidprint(structstudentstu[6])

{inti,j;

printf(n\nNO.namescore1score2score3\nn);

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

{printf("%5s%1OsH,stu[i].num,stu[i].name);

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

printf("%9d",stu[i].score[j]);

printf(n\nn);

)

)

4.#include<stdio.h>

#defineN5

structstudent

{charnum[6];

charname[8];

intscore[4];

}stu[N];

intmain()

{voidinput(structstudentstu[]);

voidprint(structstudentstu[]);

input(stu);

print(stu);

return0;

}

voidinput(structstudentstu[])

{inti,j;

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

{printf("inputscoresofstudent%d:\n",i+l);

printf(MNO.:");

scanf(n%sn,stufi].num);

printf(nname:");

scanf(n%s",stu[i].name);

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

{printf(Hscore%d:",j+l);

scanf("%d",&stu[i].score[j]);

)

printf(n\nK);

voidprint(structstudentstu[6])

{inti,j;

printf("\nNO.namescore1score2score3\nH);

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

{printf("%5s%10sn,stu[i].num,stu[i].name);

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

printf("%9d",stu[i].score[j]);

printf(',\nH);

)

)

5.#include<stdio.h>

#defineN10

structstudent

{charnum[6];

charname[8];

floatscore[3];

floatavr;

}stu[N];

intmain()

{inti,j,maxi;

floatsum,max,average;

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

{printf("inputscoresofstudent%d:\n",i+l);

printf(MNO.:n);

scanf("%sn,stu[i].num);

printf(nname:");

scanf('1%sn,stu[i].name);

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

{printf("score%d:",j+l);

scanf(n%r,&stufi].score[j]);

average=0;

max=0;

maxi=0;

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

{sum=O;

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

sum+=stu[i].score[j];

stu[i].avr=sum/3.0;

average+=stu[i].avr;

if(sum>max)

{max=sum;

maxi=i;

)

)

average/=N;

printf(nNO.namescore1score2score3average\nu);

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

{printf(n%5s%10sn,stu[i].num,stufi].name);

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

printf(n%9.2f",stu[i].scorefj]);

printf(n%8.2f\nM,stu[i].avr);

)

printf("average=%5.2f\n",average);

printf("Thehighestscoreis:student%s,%s\nn,stu[maxi].num,stufmaxi].name);

printf("hisscoresare:%6.2f,%6.2f,%6.2f,average:%5.2f.\nn,

stu[maxi].score[0],stu[maxi].score[l],stu[maxi].score[2],stu[maxi].avr);

return0;

)

6.#include<stdio.h>

#defineN13

structperson

{intnumber;

intnextp;

}link[N+l];

intmain()

{inti,count,h;

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

{if(i==N)

link[i].nextp=l;

else

link[i].nextp=i+l;

link[i].number=i;

)

printf(n\nH);

count=0;

h=N;

printf("sequencethatpersonsleavethecircle:\nn);

while(count<N-l)

{i=0;

while(i!=3)

{h=link[h].nextp;

if(linkfh],number)

i++;

)

printf(n%4dH,link[h].number);

linkfh].number=O;

count++;

)

printf("\nThelastoneisn);

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

if(link[i].number)

printf(n%3dn,link[i].number);

printf("\nH);

return0;

}#include<stdio.h>

structstudent

{longnum;

floatscore;

structstudent*next;

);

intn;

structstudent*del(structstudent*head,longnum)

{structstudent*pl,*p2;

if(head==NULL)//是空表

{printf("\nlistnull!\n");

return(head);

)

pl=head;〃使pl指向第一个结点

while(num!=pl->num&&p1->next!=NULL)//pl指向的不是所要找的结点且后

面还有结点*/

{p2=p1;p1=p1->next;}//pl后移一个结点

if(num==p1->num)//找到了

{if(p1==head)head=p1->next;〃若pl指向的是首结点,把第二个结点地址赋

予head*/

elsep2->next=p1->next;//否则将下一结点地址赋给前一结点地址

printf(ndelete:%ld\nn,num);

n=n-l;

)

elseprintf(n%ldnotbeenfound!\nn,num);〃找不到该结点

return(head);

7.#include<stdio.h>

structstudent

{longnum;

floatscore;

structstudent*next;

);

intn;

structstudent*insert(structstudent*head,structstudent*stud)

{structstudent*p0,*pl,*p2;

pl=head;〃使p1指向第一个结点

pO=stud;〃指向要插入的结点

if(head==NULL)〃原来的链表是空表

{head=pO;pO->next=NULL;}〃使P。指向的结点作为头结点

else

{while((pO->num>p1->num)&&(p1->next!=NULL))

{p2=pl;〃使p2指向刚才p1指向的结点

pl=pl->next;

}//pl后移一个结点

if(pO->num<=pl->num)

{if(head==pl)head=pO;〃插到原来第一个结点之前

elsep2->next=p0;〃插至Up2指向的结点之后

pO->next=pl;

)

else

{pl->next=pO;

pO->next=NULL;〃插到最后的结点之后

)

)

n=n+l;〃结点数加1

return(head);

)

7.#include<stdio.h>

#include<malloc.h>

#defineLENsizeof(structstudent)

structstudent

{longnum;

floatscore;

structstudent*next;

);

intn;

intmain()

{structstudent*creat();

structstudent*del(structstudent*Jong);

structstudent*insert(structstudent*,structstudent*);

voidprint(structstudent*);

structstudent*head,stu;

longdel_num;

printf(ninputrecords:\nn);

head=creat();

print(head);

printf(ninputthedeletednumber:'1);

scanf("%ldH,&del_num);

head=del(head,del_num);

print(head);

printf(Hinputtheinsertedrecord:n);

scanf(”%ld,%f”,&stu.num,&stu.score);

head=insert(head,&stu);

print(head);

return0;

)

structstudent*creat()

{structstudent*head;

structstudent*pl,*p2;

n=0;

pl=p2=(structstudent*)malloc(LEN);

scanf(n%Id,%f",&pl->num,&pl->score);

head=NULL;

while(p1->num!=0)

{n=n+l;

if(n==l)head=pl;

elsep2->next=pl;

p2=pl;

pl=(structstudent*)malloc(LEN);

scanf(n%ld,%f\&pl->num,&pl->score);

)

p2->next=NULL;

return(head);

)

structstudent*del(structstudent*head,longnum)

{structstudent*pl,*p2;

if(head==NULL)

{printf(n\nlistnull!\nH);

return(head);

)

pl=head;

while(num!=p1->num&&p1->next!=NULL)

{p2=pl;pl=pl->next;}

if(num==pl->num)

{if(p1==head)head=pl->next;

elsep

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论