代码改变世界

第1次作业

2018-03-25 21:25  金海宽  阅读(214)  评论(1编辑  收藏  举报

PTA

6-1 计算两数的和与差

1.指针的作用
在使用sum_diff函数时会有psum,pdiff多个返回值,更方便。
2.实验代码

void sum_diff( float op1, float op2, float *psum, float *pdiff )
{
	*psum=op1+op2;
	*pdiff=op1-op2;
}

3.本题调试过程碰到问题及解决办法
本题较简单,解决过程中并未遇到问题。

6-2 拆分实数的整数与小数部分

1.指针的作用
使用splitfloat函数,intpart,fracpart进行值传递。
2.实验代码

void splitfloat( float x, int *intpart, float *fracpart )
{
	*intpart=(int)x;
	*fracpart=(float)x-*intpart;
}

3.本题调试过程碰到问题及解决办法

6-1 在数组中查找指定元素

1.设计思路
第一步:访问数组中的每个元素。设置if语句,如果元素与输入的x相等,把数组元素的下标赋给result,并结束循环。
第二步:如果没有与x相同的元素,把-1赋给result。
第三步:返回result,结束函数。
2.流程图

3.实验代码

int search( int list[], int n, int x )
{
	int i,result;
	for( i = 0; i < n; i++ )
	{
		if(list[i]==x)
		{
			result=i;
			break;
		}
		else{
			result=-1;
		}
	}
	return(result);
}

4.本题调试过程碰到问题及解决办法

如图所示,没有。

6-2 找最大值及其下标

1.设计思路
第一步:对最大值max初始化。
第二步:使数组a[]中每个元素与max进行比较,如果a[i]大于max,将a[i]赋给max。
第三步:将下标i赋给*b。
第四步:返回max;
2.流程图

3.实验代码

int fun(int *a,int *b,int n)
{
 int max=0;
  int i;
     for(i=0,max=0,*b=0;i<n;i++)
     {
         if( a[i] > max ) {
		 max=a[i];
		 *b=i;
		 }
     }
  return max;
}

4.本题调试过程碰到问题及解决办法

问题?不存在的。

6-1 最小数放前最大数放后

1.设计思路
第一步:编写input函数。
第二步:编写max_min函数函数,选出最大与最小的数组元素,并引用tmp进行数组位置的交换。
第三步:编写output函数。
2.流程图

3.实验代码

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 i=0,max=0,min=0,tmp;
     for (;i<n;i++)
    {
     if(arr[min]>arr[i])
        min = i;
     if(arr[max]<arr[i])
    max=i;
    }
    tmp=*arr;*arr=arr[min];arr[min]=tmp;
    tmp=arr[max];arr[max]=arr[n-1];arr[n-1]=tmp;
}
void output(int *arr,int n)
{
	int i;
	for(i=0;i<n;i++)
	{
		
		printf("%3d",*(arr+i));
	}
}

本题调试过程碰到问题及解决办法
pta我没有来得及改,只是在max_min函数中在交换时指针出了错误,后来我看了其他同学的代码后明白了原因。

6-2 指针选择法排序

1.设计思路
第一步:使数组前一项与后一项进行比较。
第二步:

2.流程图

3.实验代码

void sort(int *x,int n)
{
	int *p,*q,*k,t;
	for(p = x; p < x + n - 1;p++)
	{
       k = p;
       for(q = p + 1;q < x + n;q++) 
	   {
          if(*k < *q) 
		  k = q;
       }
  if(p != k)
   {
    t = *p;
    *p = *k;
    *k = t;
   }
 }	
}

4.本题调试过程碰到问题及解决办法
没遇到。

6-1 判断回文字符串

1.设计思路
第一步:查询字符串里一共有多少个字符。
第二步:判断字符串是否为回文。如果不是回文,返回false。
第三步:如果是回文,返回true。
2.流程图

3.实验代码

bool palindrome( char *s )
{
	int n=0,i,j,k=0;
	for(i=0;s!='\0';s++)
	{
		n++; 
	} 
   for(i = 0 ,j = n-1 ;i < n; i ++,j --)
   {
    if(*(s + i) == *(s + j))
	{
        k ++;
    }else{
        return false;
    }
   }
   if(k == n)
   {
    return true;
   }
} 

6-2 使用函数实现字符串部分复制

1.设计思路
当t[i-1]没读到‘0’时,进行循环,把t[i-1]复制到s[i-m]。循环结束后把'\0'赋给s[i-m]。
2.流程图

3.实验代码

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';
	}

学习总结和进度

1.学习总结
在本周的学习当中,我加强了对上学期的函数调用部分的运用。对指针的知识有些模糊,但隐约的感觉到了指针的重要性和便利性。
2.git

git地址
3.折线图


4.点评
贾瑱
李锐
金海东