C Primer Plus 第十章课后习题……2015.5.5

C Primer Plus

              第五版

第十章 课后习题

1、#include<stdio.h>
int main(void)
{
int ref[]={8,4,0,2};
int *ptr;
int index;
for(index=0,ptr=ref;index<4;index++,ptr++)
printf("%d %d\n",ref[index],*ptr);
return 0;

2、4
3、数组的地址,也是ref[0],ref指向4, 常量不能自增运算
4、#include<stdio.h>
int main(void)
{
int ref[2][2]={8,4,2 };
int *ptr;
ptr=ref[0];
 
     printf("%d\n", ref[1][0]) ;
printf("%d\n",*ptr) ;
  printf("%d",*(ptr+4)) ;
return 0;

#include<stdio.h>
int main(void)
{
int ref[2][2]={{8},{4,2} };
int *ptr;
ptr=ref[0];
 
     printf("%d\n", ref[0][0]) ;
printf("%d\n",*ptr) ;
  printf("%d",*(ptr+3)) ;
return 0;



5、


#include<stdio.h>
int main(void)
{
int ref[2][2]={8,4,2 };
int (*ptr)[2];
ptr=ref;
 
     printf("%d\n", ref[1][0]) ;
printf("%d\n", *ptr) ;
  printf("%d",**(ptr+1)) ;
return 0;



6、&grid[][],&gird[][], gird[],&gird[][], gird[],int (*)


gird


7、int arr[10],float arr[6],int arr[3][5] char *arr


[20],char(*arr)[20]


8、int arr[6]={1,2,4,6,8,16,32};    arr[2]=3;
     int arr[100]={arr[99]=-1};


9\ 0--9
10、 a ,e,h
11\ int arr[800][600]
12void process(double arr[])
  void processvla(int n,double arr[n])
  process(trots);processval(n,trots);


13\int arr[]={8,3,9,2};show(arr,4);
   int arr[2][3]={{8,3,9},{5,4,1}};show2(arr[][3],3)




#include<stdio.h>
void Arr_ay(int a,int (*arr)[],int b);
int main(void)
{
int array[2][2]={{1,2},{3,4}};

  Arr_ay(2,array,2);
return 0;
}
 
void Arr_ay(int a,int (*arr)[a],int b)
{
int i,j;
for(i=0;i<a;i++)
  for(j=0;j<b;j++)
   printf("%d\n",*(*(arr+i)+j));



2


#include<stdio.h>
void copy_arr(double source[],double target1[],int b);
void copy_ptr(double source[],double target1[],int b);
int main(void)
{
double array[4] ={1.1,2.2,3.3,4.3};
double target1[4];
double target2[4];
  int *ptr,i;
   
  copy_arr(array,target1,4);
  copy_ptr(array,target2,4);
  for(i=0;i<4;i++)
 {
  printf("target1=%lf  ",target1[i]);
  printf("target1=%lf  ",target2[i]);
  printf("\n");
 } 
 
return 0;
}
 
void copy_arr(double source[],double target1[],int b)
{
int i;
for(i=0;i<b;i++)
 {
  target1[i]= source[i] ;
//printf("target1=%d  ",target1[i]);
 }

}
void copy_ptr(double *source ,double *target,int b)
{
int i;
for(i=0;i<b;i++)
{
*(target+i)=*(source+i);
// printf("target2=%d  ",(target+i));
}
  
}


3\4\5
#include<stdio.h>
int Return_max(int arr[],int n);
double Return_index(double arr[],int n);
double Return_value(double arr[],int n);
int main(void)
{
int int_arr[8]={1,2,3,4,5,6,7,8};
double double_arr[8]=


{1.1,2.2,3.3,4.4,5.5,6.6,7.7,8.8};
Return_max(int_arr,8);
  Return_index(double_arr,8);
  Return_value(double_arr,8);
return 0;
}
int Return_max(int arr[],int n)
{
int i;
for(i=0;i<n;i++)
{
 if(arr[i]>arr[i+1])
   
    arr[i+1]=arr[i];
}

printf("%d\n",arr[i-1]);
}
double Return_index(double arr[],int n)
{
int i ;
double temp;
temp=arr[0];
for(i=0;i<n;i++)
{
 if(temp<arr[i+1])
   
    temp=arr[i+1];
}
for(i=0;i<n;i++)
{
 if(temp==arr[i ])
   
    printf("%d\n",i-1 );  
}



}
double Return_value(double arr[],int n)
{
int i,j;
double temp=0.0;
for(j=0;j<n;j++)
for(i=0;i<n-1-j;i++)
{
 if(arr[i]<arr[i+1])
   
    temp=arr[i+1];
    arr[i+1]=arr[i];
    arr[i]=temp;
//    printf("%lf  ",arr[i] ); 
//    printf("%lf \n",arr[i+1] );
}
// for(i=0;i<n;i++)
// printf("%lf \n",arr[i] );
printf("%lf",arr[0]-arr[7]);
}




6……


#include<stdio.h>
 void copy_arr(int a,int b,int (*source)[b],int 


(*target1)[b]);
//void copy_arr(int a,int b,int  source [a][b],int  


target1[a][b]);
int main(void)
{   int i,j;
int arr[3][2]={{1,2 },{4,5 },{7,8}};
int cop1_arr[3][2];
int (*ptr)[2];
ptr=arr;

  copy_arr(3,2,arr,cop1_arr);
return 0;
}
void copy_arr(int a,int b,int (*source) [b],int 


(*target1)[b])
//void copy_arr(int a,int b,int  source [a][b],int  


target1[a][b])
{
int i,j ;
for(i=0;i<a;i++)
for(j=0;j<b;j++)
 {    
   
*(*(target1+i)+j)= *(*(source+i)+j) ;
 
 }
  for(i=0;i<a;i++)
    {
for(j=0;j<b;j++)
 {
  printf("%d ",*(*(target1+i)+j) ) ;

 }
 printf("\n");
    } 
}


7.


#include<stdio.h>
void copy_arr(double source[],double target1[],int a,int 


b);
int main(void)
{
double array[7] ={1.1,2.2,3.3,4.3,5.5,6.6,7.7};
double target1[3];
  copy_arr(array,target1,2,3);
   int i; 
    for(i=0;i<3;i++)
 {
  printf("target1=%lf  ",target1[i]);
  
  printf("\n");
 } 
 
return 0;
}
 
void copy_arr(double source[],double target1[],int a,int 


b)
{
int i;
for(i=a;i<a+b;i++)
 {
  target1[i-a]= source[i] ;
//printf("target1=%d  ",target1[i]);
 }

}




8.
#include<stdio.h>
void VLA_array(int row,int rank,double (* ptr)


[rank],double(*arr)[rank]);
int main(void)
{
double array[3][2]={{1.1,2.2},{3.3,4.4},


{5.5,6.6}};
double copy_arr[3][2];
VLA_array(3,2,array,copy_arr);
return 0;
}
void VLA_array(int row,int rank,double (* ptr)


[rank],double(*arr)[rank])
{   
     int i,j;
      for(i=0;i<row;i++)
         for(j=0;j<rank;j++)
            *(*(arr+i)+j)=*(*(ptr+i)+j);
for(i=0;i<row;i++)
       {
        for(j=0;j<rank;j++)
          printf("%lf ",*(*(arr+i)+j));
          printf("\n");
       }  
}


9.
#include<stdio.h>
void VLA_array(int row,double * sum,double *arr,double 


*ptr);
int main(void)
{
double array[3]={1.1,2.2,5.5};
double copy_arr[3]={3.3,4.4,6.6};
double sum[3];
VLA_array(3,sum,array,copy_arr);
return 0;
}
void VLA_array(int row,double *sum ,double *arr,double 


*ptr)
{   
     int i ;
      for(i=0;i<row;i++)
         *(sum+i) =*(arr+i)+*(ptr+i);
for(i=0;i<row;i++)
       {
         
          printf("%lf ",*(sum+i)) ;
           
       }  
}




10.
#include<stdio.h>
void VLA_array(int row,int rank,double (* ptr)[rank]);
int main(void)
{
double array[3][2]={{1.1,2.2},{3.3,4.4},


{5.5,6.6}};


VLA_array(3,2,array);
return 0;
}
void VLA_array(int row,int rank,double(*arr)[rank])
{   
     int i,j;
      for(i=0;i<row;i++)
         for(j=0;j<rank;j++)
            *(*(arr+i)+j)=2*(*(*(arr+i)+j));
for(i=0;i<row;i++)
       {
        for(j=0;j<rank;j++)
          printf("%lf ",*(*(arr+i)+j));
          printf("\n");
       }  
}


12-13
#include<stdio.h>
void VLA_array(int row,int rank,double (* ptr)[rank]);
void average(int row,int rank,double(*arr)[rank]);
void VLA_average(int row,int rank,double(*arr)[rank]);
void VLA_max(int row,int rank,double(*arr)[rank]);
int main(void)
{
double array[3][2];
VLA_array(3,2,array);
average(3,2,array);
VLA_average(3,2,array);
VLA_max(3,2,array);
return 0;
}
void VLA_array(int row,int rank,double(*arr)[rank])
{   
     int i,j;
      for(i=0;i<row;i++)
         for(j=0;j<rank;j++)
             scanf("%lf",*(arr+i)+j);
for(i=0;i<row;i++)
       {
        for(j=0;j<rank;j++)
         {
         
printf("%lf ",*(*(arr+i)+j));
         } 
         
          printf("\n");
       }  
}
void average(int row,int rank,double(*arr)[rank])
{   
     int i,j;
     double sum1=0;
for(i=0;i<row;i++)
       {
        for(j=0;j<rank;j++)
         
          sum1+=*(*(arr+i)+j);
printf("%lf ",sum1/rank);
sum1=0;
         
           
       }  
       printf("\n");
}
void VLA_average(int row,int rank,double(*arr)[rank])
{   
     int i,j;
     double sum1=0;
for(i=0;i<row;i++)
        for(j=0;j<rank;j++)
          sum1+=*(*(arr+i)+j);
          
          printf("%lf ",sum1/(rank*row));
           
          printf("\n");
        
}
void VLA_max(int row,int rank,double(*arr)[rank])
{   
     int i,j;
      
for(i=0;i<row;i++)
        for(j=0;j<rank;j++)
        if(**arr<*(*(arr+i)+j))
          **arr=*(*(arr+i)+j);
          
          printf("%lf ",**arr);
           
          printf("\n");
        
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值