第一次作业

PTA第一次作业

第一题:计算两个数的和与差。
1 设计思路
(1)主要描述题目算法
第一步:阅读题目与函数。
第二步:先定义四个标识符a,b,sum,diff,对a,b赋值,然后把a的值给op1,把b的值给op2,将sum的地址给psum,将diff的地址给pdiff,然后输出两个数的和与差。
第三步:输出两数的和与差。
第四步:a+b是两个数的sum,a-b是两个数的差,因此在调用函数sum_diff中两个数的和psum等于op1+op2,两个数的差diff等于op1-op2。

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

(2)本题调试过程碰到问题及解决办法

第二题:拆分实数的整数与小数部分

(1). 主要描述题目算法

第一步:阅读题目并了解函数及其定义。

第二步:找到对应函数中的实参和形参。

第三步:将X分为整数然后赋值给intpart,用x减去整数就是小数部分,然后将小数部分的值赋值给fracpart.

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

(2)本题调试过程碰到问题及解决办法

问题:没有把x转化为整型。

改正方法:转化之后再赋给*intpart。

PTA第二次作业

第一题:在数组中查找指定元素

(1). 主要描述题目算法

第一步:阅读题目并了解函数及其定义,找到对应函数中的实参和形参并写出函数接口。

第二步:用变量i来遍历数组,如果有list[]==x的情况就代表了这个元素为了防止多次遍历。

第三步:然后把数组中所有的元素与指定元素x进行判断,如果不符合要求return -1如果只要有一个符合要求就return i。

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

}

(2)流程图

img

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

遍历概念不太清楚导致自己编译很多遍才全部正确,以后要多学多练。

第二题:寻找最大值及其下标

(1). 主要描述题目算法

第一步:阅读题目并了解函数及其定义

第二步:先定义变量i然后利用变量遍历数组。

第三步:然后定义一个最大值

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

(2)流程图

img

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

指针使用错误,数值和地址弄混。

*和&使用错误

PTA第三次作业

第一题:最小数放前最大数放后
(1). 主要描述题目算法

第一步:阅读题目并了解函数及其定义,定义接口函数。

第二步:找到对应函数中的实参和形参。

第三步:用for循环寻找出最大值与第一个数交换
(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 min=arr[0],max=arr[0];        int i,temp;        int q=0,w=0;        for(i=0;i<n;i++){            if(min>*(arr+i)){                min=*(arr+i);                q=i;            }             if(max<*(arr+i)){                max=*(arr+i);                w=i;            }        }        temp=*(arr+0);*(arr+0)=*(arr+q);*(arr+q)=temp;        temp=*(arr+n-1);*(arr+n-1)=*(arr+w);*(arr+w)=temp;    }    void output(int *arr,int n){        int i;        for(i=0;i<n;i++){            printf("%3d",*(arr+i));        }    }

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

第二题:指针选择法排序
(1). 主要描述题目算法
第一步:阅读题目并了解函数及其定义,定义接口函数。
第二步:定义两个for循环.然后把数组第一个元素小标0定为最大值
第三步:判断数组中是否存在比arr+max大的数,假如有则记录它的角标,然后把小标赋值给max.
第四步:在for循环里判断数组小标和最大值max小标是否相同,如果不同,则交换俩数的小标。
第五步:用第一个数与最大值交换

(2)流程图

(3)实验代码

void sort(int *x,int n)
 {
	int q=0,b=0,temp=0,maxium=0;
	for(q=0;q<n-1;q++)
	{
		maxium=q;
		for(b=q;b<n;b++)
			{
				if(*(x+maxium)<*(x+b))
					{
						maxium=b;
					}
			}
		if(maxium!=q)
		 	{
				temp=*(x+maxium);
				*(x+maxium)=*(x+q);
				*(x+q)=temp;
		 	}
    }
 }

PTA第四次作业

第一题:判断回文字符串

(1). 主要描述题目算法
第一步:阅读题目并了解函数及其定义,定义接口函数。
第二步:找出形参实参
第三步:用回文法求出字符串长度
第四步:用for循环比较出第一个和最后一个字符一不一样

(2)流程图

(3)实验代码

bool palindrome( char *s )
{
    int x,i,cnt=0;
    x=strlen(s);
 
        for(i=0;i<x/2;i++)
        {
        if(s[i]==s[x-1-i])
        {
            cnt++;
        }
        }
        if(cnt==x/2)
        {
            return true;
        }else
        {
            return false;
        }
   
    
}

(4)本题调试过程碰到问题及解决办法
编译错误
地址符忘记加*(基本错误)

第二题:使用函数实现字符串部分复制

(1). 主要描述题目算法

第一步:阅读题目并了解函数及其定义,定义接口函数并找出形参实参。

第二步:调用函数strmcpy,然后再把函数i,a循环

第三步:结束

(2)流程图

(3)实验代码

void strmcpy(char *t,int m,char *s)
{
    int i;
    int sum=0; 
    for(i=0;t[i]!='\0';i++)  {sum++;}
    if(sum<m)              {s[0]='\0';}
    else
      {
          for(i=0;t[m-1]!='\0';i++,m++)
            {
              s[i]=t[m-1];
            }
        
          s[i]='\0'; 
      }
}

(4)本题调试过程碰到问题及解决办法
编译错误

‘\0'也占一个字符需要*(s+a) = '\0'才可以执行

学习总结

(1)在这两周中对于指针的知识理解不透彻,自己也在看mooc弥补。还有就是编程时间较少,有些手生,打起代码不流畅。

(2)点评网址

1

1

1

(3)托管代码

img

(4)表格

posted @ 2018-03-25 19:33  马卿辉  阅读(216)  评论(11编辑  收藏  举报