第一次作业

第一题:

          计算两数的和与差

设计思路:

描述方法:

     第一步:阅读主函数和函数声明,弄清楚程序中每个函数的意义
     第二步:通过op1和op2计算所需要的数值并将其赋给pusm和pdiff
     第三步:输出函数

流程图:

实验代码:

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

遇到的问题:

第二题:

           拆分实数的小数与整数部分

设计思路:

描述方法:

    第一步:阅读主函数和函数声明,弄清楚程序中每个函数的意义
    第二步:先通过实数求出其整数部分并赋值给*inpart,再用减法用实数减去整数部分并赋值给*fracpart

实验代码:

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

遇到的问题:

第三题:

         在数组中查找指定元素

设计思路:

描述方法:

   第一步:阅读主函数和函数声明
   第二步:看题目的要求,遍历数组,从一个数组中找到所需要的数,如果找到则返回其下角标;如果没有找到,则返回-1

流程图:

实验代码:

int search( int list[], int n, int x )
{
int i;
for(i=0; i<n; i++,)
{
	
if(list[i]==x)
return i;
}

return -1;
	
}

遇到的问题:

第四题:

           找最大值及其下标

设计思路:

描述方法:

   第一步:将最大值存储在max里
   第二步:利用for循环来比较数组中的每个数来找出最大值,再将其下标赋值给*b

流程图:

实验代码:

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

遇到的问题:

                   错误信息:将i复制给*b的时候没写*
                   改正方法:*b=i

第五题:

          最小数放前最大数放后

设计思路:

描述方法:

   第一步:将数据存放到input数组中
   第二步:通过max_min遍历数组找到最大值和最小值,并按照题目要求进行交换
   第三步:通过output输出所求数据

流程图:

实验代码:

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

遇到的问题:

                    错误信息:忘记了怎么交换数组的位置
                    改正方法:参考别人的作业
                    错误信息:最后输出的时候忘记了题目要求的3列
                    改正方法:%d→%3d

第六题:

           指针选择法排序

设计思路:

描述方法:

   第一步:遍历数组找到最大值放到第一位
   第二步:循环上一步知道将所有数都排序完成
   第三步:输出

流程图:

实验代码:

void sort(int *x,int n)
  {
      int i,j,k,temp;
      for(i=0; i<n-1; i++)
      {
          k=i;
          for(j=i+1; j<n; j++)
          {
              if(x[j] > x[k])
             k = j;
         }
         
         if(i != k)
         {
         a = x[i];
         x[i] = x[k];
         x[k] = temp;    
         }
     }
 }

遇到的问题:

                   错误信息:第一次编写时错误的写成了冒泡排序法
                   改正方法:用选择排序法重新编写

第七题:

          判断回文字符串

设计思路:

描述方法:

   第一步;将字符串输入进数组
   第二步:利用循环分两次将字符串从前往后和从后往前定义并进行比较
   第三步:如果相同则返回true,如果不同则返回false

流程图:

实验代码:

bool palindrome(char *s)
{
    int a,b;
    int n=strlen(s);
    a=0,b=n-1;
    while(b>a)
    {
        if(s[a]!=s[b])
        {
            return false;
        }
        a++,b--;
    }
    return true;
}

遇到的问题:

第八题:

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

设计思路:

描述方法:

                  第一步:调用函数strmcpy进行复制
                  第二步:判断m是否超过字符串长度,如果超过则为'/0',若没超过则进行复制

流程图:

实验代码:

void strmcpy(char *t,int m,char *s)
{
    int i;
    int sum=0; 
    for(i=0;t[i]!='\0';i++)  {sum++;}
    if(sum<m)              {s[0]='\0';}
    else
      {
          for(i=0;t[m-1]!='\0';i++,m++)
            {
              s[i]=t[m-1];
            }
        
          s[i]='\0'; 
      }
}

遇到的问题:

                   错误信息:编译错误 for循环时忘记了t[m-1]='\0',m++

学习总结和进度

1、这两周主要学习了指针的用法,虽然指针占了主要部分,但在习题中也用到了很多别的知识,本来基础就不好,又得重新看C语言的书,不仅能当作复习,还加深了我对其他知识的印象。

2、

    https://gitee.com/lhdsb666/zuoye

3、

        [梁圣然] (http://www.cnblogs.com/messi6/p/8626565.html)
        [张琪] (http://www.cnblogs.com/zhang03/p/8641322.html)
        [林松] (http://www.cnblogs.com/BigFace123/p/8635570.html)

4

5

posted @ 2018-03-25 17:01  2班-林昊  阅读(169)  评论(12编辑  收藏  举报