第一次作业
PTA第一次作业
* 6-1计算两数的和与差*
设计思路
(1)算法
第一步:明确要求,阅读题目
第二步:根据所给的函数接口确定变量
第三步:形参op1与形参op2的和赋值给*psum所指向的sum;形参op1与形参op2的差赋给*pdiff所指向的diff;
(2)流程图
代码
void sum_diff( float op1, float op2, float *psum, float *pdiff )
{
*psum = op1*1.0 + op2*1.0;
*pdiff = op1*1.0 - op2*1.0;
}
错误信息
有的符号用中文输入法打没找出来, 马虎大意
* 6-2 拆分实数的整数与小数部分*
设计思路
(1)算法
第一步:阅读题目,找出形参和形参,写出函数出口
第二步:将`x`强制转化成`int`类型,并将整数部分赋给int型地址intpart所指向的变量,将x-intpart赋给fracpart,即为小数部分
(2)流程图
代码
void splitfloat( float x, int *intpart, float *fracpart )
{
*intpart=(int)x;
*fracpart=x - (int)x;
}
PTA第二次作业
6-1 在数组中查找指定元素
设计思路
(1)算法
第一步:用for循环查找所有的数
第二步:由于x是待查找的元素,用if函数查找,如果找到则函数search返回相应元素的最小下标,否则返回−1。
(2)流程图
代码
int search(int list[],int n,int x){
int i;
for(i = 0;i < n;i++)
{
if(list[i] == x)
return i;
break;
}
return -1;
}
错误信息
没加break;
6-2 找最大值及其下标
设计思路
(1)算法
第一步:找到对应函数中的实参和形参,写出函数接口。
第二步:在函数中定义一个最大值变量并将首元素的max值赋给max,再用for循环对每两个元素进行判断
第三步:再通过for遍历来比较交换出该数组的最大值及其下标
(2)流程图
代码
int fun(int *a,int *b,int n)
{
int i,y,z=0;
for(i=0;i<n;i++,*a++)
{
if(*a > z)
{
y=*a;
*a=z;
z=y;
*b=i;
}
}
return z;
}
*PTA第三次作业
6-1 最小数放前最大数放后
设计思路
(1)算法
第一步:找出函数中的形参和实参
第二步:定义最大值max和最小值min和两个变量
第三步:最大值和数组最后一个元素交换,最小值和首元素交换。
第四步:遍历数组输出数组的每一个元素。
(2)流程图
代码
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));
}
}
6-2 指针选择法排序
设计思路
(1)算法
第一步:找到调用函数,用两个for循环遍历所有数,比较大小
第二步:找出最大值,与第一个元素交换,以此类推
(2)流程图
代码
void sort(int *x,int n)
{
int i,j,s,temp;
for(i=0;i<n-1;i++){
s=i;
for(j=i+1;j<n;j++){
if(*(x+s)<*(x+j)){
s=j;
}
}
if(s!=i){
temp=*(x+i);*(x+i)=*(x+s);*(x+s)=temp;
}
}
}
PTA第四次作业
6-1 判断回文字符串
设计思路
(1)算法
第一步:找到函数接口定义bool palindrome
第二步:定义数组,遍历数组中元素,并做比较
第三步:如果s[i]!=s[j],则输出false,否则输出ture
(2)流程图
代码
bool palindrome(char*s)
{
int len = strlen(s);
int i=0, j=len-1;
for (i=0; i<=j; i++,j--){
if(s[i]==s[j]);
else return 0;
}
return 1;
}
6-2 使用函数实现字符串部分复制
设计思路
(1)算法
第一步:引用函数void strmcpy,、引用for循环
第二步 : 将数组t的第m位赋值给数组s,将最后的元素定义
(2)流程图
代码
#include<string.h>
void strmcpy( char *t, int m, char * s)
{
int n,i;
memset(s,0,sizeof(s));
n=strlen(t);
if(m>n)
*s=NULL;
else
{
for(i=m-1;i<=n-1;i++)
s[i-(m-1)]=t[i];
}
}
学习总结
我评论的人
1.焦瑞君http://www.cnblogs.com/jiaoruijun/
2.党睿http://www.cnblogs.com/dangrui/
3.邓欣茹http://www.cnblogs.com/dxfish/