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

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

(*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

void Print(char *arr[],int len);

int main()

{

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

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

printf("Total string numbers = %d\n",num);

Print(pArray,num);

return 0;

}

void Print(int *arr[],int len)

{

int i;

for(i=0; i

{

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

printf("\n");

}

错误分析:指针数组中的元素为地址,是一个整型,所以应为num=sizeof(pArray)/sizeof(int); 而不是除以sizeof(char)

结果:

(2)

#include

void OutputArray(int *pa,int n);

void InputArray(int *pa,int n);

void main()

{

int a[5];

printf("Input five numbers:");

InputArray(a,5);

OutputArray(a,5);

return 0;

}

void InputArray(int *pa,int n)

{

int *a=pa;

for(; pa

{

scanf("%d",pa);

}

}

void OutputArray(int *pa,int n)

{

int *a=pa;

for(; pa

{

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

}

printf("\n");

}

结果:

错误分析:

For(; pa

(3)、

#include

#define STUD 30

#define COURSE 5

void Print(int *pScore,int sum[],float aver[],int m,int n);

void Total(int *pScore,int sum[],float aver[],int m,int n);

int main()

{

int i,j,m,n,score[STUD][COURSE],sum[STUD];

float aver[STUD];

printf("How many student?");

scanf("%d",&m);

printf("How many course?");

scanf("%d",&n);

printf("Input score:\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);

return 0;

}

void Total(int *pScore,int sum[],float aver[],int m,int n)

{

int i,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;

}

}

void Print(int *pScore,int sum[],float aver[],int m,int n)

{

int i,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

void main()

{

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

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

int m;

相关文档
最新文档