第1次作业
2018-03-25 21:25 金海宽 阅读(216) 评论(1) 编辑 收藏 举报PTA
6-1 计算两数的和与差
1.指针的作用
在使用sum_diff函数时会有psum,pdiff多个返回值,更方便。
2.实验代码
void sum_diff( float op1, float op2, float *psum, float *pdiff )
{
*psum=op1+op2;
*pdiff=op1-op2;
}
3.本题调试过程碰到问题及解决办法
本题较简单,解决过程中并未遇到问题。
6-2 拆分实数的整数与小数部分
1.指针的作用
使用splitfloat函数,intpart,fracpart进行值传递。
2.实验代码
void splitfloat( float x, int *intpart, float *fracpart )
{
*intpart=(int)x;
*fracpart=(float)x-*intpart;
}
3.本题调试过程碰到问题及解决办法
6-1 在数组中查找指定元素
1.设计思路
第一步:访问数组中的每个元素。设置if语句,如果元素与输入的x相等,把数组元素的下标赋给result,并结束循环。
第二步:如果没有与x相同的元素,把-1赋给result。
第三步:返回result,结束函数。
2.流程图
3.实验代码
int search( int list[], int n, int x )
{
int i,result;
for( i = 0; i < n; i++ )
{
if(list[i]==x)
{
result=i;
break;
}
else{
result=-1;
}
}
return(result);
}
4.本题调试过程碰到问题及解决办法
如图所示,没有。
6-2 找最大值及其下标
1.设计思路
第一步:对最大值max初始化。
第二步:使数组a[]中每个元素与max进行比较,如果a[i]大于max,将a[i]赋给max。
第三步:将下标i赋给*b。
第四步:返回max;
2.流程图
3.实验代码
int fun(int *a,int *b,int n)
{
int max=0;
int i;
for(i=0,max=0,*b=0;i<n;i++)
{
if( a[i] > max ) {
max=a[i];
*b=i;
}
}
return max;
}
4.本题调试过程碰到问题及解决办法
问题?不存在的。
6-1 最小数放前最大数放后
1.设计思路
第一步:编写input函数。
第二步:编写max_min函数函数,选出最大与最小的数组元素,并引用tmp进行数组位置的交换。
第三步:编写output函数。
2.流程图
3.实验代码
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=0,max=0,min=0,tmp;
for (;i<n;i++)
{
if(arr[min]>arr[i])
min = i;
if(arr[max]<arr[i])
max=i;
}
tmp=*arr;*arr=arr[min];arr[min]=tmp;
tmp=arr[max];arr[max]=arr[n-1];arr[n-1]=tmp;
}
void output(int *arr,int n)
{
int i;
for(i=0;i<n;i++)
{
printf("%3d",*(arr+i));
}
}
本题调试过程碰到问题及解决办法
pta我没有来得及改,只是在max_min函数中在交换时指针出了错误,后来我看了其他同学的代码后明白了原因。
6-2 指针选择法排序
1.设计思路
第一步:使数组前一项与后一项进行比较。
第二步:
2.流程图
3.实验代码
void sort(int *x,int n)
{
int *p,*q,*k,t;
for(p = x; p < x + n - 1;p++)
{
k = p;
for(q = p + 1;q < x + n;q++)
{
if(*k < *q)
k = q;
}
if(p != k)
{
t = *p;
*p = *k;
*k = t;
}
}
}
4.本题调试过程碰到问题及解决办法
没遇到。
6-1 判断回文字符串
1.设计思路
第一步:查询字符串里一共有多少个字符。
第二步:判断字符串是否为回文。如果不是回文,返回false。
第三步:如果是回文,返回true。
2.流程图
3.实验代码
bool palindrome( char *s )
{
int n=0,i,j,k=0;
for(i=0;s!='\0';s++)
{
n++;
}
for(i = 0 ,j = n-1 ;i < n; i ++,j --)
{
if(*(s + i) == *(s + j))
{
k ++;
}else{
return false;
}
}
if(k == n)
{
return true;
}
}
6-2 使用函数实现字符串部分复制
1.设计思路
当t[i-1]没读到‘0’时,进行循环,把t[i-1]复制到s[i-m]。循环结束后把'\0'赋给s[i-m]。
2.流程图
3.实验代码
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';
}
学习总结和进度
1.学习总结
在本周的学习当中,我加强了对上学期的函数调用部分的运用。对指针的知识有些模糊,但隐约的感觉到了指针的重要性和便利性。
2.git