C語言課后習題答案-第四版譚浩強_第1頁
C語言課后習題答案-第四版譚浩強_第2頁
C語言課后習題答案-第四版譚浩強_第3頁
C語言課后習題答案-第四版譚浩強_第4頁
C語言課后習題答案-第四版譚浩強_第5頁
已閱讀5頁,還剩86頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

C語言課后習題答案-第四版-譚浩強(8-12)

C語言課后習題答案-第四版-譚浩強(8-12)

第八章

#include<stdio.h>

intmain()

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

intnl,n2,n3;

int*pl,*p2,*p3;

printf("inputthreeintegernl,n2,n3:〃);

scanf(z/%d,%d,%d〃,&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);

printfC'Now,theorderis:%d,%d,%d\nz,,nl,n2,n3);

return0;

)

voidswap(int*pl,int*p2)

{intp;

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

)

#include<stdio.h>

#include<string.h>

intmain()

{voidswap(char*,char*);

charstr1[20],str2[20],str3[20];

printf("inputthreeline:\n〃);

gets(strl);

gets(str2);

gets(str3);

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

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

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

printf(""Now,theorderis:\n〃);

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

return0;}

voidswap(char*pl,char*p2)

{charp[20];

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

#include<stdio.h>

intmainO

{voidinput(int*);

voidmax_min_value(int*);

voidoutput(int*);

intnumber[10];

input(number);max_min_value(number);output(number);

return0;

)

voidinput(int*number)(inti;

printf("input10numbers:");

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

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

}

voidmax_min_va1ue(int*number){int*max,*min,*p,temp;

max=min=number;

for(p=number+l;p<number+10;p++)if(*p>*max)max=p;elseif(*p〈*min)min=p;

temp=number[01;number[0]=*min;*min=temp;if(max二二number)max=min;

temp=number[9];number[9]=*max;*max二temp;}

voidoutput(int*number){int*p;

printf("Now,theyare:〃);

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

printfC%d〃,*p);

printf(〃\n〃);}

^include<stdio.h>

intmain()

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

intnumber[20],n,m,i;

printf(z,howmanynumbers?");

scanf("%d",&n);

printf("'input%dnumbers:\n/z,n);for(i=0;i<n;i++)

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

printfC'howmanyplaceyouwantmove?");scanf("%d",&m);

move(number,n,m);

z,

printf(Now,theyare:\n〃);

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

printf(〃%d〃,number[i]);

printf(〃\n〃);

return0;

)

voidmove(intarray[20],intn,intm){int*p,array_end;

array_end=*(array+n-1);

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

*array=array_end;

m——;

if(m>0)move(array,n,m);

)

#include<stdio.h>

intmain()

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

printf(〃\ninputnumberofperson:n=〃);scanf(〃%d〃,&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)!=0)k++;

if(k==3){*(p+i)=0;

k=0;

m++;

)

i++;

if(i=n)i=0;}

while(*p=0)p++;

printf(/zThelastoneisNO.%d\n〃,*p);return0;

#include<stdio.h>

intmain()

{intlength(char*p);

intlen;

charstr[20];

printf("inputstring:〃);

scanf(〃%s〃,str);

len=length(str);

printf(z,Thelengthofstringis%d.\n〃,len);return0;

)

intlength(char*p){intn;

n=0;

while(*p!='\0')

{n++;

p++;

)

return(n);

)

ttinclude<stdio.h>

tfinclude<string.h>

intmainO

{voidcopystr(char*,charint);intm;

charstrl[20],str2[20];

printf("inputstring:");gets(strl);

printf(z,whichcharacterthatbegintocopy?");scanf(〃猊〃,&m);

if(strlen(strl)<m)

printf("inputerror!”);

else

(copystr(strl,str2,m);

printf(〃result:%s\n〃,str2);

)

return0;

)

voidcopystr(char*pl,char*p2,intm){intn;

n=0;

while(n<m-l)

{n++;

pl++;

)

while(*pl!='\0')

{*p2=*pl;

pl++;

p2++;

*p2='\0';

#include<stdio.h>

intmain()

{intupper=O,lower=0,digit=O,space=O,other=0,i=O;char*p,s[20];

printf("inputstring:〃);

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

p=&s[O];

while(*p!=’\n')

{if(('A'〈=*p)&&(*p<='Z'))

++upper;

elseif(('a'〈=*p)&&(*p<='z'))

++lower;

elseif(*p二二'')

++space;

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

++digit;

else

++other;p++;

)

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

printf(〃space:%ddigit:%dother:%d\nz,,space,digit,other);return0;

ttinclude<stdio.h>

intmainO

{voidmove(int*pointer);

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

printf("inputmatrix:\n〃);

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

scanfC%d%d%dz,,&a[i][0],&a[i][1],&a[i][2]);

p=&a[0][0];

move(p);

printf("Now,matrix:\n〃);

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

printf(〃%d%d%d\n〃,a[i][0],a[i][1],a[i][2]);

return0;

)

voidmove(int*pointer)

{inti,j,t;

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

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

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

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

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

ttinclude<stdio.h>

intmainO

{voidchange(int*p);

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

printf("inputmatrix:\n〃);

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

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

scanf&a[i][j]);

P=&a[0][0];

change(p);

printf(^Now,matrix:\nz,);

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

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

printf(〃%da[i][j]);

printf(〃\n〃);}

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(*pmax<*(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=0;j<5;j++)

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

tomp=*pmin;

*pmin=*(p+4);

*(p+4)=temp;

pmin=p+1;

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

for(j=0;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=0;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;}ttinclude<stdio.h>

intmain()

{voidchange(int*p);

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

printf("inputmatrix:\nz,);

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

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

scanfCz%d,z,&a[i][j]);

p=&a[0][0];

change(p);

printf("Now,matrix:\n〃);

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

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

printf(〃%da[i][j]);

printfCV);

return0;

)

voidchange(int*p)//交換函數(shù)

{inti,j,temp;

int*pmax,*pmin;

pmax=p;

pmin=p;

for(i=0;i<5;i++)〃找最大值和最小值的地址,并賦給pmax,pminfor(j=i;j<5;j++)

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

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

)

tcmp=*(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)!|(i==0&&j==4))continue;

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

}

temp=*pmin;//將第三最小值與左下角元素互換*pmin=*(p+20);

*(p+20)=temp;

pmin=p+1;

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

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

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

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

)

temp=*pmin;〃將第四最小值與右下角元素互換*pmin=*(p+24);

*(p+24)=temp;

)

^include<stdio.h>

#include<string.h>

intmainO

{voidsort(chars[][6]);

inti;

charstr[10][6];

printf(z,input10strings:\nz,);

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

scanf(〃%s〃,str[i]);

sort(str);

printf(""Now,thesequenceis:\n〃);

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

printf(〃%s\n〃,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],s[j+1])>0){strcpy(p,s[j]);

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

}ttinclude<stdio.h>

#include<string.h>

intmain()

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

charstr[10][6];

char(*p)[6];

printf("input10strings:\n,z);for(i=0;i<10;i++)

scanfCz%s,z,str[i]);p=str;

sort(p);

printf(^Now,thesequenceis:\n");for(i=0;i<10;i++)

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

)

voidsort(char(*s)[6]){inti,j;

chartemp[6],*t=temp;for(i=0;i<9;i++)

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

if(strcmp(s[j],s[j+1])>0){strcpy(t,s[j]);

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

)

#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:\n,z);

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

scanf("%s〃,p[i]);

sort(p);

printf("Now,thesequenceis:\n〃);

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

printf("%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+1))>0)

{temp=*(s+j);

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

*(s+j+l)=temp;

)

)

#include<stdio.h>

#include<math.h>

intmainO

{floatintegral(float(*)(float),float,float,int);〃對integarl函數(shù)的聲明

floatfsin(float);〃對fsin函數(shù)的聲明

floatfcos(float);〃對fcos函數(shù)的聲明

floatfexp(float);//對fexp函數(shù)的聲明

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

intn=20;

printf(''inputal,bl:");

scanf("%f,%f”,&al,&bl);

printf("inputa2,b2:〃);

scanfC%f,%r,&a2,&b2);

printf("inputa3,b3:〃);

scanf(,z%f,%f〃,&n3,&b3);

p=fsin;

『integral(p,al,bl,n);

printf("Theintegralofsin(x)c);

p=fcos;

『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,z,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);)

#include<stdio.h>

intmain()

{voidsort(char*p,intm);

inti,n;

char*p,num[20];

printf("inputn:〃);

scanf(級d”,&n);

printfC'pleaseinputthesenumbers:\n/z);for(i=0;i<n;i++)

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

p=&num[O];

sort(p,n);

printf("Now,thesequenceis:\n〃);

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

printf(〃%d”,num[i]);printf(〃\n〃);

return0;

)

voidsort(char*p,intm)//將n個數(shù)逆序排列函數(shù)

{inti;

chartemp,*pl,*p2;

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

{pl=p+i;

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

temp=*pl;

*pl=*p2;

*p2=temp;

)

)

ftinclude<stdio.h>

intmain()

{voidavsco(float*,float*);

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

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

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

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

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

charcourse[5][10],(*pcourse)[10];

printf("inputcourse:\n,z);

pcourse二course;

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

scanf(〃%s〃,course[i]);

printf("inputNO.andscores:\nz,);

printf(〃N0.〃);

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

printf(〃,%s〃,course[i]);

printf(〃\n〃);

pscore=&score[0][0];

pnum=&num[0];

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

{scanf(〃%d〃,pnum+i);

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

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

)

paver=&aver[0];

printf(〃\n\n");

avsco(pscore,paver);//求出每個學生的平均成績avcourl(pcourse,pscore);//

求出第一門課的平均成績printf(〃\n\n〃);

fali2(pcourse,pnum,pscore,paver);//找出2門課不及格的學生printf("\n\n");

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

return0;

)

voidavsco(float*pscore,float*paver)//求每個學生的平均成績的函數(shù){int

i,j;

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)//求第一課程的平均成績的函

數(shù)

{inti;

floatsum,average1;

sum=0.0;

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

sum=sum+(*(pscore+5*i));〃累計每個學生的得分averagel=sum/4;〃計算平均成績

printf(''course1:%saveragescore:%7.2f\nz/,*pcourse,averagel);

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

//找兩門以上課程不及格的學生的函數(shù)

{inti,j,k,label;

printfC========Studentwhoisfailintwocourses=======\n〃);

printf(〃N0.〃);

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

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

printf(〃average\n,z);

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

{label=0;

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

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

if(label>=2)

{printf(〃%d”,num[i]);for(k=0;k<5;k++)

printfC%11.2f〃,*(pscore+5*i+k));

printf("%1L2f\n〃,aver[i]);

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

績優(yōu)秀學生(各門85以上或平均90分以上)的函數(shù){inti,j,k,n;

printf(〃======Studentswhosescoreisgood=====\n〃);printf(,zN0.〃);

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

printf(〃%lls〃,courseEi]);

printfCaverage\n〃);

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)|(aver[i]>=90))

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

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

printfC%11.2f〃,*(pscore+5*i+k));

printf2f\n〃,aver[i]);

#include<stdio.h>

intmainO

(

charstr[50],*pstr;

inti,j,k,m,elO,digit,ndigit,a[10],*pa;

printf(z,inputastring:\nz,);

gets(str);

pstr=&str[0];/*字符指針pstr置于數(shù)組str首地址*/pa=&a[0];/*指針pa置于a

數(shù)組首地址*/

ndigit=O;/*ndigit代表有多少個整數(shù)*/

i=0;/*代表字符串中的第幾個字符*/

j=0;

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

{if((*(pstr+i)>="0,)&&(*(pstr+i)<="9'))j++;

else

{if(j>0)

{digit=*(pstr+iT)-48;/*將個數(shù)位賦予digit*/

k=l;

while(k<j)/*將含有兩位以上數(shù)的其它位的數(shù)值累計于digit*/{el0=l;

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

el0=el0*10;/*el0代表該位數(shù)所應乘的因子*/digit=digit+(*(pstr+i-l-k)-48)*el0;

/*將該位數(shù)的數(shù)值'累加于digit*/

k++;/*位數(shù)K自增*/

)

*pa=digit;/*將數(shù)值賦予數(shù)組a*/

ndigit++;

pa++;/*指針pa指向a數(shù)組下一元素*/j=0:

)

)

i++;

)

if(j>0)/*以數(shù)字結尾字符串的最后一個數(shù)據(jù)*/{digit=*(pstr+iT)-48;/*將個數(shù)

位賦予digit*/

k=l;

while(k<j)/*將含有兩位以上數(shù)的其它位的數(shù)值累加于digit*/{elO=l;

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

el0=el0*10;/*elO代表位數(shù)所應乘的因子*/

digit=digit+(*(pstr+i-l-k)-48)*elO;/*將該位數(shù)的數(shù)值累加于digit*/k++;/*位

數(shù)K自增*/

)

*pa=digit;/*將數(shù)值賦予數(shù)組a*/

ndigit++;

j=0;

)

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

j=0;

pa=&a[0];

for(j=O;j<ndigit;j++)/*打印數(shù)據(jù)*/

printf(級d〃,*(pa+j));

printf(〃\n〃);

return0;

)

#include<stdio.h>intmain()

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

intin;

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

printf("inputtwostrings:\nz,);

scanf(〃%s〃,strl);

scanf(〃%s〃,str2);

pl=&strl[0];

p2=&str2[0];

m=strcmp(pl,p2);

printf("result:%d,\n〃,m);

return0;

)

intstrcmp(char*pl,char*p2)〃兩個字符串比較函數(shù)

{inti;

i=0;

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

if(*(pl+i++)='\0')return(0);〃相等時返回結果0

return(*(pl+i)-*(p2+i));〃不等時返回結果為第一個不等字符ASCII碼的差值

}

ttinclude<stdio.h>

intmain()

{char*monthname[13]={"illegalmonth","January","February","March","April”,

May","June”,〃july〃,“August","September","October”,

“November","December"};

intn;

printf("inputmonth:\n/z);

scanf(%d〃,&n);

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

printf(,zItis%s.\n〃,*(monthname+n));

else

printf("Itiswrong.\n,z);

return0;

}#include<stdio.h>

#defineNEWSIZE1000〃指定開辟存區(qū)的最大容量charnewbuf[NEWSIZE];〃定義字

符數(shù)組newbuf

char*newp=newbuf;〃定義指針變量newp,指向可存區(qū)的始端

char*new(intn)〃定義開辟存區(qū)的函數(shù)now,開辟存儲區(qū)后返回指針

{if(newp+n<=newbuf+NEWSIZE)//開辟區(qū)未超過newbuf數(shù)組的大小

{newp+=n;//newp指向存儲區(qū)的末尾

return(newp-n);//返回,個指針,它指向存區(qū)的開始位置

}

else

return(NULL);//當存區(qū)不夠分配時,返回一個空指針

)

^include<stdio.h>

ttdefineNEWSIZE1000

charnewbuf[NEWSIZE];

char*newp=newbuf;

voidfree(char*p)〃釋放存區(qū)函數(shù)

{if(p>=newbuf&&p<newbuf+NEWSIZE)

newp=p;

)

SdefineLINEMAX20/*定義字符串的最大長度*/

intmainO

{inti;

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

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

pstr[i]=str[i];/*將第i個字符串的首地址賦予指針數(shù)組pstr的第i個元素*/

printf("input5strings:\n,z);

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

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

p=pstr;

sort(p);

printf(^stringssorted:\nzz);

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

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

)

sort(char**p)/*冒泡法對5個字符串排序函數(shù)*/

{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;

}#include<stdio.h>

intmain()

{voidsort(int**p,intn);

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

printf("inputn:\n〃);

scanf("%d",&n);

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

pstr[i]=&data[i];〃將第i個整數(shù)的地址賦予指針數(shù)組pstr的第i個元素

printf(,zinput%dintegernumbers/7,n);

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

scanf(〃%d〃,pstr[i]);

p=pstr;

sort(p,n);

printf(,zNow,thesequenceis:\n〃);

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

printf(z/%d",*pstr[i]);

printf("\n〃);

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))//比較后交換整數(shù)地址

{temp=*(p+i);

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

*(p+j)=temp;

第九章

#include<stdio.h>struct

{intyear;

intmonth;

intday;

}date;

intmainO

{intdays;

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

scanf(z/%d,%d,ftdate.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

||date,year%400=0)&&date,month>=3)days+=l;

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

return0;

)

ttinclude<stdio.h>

struct

{intyear;

intmonth;

intday;

}date;

intmainO

{inti,days;

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

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

scanf(〃%d,%d,%d,z,&date.year,&date.month,&date.day);

days=0;

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

days=days+day_tab[i];days=days+date.day;

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

days=days+1;

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

return0;

}

^include<stdio.h>

structy_m_d

{intyear;

intmonth;

intday;

}date;

intmainO

{intdays(structy_m_ddatel);

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

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

printf(z,%d/%disthe%dthday

in%d.\n〃,date,month,date,day,days(date),date,year);}

intdays(structymddatel)

{intsum;

switch(datel.month)

{case1:sum=datel.day;break;

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

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

case4:sum=datel.day+90;break;

case5:sum=datel.day+120;break;

case6:sum=datel.day+151;break;

case7:sum=datel.day+181;break;

case8:sum=datel.day+212;break;

case9:sum=datcl.day+243;break;

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

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

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

)

if((datel.year%4=0&&datel.year%100!=0||datel.year%400二=0)&&

datel.month>=3)

sum+=l;

return(sum);)

#include<stdio.h>

structy_m_d

{intyear;

intmonth;

intday;

}date;

intmain()

{intdays(intyear,intmonth,intday);

intdays(int,int,int);

intday_sum;

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

scanf(〃%d,%d,%d”,&date.year,&date.month,&date.day);

daysum=days(date,year,date,month,date,day);

printf(z/%d/%disthe%dthday

in%d.\n〃,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);

daysum=0;

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

day_sum+二day_tab[i];

day_sum+=day;

if((year%4==0&&year%100!=0|year%4=0)&&month>z:3)

daysum+=l;

return(day_sum);

)

ttinclude<stdio.h>

ftdefineN5

structstudent

{charnum[6];

charname[8];

intscore[4];

}stu[Nh

intmain()

{voidprint(structstudentstu[6]);inti,j;

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

{printf(z,\ninputscoreofstudent%d:\n〃,i+1);printf(〃N0.:〃);

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

printf("name:〃);

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

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

{printf(z/score%d:〃,j+1);

scanf(繪d〃,&stu[i].score[j]);

printfCV);

print(stu);

return0;

)

voidprint(structstudentstu[6])

{inti,j;

printf(〃\nNO.namescore1score2for(i=0;i<N;i++)

{printf(〃%5s%10s〃,stu[i].num,stu[i].name);for(j=0;j<3;j++)

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

printfCV);

)

)

#include<stdio.h>

#defineN5

structstudent

{charnum[6];

charname[8];

intscore[4];

}stu[N];

intmain()

{voidinput(structstudentstu[]);

voidprint(structstudentstu[]);

input(stu);

print(stu);

return0;

)

score3\nz,);voidinput(structstudentstu口)

{inti,j;

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

{printf("inputscoresofstudent%d:\n〃,i+1);printfC^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(〃%d〃,&stu[i].score[j]);

)

printf(〃\n〃);

)

)

voidprint(structstudentstu[61)

{inti,j;

printf(〃\nNO.namescore1score2for(i=0;i<N;i++)

{printf(z/%5s%10s,z,stu[i].num,stu[i].name);for(j=0;j<3;j++)

printf(z/%9dz/,stu[i].score[j]);

printfCV);

}#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+1);printf(〃N0.:〃);

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

printf("name:〃);

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

for(j=0;j<3;j++)score3\nz/);{printf(z,score%d:",j+l);

scanf&stu[i].score[j]);

average=0;

max=O;

maxi=O;

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

{sum=0;

for(j=0;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(,zNO.namescorelscore2score3average\n,z);for(i=0;i<N;i++)

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

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

printfC%9.2f”,stu[i].score[j]);

printf(/z%8.2f\nz,,stu[i].avr);

)

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

printf(""Thehighestscoreis:

student%s,%s\n〃,stu[maxi].num,stufmaxi].name);printf(〃hisscores

are:%6.2f,%6.2f,%6.2f,average:%5.2f.\n〃,

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

return0;

)

#include<stdio.h>

#defineN13

structperson

(intnumber;

intnextp;

}link[N+l];

intmainO

{inti,count,h;for(i=l;i<=N;i++)

{if(i==N)

link[i].nextp=l;

else

1ink[i].nextp=i+l;

link[i].number=i;

}

printf(〃\n〃);

count=0;

h二N;

printf(''sequencethatpersonsleavethecircle:\nz,);

while(count<N-l)

{i=0;

while(i!=3)

{h=link[h].nextp;

if(link[h].number)

i++;

)

printf(/z%4dz,,link[h].number);

link[h].number=O;

count++;

)

printf(〃\nThclastoneis〃);

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

if(link[i].number)

printf(〃%3d〃,link[i].number);

printfC\nz,);

return0;

}#include<stdio.h>

structstudent

{longnum;

floatscore;

structstudent*next;

);

intn;

structstudent*del(structstudent*head,longnum)

{structstudent*pl,*p2;

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

{printf('Anlistnull!\n/z);

return(head);

)

pl二head;〃使pl指向第一個結點

while(num!=p1->num&&pl->next!=NULL)//pl指向的不是所要找的結點且后面還有結

點*/

{p2=pl;pl=pl->next;}〃pl后移一個結點

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

{if(pl==head)head二pl->ncxt;〃若pl指向的是首結點,把第二個結點地址賦予head

*/

elsep2->next=pl->next;//否則將下一結點地址賦給前一結點地址

printf(/zdelete:%ld\n/z,num);

n=n-l;

)

elseprintf(,z%ldnotbeenfound!\n,z,num);〃找不到該結點

return(head);

)

ftinclude<stdio.h>

structstudent

{longnum;

floatscore;

structstudent*next;

);

intn;

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

{structstudent*pO,*pl,*p2;

pl二head;〃使p1指向第一個結點

pO二stud;〃指向要插入的結點

if(head==NULL)〃原來的鏈表是空表

{head=pO;pO->next=NULL;}〃使P。指向的結點作為頭結點else

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

{p2=pl;〃使p2指向剛才pl指向的結點pl=pl->next;

)〃P1后移一個結點

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

{if(head==pl)head=pO;〃插到原來第一個結點之前elsep2->next=pO;〃插到p2

指向的結點之后pO->next=pl;

}

else

{pl->next=pO;

pO->next=NULL;〃插到最后的結點之后

)

)

n=n+l;〃結點數(shù)加1

return(head);)

#include<stdio.h>

^include<malloc.h>

#defineLENsizeof(structstudent)

structstudent

{longnum;

floatscore;

structstudent*next;

);

intn;

intmain()

{structstudent*creat();

structstudent*del(structstudent*,long);

structstudent*insert(structstudent*,structstudent*);void

print(structstudent*);

structstudent*head,stu;

longdel_num;

printf(z,inputrecords:\n,z);

head=creat();

print(head);

printf("inputthedeletednumber:");

scanf(〃%ld〃,&del_num);

head=del(head,delnum);

print(head);

printf(,zinputtheinsertedrecord:,z);

scanf(〃機d,%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(〃%ld,%f〃,&pl->num,&pl->score);

head=NULL;

while(pl->num!=0)

(n=n+l;

if(n==l)head=pl;

elsep2->next=pl;

p2=pl;

pl=(structstudent*)malloc(LEN);scanf(^Id,%f,z,&pl->num,&pl->score);

)

p2->next=NULL;

return(head);

structstudent*del(structstudent*head,longnum)

{structstudent*pl,*p2;

if(head=NULL)

{printf(z,\nlistnull!\n/z);

return(head);

)

pl=head;

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

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

if(num==pl->num)

{if(pl==head)head=pl->ncxt;

elsep2->next=pl->next;

printf(/zdelete:%ld\nz,,num);

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論