第1次作业

题目6-1 计算两数的和与差

//代码部分

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

//设计思路
1)文字部分

1.观察主函数,输出部分与输入部分都具备,且函数不需要返回值;
2.确定题意,本题要求为输出主函数中a和b的和(psum)与差(pdiff);
3.运用指针把psum,pdiff输出;

2)指针在本题中作用为传递两个及以上变量;

//调试错误

并未遇到调试错误
题目6-2 拆分实数的整数与小数部分
//代码部分

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

//设计思路
1)文字部分

1.确定题意,本题要求为拆分主函数中x的整数部(intpart)与小数部(fracpart),并输出;
2.观察主函数,输出部分与输入部分都具备,且函数不需要返回值
3.运用关于int知识拆分出x整数部(intpart);
4.以x减去整数部(
intpart)得到小数部(*fracpart);

2)指针在本题中作用为传递两个及以上变量;

//调试错误

并未遇到调试错误

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

//代码部分

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

//解题思路
1)文字部分

1.确定题意,本题要求为在指定数组list中查找元素x,并在查找到元素时输出查找到元素的下标或未查找到时输出“not found”;
2.观察主函数,输出部分与输入部分都具备,主函数需要返回值赋给index;
3.确定index在主函数中作用为代表list数组中x的下标;
4.通过for语句在数组list中查找x,并且定义一个index记录x的下标作为返回值;

2)流程图

3)指针在本题中可替代数组使用,亦可不使用;

//调试错误

并未遇到调试错误

题目6-2 找最大值及其下标
//代码部分

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

//解题思路
1)文字部分

1.确定题意,本题要求为在指定数组a中查找最大元素与它的下标,并输出;
2.观察主函数,输出部分与输入部分都具备,主函数需要返回值赋给max;
3.确定max在主函数作用为代表a数组最大值;
4.通过for和if语句在数组a中查找最大值,并在fun函数中定义max储存最大值作为返回值;

2)流程图

3)指针在本题作用为储存最大值的下标,用于输出;

//调试错误

并未遇到调试错误
题目6-1 最小数放前最大数放后

//代码部分

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,maxn=0,minn=0;
  for(i=0;i<n;i++)
  {

   if(arr[minn]>arr[i])
    minn=i;
   if(arr[maxn]<arr[i])
    maxn=i;
  }
  i=*arr;*arr=arr[minn];arr[minn]=i;
  i=arr[maxn];arr[maxn]=arr[n-1];arr[n-1]=i;
}
void output(int *arr,int n)
{
   int i=0;
  for(i=0;i<n;i++)
  {
    printf("%3d",*(arr+i));
  }
}

//解题思路
1)文字部分

1.确定题意,本题要求为在指定数组arr中将数组最小值与数组第一个替换,将数组最大值与最后一个数替换,并在替换后输出数组;
2.观察主函数,主函数无输入输出部分,主函数无需返回值;
3.确定函数接口作用: input作用为输入;max_min作用为找到最大最小值并进行替换;output作用为输出;
4.Input,output作用易实现,max_min函数可利用for函数确定最大最小值下标;
5.使用最值下标进行交换;

2)流程图
input

max_min

output

3)指针在本题中作用为在不同函数间传递数组arr;

//调试错误

并未遇到调试错误

题目6-2 指针选择法排序

//代码部分

void sort(int *x,int n)
{
  int i,min=n-1,k;
  for(i=0;i<n;i++)
  {
    if(x[min]>x[i])
    {
      k=x[min];x[min]=x[i];x[i]=k;
    }
  }
  if(n>0)
  {
  n--;
  sort(x,n);
  }
}

//解题思路
1)文字部分

1.确定题意,本题要求为对x数组中的10个数进行由大到小的排序;
2.观察主函数,主函数有输入输出部分,主函数无需返回值;
3.可使用冒泡排序法对x进行排序;

2)流程图

3)指针在本题中作用为替代数组,可不使用;

//调试错误

并未遇到调试错误

题目6-1 判断回文字符串

//代码部分

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

//解题思路
1)文字描述

1.确定题意,本题要求为判断字符串s是否为顺读和倒读都一样的字符串。
2.观察主函数,主函数有输入输出部分,主函数需要返回值,返回值为bool型;
3.定义n用于记录字符串s长度,通过对比s[i]与s[n-i-1]确定字符串s是否为回文;

2)流程图

3)指针在本题中作用为替代数组,可不使用;

//调试错误

并未遇到调试错误

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

//代码部分

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

//设计思路
1)文字部分

1.确定题意,本题要求为将字符串t中从第m个字符开始的全部字符复制到字符串s中;
2.观察主函数,主函数有输出部分与输入m部分,无输入t部分,主函数不需要返回值,同样可观察出函数ReadString作用为输入t;
3.将数组s初始化为空串,定义n为字符串长度;
4.判断m与n的关系确定s是否为空串,若不是则将t[i]赋值给s[i+1-m];

2)流程图

3)指针在本题中作用为替代数组,可不使用;

//调试错误

并未遇到调试错误

额外加题:为了防止信息被别人轻易盗取,需要把电码明文通过加密方式变换成为密文。变换规则如下:小写字母y变换为a,小写字母z变换为b,其他字母变换成为该字母ASCII码顺序后2为字幕,比如o变换成q。要求给出你的姓名全拼加密后的结果。
//代码部分

//变换规则如下:小写字母y变换为a,小写字母z变换为b,
//其他字母变换成为该字母ASCII码顺序后2为字幕,比如o变换成q。要求给出你的姓名全拼加密后的结果。
#include<stdio.h>
int main()
{
	char *s; 
	int i;
	scanf("%s",s);
	for(i=0;*(s+i)!='\0';i++)
	{
		if(s[i]>='a'&&s[i]<='x')
		s[i]=s[i]+2;
		else if(s[i]=='y')
		s[i]='a';
		else if(s[i]=='z')
		s[i]='b';
	}

	printf("%s",s);
} 

//设计思路
1)文字部分

1.确定题意,本题要求为将除了y,z的小写字母变为顺序后两位字母,y变为a,z变为b;
2.设定字符串*s储存字符串;
3.用for函数历遍数组S元素并进行加密;
4.输出数组;

2)流程图

//调试错误
并未遇到调试错误

//运行结果

1、总结两周里所学的知识点有哪些学会了?哪些还没有学会?

这两周中学习了关于指针相关的一些知识,并复习了一些上个学期的内容,在这两周z的学习中我感觉学到了一些有关于数组和指针关系的知识,并且对于指针通常的使用范围也有了一些了解,同样的,我认为自己在指针和数组的不同处这点有些不了解,指针和数组的地址分配上也没有什么概念

2、将PTA作业的源代码使用git提交到托管平台上,要求给出上传成功截图和你的git地址
地址:https://git.coding.net/q871057265/ZY.git

3、点评3个同学的本周作业
徐铭博:http://www.cnblogs.com/xmb1547828350/p/8597402.html
赵寅胜:http://www.cnblogs.com/2017023960ZYS/p/8604534.html
史泽文:http://www.cnblogs.com/shilcz/p/8611461.html
4、请用表格和折线图呈现你本周(3/12 8:00~3/26 8:00)的代码行数和所用时间、博客字数和所用时间


posted @ 2018-03-25 14:31  吉法师  阅读(448)  评论(14编辑  收藏  举报