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不支持变长数组。