c语言第十一十二十三章课后题答案.docx

上传人:b****5 文档编号:5536563 上传时间:2022-12-19 格式:DOCX 页数:35 大小:143.14KB
下载 相关 举报
c语言第十一十二十三章课后题答案.docx_第1页
第1页 / 共35页
c语言第十一十二十三章课后题答案.docx_第2页
第2页 / 共35页
c语言第十一十二十三章课后题答案.docx_第3页
第3页 / 共35页
c语言第十一十二十三章课后题答案.docx_第4页
第4页 / 共35页
c语言第十一十二十三章课后题答案.docx_第5页
第5页 / 共35页
点击查看更多>>
下载资源
资源描述

c语言第十一十二十三章课后题答案.docx

《c语言第十一十二十三章课后题答案.docx》由会员分享,可在线阅读,更多相关《c语言第十一十二十三章课后题答案.docx(35页珍藏版)》请在冰豆网上搜索。

c语言第十一十二十三章课后题答案.docx

c语言第十一十二十三章课后题答案

11-1、

(*p)++表示:

先取地址中的内容,将内容表示的数字进行自增运算。

*p++表示:

先对p的地址自增运算,再取其中的内容。

结果:

每一句printf语句分析说明:

printf("%d,",*(++p));--------p自增取下一个地址,去除其中的内容为2

printf("%d,",*(p)++);--------引用p现在地址中的内容为2,在进行地址的自增运算

printf("%d,",*p);-------------引用地址的内容为3

printf("%d,",*p);------------应用现在的地址中的内容为3

printf("%d,",*p--);----------先引用p中的内容为3,再进行自减运算

printf("%d,",--(*p));--------先自减运算,再取内容为1

printf("%d\n",*p);-----------取p现在的地址中的内容为1

11-2

(1)

#include

voidPrint(char*arr[],intlen);

intmain()

{

char*pArray[]={"How","are","you"};

intnum=sizeof(pArray)/sizeof(int);

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

Print(pArray,num);

return0;

}

voidPrint(int*arr[],intlen)

