《C Primer Plus》第十章编程题

1、编写一个程序,初始化一个double数组,然后把数组内容复制到另外两个数组(3个数组都需要在主程序中声明)。制作第一份拷贝的函数使用数组符号。制作第二份拷贝的函数使用指针符号,病使用指针的增量操作。把目标数组名和要复制的元素作为参数传递给函数。也就是说,如果给定了下列声明,函数调用应该如下面所示:
double source[5]={1.1,2.2,3.3,4.4,5.5};
double target1[5];
double target2[5];
copy_arr(source,target1,5);
copy_ptr(source,target1,5);
#include  <stdio.h>
void  copy_arr( double  [], double  [],  int );
void  copy_ptr( double  [], double  *,  int );

int  main( void  ){
                  double  source[5]={1.1,2.2,3.3,4.4,5.5};
                  double  target1[5];
                  double  target2[5];
                copy_arr(source,target1,5);
                copy_ptr(source,target2,5);
                  return  0;
}
void  copy_arr( double  source [],  double  target1  [], int  n ){
                  int  i;
                  int  count;
                  for (i=0;i<= sizeof  ( source );i++){
                                  target1 [i]= source  [i];
                }
                count=  sizeof ( target1  );
                  for (i=0;i<=count;i++)
                                printf(  "%-10.3lf" , target1  [i]);
                printf(  "\n" );
}
void  copy_ptr( double  * ptr_source ,  double  * ptr_target  , int  n ){
                  int  i=0;
                  ptr_target = ptr_source  ;
                  while (i< n  ){
                                printf(  "%-10.3lf" ,* ptr_target  ++);
                                i++;
                }
}
2、编写一个函数,返回一个int数组中存储的最大数值,并在一个简单的程序中测试这个函数。
#include  <stdio.h>

int  main( void  ){
                  int  test[]={5,3,64,7,1,4,8,9};
                  int  i,count;
                  int  *ptr;
                ptr = test;
                count=  sizeof (test)/ sizeof  (test[0]);
                  for (i=0;i<count;i++){
                                  if (*ptr<=*(ptr+i))
                                                *ptr=*(ptr+i);
                }
                printf(  "The max num is %d" ,*ptr);
                  return  0;
}
3、编写一个函数,返回一个double数组中存储的最大数值的索引,并在一个简单程序中测试这个函数。
#include  <stdio.h>
int  position( double  [], int );

int  main( void  ){
                  double  test[]={5.2,3.3,64.1,3.6,1.9,4.3,8.2,9.5};
                  int  num_pos;
                  int  count=0;
                count=  sizeof  (test)/ sizeof  (test[0]);
                num_pos=position(test,count);
                printf(  "The  max num position is %-3d"  ,num_pos);
                  return  0;
}
int  position( double  test [],  int  count  ){
                  int  i;
                  double  *ptr;
                  double  *temp;
                  double  max=0;
                ptr =  test ;
                  for  (i=0;i< count  ;i++){
                                  if  (max<= test  [i]){
                                                max=  test [i];
                                                }
                }
                  for  (i=0;i< count  ;i++){
                                  if ( test  [i]==max)
                                                temp=&  test [i];
                }
                  return  temp-ptr+1;
}
4、编写一个函数,返回一个double数组中最大的和最小的数之间的差值,并在一个简单的程序中测试这个函数。
#include  <stdio.h>
double  max( double  *, int );
double  min( double  *, int );
double  D_Value( double  , double );
int  main( void  ){
                  double  test[]={1.1,2.2,3.3,4.4,5.5};
                  int  count=0;
                  double  max_num=0;
                  double  min_num=0;
                  double  result=0;
                count=  sizeof (test)/ sizeof  (test[0]);
                max_num=max(test,count);
                min_num=min(test,count);
                printf(  "D-Value is %-5.3lf" ,D_Value(max_num,min_num));
                  return  0;
}
double  max( double  * test , int  count ){
                  double  max_num=0;
                  int  i;
                max_num=  test [0];
                  for (i=0;i< count  ;i++){
                                  if (max_num< test  [i]){
                                                max_num=  test [i];
                                }
                }
                  return  max_num;
}
double  min( double  * test , int  count ){
                  double  min_num=0;
                  int  i;
                min_num =  test [0];
                  for (i=0;i< count  ;i++){
                                  if (min_num> test  [i])
                                                min_num=  test [i];
                }
                  return  min_num;
}
double  D_Value( double  max , double  min ){
                  return  max  - min ;
}

5、编写一个程序,初始化一个二维double数组,并利用练习2中的任一函数来把这个数组复制到另一个二维数组。
#include  <stdio.h>
#define  COLS  3
#define  ROWS  2
void  cpy_ptr( int  arr[][ COLS ], int );

int  main( void  ){
                  int  arr[2][3]={{3,1,2},{9,7,5}};
                cpy_ptr(arr,  ROWS );            
                  return  0;
}
void  cpy_ptr( int  arr [][ COLS ], int  row ){
                  int  i=0;
                  int  j=0;
                  int  arr_temp[ ROWS  ][ COLS ];
                  for (i=0;i< ROWS  ;i++){
                                  for (j=0;j< COLS  ;j++){
                                                arr_temp[i][j]=0;
                                }
                }
                  for (i=0;i< row  ;i++){
                                  for (j=0;j< COLS  ;j++){
                                                arr_temp[i][j]=  arr [i][j];
                }
}
                  for (i=0;i< ROWS  ;i++){
                                  for (j=0;j< COLS  ;j++){
                                                printf(  "%-3d" ,arr_temp[i][j]);
                                }
                }
}
6、把一个包含7个元素的数组内第3到第5个元素复制到一个包含3个元素的数组中。
#include  <stdio.h>
void  copy( int  [], int  []);
int  main( void  ){
                  int  arr[]={3,9,5,4,2,6,1};
                  int  target[3];
                copy(arr,target);
                  return  0;
}
void  copy( int  * arr , int  * target ){
                  int  i=0;
                  target = arr  +1;
                  if ( target  <= arr +4){
                                  target [i]=* arr  ;
                                  target ++;
                                i++;
                }
                  for (i=0;i<3;i++){
                                printf(  "%-3d" , target  [i]);
                }
}
VS2012不支持变长数组。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值