第一次作业

题目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

我的的统计##

posted on 2018-03-25 18:50  白松涛  阅读(171)  评论(2编辑  收藏  举报

导航