重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
#includestdio.h
成都创新互联公司专业为企业提供岑溪网站建设、岑溪做网站、岑溪网站设计、岑溪网站制作等企业网站建设、网页设计与制作、岑溪企业网站模板建站服务,十余年岑溪做网站经验,不只是建网站,更提供有价值的思路和整体网络服务。
//第一题函数,数组形参的复制
void copy_array( double source[], double destination[], int len)
{
int i=0;
for(; ilen; i++)
{
destination[i]=source[i];
}
}
//第一题函数,指针形参的复制
void copy_ptr( double *source, double *destination, int len)
{
int i=0;
for(; ilen; i++)
{
*(destination+i) = *(source+i);
}
}
//第二题函数,最大值最小值之差
double dif( double array[], int len )
{
double max=*array, min=*array;
int i=0;
for(; ilen; i++)
{
if( max*(array+i) )
max = *(array+i);
else
min = *(array+i);
}
return (max-min);
}
//第四题函数,两个等长数组相加,保存在第三个数组
void add( double result[], double arg1[], double arg2[], int len )
{
int i=0;
for(; ilen; i++)
{
*(result+i)=*(arg1+i)+*(arg2+i);
}
}
int main(void)
{
double source[4] = {1,2.3,4.5,6.7};
double destination1[4];
double destination2[4];
double destination3[3][4];
double result[4];
int i, j;
//验证第一题,拷贝两个数组并分别输出
copy_array(source, destination1, 4);
copy_ptr(source, destination2, 4);
printf("1\n");
for(i=0; i4; i++)
{
printf("%lf ", destination1[i]);
}
printf("\n");
for(i=0; i4; i++)
{
printf("%lf ", *(destination2+i));
}
printf("\n\n");
//第一题验证结束
//第二题验证,打印数组source最大值最小值之差
printf("2\n");
printf("%lf\n\n", dif(source, 4));
//第二题验证结束
//第三题验证,将source数组的成员分次拷贝到二维数组destination3中,并打印
for(i=0; i3; i++)
{
copy_ptr(source, destination3[i], 4);
}
printf("3\n");
for(i=0; i3; i++)
{
for(j=0; j4; j++)
{
printf("%lf ", *(*(destination3+i)+j));
}
printf("\n");
}
printf("\n\n");
//第三题验证结束
//第四题验证,将destination1与destination2相加并输出
add( result, destination1, destination2, 4);
printf("4\n");
for(i=0; i4; i++)
{
printf("%lf ", result[i]);
}
//第四题验证结束
return 0;
}
我很懒,所以把所有的函数和验证都写到一个文件里了,如果实在需要,你自己分开一下吧,也就是多声明几个数组而已。
第三题好像是这样,哈哈,因为“the copy functions from exercise 5”我不知道是不是指第一题的函数之一,而且sub-arrays也不知道要不要转置。
第1题
原程序不能实现pt1指向a和b的大者,pt2指向小者的目的,
应该把指向int型的指针p改成int型,只需改变相应的交换程序,其它不用变.
改正后的完整的C语言程序如下(改动的地方见注释)
#includestdio.h
void swap(int *p1,int *p2)
{
int p;//这里定义int型变量p
p=*p1;*p1=*p2;*p2=p;//这里改变相应的交换程序
}
void main(void)
{
int a,b;int *pt1,*pt2;
scanf("%d,%d",a,b);
pt1=a;pt2=b;
if(ab) swap(pt1,pt2);
printf("%d,%d \n",*pt1,*pt2);
}
第2题
第一空填 -1
第二空填 *sn
#includestdio.h
void fun(float *sn,int n)
{
float s=0.0,w,f=-1.0;
int i=0;
for(i=0;i=n;i++)
{
f=-1*f;//这里第一空填 -1
w=f/(2*i+1);
s+=w;
}
*sn=s;//这里第二空填 *sn
}
int main()//补充的主函数
{
float sn;
int n=10;
fun(sn,n);
printf("数列的前%d项计算结果S=%f",n+1,sn);
return 0;
}
第3题
分析 用二维数组指针p打印二维数组的每一行字符串
#include "stdio.h"
main()
{
char a[4][5]={"ABCD","EFGH","IJKL","MNOP"};
char (*p)[5];
int i,j;
p=a;
for(i=0;i4;i++)
{
for(j=0;j4;j++) printf("%c",*(*(p+i)+j));
printf("\n");
}
}
将程序第9行中的"%c"改成"%s",则改变后的程序如下(改动的地方见注释)
#include "stdio.h"
main()
{
char a[4][5]={"ABCD","EFGH","IJKL","MNOP"};
char (*p)[5];
int i,j;
p=a;
for(i=0;i4;i++)
{
printf("%s",*(p+i));//这里去掉for_j循环
printf("\n");
}
}
// ConsoleApplication3.cpp : 定义控制台应用程序的入口点。
#include "stdafx.h"
void upCopy(char* new1, char* old)
{
while (*old)
{
if (65=*old *old= 90) *new1++=*old;
old++;
}
*new1=0;
}
int main()
{
char s1[140]; //="";
char s0[]="foiwABEifjCDB";
upCopy(s1, s0);
printf("(%s%s",s1,")");
getchar();
return 0;
}