第一次作业
题目6-1(1)计算两数的和与差#
主要描述题目算法##
第一步:定义指针函数 sum_diff( float op1, float op2, float psum, float pdiff )。
第二步:在函数中op1和0p2的和与差。
第三步:将op1和0p2的和与差赋值给psum和pdiff 。
函数的作用##
函数在程序中主要起到将输入的两个数做和与做差的作用。
实验代码##
void sum_diff( float op1, float op2, float *psum, float *pdiff )
{
*psum=op1+op2;
*pdiff=op1-op2;
}
错误信息##
无
题目6-2(1)拆分实数的整数与小数部分#
主要描述题目算法##
第一步:定义指针函数 splitfloat( float x, int *intpart, float *fracpart )。
第二步:用int 将x强制转化成整数型然后赋值给 *intpart。
第三步:用x减去 intpart得的值赋值给fracpart。
函数的作用##
函数在整个程序中起到将x拆分成小数和整数部分并且赋值给psum,pdiff。
实验代码##
void splitfloat( float x, int *intpart, float *fracpart )
{
*intpart=(int) x;
*fracpart=x-*intpart;
}
错误信息1##
错误原因:没有将x的整数部分求出来。
改正方法:在x前面用int强制转化为整数型。
错误信息2##
错误原因:用int无法将x强制转化为整数型。
改正方法:将inn放在括号里。
6-1 (2)在数组中查找指定元素#
主要描述题目算法##
第一步:定义指针函数 search( int list[], int n, int x )。
第二步:进入for循环判断其*(list+i)是否等于x,若果是输出 return i,否输出return -1。
流程图##
实验代码##
int search( int list[], int n, int x )
{
int i;
for(i=0;i<n;i++)
{
if(*(list+i)==x)
{
return i;
break;
}
}
if(i==n)
return -1;
}
错误信息##
错误原因:for循环没有停止。
改正方法:在for循环中加break。
6-2 (2)找最大值及其下标#
主要描述题目算法##
第一步:定义指针函数 fun(int a,int b,int n)。
第二步:进入for循环,判断(a+i)是否大于max,如果是将其下标b赋值给i,否直接输出max
流程图##
实验代码##
int fun(int *a,int *b,int n)
{
int max = *a;
int i;
for(i=1;i<n;i++)
{
if(*(a+i)>max)
{
max=*(a+i);
*b=i;
}
}
return max;
}
错误信息##
错误原因:将起始的i值设为零 无法编译
改正方法: 将i的初值设置为1。
6-1 (3)最小数放前最大数放后#
主要描述题目算法##
第一步:定义三个指针函数 input,max_min,output,
第二步:用input 输入一个数组*arr
第三步:用max_min找到个数的大小并交换
第三步:用output循环输出新数组
流程图##
实验代码##
void input(int *arr,int n)
{
int i;
for(i=0;i<n;i++)
{
scanf("%d",arr+i);
}
}
void max_min(int *arr,int n)
{
int max=*arr,min=*arr;
int i,a=0,b=0;
for(i=0;i<n;i++)
{
if(*(arr+i)>max)
{max=*(arr+i);a=i;}
if(*(arr+i)<min)
{min=*(arr+i);b=i;}
}
int t;
t=*(arr+9); *(arr+9)=*(arr+a); *(arr+a)=t;
t=*arr;*arr=*(arr+b);*(arr+b)=t;
}
void output(int *arr,int n)
{
int i;
for(i=0;i<n;i++)
{
printf("%3d",*(arr+i));
}
}
错误信息##
错误原因:无法编译,缺少交换符号
改正方法:定义个交换符号t
错误原因:交换完成后不是要求才排列
改正方法:将(arr+a)=(arr+9)
改为(arr+9)=(arr+a);
6-2 (3)指针选择法排序#
主要描述题目算法##
第一步:定义指针函数sort(int *x,int n)
第二步:利用双层for循环 首先求出下标在交换
第三步:如果k不等于i ,将其号换
流程图##
实验代码##
void sort(int *x,int n)
{
int i,j,k;
for(i=0;i<n-1;i++)
{
k=i;
for(j=i+1;j<n;j++)
{
if(*(x+j)>*(x+k))
k=j;
}
if(k!=i)
{
int t;
t=*(x+i);
*(x+i)=*(x+k);
*(x+k)=t;
}
}
}
错误信息##
错误原因:外循环错误
改正方法:将外循环改为i<n-1
6-1(4) 判断回文字符串#
主要描述题目算法##
第一步:定义指针函数 palindrome( char s )
第二步:引用函数strlen(s)
第三步:在for循环中如果(s+i)!=*(s+j-i-1),返回false,
第四步:超过j/2,则返回 ture
流程图##
实验代码##
bool palindrome( char *s )
{
int i;
int j=strlen(s);
for(i=0;i<j/2;i++)
{
if(*(s+i)!=*(s+j-i-1))
return false;
}
return true;
}
错误信息##
错误原因:将if放在for循环外
改正方法:放到了循环里面
6-2 (4)使用函数实现字符串部分复制#
主要描述题目算法##
第一步:定义指针函数
第二步:利用for循环进行交换
流程图##
实验代码##
void strmcpy( char *t, int m, char *s )
{
int i;
for(i=m;*(t+i-1)!='\0';i++)
{
*(s+i-m)=*(t+i-1) ;
}
*(s+i-m)='\0';
}
错误信息##
错误原因:思路错误 我想利用if
改正方法:将if条件改为for
要求三、学习总结和进度#
1、总结两周里所学的知识点有哪些学会了?哪些还没有学会?##
我学会了指针的定义、*运算符的作用以及指针与自定义函数、指针与数组之间的关系相关的知识点
但是在其中,我的指针与数组之间的关系相关这一个知识点没有完全理解,没有做到熟悉于心的要求。
我的Git托管平台##
[我的git地址]https://git.coding.net/baisongtao/baisongtao.git
我评论的人##
[申怡苗]http://www.cnblogs.com/Vinecy/p/8619059.html
[曹佰强]http://www.cnblogs.com/caobaiqiang/p/8643359.html
[袁中]http://www.cnblogs.com/2719610441qqcom/p/8611529.html