第一次作业

第一次作业(一)

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

设计思路

1、算法

第一步:阅读题目,明确题目要求。
第二步:找出函数中的实参和形参,写出函数接口。
第三步:计算op1+op2的值,赋值给*psum所指向的变量;计算出op1-op2的值,赋值给*pdiff所指向的变量。

2、流程图

代码

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

错误

编译错误:将接口函数复制过来忘记删除分号。
改正:删去分号。

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

设计思路

1、算法

第一步:阅读题目,明确题目要求。
第二步:找出函数中的实参和形参,写出函数接口。
第三步:将数乘一或除一得到整数部分;用数减去整数部分得到小数部分。

2、流程图

代码

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

错误

第一次作业(二)

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

设计思路

1、算法

第一步:写出接口函数。
第二步:用for循环在数组中逐个查找指定函数。
第三步:输出找到的指定函数的下标;若无则输出-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。
改正:经过多次观察找到错误,加上break。

题目6-2 找最大值及其下标

设计思路

1、算法

第一步:写出接口函数。
第二步:定义一个最大值。
第三步:使用for循环,查找比max大的数并赋值给max,并记录下标。

2、流程图

代码

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

错误

编译错误:指针使用错误,没写,将数值赋值给了地址;
改正:补上了

第一次作业(三)

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

设计思路

1、算法

第一步:分开写三个接口函数。
第二步:用for循环输入与输出。我写的输出的语句较复杂了,估计用%4d也可以。
第三步:用for循环找出最大与最小值,并使其与arr、(arr+n-1)交换。

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 i,max,min,b,c,swap1,swap2;
  max=*(arr+n-1);
  min=*arr;
  for(i=0;i<n;i++){if(max<*(arr+i)){max=*(arr+i);b=i;}}
  swap1=*(arr+b);*(arr+b) =*(arr+n-1);*(arr+n-1)=swap1;
  for(i=0;i<n;i++){if(min>*(arr+i)){min=*(arr+i);c=i;}}
  swap2=*(arr+c);*(arr+c)=*arr;*arr=swap2;	
}
 void output(int *arr,int n)
{
  int i;
  printf("  %d ",*arr);
  for(i=1;i<n-1;i++)
  {
    printf(" %d ",*(arr+i));
  }
  printf("%d",*(arr+n-1));
} 

错误

输出错误与答案错误:if后面没加括号,造成if没法控制后面的两句;输出的格式错误。
改正:加上括号并重写输出。

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

设计思路

1、算法

第一步:写出接口函数。
第二步:使用双重for循环,冒泡排序法进行排序。

2、流程图

代码

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

错误

编译错误:冒泡排序法使用不熟练,for循环里的j与i写迷了。
改正:复习课本上的冒泡排序法查错并改正。

第一次作业(四)

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

设计思路

1、算法

第一步:写出接口函数。
第二步:定义一个count,使用for循环 ,用i,j来实现字符串的首尾。
第三步:若*(s + i) 与 *(s + j)相等,count加一。
第四步:比较count与n,若不相等,则其中有不是相同的字符,即不是回文,反之则是。

2、流程图

代码

bool palindrome(char *s)  
{  
    int n=strlen(s);  
    int i, j,count=0;  
    for (i = 0, j = n - 1; i < n, j >= 0; i++, j--)  
    {  
        if (*(s + i) == *(s + j))  
        {  
            count++;  
        }  
    }  
    if (count == n)  
        return true;
    else
        return false;
  
}  

错误

本来用的是两个for循环,但编译不过,就上网查到了这个方法,但strlen函数具体使用的方法不知。

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

上学期的字符串部分是我的弱项,这道题不会做。老师讲过再重新编辑。

额外附加题

总结

我复习了冒泡排序法,字符的用法和字符串的用法。学会了指针与数组的用法。但指针与字符串的用法不是很熟练。
点评:
宋晨继
王文博
王帅
申怡苗
邱冠华
表格

希望大家多多点评,互帮互助。

posted @ 2018-03-24 15:59  秦保岩  阅读(178)  评论(7编辑  收藏  举报