题目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.确定题意,本题要求为拆分主函数中x的整数部(intpart)与小数部(fracpart),并输出;
2.观察主函数,输出部分与输入部分都具备,且函数不需要返回值
3.运用关于int知识拆分出x整数部(intpart);
4.以x减去整数部(intpart)得到小数部(*fracpart);
题目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.确定题意,本题要求为在指定数组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.确定题意,本题要求为在指定数组a中查找最大元素与它的下标,并输出;
2.观察主函数,输出部分与输入部分都具备,主函数需要返回值赋给max;
3.确定max在主函数作用为代表a数组最大值;
4.通过for和if语句在数组a中查找最大值,并在fun函数中定义max储存最大值作为返回值;
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.确定题意,本题要求为在指定数组arr中将数组最小值与数组第一个替换,将数组最大值与最后一个数替换,并在替换后输出数组;
2.观察主函数,主函数无输入输出部分,主函数无需返回值;
3.确定函数接口作用: input作用为输入;max_min作用为找到最大最小值并进行替换;output作用为输出;
4.Input,output作用易实现,max_min函数可利用for函数确定最大最小值下标;
5.使用最值下标进行交换;
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.确定题意,本题要求为对x数组中的10个数进行由大到小的排序;
2.观察主函数,主函数有输入输出部分,主函数无需返回值;
3.可使用冒泡排序法对x进行排序;
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是否为回文;
题目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.确定题意,本题要求为将字符串t中从第m个字符开始的全部字符复制到字符串s中;
2.观察主函数,主函数有输出部分与输入m部分,无输入t部分,主函数不需要返回值,同样可观察出函数ReadString作用为输入t;
3.将数组s初始化为空串,定义n为字符串长度;
4.判断m与n的关系确定s是否为空串,若不是则将t[i]赋值给s[i+1-m];
额外加题:为了防止信息被别人轻易盗取,需要把电码明文通过加密方式变换成为密文。变换规则如下:小写字母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.确定题意,本题要求为将除了y,z的小写字母变为顺序后两位字母,y变为a,z变为b;
2.设定字符串*s储存字符串;
3.用for函数历遍数组S元素并进行加密;
4.输出数组;
//运行结果
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)的代码行数和所用时间、博客字数和所用时间