第一次作业(2)

时间:2022-08-01 16:26:43

6-1 计算两数的和与差

1、设计思路

第一步:根据题意对函数进行定义。
第二步:分析得该函数所求为op1与op2的和与差,将所得和与差分别为psum和pdiff。
第三步:得出代码。

2、实验代码

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

3、本题调试过程碰到问题及解决办法

第一次作业(2)
问题:编译错误
解决:在定义函数时像定义变量一样在结尾加上了逗号,删除了逗号后答案便正确了。

6-2 拆分实数的整数与小数部分

1、设计思路

第一步:定义函数。
第二步:根据题意分析,要将一个数的整数部分和小数部分分开,首先会想到int由此得到整数部分,然后用原来的数减去整数部分便能得到小数部分。
第三步:指针intpart指向x的整数部分,fracpart指向其小数部分。

2、实验代码

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

3、本题调试过程碰到问题及解决办法

该题没有遇到问题。

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

1、设计思路

第一步:定义函数。
第二步:如果没有找到与x相等的数则返回-1,所以先定义k并赋予初值-1。在比较中只有遇到与x相等的数时k才会被赋予其他的值否则最后返回-1。由于k为最小坐标,所以在遇到第一个与x相等的数后跳出循环。
第三步:得出代码。

2、实验代码:

int search( int a[], int n, int x )
{
 int i=0;
 int k=-1;
 for(i=0;i<n;i++)
 {
 if(a[i]==x)
 {
  k=i; 
  break;
 }
}
return k;
}

3、流程图

第一次作业(2)

4、本题调试过程碰到问题及解决办法

第一次作业(2)
这是我最开始的答案,结果是部分错误。因为我将return放在了for循环中并没有停止,所以出现了错误。修改无果找了其他出路。

6-2 找最大值及其下标

1、设计思路

第一步:定义函数。
第二步:将指针max指向a[]首元素地址,在for循环中当遇到大于它的数时重新赋值max且b指向其下标,一直循环到最后返回最后的max。
第三步:得出代码。

2、实验代码:

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

3、流程图

第一次作业(2)

4、本题调试过程碰到问题及解决办法

第一次作业(2)
在该题中我出现的问题在于对max初值的定义的错误,我习惯性地将它定义为0了。而a表示a[i]的首元素地址,再将后面的与max比较。

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

1、设计思路

第一步:定义函数。
第二步:本题其实就是三个小函数的集合,每一个函数都是在比较大小然后按照题意交换位置,小的数换到前面大的数换到后面,循环。
第三步:输出。

2、实验代码

#include<stdio.h>
void input(int *arr,int n)
{
int i=0;
for(i=0;i<n;i++)
{
scanf("%d",&arr[i]);
}
} 
void max_min(int *arr,int n)
{
int j=0,x=0,y=n-1;
for(j=0;j<n;j++)
{
if(arr[x]>arr[j])
{
int swap;
swap=arr[x];arr[x]=arr[j];arr[j]=swap;
}
}
for(j=n-1;j>0;j--)
{
if(arr[y]<arr[j])
{
int temp;
temp=arr[y];arr[y]=arr[j];arr[j]=temp;
}
}
}
void output(int *arr,int n)
{
int k=0;
for(k=0;k<n;k++)
{
printf("%3d",arr[k]);
}
}

3、流程图

第一次作业(2)

4、本题调试过程碰到问题及解决办法

这道题我刚开始做时完全没有思路,觉得很复杂,所以是通过其他同学的帮助完成的。

6-2 指针选择法排序

1、设计思路

第一步:定义函数。
第二步:循环判断,并根据题意交换位置。
第三步:结束循环。

2、实验代码

void sort(int *x,int n)
{
int i,j;
int a;
for(i=0;i<n;i++)
{
for(j=i;j<n;j++) 
{
if(*(x+i)<*(x+j))
{
a = *(x+i);
*(x+i) = *(x+j);
*(x+j) = a;
}
}
}
return 0;
}

3、流程图

第一次作业(2)

4、本题调试过程碰到问题及解决办法

第一次作业(2)
少了return 0,没有停止循环。

6-1判断回文字符串

1、设计思路

第一步:定义函数。
第二步:当不是空格时开始判断一直到最后,因为最后一位时\0所以减1,进行比较,如果k=i则返回true。
第三步:结束代码。

2、实验代码

bool palindrome(char *s)    
{  
char *a = s; 
int i = 0,j=0,k=0;  
while (*a != '\0')       
{  
  a++;  
  i++;  
  }  
a--;                     
 while (*s != '\0')         
{  
if (*s == *a)  
{  
  k++;  
}  
  else   
{  
  return false;  
}  
s++;  
a--;
}
if (k == i)         
{  
    return true;  
}  
}  

3、流程图

第一次作业(2)

4、本题调试过程碰到问题及解决办法

第一次作业(2)
没有考虑到不能时\0的情况。

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

1、设计思路

第一步:定义函数。
第二步:前移。
第三步:结束。

2、实验代码

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

3、流程图

第一次作业(2)

4、本题调试过程遇到的问题及解决办法

学习总结和进度

1、总结两周里所学的知识点有哪些学会了?哪些还没有学会?
本周我们主要学习将新知识点指针与数列、地址联系起来,作业都是与函数相关联的,对指针的运用还不熟悉。
2、我的git地址是: https://coding.net/u/zhouxuan12
第一次作业(2)

3、点评
http://www.cnblogs.com/exo123/p/8575595.html
http://www.cnblogs.com/fengzx/p/8612048.html
http://www.cnblogs.com/dx2017/p/8560765.html
4、
第一次作业(2)

第一次作业(2)