第一次作业

---恢复内容开始---

### C高级第一次PTA作业(1)

6-1 计算两数的和与差

1.设计思路

(1)描述算法

​ 第一步:阅读并找到函数接口。

​ 第二步:计算 op1+op2,并赋给 *psum。

​ 计算 op1-op2,并赋给 *pdiff。

(2)流程图

2.实验代码
void sum_diff( float op1, float op2, float *psum, float *pdiff )
{
  *psum=op1+op2;
  *pdiff=op1-op2;
}
3.本题调试过程中碰到的问题及解决办法

错误原因:没有输入函数接口定义。

改正方法:输入函数接口定义。

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

1.设计思路

(1)描述算法

​ 第一步:阅读题目,明确目的。

​ 第二步:找到调用函数。

​ 第三步:定义浮点数 X. 将X中的整数传递给指针 *intpart,小数部分传递给指针 *fracpart.

(2)流程图

2.实验代码
void splitfloat( float x, int *intpart, float *fracpart )
{
  *intpart=(int)x;
  *fracpart=x-*intpart;
}
3.本题调试过程中碰到的问题及解决办法

​ 错误原因:编译错误。

​ 解决办法:在x前加(int)。

C高级第一次PTA作业(2)

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

1.设计思路

(1)描述算法

第一步:阅读题目,明确目的。

第二步:找到调用函数。

第三步:定义数组list[],b=-1。

第四步:遍历数组list[]中的数,分别与待查找元素相比,如果相等则跳出循环,并将下角标赋给b。

第五步:输出b。

(2)流程图

2.实验代码
int search( int list[], int n, int x )
{
int i;
int b;
b=-1;

for(i=0;i<=n;i++)
{
  if(list[i]==x)
  {
    b=i;
    break;
  }
}return b;
}
3.本题调试过程中碰到的问题及解决办法

错误原因:编译错误。

解决办法:在b=i;后加break;跳出循环。

6-2 找最大值及其下标

1.设计思路

(1)描述算法

第一步:阅读题目,明确目的。

第二步:找到调用函数。

第三步:定义指针 a 与b,max,i.将*a赋给max。遍历指针内的元素,分别与max比较,如果指针内元素大于max,则将次元素赋给max,并将i赋给 *b。

第四步:输出max与 *b。

(2)流程图

2.实验代码
int fun(int *a,int *b,int n)
{
int i;
int max;
max= *a;

for(i=1;i<n;i++)
{
  if(max< *(a+i))
  {
    max= *(a+i);
    *b=i;
  }
}return max;
}
3.本题调试过程中碰到的问题及解决办法

错误原因:编译错误。

解决办法:将 *b=i;后的break删去。

C高级第一次PTA作业(3)

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

1.设计思路

(1)描述算法

第一步:阅读题目,明确目的。

第二步:找到调用函数。

第三步:输入元素到指针 *arr.将arr[0]赋给max,min。

第四步:遍历指针内所有元素,分别与max,min比较。如果arr[i]>max,则将arr[i]赋给max。如果arr[i]<min,则将arr[i]赋给min。并分别记录下角标为k,m。

第五步:将arr[k]与arr[9]互换。将arr[m]与arr[0]互换。

第六步:输出数组arr。

(2)流程图

2.实验代码
void input(int *arr,int n)
{
	int i;
  for(i=0;i<10;i++)
  {
    scanf("%d",&arr[i]);
  }
  
}
void max_min(int *arr,int n)
{
	int i,max,min,j,k,m,y,t;
	max=arr[0];
	min=arr[0];
	for(i=1;i<10;i++)
	{
		if(max<arr[i])
		{
			max=arr[i];
			k=i;
		}
		if(min>arr[i])
		{
			min=arr[i];
			m=i;
		}
		
	}
	t=arr[k]; arr[k]=arr[9];arr[9]=t;
	y=arr[m]; arr[m]=arr[0];arr[0]=y;
}
void output(int *arr,int n)
{
	int j;
	for(j=0;j<10;j++)
	{
		printf("%3d",arr[j]);
	}
 } 
3.本题调试过程中碰到的问题及解决办法

错误原因:输出错误

解决办法:将"%d"改为"%3d"

6-2 指针选择法排序

1.设计思路

(1)描述算法

第一步:阅读题目,明确目的。

第二步:找到调用函数。

第三步:定义指针x,使用双循环遍历指针内每个元素。比较前后两个元素的大小。

第四步:如果后一元素 j 大于前一元素 i ,则将j赋给k,如果k!=i,则将i于j互换。

第五步:输出。

(2)流程图

2.实验代码
void sort(int *x,int n)
{      
	   int i,j,k,t;      
	   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)           
			 {       
			 t=x[i]; x[i]=x[k]; x[k]=t; 
			}   
	  } 
}
3.本题调试过程中碰到的问题及解决办法

C高级第一次PTA作业(4)

6-1 判断回文字符串

1.设计思路

(1)描述算法

第一步:阅读题目,明确目的。

第二步:找到调用函数。

第三步:定义数组 *s,遍历数组中的元素,将 * (s+i)与 *(s+count-i-1)做比较。

第四步:如果相等,则b=1。

第五步:判断i与m是否相等。如果相等,则b=-1。

第六步:判断b,如果b=1,则输出true,否则输出false。

(2)流程图

2.实验代码
bool palindrome( char *s ){
        int i,count=0,m;
        int b=1; 
        count=strlen(s);
        m=count/2;
        for(i=0;i<m;i++){
            if((*(s+i))!=(*(s+count-i-1))){
                b=-1;
            }
        }
        if(i==m){
            b=1;
        }
        if(b=1)
        {
        	return (true);
		}if(b=-1)
		{
			return (false);
		}
    }
3.本题调试过程中碰到的问题及解决办法

错误原因:两个部分错误

解决办法:删去判断b的语句,在上两个if语句中加return语句。

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

1.设计思路

(1)描述算法

第一步:阅读题目,明确目的。

第二步:找到调用函数。

第三步:遍历指针 *t中从第m开始的元素。并将元素传递给指针 *s。

第四步:将最后的元素定义为'\0'。

第五步:输出*s。

(2)流程图

2.实验代码
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';
}
3.本题调试过程中碰到的问题及解决办法

这道题有点没看懂,借鉴了很多大神的作业,在此表示感谢!

学习总结和进度

1.知识总结

最近这两周学习了指针的各种调用,并复习了上学期数组与字符串的内容。指针数组适用于指向若干个字符串,是字符串处理更加灵活。指针是能通过他能找到以他为地址的内存单元。定义指针使用int语句。现阶段对指针的运用还不是很熟练,做PTA仍有些难度。

2.代码托管

链接

3.点评

姜健

袁中

李洪海

马卿辉

4.表格

---恢复内容结束---

posted @ 2018-03-25 17:18  2班-陆文奇  阅读(140)  评论(12编辑  收藏  举报