{

inti;

for(i=0;i

{

printf("%s",arr[i]);

}

printf("\n");

}

错误分析:

指针数组中的元素为地址,是一个整型,所以应为num=sizeof(pArray)/sizeof(int);

而不是除以sizeof(char)

结果:

(2)

#include

voidOutputArray(int*pa,intn);

voidInputArray(int*pa,intn);

voidmain()

{

inta[5];

printf("Inputfivenumbers:

");

InputArray(a,5);

OutputArray(a,5);

return0;

}

voidInputArray(int*pa,intn)

{

int*a=pa;

for(;pa

{

scanf("%d",pa);

}

}

voidOutputArray(int*pa,intn)

{

int*a=pa;

for(;pa

{

printf("%4d",*pa);

}

printf("\n");

}

结果:

错误分析:

For(;pa

(3)、

#include

#defineSTUD30

#defineCOURSE5

voidPrint(int*pScore,intsum[],floataver[],intm,intn);

voidTotal(int*pScore,intsum[],floataver[],intm,intn);

intmain()

{

inti,j,m,n,score[STUD][COURSE],sum[STUD];

floataver[STUD];

printf("Howmanystudent?

");

scanf("%d",&m);

printf("Howmanycourse?

");

scanf("%d",&n);

printf("Inputscore:

\n");

for(i=0;i

{

for(j=0;j

{

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

}

}

Total(*score,sum,aver,m,n);

Print(*score,sum,aver,m,n);

return0;

}

voidTotal(int*pScore,intsum[],floataver[],intm,intn)

{

inti,j;

for(i=0;i

{

sum[i]=0;

for(j=0;j

{

sum[i]=sum[i]+pScore[i*n+j];

}

aver[i]=(float)sum[i]/n;

}

}

voidPrint(int*pScore,intsum[],floataver[],intm,intn)

{

inti,j;

printf("Result:

\n");

for(i=0;i

{

for(j=0;j

{

printf("%4d\t",pScore[i*n+j]);

}

printf("%5d\t%6.1f\n",sum[i],aver[i]);

}

}

分析:

在创建二维数组时,就分配好空间行30列5,当进行列指针操作时,实际输入的人数会小于5,但偏移量仍然是I*COURSE+j,而不是i*n+j。

改后的结果:

11-3

#include

voidmain()

{

int*p[12]={"January","february","March","April","May","June","July",

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

intm;

do{

printf("请输入月份值:

");

scanf("%d",&m);

if(m<1||m>12)

printf("Illegelmonth!

");

}while(m<1||m>12);

printf("%d月---%s\n",m,p[m-1]);

}

结果:

11-4

#include

#defineN10

voidS*p1,int*p2);

voidTranspose2(int*a,intn);

voidTranspose(inta[][N],intn);

voidTranspose1(int(*a)[N],intn);

voidmain()

{

intn;

inti;

intj;

inta[N][N];

intm;

do{

printf("输入阶数:

");

scanf("%d",&n);

}while(n>10);

for(i=0;i

{

printf("请输入第%d行:

\n",i+1);

for(j=0;j

{

printf("输入第%d行第%d列:

",(i+1),(j+1));

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

}

}

printf("原矩阵是:

\n");

for(i=0;i

{

printf("\n");

for(j=0;j

{

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

}

}

printf("\n1.引用数组下表法\n2.行指针法\n3.列指针法\n");

printf("请选择:

");

scanf("%d",&m);

switch(m)

{

case1:

Transpose(a,n);

break;

case2:

Transpose1(a,n);

break;

case3:

Transpose2(*a,n);

break;

}

printf("转置矩阵是:

\n");

for(i=0;i

{

printf("\n");

for(j=0;j

{

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

}

}

printf("\n");

}

voidS*p1,int*p2)

{

inttemp;

temp=*p1;

*p1=*p2;

*p2=temp;

}

voidTranspose(inta[][N],intn)

{

inti,j;

for(i=0;i

{

for(j=i;j

{

S[i][j],&a[j][i]);

}

}

}

voidTranspose1(int(*a)[N],intn)

{

inti,j;

for(i=0;i

{

for(j=i;j

{

Swap(*(a+i)+j,*(a+j)+i);

}

}

}

voidTranspose2(int*a,intn)

{

inti,j;

for(i=0;i

{

for(j=i;j

{

S*n+j,a+j*n+i);

}

}

}

结果:

11-5

#include

#defineN10

#defineM10

voidS*p1,int*p2);

voidTranspose2(int*a,int*at,intm,intn);

voidTranspose(inta[][N],intat[][M],intm,intn);

voidTranspose1(int(*a)[N],intm,intn);

voidmain()

{

intn;

inti;

intj;

inta[M][N];

intm;

intat[N][M];

intp;

do{

printf("输入行数:

");

scanf("%d",&m);

printf("输入列数:

");

scanf("%d",&n);

}while(n>10||m>10);

for(i=0;i

{

printf("请输入第%d行:

\n",i+1);

for(j=0;j

{

printf("输入第%d行第%d列:

",(i+1),(j+1));

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

}

}

printf("原矩阵是:

\n");

for(i=0;i

{

printf("\n");

for(j=0;j

{

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

}

}

printf("\n1.引用数组下表法\n2.行指针法\n3.列指针法\n");

printf("请选择:

");

scanf("%d",&p);

switch(p)

{

case1:

Transpose(a,at,m,n);

break;

case2:

Transpose1(a,at,m,n);

break;

case3:

Transpose2(*a,*at,m,n);

break;

}

printf("转置矩阵是:

\n");

for(i=0;i

{

printf("\n");

for(j=0;j

{

printf("%d\t",at[i][j]);

}

}

printf("\n");

}

voidS*p1,int*p2)

{

inttemp;

temp=*p1;

*p1=*p2;

*p2=temp;

}

voidTranspose(inta[][N],intat[][M],intm,intn)

{

inti,j;

for(i=0;i

{

for(j=0;j

{

S[i][j],&at[j][i]);

}

}

}

voidTranspose1(int(*a)[N],int(*at)[N],intm,intn)

{

inti,j;

for(i=0;i

{

for(j=0;j

{

Swap(*(a+i)+j,*(at+j)+i);

}

}

}

voidTranspose2(int*a,int*at,intm,intn)

{

inti,j;

for(i=0;i

{

for(j=0;j

{

S*N+j,at+j*M+i);

}

}

}

结果:

11-6

#include

#include

#defineN10

#defineM10

voidInputArray(int*p,intm,intn);

intFindMax(int*p,intm,intn,int*pRow,int*pCol);

voidmain()

{

intm;

intn;

intRow;

intCol;

inta;

int*p=NULL;

printf("请输入行数:

");

scanf("%d",&m);

printf("请输入列数:

");

scanf("%d",&n);

p=(int*)calloc(m*n,sizeof(int));

if(p==NULL)

{

printf("没有足够的空间\n");

exit

(1);

}

InputArray(p,m,n);

a=FindMax(p,m,n,&Row,&Col);

printf("最大值为:

%d,下标:

%d行%d列\n",a,(Row+1),(Col+1));

free(p);

}

voidInputArray(int*p,intm,intn)

{

inti;

intj;

for(i=0;i

{

for(j=0;j

{

printf("请输入第%d行第%d列:

",(i+1),(j+1));

scanf("%d",p+i*n+j);

}

}

}

intFindMax(int*p,intm,intn,int*pRow,int*pCol)

{

inti,j;

int*a=p;

for(i=0;i

{

for(j=0;j

{

if(*p<*(a+i*n+j))

{

p=a+i*n+j;

*pRow=i;

*pCol=j;

}

}

}

return*p;

}

结果:

12-1

采用结构体定义

typedefstructdate

{

intyear;

intmonth;

intday;

}Date;

typedefstructjob

{

charschool[10];

charzhicheng[10];

charzhiwu[10];

}Job;

structstudent

{

charname[10];

charsex;

Datebirthday;

Jobwork;

}

12-2

#include

typedefstructtime

{

inthour;

intminute;

intsecond;

}Time;

voidupdate(Time*p)

{

p->second++;

if(p->second==60)

{

p->second=0;

p->minute++;

}

if(p->minute==60)

{

p->minute=0;

p->hour++;

}

if(p->hour==24)

{

p->hour=0;

}

}

voiddelay()

{

intt;

for(t=0;t<100000000;t++);

}

voiddispaly(Time*p)

{

printf("%d:

%d:

%d\n",p->hour,p->minute,p->second);

}

intmain()

{

inti;

Timet;

t.second=0;

t.hour=0;

t.minute=0;

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

{

update(&t);

dispaly(&t);

delay();

}

return0;

}

结果:

12-3

#include

typedefstructtime

{

inthour;

intminute;

intsecond;

}Time;

voidupdate(Time*p)

{

p->second++;

p->minute=p->second/60;

p->second%=60;

p->hour=p->minute/60;

}

voiddelay()

{

intt;

for(t=0;t<100000000;t++);

}

voiddispaly(Time*p)

{

printf("%d:

%d:

%d\n",p->hour,p->minute,p->second);

}

intmain()

{

inti;

Timet;

t.second=0;

t.hour=0;

t.minute=0;

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

{

update(&t);

dispaly(&t);

delay();

}

return0;

}

结果:

12-4

#include

#include

#include

typedefstructcandidate

{

charname[10];

intnum;

}Xuan;

voidmain()

{

Xuanpeople[3]={{"zhang",0},{"li",0},{"wang",0}};

chartemp[10];

inti;

intj;

intfp=0;

intflag=0;

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

{

flag=0;

printf("请投票:

");

gets(temp);

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

{

if(strcmp(temp,people[j].name)==0)

{

people[j].num++;

flag=1;

}

}

if(flag==0)

fp++;

}

printf("废票:

%d张\n",fp);

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

{

printf("%-10s得票:

%d\n",people[i].name,people[i].num);

}

printf("\n");

}

结果:

12-5

#include

typedefstructcard

{

charcolor[13][10];

charsuit[10];

}Card;

voidmain()

{

inti;

intj;

CardPai[4]={

{{"A","2","3","4","5","6","7","8","9","10","Jack","Queen","King"},"Spades"},

{{"A","2","3","4","5","6","7","8","9","10","Jack","Queen","King"},"Hearts"},

{{"A","2","3","4","5","6","7","8","9","10","Jack","Queen","King"},"Clubs"},

{{"A","2","3","4","5","6","7","8","9","10","Jack","Queen","King"},"Diamonds"}

};

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

{

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

{

printf("%s%s\t",Pai[i].suit,Pai[i].color[j]);

}

printf("\n");

}

}

结果:

13-1

#include

voidmain()

{

FILE*fp;

charstr[20];

inti;

printf("type");

gets(str);

fp=fopen(str,"r");

if(fp==NULL)

{

printf("文件打开有误\n");

exit(0);

}

for(i=0;!

feof(fp);i++)

{

printf("%5d",fgetc(fp));

}

printf("\n");

}

结果:

13-2

#include

typedefstructdade

{

intyear;

intmonth;

intday;

}DATE;

typedefstructstudent

{

longID;

charname[10];

charse

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > IT计算机

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1