第一次作业地址:http://www.cnblogs.com/yaoshunyux/p/8588493.html

作业要求一

作业要求二

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

1 设计思路(6分)
(1)主要描述题目算法
第一步:阅读题目,搞清楚三个函数不同的作用。
第二步:用scanf在input中输入函数,用上学期学的交换的知识在max_min中交换,最后在output中函数,输出结果。
第三步:用%3d输出最后的结果。
(2)流程图(4分)

2.实验代码(2分)

#include<stdio.h>
void input(int *arr,int n);
void max_min(int *arr,int n);
void output(int *arr,int n);
int main()
{ int a[10];
input(a,10);
 max_min(a,10);
 output(a,10);
 return 0;
}
void input(int *arr,int n)
{
 int i;
  for(i=0;i<=9;i++)
  {
  	scanf("%d",&arr[i]);
   } 
}
void max_min(int *arr,int n)
{
	int i,j,t1,t2,max,min,m1,m2;
	max=arr[0];
	 for(i = 1; i <=9; i++)
 {
	if(arr[i]>max)
	{
	t1=i;
	max=arr[i];
	}
 }
	t2=arr[t1];
	arr[t1]=arr[9];
	arr[9]=t2;
	min=arr[0];
	for(i=0;i<=9;i++)
	{
	if(arr[i]<min)
	{
		m1=i;
		min=arr[i];
	}
	m2=arr[0];
	arr[0]=arr[m1];
	arr[m1]=m2;
	}
	
    }

void output(int *arr,int n)
{
	int i;
	for(i=0;i<=9;i++)
	{
	printf("%3d",arr[i]);
	}

}

3.本题调试过程碰到问题及解决办法(12分)
错误信息1:

错误原因:循环次数与题目要求不符,让 i<9。
改正方法:让i<=9,便是循环10次。

6-1 判断回文字符串

1 设计思路(6分)
第一步:先把数组分为两个部分,从中间分开,再分别从头和尾判断相对应的数是否相等。
第二步:若完全相等则为回文文字串,否则则不是。
(2)流程图(4分)

2.实验代码(2分)

#include <stdio.h>
#include <string.h>

#define MAXN 20
typedef enum {false, true} bool;

bool palindrome( char *s );

int main()
{
    char s[MAXN];

    scanf("%s", s);
    if ( palindrome(s)==true )
        printf("Yes\n");
    else
        printf("No\n");
    printf("%s\n", s);

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

3.本题调试过程碰到问题及解决办法(12分)
错误信息1:

错误原因:这题一开始就编译错误,找不出问题,后来发现是因为粗心将true打成了ture。
改正方法:最后发现了及时的改正了过来

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

1 设计思路(6分)
第一步:阅读题目可以得知这道题像上学期期末那道猴子偷桃的问题。
第二步:先用第一个循环确定循环次数,再用第二个循环确定复制的位置,最后让新的函数复制这个数组。
第三步:最后让这个数组结束。
(2)流程图(4分)

2.实验代码(2分)

#include <stdio.h>
#define MAXN 20

void strmcpy( char *t, int m, char *s );
void ReadString( char s[] ); /* 由裁判实现,略去不表 */

int main()
{
    char t[MAXN], s[MAXN];
    int m;

    scanf("%d\n", &m);
    ReadString(t);
    strmcpy( t, m, s );
    printf("%s\n", s);

    return 0;
}
void strmcpy( char *t, int m, char *s ){  
    int i,j,n;  
  
     strcpy(s, t); 
    n = strlen(s);  
      
    for(i=m-1;i>0;i--){  
        for(j=i;j<n;j++){  
            *(s+j-1)=*(s+j);  
        }  
    }  
   *(s+n-m+1)='\0';
} 

3.本题调试过程碰到问题及解决办法(12分)
错误信息1:

错误原因:这道题对我来说是有些困难的,因为上学期对这里的理解不够深刻和透彻,也没有及时的巩固,一些知识忘得比较严重。以及新函数要最后等于‘\0’等也有所忘记。
改正方法:查找以前的做过的题,还有网上相关题型,改变思路,最后做出。

要求三、学习总结和进度

1、总结两周来所有PTA作业中每个题目所使用的知识点。
这两周以来主要学习了地址和数组的联系,以及新的也是旧的知识数组名作为函数的参数,二分查找,及冒泡排序,很多以前学过,如今又和指针联系在了一起,内容较多,也是对以前的复习,应该借这次机会将以往不会的再巩固一次,更好的理解数组,掌握数组。

2、将PTA作业的源代码使用git提交到托管平台上
git地址:https://git.coding.net/MikeJackYao/The-first.git

3、点评3个同学的本周作业
董雅洁:http://www.cnblogs.com/exo123/p/8575595.html
徐铭博:http://www.cnblogs.com/xmb1547828350/p/8597402.html
丰大为:http://www.cnblogs.com/DavidPark/p/8551402.html

4、请用表格和折线图呈现你本周(3/1813:00~3/25 8:00)的代码行数和时间、博客字数和时间(3分)。

posted on 2018-03-24 21:06  姚ysy  阅读(157)  评论(8编辑  收藏  举报