版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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
提交评论